From d23a3f821e6a9f8e6fe320cb6cdd7b04403b47f0 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 5 Mar 2026 15:20:48 +0000 Subject: [PATCH 001/185] C++: Add a test case for WrongTypeFormatArguments involving code that's included twice. --- .../WrongTypeFormatArguments.expected | 6 +++++ .../Buildless/first.cpp | 8 ++++++ .../Buildless/include_twice.h | 25 +++++++++++++++++++ .../Buildless/second.cpp | 8 ++++++ 4 files changed, 47 insertions(+) create mode 100644 cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/first.cpp create mode 100644 cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/include_twice.h create mode 100644 cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/second.cpp diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/WrongTypeFormatArguments.expected b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/WrongTypeFormatArguments.expected index 745f2f790f7..e22d4c4a02c 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/WrongTypeFormatArguments.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/WrongTypeFormatArguments.expected @@ -1 +1,7 @@ +| include_twice.h:10:18:10:18 | s | This format specifier for type 'int' does not match the argument type 'unsigned long'. | +| include_twice.h:13:18:13:18 | s | This format specifier for type 'unsigned int' does not match the argument type 'unsigned long'. | +| include_twice.h:21:18:21:39 | ... - ... | This format specifier for type 'int' does not match the argument type 'long'. | +| include_twice.h:21:18:21:39 | ... - ... | This format specifier for type 'int' does not match the argument type 'long'. | +| include_twice.h:24:18:24:39 | ... - ... | This format specifier for type 'unsigned int' does not match the argument type 'long'. | +| include_twice.h:24:18:24:39 | ... - ... | This format specifier for type 'unsigned int' does not match the argument type 'long'. | | tests.c:7:18:7:18 | 1 | This format specifier for type 'char *' does not match the argument type 'int'. | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/first.cpp b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/first.cpp new file mode 100644 index 00000000000..389d609c04a --- /dev/null +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/first.cpp @@ -0,0 +1,8 @@ +// semmle-extractor-options: --expect_errors + +int printf(const char * format, ...); + +// defines type size_t plausibly +typedef unsigned long size_t; + +#include "include_twice.h" diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/include_twice.h b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/include_twice.h new file mode 100644 index 00000000000..1288f172d52 --- /dev/null +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/include_twice.h @@ -0,0 +1,25 @@ +// semmle-extractor-options: --expect_errors + +void test_size_t() { + size_t s = 0; + + printf("%zd", s); // GOOD + printf("%zi", s); // GOOD + printf("%zu", s); // GOOD + printf("%zx", s); // GOOD + printf("%d", s); // BAD + printf("%ld", s); // BAD [NOT DETECTED] + printf("%lld", s); // BAD [NOT DETECTED] + printf("%u", s); // BAD + + char buffer[1024]; + + printf("%zd", &buffer[1023] - buffer); // GOOD + printf("%zi", &buffer[1023] - buffer); // GOOD + printf("%zu", &buffer[1023] - buffer); // GOOD + printf("%zx", &buffer[1023] - buffer); // GOOD + printf("%d", &buffer[1023] - buffer); // BAD + printf("%ld", &buffer[1023] - buffer); // BAD [NOT DETECTED] + printf("%lld", &buffer[1023] - buffer); // BAD [NOT DETECTED] + printf("%u", &buffer[1023] - buffer); // BAD +} diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/second.cpp b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/second.cpp new file mode 100644 index 00000000000..5c815ff98e0 --- /dev/null +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/second.cpp @@ -0,0 +1,8 @@ +// semmle-extractor-options: --expect_errors + +int printf(const char * format, ...); + +// defines type `myFunctionPointerType` +typedef int (*myFunctionPointerType) (); + +#include "include_twice.h" From 7f6fd34d4687e0d3f3770496f3a6658c6ac73b09 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 6 Mar 2026 10:13:11 +0000 Subject: [PATCH 002/185] C++: Expose a type resolution issue. --- .../Buildless/WrongTypeFormatArguments.expected | 6 ++++++ .../WrongTypeFormatArguments/Buildless/include_twice.h | 8 ++++---- .../Format/WrongTypeFormatArguments/Buildless/second.cpp | 4 ++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/WrongTypeFormatArguments.expected b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/WrongTypeFormatArguments.expected index e22d4c4a02c..abc8c729450 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/WrongTypeFormatArguments.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/WrongTypeFormatArguments.expected @@ -1,4 +1,10 @@ +| include_twice.h:8:19:8:19 | s | This format specifier for type 'size_t' does not match the argument type '..(*)(..)'. | +| include_twice.h:9:19:9:19 | s | This format specifier for type 'size_t' does not match the argument type '..(*)(..)'. | +| include_twice.h:10:18:10:18 | s | This format specifier for type 'int' does not match the argument type '..(*)(..)'. | | include_twice.h:10:18:10:18 | s | This format specifier for type 'int' does not match the argument type 'unsigned long'. | +| include_twice.h:11:19:11:19 | s | This format specifier for type 'long' does not match the argument type '..(*)(..)'. | +| include_twice.h:12:20:12:20 | s | This format specifier for type 'long long' does not match the argument type '..(*)(..)'. | +| include_twice.h:13:18:13:18 | s | This format specifier for type 'unsigned int' does not match the argument type '..(*)(..)'. | | include_twice.h:13:18:13:18 | s | This format specifier for type 'unsigned int' does not match the argument type 'unsigned long'. | | include_twice.h:21:18:21:39 | ... - ... | This format specifier for type 'int' does not match the argument type 'long'. | | include_twice.h:21:18:21:39 | ... - ... | This format specifier for type 'int' does not match the argument type 'long'. | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/include_twice.h b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/include_twice.h index 1288f172d52..d531ada4a55 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/include_twice.h +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/include_twice.h @@ -5,11 +5,11 @@ void test_size_t() { printf("%zd", s); // GOOD printf("%zi", s); // GOOD - printf("%zu", s); // GOOD - printf("%zx", s); // GOOD + printf("%zu", s); // GOOD [FALSE POSITIVE] + printf("%zx", s); // GOOD [FALSE POSITIVE] printf("%d", s); // BAD - printf("%ld", s); // BAD [NOT DETECTED] - printf("%lld", s); // BAD [NOT DETECTED] + printf("%ld", s); // BAD + printf("%lld", s); // BAD printf("%u", s); // BAD char buffer[1024]; diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/second.cpp b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/second.cpp index 5c815ff98e0..0c2b5ea69b1 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/second.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/second.cpp @@ -2,7 +2,7 @@ int printf(const char * format, ...); -// defines type `myFunctionPointerType` -typedef int (*myFunctionPointerType) (); +// defines type `myFunctionPointerType`, referencing `size_t` +typedef size_t (*myFunctionPointerType) (); #include "include_twice.h" From da99d3660d409775ea1d61646b630c831bc4f2cd Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 6 Mar 2026 11:53:43 +0000 Subject: [PATCH 003/185] C++: Turns out we can simplify. --- .../WrongTypeFormatArguments.expected | 20 ++++++--------- .../Buildless/first.cpp | 5 ---- .../Buildless/include_twice.h | 25 ------------------- .../Buildless/second.cpp | 24 +++++++++++++++++- 4 files changed, 31 insertions(+), 43 deletions(-) delete mode 100644 cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/include_twice.h diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/WrongTypeFormatArguments.expected b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/WrongTypeFormatArguments.expected index abc8c729450..ff2db0dfcf0 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/WrongTypeFormatArguments.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/WrongTypeFormatArguments.expected @@ -1,13 +1,9 @@ -| include_twice.h:8:19:8:19 | s | This format specifier for type 'size_t' does not match the argument type '..(*)(..)'. | -| include_twice.h:9:19:9:19 | s | This format specifier for type 'size_t' does not match the argument type '..(*)(..)'. | -| include_twice.h:10:18:10:18 | s | This format specifier for type 'int' does not match the argument type '..(*)(..)'. | -| include_twice.h:10:18:10:18 | s | This format specifier for type 'int' does not match the argument type 'unsigned long'. | -| include_twice.h:11:19:11:19 | s | This format specifier for type 'long' does not match the argument type '..(*)(..)'. | -| include_twice.h:12:20:12:20 | s | This format specifier for type 'long long' does not match the argument type '..(*)(..)'. | -| include_twice.h:13:18:13:18 | s | This format specifier for type 'unsigned int' does not match the argument type '..(*)(..)'. | -| include_twice.h:13:18:13:18 | s | This format specifier for type 'unsigned int' does not match the argument type 'unsigned long'. | -| include_twice.h:21:18:21:39 | ... - ... | This format specifier for type 'int' does not match the argument type 'long'. | -| include_twice.h:21:18:21:39 | ... - ... | This format specifier for type 'int' does not match the argument type 'long'. | -| include_twice.h:24:18:24:39 | ... - ... | This format specifier for type 'unsigned int' does not match the argument type 'long'. | -| include_twice.h:24:18:24:39 | ... - ... | This format specifier for type 'unsigned int' does not match the argument type 'long'. | +| second.cpp:13:19:13:19 | s | This format specifier for type 'size_t' does not match the argument type '..(*)(..)'. | +| second.cpp:14:19:14:19 | s | This format specifier for type 'size_t' does not match the argument type '..(*)(..)'. | +| second.cpp:15:18:15:18 | s | This format specifier for type 'int' does not match the argument type '..(*)(..)'. | +| second.cpp:16:19:16:19 | s | This format specifier for type 'long' does not match the argument type '..(*)(..)'. | +| second.cpp:17:20:17:20 | s | This format specifier for type 'long long' does not match the argument type '..(*)(..)'. | +| second.cpp:18:18:18:18 | s | This format specifier for type 'unsigned int' does not match the argument type '..(*)(..)'. | +| second.cpp:26:18:26:39 | ... - ... | This format specifier for type 'int' does not match the argument type 'long'. | +| second.cpp:29:18:29:39 | ... - ... | This format specifier for type 'unsigned int' does not match the argument type 'long'. | | tests.c:7:18:7:18 | 1 | This format specifier for type 'char *' does not match the argument type 'int'. | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/first.cpp b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/first.cpp index 389d609c04a..8973ace78c7 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/first.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/first.cpp @@ -1,8 +1,3 @@ -// semmle-extractor-options: --expect_errors - -int printf(const char * format, ...); // defines type size_t plausibly typedef unsigned long size_t; - -#include "include_twice.h" diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/include_twice.h b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/include_twice.h deleted file mode 100644 index d531ada4a55..00000000000 --- a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/include_twice.h +++ /dev/null @@ -1,25 +0,0 @@ -// semmle-extractor-options: --expect_errors - -void test_size_t() { - size_t s = 0; - - printf("%zd", s); // GOOD - printf("%zi", s); // GOOD - printf("%zu", s); // GOOD [FALSE POSITIVE] - printf("%zx", s); // GOOD [FALSE POSITIVE] - printf("%d", s); // BAD - printf("%ld", s); // BAD - printf("%lld", s); // BAD - printf("%u", s); // BAD - - char buffer[1024]; - - printf("%zd", &buffer[1023] - buffer); // GOOD - printf("%zi", &buffer[1023] - buffer); // GOOD - printf("%zu", &buffer[1023] - buffer); // GOOD - printf("%zx", &buffer[1023] - buffer); // GOOD - printf("%d", &buffer[1023] - buffer); // BAD - printf("%ld", &buffer[1023] - buffer); // BAD [NOT DETECTED] - printf("%lld", &buffer[1023] - buffer); // BAD [NOT DETECTED] - printf("%u", &buffer[1023] - buffer); // BAD -} diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/second.cpp b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/second.cpp index 0c2b5ea69b1..34a7d24f132 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/second.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/second.cpp @@ -5,4 +5,26 @@ int printf(const char * format, ...); // defines type `myFunctionPointerType`, referencing `size_t` typedef size_t (*myFunctionPointerType) (); -#include "include_twice.h" +void test_size_t() { + size_t s = 0; + + printf("%zd", s); // GOOD + printf("%zi", s); // GOOD + printf("%zu", s); // GOOD [FALSE POSITIVE] + printf("%zx", s); // GOOD [FALSE POSITIVE] + printf("%d", s); // BAD + printf("%ld", s); // BAD + printf("%lld", s); // BAD + printf("%u", s); // BAD + + char buffer[1024]; + + printf("%zd", &buffer[1023] - buffer); // GOOD + printf("%zi", &buffer[1023] - buffer); // GOOD + printf("%zu", &buffer[1023] - buffer); // GOOD + printf("%zx", &buffer[1023] - buffer); // GOOD + printf("%d", &buffer[1023] - buffer); // BAD + printf("%ld", &buffer[1023] - buffer); // BAD [NOT DETECTED] + printf("%lld", &buffer[1023] - buffer); // BAD [NOT DETECTED] + printf("%u", &buffer[1023] - buffer); // BAD +} From 5283413055a84279ee4e594dc4b887dd0fab5370 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 9 Mar 2026 20:00:48 +0000 Subject: [PATCH 004/185] update codeql documentation --- .../codeql-changelog/codeql-cli-2.19.1.rst | 2 +- .../codeql-changelog/codeql-cli-2.21.3.rst | 2 +- .../codeql-changelog/codeql-cli-2.22.3.rst | 2 +- .../codeql-changelog/codeql-cli-2.23.1.rst | 4 +- .../codeql-changelog/codeql-cli-2.24.3.rst | 121 ++++++++++++++++++ .../codeql-changelog/index.rst | 1 + 6 files changed, 127 insertions(+), 5 deletions(-) create mode 100644 docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.24.3.rst diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst index f2948d0db67..39d4d36537c 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst @@ -129,7 +129,7 @@ Java/Kotlin """"""""""" * The Java extractor and QL libraries now support Java 23. -* Kotlin versions up to 2.1.0\ *x* are now supported. +* Kotlin versions up to 2.1.0*x* are now supported. Python """""" diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.3.rst index 71a8e3a6824..fffe94c04b8 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.3.rst @@ -144,7 +144,7 @@ New Features Java/Kotlin """"""""""" -* Kotlin versions up to 2.2.0\ *x* are now supported. Support for the Kotlin 1.5.x series is dropped (so the minimum Kotlin version is now 1.6.0). +* Kotlin versions up to 2.2.0*x* are now supported. Support for the Kotlin 1.5.x series is dropped (so the minimum Kotlin version is now 1.6.0). Swift """"" diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst index 4f1d34ff2dd..8e5a18a0c74 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst @@ -98,4 +98,4 @@ C/C++ Java/Kotlin """"""""""" -* Kotlin versions up to 2.2.2\ *x* are now supported. +* Kotlin versions up to 2.2.2*x* are now supported. diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst index ff22a3f647c..27f1eee84ed 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst @@ -88,7 +88,7 @@ JavaScript/TypeScript * Data flow is now tracked through the :code:`Promise.try` and :code:`Array.prototype.with` functions. * Query :code:`js/index-out-of-bounds` no longer produces a false-positive when a strictly-less-than check overrides a previous less-than-or-equal test. * The query :code:`js/remote-property-injection` now detects property injection vulnerabilities through object enumeration patterns such as :code:`Object.keys()`. -* The query "Permissive CORS configuration" (:code:`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. Thank you to @maikypedia who `submitted the original experimental query `__! +* The query "Permissive CORS configuration" (:code:`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. Thank you to @maikypedia who `submitted the original experimental query `__\ ! Python """""" @@ -126,7 +126,7 @@ Golang """""" * The second argument of the :code:`CreateTemp` function, from the :code:`os` package, is no longer a path-injection sink due to proper sanitization by Go. -* The query "Uncontrolled data used in path expression" (:code:`go/path-injection`) now detects sanitizing a path by adding :code:`os.PathSeparator` or ``\`` to the beginning. +* The query "Uncontrolled data used in path expression" (:code:`go/path-injection`) now detects sanitizing a path by adding :code:`os.PathSeparator` or :code:`\` to the beginning. Java/Kotlin """"""""""" diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.24.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.24.3.rst new file mode 100644 index 00000000000..7c4f99e10d2 --- /dev/null +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.24.3.rst @@ -0,0 +1,121 @@ +.. _codeql-cli-2.24.3: + +========================== +CodeQL 2.24.3 (2026-03-05) +========================== + +.. contents:: Contents + :depth: 2 + :local: + :backlinks: none + +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. + +Security Coverage +----------------- + +CodeQL 2.24.3 runs a total of 491 security queries when configured with the Default suite (covering 166 CWE). The Extended suite enables an additional 135 queries (covering 35 more CWE). + +CodeQL CLI +---------- + +Bug Fixes +~~~~~~~~~ + +* Fixed a race condition that could cause flaky failures in overlay CodeQL tests. Test extraction now skips :code:`*.testproj` directories by name, preventing interference from concurrently cleaned-up test databases. +* Fixed spurious "OOPS" warnings that could appear in help output for commands using mutually exclusive option groups, such as :code:`codeql query run`. + +Query Packs +----------- + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Java/Kotlin +""""""""""" + +* The Java extractor and QL libraries now support Java 26. +* Java analysis now selects the Java version to use informed by Maven POM files across all project modules. It also tries to use Java 17 or higher for all Maven projects if possible, for improved build compatibility. + +Rust +"""" + +* The macro resolution metric has been removed from :code:`rust/diagnostic/database-quality`. This metric was found to be an unreliable indicator of database quality in many cases, leading to false alarms on the tool status page. + +Language Libraries +------------------ + +Bug Fixes +~~~~~~~~~ + +C/C++ +""""" + +* The :code:`allowInterproceduralFlow` predicate of must-flow data flow configurations now correctly handles direct recursion. + +C# +"" + +* Fixed an issue where the body of a partial member could be extracted twice. When both a *defining* and an *implementing* declaration exist, only the *implementing* declaration is now extracted. + +Breaking Changes +~~~~~~~~~~~~~~~~ + +C/C++ +""""" + +* CodeQL version 2.24.2 accidentally introduced a syntactical breaking change to :code:`BarrierGuard<...>::getAnIndirectBarrierNode` and :code:`InstructionBarrierGuard<...>::getAnIndirectBarrierNode`. These breaking changes have now been reverted so that the original code compiles again. +* :code:`MustFlow`, the inter-procedural must-flow data flow analysis library, has been re-worked to use parameterized modules. Like in the case of data flow and taint tracking, instead of extending the :code:`MustFlowConfiguration` class, the user should now implement a module with the :code:`MustFlow::ConfigSig` signature, and instantiate the :code:`MustFlow::Global` parameterized module with the implemented module. + +Python +"""""" + +* The :code:`Metrics` library no longer contains code that depends on the points-to analysis. The removed functionality has instead been moved to the :code:`LegacyPointsTo` module, to classes like :code:`ModuleMetricsWithPointsTo` etc. If you depend on any of these classes, you must now remember to import :code:`LegacyPointsTo`, and use the appropriate types in order to use the points-to-based functionality. + +Major Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Python +"""""" + +* The CodeQL Python libraries have been updated to be compatible with overlay evaluation. This should result in a significant speedup on analyses for which a base database already exists. Note that it may be necessary to add :code:`overlay[local?] module;` to user-managed libraries that extend classes that are now marked as :code:`overlay[local]`. + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C/C++ +""""" + +* Refactored the "Year field changed using an arithmetic operation without checking for leap year" query (:code:`cpp/leap-year/unchecked-after-arithmetic-year-modification`) to address large numbers of false positive results. + +C# +"" + +* C# 14: Added support for partial events. +* C# 14: Added support for the :code:`field` keyword in properties. + +Java/Kotlin +""""""""""" + +* Some modelling which previously only worked for Java EE packages beginning with "javax" will now also work for Java EE packages beginning with "jakarta" as well. This may lead to some alert changes. + +JavaScript/TypeScript +""""""""""""""""""""" + +* Added support for React components wrapped by :code:`observer` from :code:`mobx-react` and :code:`mobx-react-lite`. + +Python +"""""" + +* Added new full SSRF sanitization barrier from the new AntiSSRF library. +* When a guard such as :code:`isSafe(x)` is defined, we now also automatically handle :code:`isSafe(x) == true` and :code:`isSafe(x) != false`. + +Ruby +"""" + +* We now track taint flow through :code:`Shellwords.escape` and :code:`Shellwords.shellescape` for all queries except command injection, for which they are sanitizers. + +Rust +"""" + +* Added support for neutral models (:code:`extensible: neutralModel`) to control where generated source, sink and flow summary models apply. diff --git a/docs/codeql/codeql-overview/codeql-changelog/index.rst b/docs/codeql/codeql-overview/codeql-changelog/index.rst index 21671f1c969..c128fe96410 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/index.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/index.rst @@ -11,6 +11,7 @@ A list of queries for each suite and language `is available here Date: Mon, 9 Mar 2026 15:32:42 -0500 Subject: [PATCH 005/185] Fix formatting issues in codeql-cli-2.23.1.rst --- .../codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst index 27f1eee84ed..ff22a3f647c 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst @@ -88,7 +88,7 @@ JavaScript/TypeScript * Data flow is now tracked through the :code:`Promise.try` and :code:`Array.prototype.with` functions. * Query :code:`js/index-out-of-bounds` no longer produces a false-positive when a strictly-less-than check overrides a previous less-than-or-equal test. * The query :code:`js/remote-property-injection` now detects property injection vulnerabilities through object enumeration patterns such as :code:`Object.keys()`. -* The query "Permissive CORS configuration" (:code:`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. Thank you to @maikypedia who `submitted the original experimental query `__\ ! +* The query "Permissive CORS configuration" (:code:`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. Thank you to @maikypedia who `submitted the original experimental query `__! Python """""" @@ -126,7 +126,7 @@ Golang """""" * The second argument of the :code:`CreateTemp` function, from the :code:`os` package, is no longer a path-injection sink due to proper sanitization by Go. -* The query "Uncontrolled data used in path expression" (:code:`go/path-injection`) now detects sanitizing a path by adding :code:`os.PathSeparator` or :code:`\` to the beginning. +* The query "Uncontrolled data used in path expression" (:code:`go/path-injection`) now detects sanitizing a path by adding :code:`os.PathSeparator` or ``\`` to the beginning. Java/Kotlin """"""""""" From 5921dacf528820a4e462b1037755d87401fe85fd Mon Sep 17 00:00:00 2001 From: Mario Campos Date: Mon, 9 Mar 2026 15:33:08 -0500 Subject: [PATCH 006/185] Fix formatting of Kotlin version support note --- .../codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst index 8e5a18a0c74..4f1d34ff2dd 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst @@ -98,4 +98,4 @@ C/C++ Java/Kotlin """"""""""" -* Kotlin versions up to 2.2.2*x* are now supported. +* Kotlin versions up to 2.2.2\ *x* are now supported. From 216bc7669424bb67fa206b8fbca8353ec3ee0b78 Mon Sep 17 00:00:00 2001 From: Mario Campos Date: Mon, 9 Mar 2026 15:34:07 -0500 Subject: [PATCH 007/185] Fix formatting in Kotlin version support note --- .../codeql-overview/codeql-changelog/codeql-cli-2.21.3.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.3.rst index fffe94c04b8..71a8e3a6824 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.3.rst @@ -144,7 +144,7 @@ New Features Java/Kotlin """"""""""" -* Kotlin versions up to 2.2.0*x* are now supported. Support for the Kotlin 1.5.x series is dropped (so the minimum Kotlin version is now 1.6.0). +* Kotlin versions up to 2.2.0\ *x* are now supported. Support for the Kotlin 1.5.x series is dropped (so the minimum Kotlin version is now 1.6.0). Swift """"" From f5545516dbb873153b7bb2496d44ec7e6bcd3343 Mon Sep 17 00:00:00 2001 From: Mario Campos Date: Mon, 9 Mar 2026 15:34:27 -0500 Subject: [PATCH 008/185] Fix formatting in codeql-cli-2.19.1.rst --- .../codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst index 39d4d36537c..f2948d0db67 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst @@ -129,7 +129,7 @@ Java/Kotlin """"""""""" * The Java extractor and QL libraries now support Java 23. -* Kotlin versions up to 2.1.0*x* are now supported. +* Kotlin versions up to 2.1.0\ *x* are now supported. Python """""" From eea61ea821c2f966d61b03421b1ec3bd2bc161ca Mon Sep 17 00:00:00 2001 From: Mario Campos Date: Mon, 9 Mar 2026 16:55:09 -0500 Subject: [PATCH 009/185] Revert "Update changelog documentation site for codeql-cli-2.24.3" --- .../codeql-changelog/codeql-cli-2.24.3.rst | 121 ------------------ .../codeql-changelog/index.rst | 1 - 2 files changed, 122 deletions(-) delete mode 100644 docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.24.3.rst diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.24.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.24.3.rst deleted file mode 100644 index 7c4f99e10d2..00000000000 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.24.3.rst +++ /dev/null @@ -1,121 +0,0 @@ -.. _codeql-cli-2.24.3: - -========================== -CodeQL 2.24.3 (2026-03-05) -========================== - -.. contents:: Contents - :depth: 2 - :local: - :backlinks: none - -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. - -Security Coverage ------------------ - -CodeQL 2.24.3 runs a total of 491 security queries when configured with the Default suite (covering 166 CWE). The Extended suite enables an additional 135 queries (covering 35 more CWE). - -CodeQL CLI ----------- - -Bug Fixes -~~~~~~~~~ - -* Fixed a race condition that could cause flaky failures in overlay CodeQL tests. Test extraction now skips :code:`*.testproj` directories by name, preventing interference from concurrently cleaned-up test databases. -* Fixed spurious "OOPS" warnings that could appear in help output for commands using mutually exclusive option groups, such as :code:`codeql query run`. - -Query Packs ------------ - -Minor Analysis Improvements -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Java/Kotlin -""""""""""" - -* The Java extractor and QL libraries now support Java 26. -* Java analysis now selects the Java version to use informed by Maven POM files across all project modules. It also tries to use Java 17 or higher for all Maven projects if possible, for improved build compatibility. - -Rust -"""" - -* The macro resolution metric has been removed from :code:`rust/diagnostic/database-quality`. This metric was found to be an unreliable indicator of database quality in many cases, leading to false alarms on the tool status page. - -Language Libraries ------------------- - -Bug Fixes -~~~~~~~~~ - -C/C++ -""""" - -* The :code:`allowInterproceduralFlow` predicate of must-flow data flow configurations now correctly handles direct recursion. - -C# -"" - -* Fixed an issue where the body of a partial member could be extracted twice. When both a *defining* and an *implementing* declaration exist, only the *implementing* declaration is now extracted. - -Breaking Changes -~~~~~~~~~~~~~~~~ - -C/C++ -""""" - -* CodeQL version 2.24.2 accidentally introduced a syntactical breaking change to :code:`BarrierGuard<...>::getAnIndirectBarrierNode` and :code:`InstructionBarrierGuard<...>::getAnIndirectBarrierNode`. These breaking changes have now been reverted so that the original code compiles again. -* :code:`MustFlow`, the inter-procedural must-flow data flow analysis library, has been re-worked to use parameterized modules. Like in the case of data flow and taint tracking, instead of extending the :code:`MustFlowConfiguration` class, the user should now implement a module with the :code:`MustFlow::ConfigSig` signature, and instantiate the :code:`MustFlow::Global` parameterized module with the implemented module. - -Python -"""""" - -* The :code:`Metrics` library no longer contains code that depends on the points-to analysis. The removed functionality has instead been moved to the :code:`LegacyPointsTo` module, to classes like :code:`ModuleMetricsWithPointsTo` etc. If you depend on any of these classes, you must now remember to import :code:`LegacyPointsTo`, and use the appropriate types in order to use the points-to-based functionality. - -Major Analysis Improvements -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Python -"""""" - -* The CodeQL Python libraries have been updated to be compatible with overlay evaluation. This should result in a significant speedup on analyses for which a base database already exists. Note that it may be necessary to add :code:`overlay[local?] module;` to user-managed libraries that extend classes that are now marked as :code:`overlay[local]`. - -Minor Analysis Improvements -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -C/C++ -""""" - -* Refactored the "Year field changed using an arithmetic operation without checking for leap year" query (:code:`cpp/leap-year/unchecked-after-arithmetic-year-modification`) to address large numbers of false positive results. - -C# -"" - -* C# 14: Added support for partial events. -* C# 14: Added support for the :code:`field` keyword in properties. - -Java/Kotlin -""""""""""" - -* Some modelling which previously only worked for Java EE packages beginning with "javax" will now also work for Java EE packages beginning with "jakarta" as well. This may lead to some alert changes. - -JavaScript/TypeScript -""""""""""""""""""""" - -* Added support for React components wrapped by :code:`observer` from :code:`mobx-react` and :code:`mobx-react-lite`. - -Python -"""""" - -* Added new full SSRF sanitization barrier from the new AntiSSRF library. -* When a guard such as :code:`isSafe(x)` is defined, we now also automatically handle :code:`isSafe(x) == true` and :code:`isSafe(x) != false`. - -Ruby -"""" - -* We now track taint flow through :code:`Shellwords.escape` and :code:`Shellwords.shellescape` for all queries except command injection, for which they are sanitizers. - -Rust -"""" - -* Added support for neutral models (:code:`extensible: neutralModel`) to control where generated source, sink and flow summary models apply. diff --git a/docs/codeql/codeql-overview/codeql-changelog/index.rst b/docs/codeql/codeql-overview/codeql-changelog/index.rst index c128fe96410..21671f1c969 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/index.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/index.rst @@ -11,7 +11,6 @@ A list of queries for each suite and language `is available here Date: Mon, 9 Mar 2026 22:17:15 +0000 Subject: [PATCH 010/185] update codeql documentation --- .../codeql-changelog/codeql-cli-2.19.1.rst | 2 +- .../codeql-changelog/codeql-cli-2.21.3.rst | 2 +- .../codeql-changelog/codeql-cli-2.22.3.rst | 2 +- .../codeql-changelog/codeql-cli-2.23.1.rst | 4 +- .../codeql-changelog/codeql-cli-2.24.3.rst | 121 ++++++++++++++++++ .../codeql-changelog/index.rst | 1 + 6 files changed, 127 insertions(+), 5 deletions(-) create mode 100644 docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.24.3.rst diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst index f2948d0db67..39d4d36537c 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst @@ -129,7 +129,7 @@ Java/Kotlin """"""""""" * The Java extractor and QL libraries now support Java 23. -* Kotlin versions up to 2.1.0\ *x* are now supported. +* Kotlin versions up to 2.1.0*x* are now supported. Python """""" diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.3.rst index 71a8e3a6824..fffe94c04b8 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.3.rst @@ -144,7 +144,7 @@ New Features Java/Kotlin """"""""""" -* Kotlin versions up to 2.2.0\ *x* are now supported. Support for the Kotlin 1.5.x series is dropped (so the minimum Kotlin version is now 1.6.0). +* Kotlin versions up to 2.2.0*x* are now supported. Support for the Kotlin 1.5.x series is dropped (so the minimum Kotlin version is now 1.6.0). Swift """"" diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst index 4f1d34ff2dd..8e5a18a0c74 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst @@ -98,4 +98,4 @@ C/C++ Java/Kotlin """"""""""" -* Kotlin versions up to 2.2.2\ *x* are now supported. +* Kotlin versions up to 2.2.2*x* are now supported. diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst index ff22a3f647c..27f1eee84ed 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst @@ -88,7 +88,7 @@ JavaScript/TypeScript * Data flow is now tracked through the :code:`Promise.try` and :code:`Array.prototype.with` functions. * Query :code:`js/index-out-of-bounds` no longer produces a false-positive when a strictly-less-than check overrides a previous less-than-or-equal test. * The query :code:`js/remote-property-injection` now detects property injection vulnerabilities through object enumeration patterns such as :code:`Object.keys()`. -* The query "Permissive CORS configuration" (:code:`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. Thank you to @maikypedia who `submitted the original experimental query `__! +* The query "Permissive CORS configuration" (:code:`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. Thank you to @maikypedia who `submitted the original experimental query `__\ ! Python """""" @@ -126,7 +126,7 @@ Golang """""" * The second argument of the :code:`CreateTemp` function, from the :code:`os` package, is no longer a path-injection sink due to proper sanitization by Go. -* The query "Uncontrolled data used in path expression" (:code:`go/path-injection`) now detects sanitizing a path by adding :code:`os.PathSeparator` or ``\`` to the beginning. +* The query "Uncontrolled data used in path expression" (:code:`go/path-injection`) now detects sanitizing a path by adding :code:`os.PathSeparator` or :code:`\` to the beginning. Java/Kotlin """"""""""" diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.24.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.24.3.rst new file mode 100644 index 00000000000..7c4f99e10d2 --- /dev/null +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.24.3.rst @@ -0,0 +1,121 @@ +.. _codeql-cli-2.24.3: + +========================== +CodeQL 2.24.3 (2026-03-05) +========================== + +.. contents:: Contents + :depth: 2 + :local: + :backlinks: none + +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. + +Security Coverage +----------------- + +CodeQL 2.24.3 runs a total of 491 security queries when configured with the Default suite (covering 166 CWE). The Extended suite enables an additional 135 queries (covering 35 more CWE). + +CodeQL CLI +---------- + +Bug Fixes +~~~~~~~~~ + +* Fixed a race condition that could cause flaky failures in overlay CodeQL tests. Test extraction now skips :code:`*.testproj` directories by name, preventing interference from concurrently cleaned-up test databases. +* Fixed spurious "OOPS" warnings that could appear in help output for commands using mutually exclusive option groups, such as :code:`codeql query run`. + +Query Packs +----------- + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Java/Kotlin +""""""""""" + +* The Java extractor and QL libraries now support Java 26. +* Java analysis now selects the Java version to use informed by Maven POM files across all project modules. It also tries to use Java 17 or higher for all Maven projects if possible, for improved build compatibility. + +Rust +"""" + +* The macro resolution metric has been removed from :code:`rust/diagnostic/database-quality`. This metric was found to be an unreliable indicator of database quality in many cases, leading to false alarms on the tool status page. + +Language Libraries +------------------ + +Bug Fixes +~~~~~~~~~ + +C/C++ +""""" + +* The :code:`allowInterproceduralFlow` predicate of must-flow data flow configurations now correctly handles direct recursion. + +C# +"" + +* Fixed an issue where the body of a partial member could be extracted twice. When both a *defining* and an *implementing* declaration exist, only the *implementing* declaration is now extracted. + +Breaking Changes +~~~~~~~~~~~~~~~~ + +C/C++ +""""" + +* CodeQL version 2.24.2 accidentally introduced a syntactical breaking change to :code:`BarrierGuard<...>::getAnIndirectBarrierNode` and :code:`InstructionBarrierGuard<...>::getAnIndirectBarrierNode`. These breaking changes have now been reverted so that the original code compiles again. +* :code:`MustFlow`, the inter-procedural must-flow data flow analysis library, has been re-worked to use parameterized modules. Like in the case of data flow and taint tracking, instead of extending the :code:`MustFlowConfiguration` class, the user should now implement a module with the :code:`MustFlow::ConfigSig` signature, and instantiate the :code:`MustFlow::Global` parameterized module with the implemented module. + +Python +"""""" + +* The :code:`Metrics` library no longer contains code that depends on the points-to analysis. The removed functionality has instead been moved to the :code:`LegacyPointsTo` module, to classes like :code:`ModuleMetricsWithPointsTo` etc. If you depend on any of these classes, you must now remember to import :code:`LegacyPointsTo`, and use the appropriate types in order to use the points-to-based functionality. + +Major Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Python +"""""" + +* The CodeQL Python libraries have been updated to be compatible with overlay evaluation. This should result in a significant speedup on analyses for which a base database already exists. Note that it may be necessary to add :code:`overlay[local?] module;` to user-managed libraries that extend classes that are now marked as :code:`overlay[local]`. + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C/C++ +""""" + +* Refactored the "Year field changed using an arithmetic operation without checking for leap year" query (:code:`cpp/leap-year/unchecked-after-arithmetic-year-modification`) to address large numbers of false positive results. + +C# +"" + +* C# 14: Added support for partial events. +* C# 14: Added support for the :code:`field` keyword in properties. + +Java/Kotlin +""""""""""" + +* Some modelling which previously only worked for Java EE packages beginning with "javax" will now also work for Java EE packages beginning with "jakarta" as well. This may lead to some alert changes. + +JavaScript/TypeScript +""""""""""""""""""""" + +* Added support for React components wrapped by :code:`observer` from :code:`mobx-react` and :code:`mobx-react-lite`. + +Python +"""""" + +* Added new full SSRF sanitization barrier from the new AntiSSRF library. +* When a guard such as :code:`isSafe(x)` is defined, we now also automatically handle :code:`isSafe(x) == true` and :code:`isSafe(x) != false`. + +Ruby +"""" + +* We now track taint flow through :code:`Shellwords.escape` and :code:`Shellwords.shellescape` for all queries except command injection, for which they are sanitizers. + +Rust +"""" + +* Added support for neutral models (:code:`extensible: neutralModel`) to control where generated source, sink and flow summary models apply. diff --git a/docs/codeql/codeql-overview/codeql-changelog/index.rst b/docs/codeql/codeql-overview/codeql-changelog/index.rst index 21671f1c969..c128fe96410 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/index.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/index.rst @@ -11,6 +11,7 @@ A list of queries for each suite and language `is available here Date: Mon, 9 Mar 2026 17:19:18 -0500 Subject: [PATCH 011/185] Fix formatting for Kotlin version support note --- .../codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst index 39d4d36537c..f2948d0db67 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst @@ -129,7 +129,7 @@ Java/Kotlin """"""""""" * The Java extractor and QL libraries now support Java 23. -* Kotlin versions up to 2.1.0*x* are now supported. +* Kotlin versions up to 2.1.0\ *x* are now supported. Python """""" From f52195e96d688c7712c276488bf823150148b179 Mon Sep 17 00:00:00 2001 From: Mario Campos Date: Mon, 9 Mar 2026 17:19:36 -0500 Subject: [PATCH 012/185] Fix formatting in Kotlin version support note --- .../codeql-overview/codeql-changelog/codeql-cli-2.21.3.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.3.rst index fffe94c04b8..71a8e3a6824 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.3.rst @@ -144,7 +144,7 @@ New Features Java/Kotlin """"""""""" -* Kotlin versions up to 2.2.0*x* are now supported. Support for the Kotlin 1.5.x series is dropped (so the minimum Kotlin version is now 1.6.0). +* Kotlin versions up to 2.2.0\ *x* are now supported. Support for the Kotlin 1.5.x series is dropped (so the minimum Kotlin version is now 1.6.0). Swift """"" From 87ec22db655d970f7f4094f111985d498c3d5a4a Mon Sep 17 00:00:00 2001 From: Mario Campos Date: Mon, 9 Mar 2026 17:19:56 -0500 Subject: [PATCH 013/185] Fix formatting of Kotlin version support note --- .../codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst index 8e5a18a0c74..4f1d34ff2dd 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst @@ -98,4 +98,4 @@ C/C++ Java/Kotlin """"""""""" -* Kotlin versions up to 2.2.2*x* are now supported. +* Kotlin versions up to 2.2.2\ *x* are now supported. From b7a5b08d61605438f419049971bb5514cc9eddab Mon Sep 17 00:00:00 2001 From: Mario Campos Date: Mon, 9 Mar 2026 17:20:34 -0500 Subject: [PATCH 014/185] Fix formatting issues in codeql-cli-2.23.1.rst --- .../codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst index 27f1eee84ed..ff22a3f647c 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst @@ -88,7 +88,7 @@ JavaScript/TypeScript * Data flow is now tracked through the :code:`Promise.try` and :code:`Array.prototype.with` functions. * Query :code:`js/index-out-of-bounds` no longer produces a false-positive when a strictly-less-than check overrides a previous less-than-or-equal test. * The query :code:`js/remote-property-injection` now detects property injection vulnerabilities through object enumeration patterns such as :code:`Object.keys()`. -* The query "Permissive CORS configuration" (:code:`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. Thank you to @maikypedia who `submitted the original experimental query `__\ ! +* The query "Permissive CORS configuration" (:code:`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. Thank you to @maikypedia who `submitted the original experimental query `__! Python """""" @@ -126,7 +126,7 @@ Golang """""" * The second argument of the :code:`CreateTemp` function, from the :code:`os` package, is no longer a path-injection sink due to proper sanitization by Go. -* The query "Uncontrolled data used in path expression" (:code:`go/path-injection`) now detects sanitizing a path by adding :code:`os.PathSeparator` or :code:`\` to the beginning. +* The query "Uncontrolled data used in path expression" (:code:`go/path-injection`) now detects sanitizing a path by adding :code:`os.PathSeparator` or ``\`` to the beginning. Java/Kotlin """"""""""" From 79841bbc00441663bc36ae8a12b90b0a9968f2a6 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 10 Mar 2026 16:20:50 +0100 Subject: [PATCH 015/185] =?UTF-8?q?Update=20`rules=5Frust`=200.68.1.codeql?= =?UTF-8?q?.1=20=E2=86=92=200.69.0,=20drop=20local=20patch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The `include_rmeta_in_stdlib.patch` is included upstream in 0.69.0. Remove the local registry entry and regenerate vendored deps. --- MODULE.bazel | 2 +- .../py_deps/BUILD.aho-corasick-1.1.3.bazel | 1 + .../py_deps/BUILD.anstream-0.6.18.bazel | 1 + .../py_deps/BUILD.anstyle-1.0.10.bazel | 1 + .../py_deps/BUILD.anstyle-parse-0.2.6.bazel | 1 + .../py_deps/BUILD.anstyle-query-1.1.2.bazel | 1 + .../py_deps/BUILD.anstyle-wincon-3.0.7.bazel | 1 + .../py_deps/BUILD.anyhow-1.0.95.bazel | 1 + .../3rdparty/py_deps/BUILD.cc-1.2.14.bazel | 1 + .../3rdparty/py_deps/BUILD.clap-4.5.30.bazel | 1 + .../py_deps/BUILD.clap_builder-4.5.30.bazel | 1 + .../py_deps/BUILD.clap_lex-0.7.4.bazel | 1 + .../py_deps/BUILD.colorchoice-1.0.3.bazel | 1 + .../BUILD.is_terminal_polyfill-1.70.1.bazel | 1 + .../3rdparty/py_deps/BUILD.itoa-1.0.14.bazel | 1 + .../3rdparty/py_deps/BUILD.log-0.4.25.bazel | 1 + .../3rdparty/py_deps/BUILD.memchr-2.7.4.bazel | 1 + .../py_deps/BUILD.once_cell-1.20.3.bazel | 1 + .../py_deps/BUILD.proc-macro2-1.0.93.bazel | 1 + .../3rdparty/py_deps/BUILD.quote-1.0.38.bazel | 1 + .../3rdparty/py_deps/BUILD.regex-1.11.1.bazel | 1 + .../py_deps/BUILD.regex-automata-0.4.9.bazel | 1 + .../py_deps/BUILD.regex-syntax-0.8.5.bazel | 1 + .../3rdparty/py_deps/BUILD.ryu-1.0.19.bazel | 1 + .../py_deps/BUILD.serde-1.0.217.bazel | 1 + .../py_deps/BUILD.serde_derive-1.0.217.bazel | 1 + .../py_deps/BUILD.serde_json-1.0.138.bazel | 1 + .../3rdparty/py_deps/BUILD.shlex-1.3.0.bazel | 1 + .../py_deps/BUILD.smallvec-1.14.0.bazel | 1 + .../BUILD.streaming-iterator-0.1.9.bazel | 1 + .../py_deps/BUILD.strsim-0.11.1.bazel | 1 + .../3rdparty/py_deps/BUILD.syn-2.0.98.bazel | 1 + .../py_deps/BUILD.thiserror-1.0.69.bazel | 1 + .../py_deps/BUILD.thiserror-impl-1.0.69.bazel | 1 + .../py_deps/BUILD.tree-sitter-0.24.7.bazel | 1 + .../BUILD.tree-sitter-graph-0.12.0.bazel | 1 + .../BUILD.tree-sitter-language-0.1.5.bazel | 1 + .../py_deps/BUILD.unicode-ident-1.0.16.bazel | 1 + .../py_deps/BUILD.utf8parse-0.2.2.bazel | 1 + .../py_deps/BUILD.windows-sys-0.59.0.bazel | 1 + .../BUILD.windows-targets-0.52.6.bazel | 1 + ...BUILD.windows_aarch64_gnullvm-0.52.6.bazel | 1 + .../BUILD.windows_aarch64_msvc-0.52.6.bazel | 1 + .../BUILD.windows_i686_gnu-0.52.6.bazel | 1 + .../BUILD.windows_i686_gnullvm-0.52.6.bazel | 1 + .../BUILD.windows_i686_msvc-0.52.6.bazel | 1 + .../BUILD.windows_x86_64_gnu-0.52.6.bazel | 1 + .../BUILD.windows_x86_64_gnullvm-0.52.6.bazel | 1 + .../BUILD.windows_x86_64_msvc-0.52.6.bazel | 1 + misc/bazel/3rdparty/py_deps/defs.bzl | 3 +- .../BUILD.adler2-2.0.1.bazel | 1 + .../BUILD.aho-corasick-1.1.3.bazel | 1 + .../BUILD.allocator-api2-0.2.21.bazel | 1 + ...UILD.android_system_properties-0.1.5.bazel | 1 + .../BUILD.anstream-0.6.20.bazel | 1 + .../BUILD.anstyle-1.0.11.bazel | 1 + .../BUILD.anstyle-parse-0.2.7.bazel | 1 + .../BUILD.anstyle-query-1.1.4.bazel | 1 + .../BUILD.anstyle-wincon-3.0.10.bazel | 1 + .../BUILD.anyhow-1.0.100.bazel | 1 + .../BUILD.argfile-0.2.1.bazel | 1 + .../BUILD.arrayvec-0.7.6.bazel | 1 + .../BUILD.atomic-0.6.1.bazel | 1 + .../BUILD.autocfg-1.5.0.bazel | 1 + .../BUILD.base64-0.22.1.bazel | 1 + .../BUILD.bitflags-1.3.2.bazel | 1 + .../BUILD.bitflags-2.9.4.bazel | 1 + .../BUILD.borsh-1.5.7.bazel | 1 + .../BUILD.boxcar-0.2.14.bazel | 1 + .../BUILD.bstr-1.12.0.bazel | 1 + .../BUILD.bumpalo-3.19.0.bazel | 1 + .../BUILD.bytemuck-1.23.2.bazel | 1 + .../BUILD.camino-1.1.12.bazel | 1 + .../BUILD.cargo-platform-0.2.0.bazel | 1 + .../BUILD.cargo-util-schemas-0.8.2.bazel | 1 + .../BUILD.cargo_metadata-0.21.0.bazel | 1 + .../BUILD.cc-1.2.37.bazel | 1 + .../BUILD.cfg-if-1.0.3.bazel | 1 + .../BUILD.cfg_aliases-0.2.1.bazel | 1 + .../BUILD.chalk-derive-0.103.0.bazel | 1 + .../BUILD.chalk-derive-0.104.0.bazel | 1 + .../BUILD.chalk-ir-0.103.0.bazel | 1 + .../BUILD.chalk-ir-0.104.0.bazel | 1 + .../BUILD.chalk-recursive-0.103.0.bazel | 1 + .../BUILD.chalk-solve-0.103.0.bazel | 1 + .../BUILD.chrono-0.4.42.bazel | 4 + .../BUILD.clap-4.5.48.bazel | 1 + .../BUILD.clap_builder-4.5.48.bazel | 1 + .../BUILD.clap_derive-4.5.47.bazel | 1 + .../BUILD.clap_lex-0.7.5.bazel | 1 + .../BUILD.colorchoice-1.0.4.bazel | 1 + .../BUILD.core-foundation-sys-0.8.7.bazel | 1 + .../BUILD.countme-3.0.1.bazel | 1 + .../BUILD.cov-mark-2.1.0.bazel | 1 + .../BUILD.crc32fast-1.5.0.bazel | 1 + .../BUILD.crossbeam-channel-0.5.15.bazel | 1 + .../BUILD.crossbeam-deque-0.8.6.bazel | 1 + .../BUILD.crossbeam-epoch-0.9.18.bazel | 1 + .../BUILD.crossbeam-queue-0.3.12.bazel | 1 + .../BUILD.crossbeam-utils-0.8.21.bazel | 1 + .../BUILD.darling-0.21.3.bazel | 1 + .../BUILD.darling_core-0.21.3.bazel | 1 + .../BUILD.darling_macro-0.21.3.bazel | 1 + .../BUILD.dashmap-6.1.0.bazel | 1 + .../BUILD.deranged-0.5.3.bazel | 1 + .../BUILD.displaydoc-0.2.5.bazel | 1 + .../BUILD.drop_bomb-0.1.5.bazel | 1 + .../BUILD.dunce-1.0.5.bazel | 1 + .../BUILD.dyn-clone-1.0.20.bazel | 1 + .../BUILD.either-1.15.0.bazel | 1 + .../BUILD.ena-0.14.3.bazel | 1 + .../BUILD.encoding-0.2.33.bazel | 1 + ...encoding-index-japanese-1.20141219.5.bazel | 1 + ...D.encoding-index-korean-1.20141219.5.bazel | 1 + ...oding-index-simpchinese-1.20141219.5.bazel | 1 + ...coding-index-singlebyte-1.20141219.5.bazel | 1 + ...oding-index-tradchinese-1.20141219.5.bazel | 1 + .../BUILD.encoding_index_tests-0.1.4.bazel | 1 + .../BUILD.equivalent-1.0.2.bazel | 1 + .../BUILD.erased-serde-0.4.6.bazel | 1 + .../BUILD.figment-0.10.19.bazel | 4 + .../BUILD.find-msvc-tools-0.1.1.bazel | 1 + .../BUILD.fixedbitset-0.4.2.bazel | 1 + .../BUILD.flate2-1.1.2.bazel | 1 + .../BUILD.fnv-1.0.7.bazel | 1 + .../BUILD.foldhash-0.1.5.bazel | 1 + .../BUILD.form_urlencoded-1.2.2.bazel | 1 + .../BUILD.fs-err-2.11.0.bazel | 1 + .../BUILD.fsevent-sys-4.1.0.bazel | 1 + .../BUILD.fst-0.4.7.bazel | 1 + .../BUILD.getrandom-0.3.3.bazel | 4 + .../BUILD.glob-0.3.3.bazel | 1 + .../BUILD.globset-0.4.16.bazel | 1 + .../BUILD.hashbrown-0.12.3.bazel | 1 + .../BUILD.hashbrown-0.14.5.bazel | 1 + .../BUILD.hashbrown-0.15.5.bazel | 1 + .../BUILD.hashlink-0.10.0.bazel | 1 + .../BUILD.heck-0.5.0.bazel | 1 + .../BUILD.hermit-abi-0.5.2.bazel | 1 + .../BUILD.hex-0.4.3.bazel | 1 + .../BUILD.home-0.5.11.bazel | 1 + .../BUILD.iana-time-zone-0.1.63.bazel | 1 + .../BUILD.iana-time-zone-haiku-0.1.2.bazel | 1 + .../BUILD.icu_collections-2.0.0.bazel | 1 + .../BUILD.icu_locale_core-2.0.0.bazel | 1 + .../BUILD.icu_normalizer-2.0.0.bazel | 1 + .../BUILD.icu_normalizer_data-2.0.0.bazel | 1 + .../BUILD.icu_properties-2.0.1.bazel | 1 + .../BUILD.icu_properties_data-2.0.1.bazel | 1 + .../BUILD.icu_provider-2.0.0.bazel | 1 + .../BUILD.ident_case-1.0.1.bazel | 1 + .../BUILD.idna-1.1.0.bazel | 1 + .../BUILD.idna_adapter-1.2.1.bazel | 1 + .../BUILD.indexmap-1.9.3.bazel | 1 + .../BUILD.indexmap-2.11.4.bazel | 1 + .../BUILD.inlinable_string-0.1.15.bazel | 1 + .../BUILD.inotify-0.11.0.bazel | 1 + .../BUILD.inotify-sys-0.1.5.bazel | 1 + .../BUILD.intrusive-collections-0.9.7.bazel | 1 + .../BUILD.is_terminal_polyfill-1.70.1.bazel | 1 + .../BUILD.itertools-0.12.1.bazel | 1 + .../BUILD.itertools-0.14.0.bazel | 1 + .../BUILD.itoa-1.0.15.bazel | 1 + .../BUILD.jobserver-0.1.34.bazel | 4 + .../BUILD.jod-thread-1.0.0.bazel | 1 + .../BUILD.js-sys-0.3.78.bazel | 1 + .../BUILD.kqueue-1.1.1.bazel | 1 + .../BUILD.kqueue-sys-1.0.4.bazel | 1 + .../BUILD.la-arena-0.3.1.bazel | 1 + .../BUILD.lazy_static-1.5.0.bazel | 1 + .../BUILD.libc-0.2.175.bazel | 1 + .../BUILD.line-index-0.1.2.bazel | 1 + .../BUILD.litemap-0.8.0.bazel | 1 + .../BUILD.lock_api-0.4.13.bazel | 1 + .../BUILD.log-0.3.9.bazel | 1 + .../BUILD.log-0.4.28.bazel | 1 + .../BUILD.matchers-0.2.0.bazel | 1 + .../BUILD.memchr-2.7.5.bazel | 1 + .../BUILD.memoffset-0.9.1.bazel | 1 + .../BUILD.miniz_oxide-0.8.9.bazel | 1 + .../BUILD.mio-1.0.4.bazel | 4 + .../BUILD.miow-0.6.1.bazel | 1 + .../BUILD.mustache-0.9.0.bazel | 1 + .../BUILD.nohash-hasher-0.2.0.bazel | 1 + .../BUILD.notify-8.2.0.bazel | 5 + .../BUILD.notify-types-2.0.0.bazel | 1 + .../BUILD.nu-ansi-term-0.50.1.bazel | 1 + .../BUILD.num-conv-0.1.0.bazel | 1 + .../BUILD.num-traits-0.2.19.bazel | 1 + .../BUILD.num_cpus-1.17.0.bazel | 4 + .../BUILD.once_cell-1.21.3.bazel | 1 + .../BUILD.once_cell_polyfill-1.70.1.bazel | 1 + .../BUILD.oorandom-11.1.5.bazel | 1 + .../BUILD.ordered-float-2.10.1.bazel | 1 + .../BUILD.os_str_bytes-7.1.1.bazel | 1 + .../BUILD.papaya-0.2.3.bazel | 1 + .../BUILD.parking_lot-0.12.4.bazel | 1 + .../BUILD.parking_lot_core-0.9.11.bazel | 4 + .../BUILD.pear-0.2.9.bazel | 1 + .../BUILD.pear_codegen-0.2.9.bazel | 1 + .../BUILD.percent-encoding-2.3.2.bazel | 1 + .../BUILD.perf-event-0.4.7.bazel | 1 + .../BUILD.perf-event-open-sys-1.0.1.bazel | 1 + .../BUILD.petgraph-0.6.5.bazel | 1 + .../BUILD.pin-project-lite-0.2.16.bazel | 1 + .../BUILD.pkg-config-0.3.32.bazel | 1 + .../BUILD.portable-atomic-1.11.1.bazel | 1 + .../BUILD.potential_utf-0.1.3.bazel | 1 + .../BUILD.powerfmt-0.2.0.bazel | 1 + .../BUILD.ppv-lite86-0.2.21.bazel | 1 + .../BUILD.proc-macro2-1.0.101.bazel | 1 + ...BUILD.proc-macro2-diagnostics-0.10.1.bazel | 1 + .../BUILD.quote-1.0.41.bazel | 1 + .../BUILD.r-efi-5.3.0.bazel | 1 + .../BUILD.ra-ap-rustc_abi-0.123.0.bazel | 1 + .../BUILD.ra-ap-rustc_hashes-0.123.0.bazel | 1 + .../BUILD.ra-ap-rustc_index-0.123.0.bazel | 1 + ...ILD.ra-ap-rustc_index_macros-0.123.0.bazel | 1 + .../BUILD.ra-ap-rustc_lexer-0.121.0.bazel | 1 + .../BUILD.ra-ap-rustc_lexer-0.123.0.bazel | 1 + ...ILD.ra-ap-rustc_parse_format-0.121.0.bazel | 1 + ...ra-ap-rustc_pattern_analysis-0.123.0.bazel | 1 + .../BUILD.ra_ap_base_db-0.0.301.bazel | 1 + .../BUILD.ra_ap_cfg-0.0.301.bazel | 1 + .../BUILD.ra_ap_edition-0.0.301.bazel | 1 + .../BUILD.ra_ap_hir-0.0.301.bazel | 1 + .../BUILD.ra_ap_hir_def-0.0.301.bazel | 1 + .../BUILD.ra_ap_hir_expand-0.0.301.bazel | 1 + .../BUILD.ra_ap_hir_ty-0.0.301.bazel | 1 + .../BUILD.ra_ap_ide_db-0.0.301.bazel | 1 + .../BUILD.ra_ap_intern-0.0.301.bazel | 1 + .../BUILD.ra_ap_load-cargo-0.0.301.bazel | 1 + .../BUILD.ra_ap_mbe-0.0.301.bazel | 1 + .../BUILD.ra_ap_parser-0.0.301.bazel | 1 + .../BUILD.ra_ap_paths-0.0.301.bazel | 1 + .../BUILD.ra_ap_proc_macro_api-0.0.301.bazel | 1 + .../BUILD.ra_ap_profile-0.0.301.bazel | 4 + .../BUILD.ra_ap_project_model-0.0.301.bazel | 1 + ...UILD.ra_ap_query-group-macro-0.0.301.bazel | 1 + .../BUILD.ra_ap_span-0.0.301.bazel | 1 + .../BUILD.ra_ap_stdx-0.0.301.bazel | 4 + .../BUILD.ra_ap_syntax-0.0.301.bazel | 1 + .../BUILD.ra_ap_syntax-bridge-0.0.301.bazel | 1 + .../BUILD.ra_ap_toolchain-0.0.301.bazel | 1 + .../BUILD.ra_ap_tt-0.0.301.bazel | 1 + .../BUILD.ra_ap_vfs-0.0.301.bazel | 1 + .../BUILD.ra_ap_vfs-notify-0.0.301.bazel | 1 + .../BUILD.rand-0.9.2.bazel | 1 + .../BUILD.rand_chacha-0.9.0.bazel | 1 + .../BUILD.rand_core-0.9.3.bazel | 1 + .../BUILD.rayon-1.11.0.bazel | 1 + .../BUILD.rayon-core-1.13.0.bazel | 1 + .../BUILD.redox_syscall-0.5.17.bazel | 1 + .../BUILD.ref-cast-1.0.24.bazel | 1 + .../BUILD.ref-cast-impl-1.0.24.bazel | 1 + .../BUILD.regex-1.11.3.bazel | 1 + .../BUILD.regex-automata-0.4.11.bazel | 1 + .../BUILD.regex-syntax-0.8.6.bazel | 1 + .../BUILD.rowan-0.15.15.bazel | 1 + .../BUILD.rustc-hash-1.1.0.bazel | 1 + .../BUILD.rustc-hash-2.1.1.bazel | 1 + .../BUILD.rustc-literal-escaper-0.0.4.bazel | 1 + .../BUILD.rustc-stable-hash-0.1.2.bazel | 1 + ...ustc_apfloat-0.2.3+llvm-462a31f5a5ab.bazel | 1 + .../BUILD.rustversion-1.0.22.bazel | 1 + .../BUILD.ryu-1.0.20.bazel | 1 + .../BUILD.salsa-0.23.0.bazel | 1 + .../BUILD.salsa-macro-rules-0.23.0.bazel | 1 + .../BUILD.salsa-macros-0.23.0.bazel | 1 + .../BUILD.same-file-1.0.6.bazel | 1 + .../BUILD.schemars-0.9.0.bazel | 1 + .../BUILD.schemars-1.0.4.bazel | 1 + .../BUILD.scoped-tls-1.0.1.bazel | 1 + .../BUILD.scopeguard-1.2.0.bazel | 1 + .../BUILD.seize-0.5.0.bazel | 1 + .../BUILD.semver-1.0.26.bazel | 1 + .../BUILD.serde-1.0.228.bazel | 1 + .../BUILD.serde-untagged-0.1.8.bazel | 1 + .../BUILD.serde-value-0.7.0.bazel | 1 + .../BUILD.serde_core-1.0.228.bazel | 1 + .../BUILD.serde_derive-1.0.228.bazel | 1 + .../BUILD.serde_json-1.0.145.bazel | 1 + .../BUILD.serde_spanned-0.6.9.bazel | 1 + .../BUILD.serde_spanned-1.0.2.bazel | 1 + .../BUILD.serde_with-3.14.1.bazel | 1 + .../BUILD.serde_with_macros-3.14.1.bazel | 1 + .../BUILD.serde_yaml-0.9.34+deprecated.bazel | 1 + .../BUILD.sharded-slab-0.1.7.bazel | 1 + .../BUILD.shlex-1.3.0.bazel | 1 + .../BUILD.smallvec-1.15.1.bazel | 1 + .../BUILD.smol_str-0.3.2.bazel | 1 + .../BUILD.stable_deref_trait-1.2.0.bazel | 1 + .../BUILD.streaming-iterator-0.1.9.bazel | 1 + .../BUILD.strsim-0.11.1.bazel | 1 + .../BUILD.syn-2.0.106.bazel | 1 + .../BUILD.synstructure-0.13.2.bazel | 1 + .../BUILD.temp-dir-0.1.16.bazel | 1 + .../BUILD.text-size-1.1.1.bazel | 1 + .../BUILD.thin-vec-0.2.14.bazel | 1 + .../BUILD.thiserror-2.0.16.bazel | 1 + .../BUILD.thiserror-impl-2.0.16.bazel | 1 + .../BUILD.thread_local-1.1.9.bazel | 1 + .../BUILD.time-0.3.43.bazel | 1 + .../BUILD.time-core-0.1.6.bazel | 1 + .../BUILD.time-macros-0.2.24.bazel | 1 + .../BUILD.tinystr-0.8.1.bazel | 1 + .../BUILD.toml-0.8.23.bazel | 1 + .../BUILD.toml-0.9.7.bazel | 1 + .../BUILD.toml_datetime-0.6.11.bazel | 1 + .../BUILD.toml_datetime-0.7.2.bazel | 1 + .../BUILD.toml_edit-0.22.27.bazel | 1 + .../BUILD.toml_parser-1.0.3.bazel | 1 + .../BUILD.toml_write-0.1.2.bazel | 1 + .../BUILD.toml_writer-1.0.3.bazel | 1 + .../BUILD.tracing-0.1.41.bazel | 1 + .../BUILD.tracing-attributes-0.1.30.bazel | 1 + .../BUILD.tracing-core-0.1.34.bazel | 1 + .../BUILD.tracing-flame-0.2.0.bazel | 1 + .../BUILD.tracing-log-0.2.0.bazel | 1 + .../BUILD.tracing-subscriber-0.3.20.bazel | 1 + .../BUILD.tree-sitter-0.25.9.bazel | 1 + ...tree-sitter-embedded-template-0.25.0.bazel | 1 + .../BUILD.tree-sitter-json-0.24.8.bazel | 1 + .../BUILD.tree-sitter-language-0.1.5.bazel | 1 + .../BUILD.tree-sitter-ql-0.23.1.bazel | 1 + .../BUILD.tree-sitter-ruby-0.23.1.bazel | 1 + .../BUILD.triomphe-0.1.14.bazel | 1 + .../BUILD.typed-arena-2.0.2.bazel | 1 + .../BUILD.typeid-1.0.3.bazel | 1 + .../BUILD.uncased-0.9.10.bazel | 1 + .../BUILD.ungrammar-1.16.1.bazel | 1 + .../BUILD.unicode-ident-1.0.19.bazel | 1 + .../BUILD.unicode-properties-0.1.3.bazel | 1 + .../BUILD.unicode-xid-0.2.6.bazel | 1 + .../BUILD.unsafe-libyaml-0.2.11.bazel | 1 + .../BUILD.url-2.5.7.bazel | 1 + .../BUILD.utf8_iter-1.0.4.bazel | 1 + .../BUILD.utf8parse-0.2.2.bazel | 1 + .../BUILD.valuable-0.1.1.bazel | 1 + .../BUILD.version_check-0.9.5.bazel | 1 + .../BUILD.walkdir-2.5.0.bazel | 1 + ...D.wasi-0.11.1+wasi-snapshot-preview1.bazel | 1 + .../BUILD.wasi-0.14.5+wasi-0.2.4.bazel | 1 + .../BUILD.wasip2-1.0.0+wasi-0.2.4.bazel | 1 + .../BUILD.wasm-bindgen-0.2.101.bazel | 1 + .../BUILD.wasm-bindgen-backend-0.2.101.bazel | 1 + .../BUILD.wasm-bindgen-macro-0.2.101.bazel | 1 + ...D.wasm-bindgen-macro-support-0.2.101.bazel | 1 + .../BUILD.wasm-bindgen-shared-0.2.101.bazel | 1 + .../BUILD.winapi-util-0.1.11.bazel | 1 + .../BUILD.windows-core-0.61.2.bazel | 1 + .../BUILD.windows-implement-0.60.0.bazel | 1 + .../BUILD.windows-interface-0.59.1.bazel | 1 + .../BUILD.windows-link-0.1.3.bazel | 1 + .../BUILD.windows-link-0.2.0.bazel | 1 + .../BUILD.windows-result-0.3.4.bazel | 1 + .../BUILD.windows-strings-0.4.2.bazel | 1 + .../BUILD.windows-sys-0.52.0.bazel | 1 + .../BUILD.windows-sys-0.59.0.bazel | 1 + .../BUILD.windows-sys-0.60.2.bazel | 1 + .../BUILD.windows-sys-0.61.0.bazel | 1 + .../BUILD.windows-targets-0.52.6.bazel | 1 + .../BUILD.windows-targets-0.53.3.bazel | 1 + ...BUILD.windows_aarch64_gnullvm-0.52.6.bazel | 1 + ...BUILD.windows_aarch64_gnullvm-0.53.0.bazel | 1 + .../BUILD.windows_aarch64_msvc-0.52.6.bazel | 1 + .../BUILD.windows_aarch64_msvc-0.53.0.bazel | 1 + .../BUILD.windows_i686_gnu-0.52.6.bazel | 1 + .../BUILD.windows_i686_gnu-0.53.0.bazel | 1 + .../BUILD.windows_i686_gnullvm-0.52.6.bazel | 1 + .../BUILD.windows_i686_gnullvm-0.53.0.bazel | 1 + .../BUILD.windows_i686_msvc-0.52.6.bazel | 1 + .../BUILD.windows_i686_msvc-0.53.0.bazel | 1 + .../BUILD.windows_x86_64_gnu-0.52.6.bazel | 1 + .../BUILD.windows_x86_64_gnu-0.53.0.bazel | 1 + .../BUILD.windows_x86_64_gnullvm-0.52.6.bazel | 1 + .../BUILD.windows_x86_64_gnullvm-0.53.0.bazel | 1 + .../BUILD.windows_x86_64_msvc-0.52.6.bazel | 1 + .../BUILD.windows_x86_64_msvc-0.53.0.bazel | 1 + .../BUILD.winnow-0.7.13.bazel | 1 + .../BUILD.wit-bindgen-0.45.1.bazel | 1 + .../BUILD.writeable-0.6.1.bazel | 1 + .../BUILD.yansi-1.0.1.bazel | 1 + .../BUILD.yoke-0.8.0.bazel | 1 + .../BUILD.yoke-derive-0.8.0.bazel | 1 + .../BUILD.zerocopy-0.8.27.bazel | 1 + .../BUILD.zerocopy-derive-0.8.27.bazel | 1 + .../BUILD.zerofrom-0.1.6.bazel | 1 + .../BUILD.zerofrom-derive-0.1.6.bazel | 1 + .../BUILD.zerotrie-0.2.2.bazel | 1 + .../BUILD.zerovec-0.11.4.bazel | 1 + .../BUILD.zerovec-derive-0.11.1.bazel | 1 + .../BUILD.zstd-0.13.3.bazel | 1 + .../BUILD.zstd-safe-7.2.4.bazel | 1 + .../BUILD.zstd-sys-2.0.16+zstd.1.5.7.bazel | 1 + .../tree_sitter_extractors_deps/defs.bzl | 15 +- .../rules_rust/0.68.1.codeql.1/MODULE.bazel | 151 ------------------ .../patches/include_rmeta_in_stdlib.patch | 12 -- .../rules_rust/0.68.1.codeql.1/source.json | 9 -- .../registry/modules/rules_rust/metadata.json | 11 -- 400 files changed, 435 insertions(+), 192 deletions(-) delete mode 100644 misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/MODULE.bazel delete mode 100644 misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/patches/include_rmeta_in_stdlib.patch delete mode 100644 misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/source.json delete mode 100644 misc/bazel/registry/modules/rules_rust/metadata.json diff --git a/MODULE.bazel b/MODULE.bazel index 5de9dd24c9d..2e41eb66105 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -30,7 +30,7 @@ bazel_dep(name = "rules_kotlin", version = "2.2.2-codeql.1") bazel_dep(name = "gazelle", version = "0.47.0") 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.68.1.codeql.1") +bazel_dep(name = "rules_rust", version = "0.69.0") bazel_dep(name = "zstd", version = "1.5.7.bcr.1") bazel_dep(name = "buildifier_prebuilt", version = "6.4.0", dev_dependency = True) diff --git a/misc/bazel/3rdparty/py_deps/BUILD.aho-corasick-1.1.3.bazel b/misc/bazel/3rdparty/py_deps/BUILD.aho-corasick-1.1.3.bazel index e8bbd96a1c5..19fb311dc77 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.aho-corasick-1.1.3.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.aho-corasick-1.1.3.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.anstream-0.6.18.bazel b/misc/bazel/3rdparty/py_deps/BUILD.anstream-0.6.18.bazel index dba6f5a5313..c447208da1e 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.anstream-0.6.18.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.anstream-0.6.18.bazel @@ -66,6 +66,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.anstyle-1.0.10.bazel b/misc/bazel/3rdparty/py_deps/BUILD.anstyle-1.0.10.bazel index a6c3752b60f..5646802d7c8 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.anstyle-1.0.10.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.anstyle-1.0.10.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.anstyle-parse-0.2.6.bazel b/misc/bazel/3rdparty/py_deps/BUILD.anstyle-parse-0.2.6.bazel index 5f8c366ff87..a3db2f4cf0e 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.anstyle-parse-0.2.6.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.anstyle-parse-0.2.6.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.anstyle-query-1.1.2.bazel b/misc/bazel/3rdparty/py_deps/BUILD.anstyle-query-1.1.2.bazel index 598ea5da3af..974053fa210 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.anstyle-query-1.1.2.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.anstyle-query-1.1.2.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.anstyle-wincon-3.0.7.bazel b/misc/bazel/3rdparty/py_deps/BUILD.anstyle-wincon-3.0.7.bazel index ce4d5dc8abd..4e55fe14335 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.anstyle-wincon-3.0.7.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.anstyle-wincon-3.0.7.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.anyhow-1.0.95.bazel b/misc/bazel/3rdparty/py_deps/BUILD.anyhow-1.0.95.bazel index 34ea952cd26..c2bbc00cde7 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.anyhow-1.0.95.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.anyhow-1.0.95.bazel @@ -69,6 +69,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.cc-1.2.14.bazel b/misc/bazel/3rdparty/py_deps/BUILD.cc-1.2.14.bazel index e3f89bafb19..eb579ddb2fe 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.cc-1.2.14.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.cc-1.2.14.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.clap-4.5.30.bazel b/misc/bazel/3rdparty/py_deps/BUILD.clap-4.5.30.bazel index 7ddd490dffc..7846c81d4b7 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.clap-4.5.30.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.clap-4.5.30.bazel @@ -70,6 +70,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.clap_builder-4.5.30.bazel b/misc/bazel/3rdparty/py_deps/BUILD.clap_builder-4.5.30.bazel index c44b8554ad4..9e32f334ec2 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.clap_builder-4.5.30.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.clap_builder-4.5.30.bazel @@ -69,6 +69,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.clap_lex-0.7.4.bazel b/misc/bazel/3rdparty/py_deps/BUILD.clap_lex-0.7.4.bazel index 231ff9c856e..7e672468ebb 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.clap_lex-0.7.4.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.clap_lex-0.7.4.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.colorchoice-1.0.3.bazel b/misc/bazel/3rdparty/py_deps/BUILD.colorchoice-1.0.3.bazel index 94d46209718..f9a26a33bf3 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.colorchoice-1.0.3.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.colorchoice-1.0.3.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.is_terminal_polyfill-1.70.1.bazel b/misc/bazel/3rdparty/py_deps/BUILD.is_terminal_polyfill-1.70.1.bazel index 6528f5edc54..acd21224d11 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.is_terminal_polyfill-1.70.1.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.is_terminal_polyfill-1.70.1.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.itoa-1.0.14.bazel b/misc/bazel/3rdparty/py_deps/BUILD.itoa-1.0.14.bazel index b9b1384da8d..1121f1c6fa8 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.itoa-1.0.14.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.itoa-1.0.14.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.log-0.4.25.bazel b/misc/bazel/3rdparty/py_deps/BUILD.log-0.4.25.bazel index 5d8cb464baf..a6e892fc3e2 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.log-0.4.25.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.log-0.4.25.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.memchr-2.7.4.bazel b/misc/bazel/3rdparty/py_deps/BUILD.memchr-2.7.4.bazel index 290610f2234..92c05c11576 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.memchr-2.7.4.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.memchr-2.7.4.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.once_cell-1.20.3.bazel b/misc/bazel/3rdparty/py_deps/BUILD.once_cell-1.20.3.bazel index ad2cdfd44f6..d9b023658c4 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.once_cell-1.20.3.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.once_cell-1.20.3.bazel @@ -67,6 +67,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.proc-macro2-1.0.93.bazel b/misc/bazel/3rdparty/py_deps/BUILD.proc-macro2-1.0.93.bazel index 0dc7bb180d1..de386a5fb13 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.proc-macro2-1.0.93.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.proc-macro2-1.0.93.bazel @@ -69,6 +69,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.quote-1.0.38.bazel b/misc/bazel/3rdparty/py_deps/BUILD.quote-1.0.38.bazel index f14687523f0..fd1be054161 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.quote-1.0.38.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.quote-1.0.38.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.regex-1.11.1.bazel b/misc/bazel/3rdparty/py_deps/BUILD.regex-1.11.1.bazel index a450cf23e5b..4363055577d 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.regex-1.11.1.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.regex-1.11.1.bazel @@ -80,6 +80,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.regex-automata-0.4.9.bazel b/misc/bazel/3rdparty/py_deps/BUILD.regex-automata-0.4.9.bazel index 95353401fa8..ed2546bbd8a 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.regex-automata-0.4.9.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.regex-automata-0.4.9.bazel @@ -85,6 +85,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.regex-syntax-0.8.5.bazel b/misc/bazel/3rdparty/py_deps/BUILD.regex-syntax-0.8.5.bazel index be5fade3f8b..59c59087303 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.regex-syntax-0.8.5.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.regex-syntax-0.8.5.bazel @@ -73,6 +73,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.ryu-1.0.19.bazel b/misc/bazel/3rdparty/py_deps/BUILD.ryu-1.0.19.bazel index 7f8fb872113..275c416bec6 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.ryu-1.0.19.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.ryu-1.0.19.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.serde-1.0.217.bazel b/misc/bazel/3rdparty/py_deps/BUILD.serde-1.0.217.bazel index c2f3f0b2f1e..04b9339ef8e 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.serde-1.0.217.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.serde-1.0.217.bazel @@ -69,6 +69,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.serde_derive-1.0.217.bazel b/misc/bazel/3rdparty/py_deps/BUILD.serde_derive-1.0.217.bazel index 49ca3826b70..3836976f89e 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.serde_derive-1.0.217.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.serde_derive-1.0.217.bazel @@ -61,6 +61,7 @@ rust_proc_macro( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.serde_json-1.0.138.bazel b/misc/bazel/3rdparty/py_deps/BUILD.serde_json-1.0.138.bazel index 6f981174de7..c36081cf133 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.serde_json-1.0.138.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.serde_json-1.0.138.bazel @@ -69,6 +69,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.shlex-1.3.0.bazel b/misc/bazel/3rdparty/py_deps/BUILD.shlex-1.3.0.bazel index 3a7b5dd13f3..8de318e16ce 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.shlex-1.3.0.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.shlex-1.3.0.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.smallvec-1.14.0.bazel b/misc/bazel/3rdparty/py_deps/BUILD.smallvec-1.14.0.bazel index 5ef3609e865..afc560f32d2 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.smallvec-1.14.0.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.smallvec-1.14.0.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.streaming-iterator-0.1.9.bazel b/misc/bazel/3rdparty/py_deps/BUILD.streaming-iterator-0.1.9.bazel index c693289d0d5..1fb4f82d40b 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.streaming-iterator-0.1.9.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.streaming-iterator-0.1.9.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.strsim-0.11.1.bazel b/misc/bazel/3rdparty/py_deps/BUILD.strsim-0.11.1.bazel index 89f35680ecd..a350fe401c6 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.strsim-0.11.1.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.strsim-0.11.1.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.syn-2.0.98.bazel b/misc/bazel/3rdparty/py_deps/BUILD.syn-2.0.98.bazel index 74c276c55b2..756de2c409a 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.syn-2.0.98.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.syn-2.0.98.bazel @@ -69,6 +69,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.thiserror-1.0.69.bazel b/misc/bazel/3rdparty/py_deps/BUILD.thiserror-1.0.69.bazel index c085df67e5c..4c5de787505 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.thiserror-1.0.69.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.thiserror-1.0.69.bazel @@ -68,6 +68,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.thiserror-impl-1.0.69.bazel b/misc/bazel/3rdparty/py_deps/BUILD.thiserror-impl-1.0.69.bazel index f2dc22a0d19..f2b15bc166f 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.thiserror-impl-1.0.69.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.thiserror-impl-1.0.69.bazel @@ -61,6 +61,7 @@ rust_proc_macro( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-0.24.7.bazel b/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-0.24.7.bazel index a37116c26fb..475770bc957 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-0.24.7.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-0.24.7.bazel @@ -69,6 +69,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-graph-0.12.0.bazel b/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-graph-0.12.0.bazel index 3917bb3d165..3a5a51895a6 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-graph-0.12.0.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-graph-0.12.0.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-language-0.1.5.bazel b/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-language-0.1.5.bazel index de6215593a4..e35100f228a 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-language-0.1.5.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.tree-sitter-language-0.1.5.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.unicode-ident-1.0.16.bazel b/misc/bazel/3rdparty/py_deps/BUILD.unicode-ident-1.0.16.bazel index cf6899aafa0..9754167cc21 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.unicode-ident-1.0.16.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.unicode-ident-1.0.16.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.utf8parse-0.2.2.bazel b/misc/bazel/3rdparty/py_deps/BUILD.utf8parse-0.2.2.bazel index caf972ae7c8..813c2349a87 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.utf8parse-0.2.2.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.utf8parse-0.2.2.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.windows-sys-0.59.0.bazel b/misc/bazel/3rdparty/py_deps/BUILD.windows-sys-0.59.0.bazel index aba90d60cc2..1c3cf791f0f 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.windows-sys-0.59.0.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.windows-sys-0.59.0.bazel @@ -68,6 +68,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.windows-targets-0.52.6.bazel b/misc/bazel/3rdparty/py_deps/BUILD.windows-targets-0.52.6.bazel index 469d31b2fec..eab2d920044 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.windows-targets-0.52.6.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.windows-targets-0.52.6.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.windows_aarch64_gnullvm-0.52.6.bazel b/misc/bazel/3rdparty/py_deps/BUILD.windows_aarch64_gnullvm-0.52.6.bazel index f4b8a614e6f..413560f9a9a 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.windows_aarch64_gnullvm-0.52.6.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.windows_aarch64_gnullvm-0.52.6.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.windows_aarch64_msvc-0.52.6.bazel b/misc/bazel/3rdparty/py_deps/BUILD.windows_aarch64_msvc-0.52.6.bazel index 82e1c57e2ab..41270f37827 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.windows_aarch64_msvc-0.52.6.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.windows_aarch64_msvc-0.52.6.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.windows_i686_gnu-0.52.6.bazel b/misc/bazel/3rdparty/py_deps/BUILD.windows_i686_gnu-0.52.6.bazel index b0904b98ca8..635e04fb829 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.windows_i686_gnu-0.52.6.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.windows_i686_gnu-0.52.6.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.windows_i686_gnullvm-0.52.6.bazel b/misc/bazel/3rdparty/py_deps/BUILD.windows_i686_gnullvm-0.52.6.bazel index 78e37e28693..aa701fa5f9e 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.windows_i686_gnullvm-0.52.6.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.windows_i686_gnullvm-0.52.6.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.windows_i686_msvc-0.52.6.bazel b/misc/bazel/3rdparty/py_deps/BUILD.windows_i686_msvc-0.52.6.bazel index 6406d8c7c69..51a7afa148f 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.windows_i686_msvc-0.52.6.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.windows_i686_msvc-0.52.6.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.windows_x86_64_gnu-0.52.6.bazel b/misc/bazel/3rdparty/py_deps/BUILD.windows_x86_64_gnu-0.52.6.bazel index e5e5950f643..95bb840fe66 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.windows_x86_64_gnu-0.52.6.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.windows_x86_64_gnu-0.52.6.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.windows_x86_64_gnullvm-0.52.6.bazel b/misc/bazel/3rdparty/py_deps/BUILD.windows_x86_64_gnullvm-0.52.6.bazel index 9107aa2b364..e7cc05336f3 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.windows_x86_64_gnullvm-0.52.6.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.windows_x86_64_gnullvm-0.52.6.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/BUILD.windows_x86_64_msvc-0.52.6.bazel b/misc/bazel/3rdparty/py_deps/BUILD.windows_x86_64_msvc-0.52.6.bazel index 326deb21750..dd7abf4671c 100644 --- a/misc/bazel/3rdparty/py_deps/BUILD.windows_x86_64_msvc-0.52.6.bazel +++ b/misc/bazel/3rdparty/py_deps/BUILD.windows_x86_64_msvc-0.52.6.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/py_deps/defs.bzl b/misc/bazel/3rdparty/py_deps/defs.bzl index 90b5a7b640c..70e6051ac93 100644 --- a/misc/bazel/3rdparty/py_deps/defs.bzl +++ b/misc/bazel/3rdparty/py_deps/defs.bzl @@ -154,7 +154,7 @@ def all_crate_deps( normal (bool, optional): If True, normal dependencies are included in the output list. normal_dev (bool, optional): If True, normal dev dependencies will be - included in the output list.. + included in the output list. proc_macro (bool, optional): If True, proc_macro dependencies are included in the output list. proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are @@ -408,6 +408,7 @@ _CONDITIONS = { "aarch64-unknown-nto-qnx710": ["@rules_rust//rust/platform:aarch64-unknown-nto-qnx710"], "aarch64-unknown-uefi": ["@rules_rust//rust/platform:aarch64-unknown-uefi"], "arm-unknown-linux-gnueabi": ["@rules_rust//rust/platform:arm-unknown-linux-gnueabi"], + "arm-unknown-linux-musleabi": ["@rules_rust//rust/platform:arm-unknown-linux-musleabi"], "armv7-linux-androideabi": ["@rules_rust//rust/platform:armv7-linux-androideabi"], "armv7-unknown-linux-gnueabi": ["@rules_rust//rust/platform:armv7-unknown-linux-gnueabi"], "cfg(all(any(target_arch = \"x86_64\", target_arch = \"arm64ec\"), target_env = \"msvc\", not(windows_raw_dylib)))": ["@rules_rust//rust/platform:x86_64-pc-windows-msvc"], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.adler2-2.0.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.adler2-2.0.1.bazel index 15d108fcbec..2a2e575fd12 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.adler2-2.0.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.adler2-2.0.1.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.aho-corasick-1.1.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.aho-corasick-1.1.3.bazel index d47c7298b75..29ac012c763 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.aho-corasick-1.1.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.aho-corasick-1.1.3.bazel @@ -66,6 +66,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.allocator-api2-0.2.21.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.allocator-api2-0.2.21.bazel index b1ca8b4a42d..4fe1a5ae3db 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.allocator-api2-0.2.21.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.allocator-api2-0.2.21.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.android_system_properties-0.1.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.android_system_properties-0.1.5.bazel index a133ae2799b..165cf9da2fd 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.android_system_properties-0.1.5.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.android_system_properties-0.1.5.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstream-0.6.20.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstream-0.6.20.bazel index ebd0e844157..bd6489b11e3 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstream-0.6.20.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstream-0.6.20.bazel @@ -66,6 +66,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstyle-1.0.11.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstyle-1.0.11.bazel index bf8779d93c9..1739823d66f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstyle-1.0.11.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstyle-1.0.11.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstyle-parse-0.2.7.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstyle-parse-0.2.7.bazel index 4a81b5ca7fa..d2c9594f554 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstyle-parse-0.2.7.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstyle-parse-0.2.7.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstyle-query-1.1.4.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstyle-query-1.1.4.bazel index 2004f465f53..fe3361ea411 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstyle-query-1.1.4.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstyle-query-1.1.4.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstyle-wincon-3.0.10.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstyle-wincon-3.0.10.bazel index cc610fb0aa9..822d2d90ec4 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstyle-wincon-3.0.10.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anstyle-wincon-3.0.10.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anyhow-1.0.100.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anyhow-1.0.100.bazel index 5d8502998aa..48f6fcce142 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anyhow-1.0.100.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anyhow-1.0.100.bazel @@ -69,6 +69,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.argfile-0.2.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.argfile-0.2.1.bazel index 32b9ff0d9c7..4a1e9ba7915 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.argfile-0.2.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.argfile-0.2.1.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.arrayvec-0.7.6.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.arrayvec-0.7.6.bazel index b9e36249cf7..4f70598af85 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.arrayvec-0.7.6.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.arrayvec-0.7.6.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.atomic-0.6.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.atomic-0.6.1.bazel index b0be5564bb5..dfa4a0f21eb 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.atomic-0.6.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.atomic-0.6.1.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.autocfg-1.5.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.autocfg-1.5.0.bazel index 2be65fdc967..8eb4be76a1b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.autocfg-1.5.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.autocfg-1.5.0.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.base64-0.22.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.base64-0.22.1.bazel index 17d891f3c2c..089c4eb1ba8 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.base64-0.22.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.base64-0.22.1.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bitflags-1.3.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bitflags-1.3.2.bazel index b9b25068599..3c554f70f16 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bitflags-1.3.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bitflags-1.3.2.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bitflags-2.9.4.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bitflags-2.9.4.bazel index 1bfb8cf8e15..1e9bde485ea 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bitflags-2.9.4.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bitflags-2.9.4.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.borsh-1.5.7.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.borsh-1.5.7.bazel index cf4d5c3aaa1..cdf0bd3bcde 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.borsh-1.5.7.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.borsh-1.5.7.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.boxcar-0.2.14.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.boxcar-0.2.14.bazel index cfc997b9101..1238ed9a02b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.boxcar-0.2.14.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.boxcar-0.2.14.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bstr-1.12.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bstr-1.12.0.bazel index 04c40d43016..efe6232bbf7 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bstr-1.12.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bstr-1.12.0.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bumpalo-3.19.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bumpalo-3.19.0.bazel index bd48b980b9a..223a747c07a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bumpalo-3.19.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bumpalo-3.19.0.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bytemuck-1.23.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bytemuck-1.23.2.bazel index 05edb30b608..6ef9d8ce918 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bytemuck-1.23.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bytemuck-1.23.2.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.camino-1.1.12.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.camino-1.1.12.bazel index b138a8c2f3d..250bb124b51 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.camino-1.1.12.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.camino-1.1.12.bazel @@ -69,6 +69,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo-platform-0.2.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo-platform-0.2.0.bazel index e4ee9d80fbd..1a1a383b639 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo-platform-0.2.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo-platform-0.2.0.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo-util-schemas-0.8.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo-util-schemas-0.8.2.bazel index 7564be022f1..802e8d67808 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo-util-schemas-0.8.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo-util-schemas-0.8.2.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo_metadata-0.21.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo_metadata-0.21.0.bazel index 95acbcc53aa..aefea796d4c 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo_metadata-0.21.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo_metadata-0.21.0.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cc-1.2.37.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cc-1.2.37.bazel index ef757a77cac..c747c1c3c4f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cc-1.2.37.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cc-1.2.37.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cfg-if-1.0.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cfg-if-1.0.3.bazel index 6df1698a8b4..66d5b40eb23 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cfg-if-1.0.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cfg-if-1.0.3.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cfg_aliases-0.2.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cfg_aliases-0.2.1.bazel index 093182c2bdd..3845773a67b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cfg_aliases-0.2.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cfg_aliases-0.2.1.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-derive-0.103.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-derive-0.103.0.bazel index 09fe4a1d194..d43c7b6b893 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-derive-0.103.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-derive-0.103.0.bazel @@ -61,6 +61,7 @@ rust_proc_macro( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-derive-0.104.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-derive-0.104.0.bazel index 6f83f8a3128..c7b526db2fb 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-derive-0.104.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-derive-0.104.0.bazel @@ -61,6 +61,7 @@ rust_proc_macro( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-ir-0.103.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-ir-0.103.0.bazel index 61c81e205d3..7f20b012de9 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-ir-0.103.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-ir-0.103.0.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-ir-0.104.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-ir-0.104.0.bazel index 01017b869eb..2d796bef0b6 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-ir-0.104.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-ir-0.104.0.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-recursive-0.103.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-recursive-0.103.0.bazel index 4f15fef15d6..b5bb39ea428 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-recursive-0.103.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-recursive-0.103.0.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-solve-0.103.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-solve-0.103.0.bazel index 3b35ec7bf2b..f1124f1108f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-solve-0.103.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-solve-0.103.0.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chrono-0.4.42.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chrono-0.4.42.bazel index 0b5f1b3f916..41e2b0285ec 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chrono-0.4.42.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chrono-0.4.42.bazel @@ -76,6 +76,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], @@ -142,6 +143,9 @@ rust_library( "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [ "@vendor_ts__iana-time-zone-0.1.63//:iana_time_zone", # arm-unknown-linux-gnueabi ], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [ + "@vendor_ts__iana-time-zone-0.1.63//:iana_time_zone", # arm-unknown-linux-musleabi + ], "@rules_rust//rust/platform:armv7-linux-androideabi": [ "@vendor_ts__iana-time-zone-0.1.63//:iana_time_zone", # armv7-linux-androideabi ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap-4.5.48.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap-4.5.48.bazel index 07b70d3c00e..1ef4252fc09 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap-4.5.48.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap-4.5.48.bazel @@ -74,6 +74,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_builder-4.5.48.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_builder-4.5.48.bazel index d4778d3ba49..f15804a6928 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_builder-4.5.48.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_builder-4.5.48.bazel @@ -69,6 +69,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_derive-4.5.47.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_derive-4.5.47.bazel index 30ec5af6c1f..d203b2121e8 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_derive-4.5.47.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_derive-4.5.47.bazel @@ -64,6 +64,7 @@ rust_proc_macro( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_lex-0.7.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_lex-0.7.5.bazel index 54194c27503..a5a6cca1fe8 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_lex-0.7.5.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_lex-0.7.5.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.colorchoice-1.0.4.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.colorchoice-1.0.4.bazel index 3fde0013d95..5956c5ff8f7 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.colorchoice-1.0.4.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.colorchoice-1.0.4.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.core-foundation-sys-0.8.7.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.core-foundation-sys-0.8.7.bazel index d7c24a33e09..fdbed4c6dc7 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.core-foundation-sys-0.8.7.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.core-foundation-sys-0.8.7.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.countme-3.0.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.countme-3.0.1.bazel index 6471b14ab04..24e1b277c8e 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.countme-3.0.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.countme-3.0.1.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cov-mark-2.1.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cov-mark-2.1.0.bazel index 934e00d1c70..ca4a3e64b05 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cov-mark-2.1.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cov-mark-2.1.0.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crc32fast-1.5.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crc32fast-1.5.0.bazel index f626b633f13..46c3fb30a59 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crc32fast-1.5.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crc32fast-1.5.0.bazel @@ -69,6 +69,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crossbeam-channel-0.5.15.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crossbeam-channel-0.5.15.bazel index c179f7d4da0..3a6999466ae 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crossbeam-channel-0.5.15.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crossbeam-channel-0.5.15.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crossbeam-deque-0.8.6.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crossbeam-deque-0.8.6.bazel index 0208adb97be..5d08b0a7259 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crossbeam-deque-0.8.6.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crossbeam-deque-0.8.6.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crossbeam-epoch-0.9.18.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crossbeam-epoch-0.9.18.bazel index 627145e84ee..bded5897eb8 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crossbeam-epoch-0.9.18.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crossbeam-epoch-0.9.18.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crossbeam-queue-0.3.12.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crossbeam-queue-0.3.12.bazel index 52201cf8a8b..18797ac294c 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crossbeam-queue-0.3.12.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crossbeam-queue-0.3.12.bazel @@ -66,6 +66,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crossbeam-utils-0.8.21.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crossbeam-utils-0.8.21.bazel index 18ae31e2eca..ba484864b40 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crossbeam-utils-0.8.21.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crossbeam-utils-0.8.21.bazel @@ -69,6 +69,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.darling-0.21.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.darling-0.21.3.bazel index 4c292c1d710..a9572a79a81 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.darling-0.21.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.darling-0.21.3.bazel @@ -68,6 +68,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.darling_core-0.21.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.darling_core-0.21.3.bazel index 85fc26280ae..22e3ea592f6 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.darling_core-0.21.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.darling_core-0.21.3.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.darling_macro-0.21.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.darling_macro-0.21.3.bazel index 84a6db16b68..99c3af7e2e4 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.darling_macro-0.21.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.darling_macro-0.21.3.bazel @@ -61,6 +61,7 @@ rust_proc_macro( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.dashmap-6.1.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.dashmap-6.1.0.bazel index 9dfad53ceb5..c9a20e45392 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.dashmap-6.1.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.dashmap-6.1.0.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.deranged-0.5.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.deranged-0.5.3.bazel index 68432d606f8..850713a2e45 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.deranged-0.5.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.deranged-0.5.3.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.displaydoc-0.2.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.displaydoc-0.2.5.bazel index c021a09033e..41aae8ab1ec 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.displaydoc-0.2.5.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.displaydoc-0.2.5.bazel @@ -61,6 +61,7 @@ rust_proc_macro( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.drop_bomb-0.1.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.drop_bomb-0.1.5.bazel index 2d4581a50d9..d63db7ce6aa 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.drop_bomb-0.1.5.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.drop_bomb-0.1.5.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.dunce-1.0.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.dunce-1.0.5.bazel index df9735fb044..c47d2917bf6 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.dunce-1.0.5.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.dunce-1.0.5.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.dyn-clone-1.0.20.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.dyn-clone-1.0.20.bazel index c810715cbc8..40f78950a02 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.dyn-clone-1.0.20.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.dyn-clone-1.0.20.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.either-1.15.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.either-1.15.0.bazel index 7889b2bacd1..f0853ff36b7 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.either-1.15.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.either-1.15.0.bazel @@ -66,6 +66,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ena-0.14.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ena-0.14.3.bazel index bc79eea8cb9..c59d0a9a316 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ena-0.14.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ena-0.14.3.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.encoding-0.2.33.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.encoding-0.2.33.bazel index c9577c65f88..c88ddeb86a8 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.encoding-0.2.33.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.encoding-0.2.33.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.encoding-index-japanese-1.20141219.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.encoding-index-japanese-1.20141219.5.bazel index 2479888abce..fc81caebaa9 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.encoding-index-japanese-1.20141219.5.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.encoding-index-japanese-1.20141219.5.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.encoding-index-korean-1.20141219.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.encoding-index-korean-1.20141219.5.bazel index 4bfdf59c286..6776c8f8f2f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.encoding-index-korean-1.20141219.5.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.encoding-index-korean-1.20141219.5.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.encoding-index-simpchinese-1.20141219.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.encoding-index-simpchinese-1.20141219.5.bazel index 8b4274d602b..cd8250d7be6 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.encoding-index-simpchinese-1.20141219.5.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.encoding-index-simpchinese-1.20141219.5.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.encoding-index-singlebyte-1.20141219.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.encoding-index-singlebyte-1.20141219.5.bazel index a53f1999f2c..3466817c9f0 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.encoding-index-singlebyte-1.20141219.5.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.encoding-index-singlebyte-1.20141219.5.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.encoding-index-tradchinese-1.20141219.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.encoding-index-tradchinese-1.20141219.5.bazel index b6a7ad2993b..e98585004e6 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.encoding-index-tradchinese-1.20141219.5.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.encoding-index-tradchinese-1.20141219.5.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.encoding_index_tests-0.1.4.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.encoding_index_tests-0.1.4.bazel index a68310e470d..987bc9667d3 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.encoding_index_tests-0.1.4.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.encoding_index_tests-0.1.4.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.equivalent-1.0.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.equivalent-1.0.2.bazel index c262f8362d7..251b726dcc9 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.equivalent-1.0.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.equivalent-1.0.2.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.erased-serde-0.4.6.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.erased-serde-0.4.6.bazel index 3eebca66b45..7c25af54774 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.erased-serde-0.4.6.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.erased-serde-0.4.6.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.figment-0.10.19.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.figment-0.10.19.bazel index 9f707fe589a..4bb767ff10e 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.figment-0.10.19.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.figment-0.10.19.bazel @@ -72,6 +72,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], @@ -114,6 +115,9 @@ rust_library( "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [ "@vendor_ts__atomic-0.6.1//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) ], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [ + "@vendor_ts__atomic-0.6.1//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) + ], "@rules_rust//rust/platform:armv7-linux-androideabi": [ "@vendor_ts__atomic-0.6.1//:atomic", # cfg(any(target_pointer_width = "8", target_pointer_width = "16", target_pointer_width = "32")) ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.find-msvc-tools-0.1.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.find-msvc-tools-0.1.1.bazel index c04dd7706d6..8fc8c9a81e2 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.find-msvc-tools-0.1.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.find-msvc-tools-0.1.1.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.fixedbitset-0.4.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.fixedbitset-0.4.2.bazel index 2e2ffe86c6a..b41f13ec6e5 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.fixedbitset-0.4.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.fixedbitset-0.4.2.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.flate2-1.1.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.flate2-1.1.2.bazel index 6b919bce0b8..efc1a622b66 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.flate2-1.1.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.flate2-1.1.2.bazel @@ -67,6 +67,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.fnv-1.0.7.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.fnv-1.0.7.bazel index c3eab8bc83c..80252992a21 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.fnv-1.0.7.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.fnv-1.0.7.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.foldhash-0.1.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.foldhash-0.1.5.bazel index 7d6f47fa04f..8fc2c7d51b8 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.foldhash-0.1.5.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.foldhash-0.1.5.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.form_urlencoded-1.2.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.form_urlencoded-1.2.2.bazel index e496ef247da..7d4cbdcdecb 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.form_urlencoded-1.2.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.form_urlencoded-1.2.2.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.fs-err-2.11.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.fs-err-2.11.0.bazel index 263df3abe82..657e1cd8a4a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.fs-err-2.11.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.fs-err-2.11.0.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.fsevent-sys-4.1.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.fsevent-sys-4.1.0.bazel index ece66edee6c..cb938292839 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.fsevent-sys-4.1.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.fsevent-sys-4.1.0.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.fst-0.4.7.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.fst-0.4.7.bazel index 060ec5e07d9..484accede2c 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.fst-0.4.7.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.fst-0.4.7.bazel @@ -68,6 +68,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.getrandom-0.3.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.getrandom-0.3.3.bazel index 47a353d3df9..d09e3ce7a4a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.getrandom-0.3.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.getrandom-0.3.3.bazel @@ -68,6 +68,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], @@ -128,6 +129,9 @@ rust_library( "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [ "@vendor_ts__libc-0.2.175//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) ], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [ + "@vendor_ts__libc-0.2.175//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) + ], "@rules_rust//rust/platform:armv7-linux-androideabi": [ "@vendor_ts__libc-0.2.175//:libc", # cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))) ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.glob-0.3.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.glob-0.3.3.bazel index 6ce6e3c9719..d26541b4fca 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.glob-0.3.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.glob-0.3.3.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.globset-0.4.16.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.globset-0.4.16.bazel index 8a77be50b7f..0f83adee8e7 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.globset-0.4.16.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.globset-0.4.16.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashbrown-0.12.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashbrown-0.12.3.bazel index 57dc7dc0b07..83f146a6367 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashbrown-0.12.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashbrown-0.12.3.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashbrown-0.14.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashbrown-0.14.5.bazel index dadefeac311..a485aa4c1e6 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashbrown-0.14.5.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashbrown-0.14.5.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashbrown-0.15.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashbrown-0.15.5.bazel index b7b644fb681..a51bce9391a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashbrown-0.15.5.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashbrown-0.15.5.bazel @@ -69,6 +69,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashlink-0.10.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashlink-0.10.0.bazel index c4549368f6c..badd7cb2721 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashlink-0.10.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashlink-0.10.0.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.heck-0.5.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.heck-0.5.0.bazel index 78a22ad0140..a8e52fe9b29 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.heck-0.5.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.heck-0.5.0.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hermit-abi-0.5.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hermit-abi-0.5.2.bazel index a7fa4e0c9e1..0db33a0a48a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hermit-abi-0.5.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hermit-abi-0.5.2.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hex-0.4.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hex-0.4.3.bazel index 2d7ca484cad..702f649e110 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hex-0.4.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hex-0.4.3.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.home-0.5.11.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.home-0.5.11.bazel index 3f5d6f3e711..97b2f5a5b94 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.home-0.5.11.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.home-0.5.11.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.iana-time-zone-0.1.63.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.iana-time-zone-0.1.63.bazel index 2363e88f60e..d66d4803a46 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.iana-time-zone-0.1.63.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.iana-time-zone-0.1.63.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.iana-time-zone-haiku-0.1.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.iana-time-zone-haiku-0.1.2.bazel index 0a2ab447f06..fe120c04689 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.iana-time-zone-haiku-0.1.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.iana-time-zone-haiku-0.1.2.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_collections-2.0.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_collections-2.0.0.bazel index 03ec6ed98b2..4d6d3133825 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_collections-2.0.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_collections-2.0.0.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_locale_core-2.0.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_locale_core-2.0.0.bazel index 78b39e2617e..b0cb71a3299 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_locale_core-2.0.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_locale_core-2.0.0.bazel @@ -67,6 +67,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_normalizer-2.0.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_normalizer-2.0.0.bazel index a99daf34fd7..460c5de79a2 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_normalizer-2.0.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_normalizer-2.0.0.bazel @@ -67,6 +67,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_normalizer_data-2.0.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_normalizer_data-2.0.0.bazel index a54e63d5cbc..f5367ece66c 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_normalizer_data-2.0.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_normalizer_data-2.0.0.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_properties-2.0.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_properties-2.0.1.bazel index 31ae1bf654d..4416b825305 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_properties-2.0.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_properties-2.0.1.bazel @@ -67,6 +67,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_properties_data-2.0.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_properties_data-2.0.1.bazel index f74ecbdc568..e7aa78908e3 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_properties_data-2.0.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_properties_data-2.0.1.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_provider-2.0.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_provider-2.0.0.bazel index cdb3b7c9449..08e96e830c7 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_provider-2.0.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.icu_provider-2.0.0.bazel @@ -68,6 +68,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ident_case-1.0.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ident_case-1.0.1.bazel index de24b64e74b..44123d03908 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ident_case-1.0.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ident_case-1.0.1.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.idna-1.1.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.idna-1.1.0.bazel index c79d20f3a9e..afb404176fd 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.idna-1.1.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.idna-1.1.0.bazel @@ -66,6 +66,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.idna_adapter-1.2.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.idna_adapter-1.2.1.bazel index 538648fc1eb..7f44f43eac2 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.idna_adapter-1.2.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.idna_adapter-1.2.1.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.indexmap-1.9.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.indexmap-1.9.3.bazel index f3c41fc7d20..13298f4aa2c 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.indexmap-1.9.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.indexmap-1.9.3.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.indexmap-2.11.4.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.indexmap-2.11.4.bazel index 339324bc897..53cca2f5677 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.indexmap-2.11.4.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.indexmap-2.11.4.bazel @@ -66,6 +66,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.inlinable_string-0.1.15.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.inlinable_string-0.1.15.bazel index 838f8dfd6ce..662494b3e79 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.inlinable_string-0.1.15.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.inlinable_string-0.1.15.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.inotify-0.11.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.inotify-0.11.0.bazel index 687f07ab93b..6be5e3be9d9 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.inotify-0.11.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.inotify-0.11.0.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.inotify-sys-0.1.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.inotify-sys-0.1.5.bazel index c9e73bfb91c..9316b8d907c 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.inotify-sys-0.1.5.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.inotify-sys-0.1.5.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.intrusive-collections-0.9.7.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.intrusive-collections-0.9.7.bazel index 4135430c0dd..ee299069b1e 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.intrusive-collections-0.9.7.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.intrusive-collections-0.9.7.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.is_terminal_polyfill-1.70.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.is_terminal_polyfill-1.70.1.bazel index 178eb9ea801..637041b51c3 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.is_terminal_polyfill-1.70.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.is_terminal_polyfill-1.70.1.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.itertools-0.12.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.itertools-0.12.1.bazel index 8c01d09ec29..ff3ee2442f8 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.itertools-0.12.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.itertools-0.12.1.bazel @@ -66,6 +66,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.itertools-0.14.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.itertools-0.14.0.bazel index ff6f7e18e76..6e2c04598d0 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.itertools-0.14.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.itertools-0.14.0.bazel @@ -66,6 +66,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.itoa-1.0.15.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.itoa-1.0.15.bazel index 64e8b1bf5db..57e6f406e90 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.itoa-1.0.15.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.itoa-1.0.15.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.jobserver-0.1.34.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.jobserver-0.1.34.bazel index 6f7696c7983..2546f6c8a77 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.jobserver-0.1.34.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.jobserver-0.1.34.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], @@ -124,6 +125,9 @@ rust_library( "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [ "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [ + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) + ], "@rules_rust//rust/platform:armv7-linux-androideabi": [ "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.jod-thread-1.0.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.jod-thread-1.0.0.bazel index 9659dec0e4b..91f0e1ff55d 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.jod-thread-1.0.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.jod-thread-1.0.0.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.js-sys-0.3.78.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.js-sys-0.3.78.bazel index 3a2d6e01b80..91569ee3526 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.js-sys-0.3.78.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.js-sys-0.3.78.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.kqueue-1.1.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.kqueue-1.1.1.bazel index 2163666cef7..3943bd7e1b9 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.kqueue-1.1.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.kqueue-1.1.1.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.kqueue-sys-1.0.4.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.kqueue-sys-1.0.4.bazel index a162ce9265a..dadf3b16e81 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.kqueue-sys-1.0.4.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.kqueue-sys-1.0.4.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.la-arena-0.3.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.la-arena-0.3.1.bazel index 078852cfe3c..ab216fe6e83 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.la-arena-0.3.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.la-arena-0.3.1.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.lazy_static-1.5.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.lazy_static-1.5.0.bazel index 204862e396e..c81cfa64f50 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.lazy_static-1.5.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.lazy_static-1.5.0.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.libc-0.2.175.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.libc-0.2.175.bazel index b00d5c2476c..b63baa0019d 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.libc-0.2.175.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.libc-0.2.175.bazel @@ -69,6 +69,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.line-index-0.1.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.line-index-0.1.2.bazel index 6570e76db93..423b236b28f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.line-index-0.1.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.line-index-0.1.2.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.litemap-0.8.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.litemap-0.8.0.bazel index 47e14a2a214..47c9e11a8b9 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.litemap-0.8.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.litemap-0.8.0.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.lock_api-0.4.13.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.lock_api-0.4.13.bazel index e369edeb455..465339500a5 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.lock_api-0.4.13.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.lock_api-0.4.13.bazel @@ -69,6 +69,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.log-0.3.9.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.log-0.3.9.bazel index a2b546f0520..45798b37ab7 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.log-0.3.9.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.log-0.3.9.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.log-0.4.28.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.log-0.4.28.bazel index b3bed18c81c..26a8978cb1b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.log-0.4.28.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.log-0.4.28.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.matchers-0.2.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.matchers-0.2.0.bazel index cc8ef40941e..3e43dd562ab 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.matchers-0.2.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.matchers-0.2.0.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.memchr-2.7.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.memchr-2.7.5.bazel index 03b04580ea9..2338b0077da 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.memchr-2.7.5.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.memchr-2.7.5.bazel @@ -66,6 +66,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.memoffset-0.9.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.memoffset-0.9.1.bazel index 3485ee47710..8bac1c6d8e7 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.memoffset-0.9.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.memoffset-0.9.1.bazel @@ -68,6 +68,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.miniz_oxide-0.8.9.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.miniz_oxide-0.8.9.bazel index 6f1ca1a97da..48322b462ca 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.miniz_oxide-0.8.9.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.miniz_oxide-0.8.9.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.mio-1.0.4.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.mio-1.0.4.bazel index 539da180bb7..4b6fcc8c864 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.mio-1.0.4.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.mio-1.0.4.bazel @@ -67,6 +67,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], @@ -132,6 +133,9 @@ rust_library( "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [ "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [ + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) + ], "@rules_rust//rust/platform:armv7-linux-androideabi": [ "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.miow-0.6.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.miow-0.6.1.bazel index 8025e8f3b2c..aa7509dd1fe 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.miow-0.6.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.miow-0.6.1.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.mustache-0.9.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.mustache-0.9.0.bazel index aec7c2bd00b..51e1d88fe23 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.mustache-0.9.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.mustache-0.9.0.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.nohash-hasher-0.2.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.nohash-hasher-0.2.0.bazel index 6ed4e8027e7..ea49f4108a1 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.nohash-hasher-0.2.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.nohash-hasher-0.2.0.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.notify-8.2.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.notify-8.2.0.bazel index 6d024f0d1d9..0c838f2c6c3 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.notify-8.2.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.notify-8.2.0.bazel @@ -66,6 +66,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], @@ -135,6 +136,10 @@ rust_library( "@vendor_ts__inotify-0.11.0//:inotify", # cfg(any(target_os = "linux", target_os = "android")) "@vendor_ts__mio-1.0.4//:mio", # cfg(any(target_os = "linux", target_os = "android")) ], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [ + "@vendor_ts__inotify-0.11.0//:inotify", # cfg(any(target_os = "linux", target_os = "android")) + "@vendor_ts__mio-1.0.4//:mio", # cfg(any(target_os = "linux", target_os = "android")) + ], "@rules_rust//rust/platform:armv7-linux-androideabi": [ "@vendor_ts__inotify-0.11.0//:inotify", # cfg(any(target_os = "linux", target_os = "android")) "@vendor_ts__mio-1.0.4//:mio", # cfg(any(target_os = "linux", target_os = "android")) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.notify-types-2.0.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.notify-types-2.0.0.bazel index 643378311dd..f690f5b4249 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.notify-types-2.0.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.notify-types-2.0.0.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.nu-ansi-term-0.50.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.nu-ansi-term-0.50.1.bazel index a12b6b5e5d7..03714107c72 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.nu-ansi-term-0.50.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.nu-ansi-term-0.50.1.bazel @@ -73,6 +73,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.num-conv-0.1.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.num-conv-0.1.0.bazel index 7f7685c0d5b..587cbdf418f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.num-conv-0.1.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.num-conv-0.1.0.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.num-traits-0.2.19.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.num-traits-0.2.19.bazel index 97a0e0a2f13..6b95a1d7743 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.num-traits-0.2.19.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.num-traits-0.2.19.bazel @@ -69,6 +69,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.num_cpus-1.17.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.num_cpus-1.17.0.bazel index 0cd3c5c33dd..00293e65e2d 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.num_cpus-1.17.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.num_cpus-1.17.0.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], @@ -124,6 +125,9 @@ rust_library( "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [ "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [ + "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) + ], "@rules_rust//rust/platform:armv7-linux-androideabi": [ "@vendor_ts__libc-0.2.175//:libc", # cfg(not(windows)) ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.once_cell-1.21.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.once_cell-1.21.3.bazel index 686dd8f6a79..d10ec0a4bce 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.once_cell-1.21.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.once_cell-1.21.3.bazel @@ -67,6 +67,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.once_cell_polyfill-1.70.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.once_cell_polyfill-1.70.1.bazel index dc02094678d..968db54eafe 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.once_cell_polyfill-1.70.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.once_cell_polyfill-1.70.1.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.oorandom-11.1.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.oorandom-11.1.5.bazel index 826c14777f0..72de567588f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.oorandom-11.1.5.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.oorandom-11.1.5.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ordered-float-2.10.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ordered-float-2.10.1.bazel index e9e1714252b..58f67759d31 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ordered-float-2.10.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ordered-float-2.10.1.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.os_str_bytes-7.1.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.os_str_bytes-7.1.1.bazel index b957f54c950..05f864c1758 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.os_str_bytes-7.1.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.os_str_bytes-7.1.1.bazel @@ -66,6 +66,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.papaya-0.2.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.papaya-0.2.3.bazel index d10b3e75896..27bb71298a8 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.papaya-0.2.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.papaya-0.2.3.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.parking_lot-0.12.4.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.parking_lot-0.12.4.bazel index 4bc7f4f9bb8..b93d8562fad 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.parking_lot-0.12.4.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.parking_lot-0.12.4.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.parking_lot_core-0.9.11.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.parking_lot_core-0.9.11.bazel index e602d4cf358..f2199e602c2 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.parking_lot_core-0.9.11.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.parking_lot_core-0.9.11.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], @@ -132,6 +133,9 @@ rust_library( "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [ "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [ + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) + ], "@rules_rust//rust/platform:armv7-linux-androideabi": [ "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.pear-0.2.9.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.pear-0.2.9.bazel index a806ba783a6..ccc77659375 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.pear-0.2.9.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.pear-0.2.9.bazel @@ -69,6 +69,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.pear_codegen-0.2.9.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.pear_codegen-0.2.9.bazel index d37a7916d11..2b0175999d4 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.pear_codegen-0.2.9.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.pear_codegen-0.2.9.bazel @@ -61,6 +61,7 @@ rust_proc_macro( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.percent-encoding-2.3.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.percent-encoding-2.3.2.bazel index 925777f7837..8a8d1e9e3c9 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.percent-encoding-2.3.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.percent-encoding-2.3.2.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.perf-event-0.4.7.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.perf-event-0.4.7.bazel index 3dcdb7841a8..8ba85de58da 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.perf-event-0.4.7.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.perf-event-0.4.7.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.perf-event-open-sys-1.0.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.perf-event-open-sys-1.0.1.bazel index 66c6d44fb9c..120842ef4fb 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.perf-event-open-sys-1.0.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.perf-event-open-sys-1.0.1.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.petgraph-0.6.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.petgraph-0.6.5.bazel index 96b02e10e07..1ad22b9f498 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.petgraph-0.6.5.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.petgraph-0.6.5.bazel @@ -67,6 +67,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.pin-project-lite-0.2.16.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.pin-project-lite-0.2.16.bazel index 613c24f7cbc..9234efd2e0e 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.pin-project-lite-0.2.16.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.pin-project-lite-0.2.16.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.pkg-config-0.3.32.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.pkg-config-0.3.32.bazel index e03ef295d21..806b9c904c7 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.pkg-config-0.3.32.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.pkg-config-0.3.32.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.portable-atomic-1.11.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.portable-atomic-1.11.1.bazel index c8afae58b26..ba1a8734eaa 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.portable-atomic-1.11.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.portable-atomic-1.11.1.bazel @@ -69,6 +69,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.potential_utf-0.1.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.potential_utf-0.1.3.bazel index 343962c4585..4a5d00884b1 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.potential_utf-0.1.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.potential_utf-0.1.3.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.powerfmt-0.2.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.powerfmt-0.2.0.bazel index 9d58835a336..4f67e7c1603 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.powerfmt-0.2.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.powerfmt-0.2.0.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ppv-lite86-0.2.21.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ppv-lite86-0.2.21.bazel index 8043ecaee06..a4b01dcbc67 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ppv-lite86-0.2.21.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ppv-lite86-0.2.21.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.proc-macro2-1.0.101.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.proc-macro2-1.0.101.bazel index b979922bfcf..bb23160f9b8 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.proc-macro2-1.0.101.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.proc-macro2-1.0.101.bazel @@ -69,6 +69,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.proc-macro2-diagnostics-0.10.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.proc-macro2-diagnostics-0.10.1.bazel index e97d61f229b..9a309e0d43a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.proc-macro2-diagnostics-0.10.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.proc-macro2-diagnostics-0.10.1.bazel @@ -70,6 +70,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.quote-1.0.41.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.quote-1.0.41.bazel index bf89a7251f3..621cfb33ab4 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.quote-1.0.41.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.quote-1.0.41.bazel @@ -69,6 +69,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.r-efi-5.3.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.r-efi-5.3.0.bazel index 778a94832fb..d71877ee91c 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.r-efi-5.3.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.r-efi-5.3.0.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_abi-0.123.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_abi-0.123.0.bazel index de56de7393c..6222aecac16 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_abi-0.123.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_abi-0.123.0.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_hashes-0.123.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_hashes-0.123.0.bazel index 5d4250c41bc..6d510190f02 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_hashes-0.123.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_hashes-0.123.0.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_index-0.123.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_index-0.123.0.bazel index bf33fe6c892..b8d5f8af922 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_index-0.123.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_index-0.123.0.bazel @@ -67,6 +67,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_index_macros-0.123.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_index_macros-0.123.0.bazel index b3dcedb0ec5..f25a9e19768 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_index_macros-0.123.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_index_macros-0.123.0.bazel @@ -61,6 +61,7 @@ rust_proc_macro( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_lexer-0.121.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_lexer-0.121.0.bazel index 88d4046a03a..1ba187aeb8f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_lexer-0.121.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_lexer-0.121.0.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_lexer-0.123.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_lexer-0.123.0.bazel index 4971fc67e03..5ed4bd3f912 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_lexer-0.123.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_lexer-0.123.0.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_parse_format-0.121.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_parse_format-0.121.0.bazel index c5eaeddb683..987599aa964 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_parse_format-0.121.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_parse_format-0.121.0.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_pattern_analysis-0.123.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_pattern_analysis-0.123.0.bazel index bd2180aa2c5..e81038a0084 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_pattern_analysis-0.123.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_pattern_analysis-0.123.0.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_base_db-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_base_db-0.0.301.bazel index 2c5fe2ea244..60cece39191 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_base_db-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_base_db-0.0.301.bazel @@ -73,6 +73,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_cfg-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_cfg-0.0.301.bazel index a3eb4397b88..35af421f023 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_cfg-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_cfg-0.0.301.bazel @@ -68,6 +68,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_edition-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_edition-0.0.301.bazel index 648552243c8..50b4f2e87d1 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_edition-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_edition-0.0.301.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir-0.0.301.bazel index a138ff5c887..c1272206d93 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir-0.0.301.bazel @@ -73,6 +73,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_def-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_def-0.0.301.bazel index 8811733c690..bd85f440ba5 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_def-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_def-0.0.301.bazel @@ -77,6 +77,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_expand-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_expand-0.0.301.bazel index 87e6fa6e904..1593a5a8db9 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_expand-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_expand-0.0.301.bazel @@ -78,6 +78,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_ty-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_ty-0.0.301.bazel index c9b81576e38..2dbbe4f7717 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_ty-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_ty-0.0.301.bazel @@ -76,6 +76,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_ide_db-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_ide_db-0.0.301.bazel index 6c023eedf9a..66d015a2efb 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_ide_db-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_ide_db-0.0.301.bazel @@ -76,6 +76,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_intern-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_intern-0.0.301.bazel index 4542092adf9..9216daa25b5 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_intern-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_intern-0.0.301.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_load-cargo-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_load-cargo-0.0.301.bazel index 137cdb42e44..cc43b8dd630 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_load-cargo-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_load-cargo-0.0.301.bazel @@ -72,6 +72,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_mbe-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_mbe-0.0.301.bazel index 2fbff68fc77..bdf4d297074 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_mbe-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_mbe-0.0.301.bazel @@ -69,6 +69,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_parser-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_parser-0.0.301.bazel index e31fb6afe34..2134a4d9cbc 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_parser-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_parser-0.0.301.bazel @@ -68,6 +68,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_paths-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_paths-0.0.301.bazel index d3627c8e09d..5210ea74ec8 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_paths-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_paths-0.0.301.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_proc_macro_api-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_proc_macro_api-0.0.301.bazel index 62382cb6834..12961c51aec 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_proc_macro_api-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_proc_macro_api-0.0.301.bazel @@ -71,6 +71,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_profile-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_profile-0.0.301.bazel index bda44ea0ec5..cb28397b3ab 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_profile-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_profile-0.0.301.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], @@ -111,6 +112,9 @@ rust_library( "@vendor_ts__libc-0.2.175//:libc", # cfg(all(target_os = "linux", target_env = "gnu")) "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(all(target_os = "linux", not(target_env = "ohos"))) ], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [ + "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(all(target_os = "linux", not(target_env = "ohos"))) + ], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [ "@vendor_ts__libc-0.2.175//:libc", # cfg(all(target_os = "linux", target_env = "gnu")) "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(all(target_os = "linux", not(target_env = "ohos"))) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_project_model-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_project_model-0.0.301.bazel index e54b95b9252..8f551d7bd0b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_project_model-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_project_model-0.0.301.bazel @@ -73,6 +73,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_query-group-macro-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_query-group-macro-0.0.301.bazel index d1a49cd5f95..ccd6eb8aefa 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_query-group-macro-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_query-group-macro-0.0.301.bazel @@ -61,6 +61,7 @@ rust_proc_macro( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_span-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_span-0.0.301.bazel index fa784c663a8..0b47ce03347 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_span-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_span-0.0.301.bazel @@ -70,6 +70,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_stdx-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_stdx-0.0.301.bazel index 4d81268c7ba..41c6f4f8cc7 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_stdx-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_stdx-0.0.301.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], @@ -131,6 +132,9 @@ rust_library( "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [ "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [ + "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) + ], "@rules_rust//rust/platform:armv7-linux-androideabi": [ "@vendor_ts__libc-0.2.175//:libc", # cfg(unix) ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-0.0.301.bazel index 2413110f255..e5548afe6ab 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-0.0.301.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-bridge-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-bridge-0.0.301.bazel index 4f0ccf66d07..646c0f8c2f4 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-bridge-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-bridge-0.0.301.bazel @@ -69,6 +69,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_toolchain-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_toolchain-0.0.301.bazel index 8688fe6dde8..2956a594ec1 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_toolchain-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_toolchain-0.0.301.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_tt-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_tt-0.0.301.bazel index 4e3842c4f09..e5b2117f769 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_tt-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_tt-0.0.301.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-0.0.301.bazel index bca4bbf5f85..67dd8bdd610 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-0.0.301.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-notify-0.0.301.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-notify-0.0.301.bazel index 8f09f78c4b0..e0c3859bfa3 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-notify-0.0.301.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-notify-0.0.301.bazel @@ -66,6 +66,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rand-0.9.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rand-0.9.2.bazel index 1e5b380c8e8..adf2414f3af 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rand-0.9.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rand-0.9.2.bazel @@ -70,6 +70,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rand_chacha-0.9.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rand_chacha-0.9.0.bazel index d95c304574e..63fd0014d76 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rand_chacha-0.9.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rand_chacha-0.9.0.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rand_core-0.9.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rand_core-0.9.3.bazel index 02b349c691a..0ae8f72c261 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rand_core-0.9.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rand_core-0.9.3.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rayon-1.11.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rayon-1.11.0.bazel index b022fcc5c8f..c867d354a77 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rayon-1.11.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rayon-1.11.0.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rayon-core-1.13.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rayon-core-1.13.0.bazel index 293c4247781..29542077f37 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rayon-core-1.13.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rayon-core-1.13.0.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.redox_syscall-0.5.17.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.redox_syscall-0.5.17.bazel index 4f235ca509f..ec928fcac82 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.redox_syscall-0.5.17.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.redox_syscall-0.5.17.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ref-cast-1.0.24.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ref-cast-1.0.24.bazel index aa00cedf811..8b96305dfa7 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ref-cast-1.0.24.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ref-cast-1.0.24.bazel @@ -68,6 +68,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ref-cast-impl-1.0.24.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ref-cast-impl-1.0.24.bazel index 283e6bf5a8f..56045a5d8dd 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ref-cast-impl-1.0.24.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ref-cast-impl-1.0.24.bazel @@ -61,6 +61,7 @@ rust_proc_macro( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-1.11.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-1.11.3.bazel index 67446df2cc3..2dff7cf5444 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-1.11.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-1.11.3.bazel @@ -80,6 +80,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-automata-0.4.11.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-automata-0.4.11.bazel index b921cf34fd2..77270d5287f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-automata-0.4.11.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-automata-0.4.11.bazel @@ -89,6 +89,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-syntax-0.8.6.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-syntax-0.8.6.bazel index 8591bbb61ad..20579d899f0 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-syntax-0.8.6.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.regex-syntax-0.8.6.bazel @@ -73,6 +73,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rowan-0.15.15.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rowan-0.15.15.bazel index 8dd1734cb0b..45eaa325827 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rowan-0.15.15.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rowan-0.15.15.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustc-hash-1.1.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustc-hash-1.1.0.bazel index 2e1e394414b..c2d2a8ecadb 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustc-hash-1.1.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustc-hash-1.1.0.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustc-hash-2.1.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustc-hash-2.1.1.bazel index 3510d2a1ecb..233e17d9085 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustc-hash-2.1.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustc-hash-2.1.1.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustc-literal-escaper-0.0.4.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustc-literal-escaper-0.0.4.bazel index e28c0bc4178..8a273994a82 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustc-literal-escaper-0.0.4.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustc-literal-escaper-0.0.4.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustc-stable-hash-0.1.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustc-stable-hash-0.1.2.bazel index adfeba65d21..0803a2e277e 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustc-stable-hash-0.1.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustc-stable-hash-0.1.2.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustc_apfloat-0.2.3+llvm-462a31f5a5ab.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustc_apfloat-0.2.3+llvm-462a31f5a5ab.bazel index 0120f3ea41b..0bf75234574 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustc_apfloat-0.2.3+llvm-462a31f5a5ab.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustc_apfloat-0.2.3+llvm-462a31f5a5ab.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustversion-1.0.22.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustversion-1.0.22.bazel index 03476d43a93..442f3ba0590 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustversion-1.0.22.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustversion-1.0.22.bazel @@ -65,6 +65,7 @@ rust_proc_macro( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ryu-1.0.20.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ryu-1.0.20.bazel index 5b099b034d2..8550c107af8 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ryu-1.0.20.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ryu-1.0.20.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-0.23.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-0.23.0.bazel index 6a57925fb36..25fcd798c65 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-0.23.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-0.23.0.bazel @@ -70,6 +70,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-macro-rules-0.23.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-macro-rules-0.23.0.bazel index 2fa60dda2d7..a3cc0e24a36 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-macro-rules-0.23.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-macro-rules-0.23.0.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-macros-0.23.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-macros-0.23.0.bazel index 622d2817781..5d9bd4b0935 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-macros-0.23.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-macros-0.23.0.bazel @@ -61,6 +61,7 @@ rust_proc_macro( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.same-file-1.0.6.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.same-file-1.0.6.bazel index 01d9cc94d56..1ae75e4d777 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.same-file-1.0.6.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.same-file-1.0.6.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.schemars-0.9.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.schemars-0.9.0.bazel index 7229003a1d0..69546680a9f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.schemars-0.9.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.schemars-0.9.0.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.schemars-1.0.4.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.schemars-1.0.4.bazel index 757f0deab3c..1fe84d175b3 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.schemars-1.0.4.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.schemars-1.0.4.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.scoped-tls-1.0.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.scoped-tls-1.0.1.bazel index 6083076913d..83ffd8145e7 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.scoped-tls-1.0.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.scoped-tls-1.0.1.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.scopeguard-1.2.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.scopeguard-1.2.0.bazel index e9f53614a25..fd65460b977 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.scopeguard-1.2.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.scopeguard-1.2.0.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.seize-0.5.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.seize-0.5.0.bazel index 1a284015551..192a6088028 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.seize-0.5.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.seize-0.5.0.bazel @@ -67,6 +67,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.semver-1.0.26.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.semver-1.0.26.bazel index b50da61882e..a495f639d42 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.semver-1.0.26.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.semver-1.0.26.bazel @@ -70,6 +70,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde-1.0.228.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde-1.0.228.bazel index c8b33b40bfe..f21954648d6 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde-1.0.228.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde-1.0.228.bazel @@ -75,6 +75,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde-untagged-0.1.8.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde-untagged-0.1.8.bazel index 61298a6ffb6..099925888d5 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde-untagged-0.1.8.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde-untagged-0.1.8.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde-value-0.7.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde-value-0.7.0.bazel index 4225c41bd21..5ccd9ac3b51 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde-value-0.7.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde-value-0.7.0.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_core-1.0.228.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_core-1.0.228.bazel index 2052a7e95a1..4f597ff13ac 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_core-1.0.228.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_core-1.0.228.bazel @@ -70,6 +70,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_derive-1.0.228.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_derive-1.0.228.bazel index 55489195f29..f6d5b8be14a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_derive-1.0.228.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_derive-1.0.228.bazel @@ -64,6 +64,7 @@ rust_proc_macro( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_json-1.0.145.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_json-1.0.145.bazel index c1beaef5896..eaee1ee4b28 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_json-1.0.145.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_json-1.0.145.bazel @@ -132,6 +132,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_spanned-0.6.9.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_spanned-0.6.9.bazel index cfd8057e492..c5d9c5336e6 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_spanned-0.6.9.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_spanned-0.6.9.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_spanned-1.0.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_spanned-1.0.2.bazel index 6e22434699e..ac82ae1e149 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_spanned-1.0.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_spanned-1.0.2.bazel @@ -66,6 +66,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_with-3.14.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_with-3.14.1.bazel index b34c3aebce9..2500ec6a49b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_with-3.14.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_with-3.14.1.bazel @@ -71,6 +71,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_with_macros-3.14.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_with_macros-3.14.1.bazel index adec2841a5f..fe552ca2a28 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_with_macros-3.14.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_with_macros-3.14.1.bazel @@ -61,6 +61,7 @@ rust_proc_macro( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_yaml-0.9.34+deprecated.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_yaml-0.9.34+deprecated.bazel index 0baae2b420d..42f05a8553a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_yaml-0.9.34+deprecated.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_yaml-0.9.34+deprecated.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.sharded-slab-0.1.7.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.sharded-slab-0.1.7.bazel index d51e394269a..504c16d3ed6 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.sharded-slab-0.1.7.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.sharded-slab-0.1.7.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.shlex-1.3.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.shlex-1.3.0.bazel index 9c85601923b..1b3b26b2284 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.shlex-1.3.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.shlex-1.3.0.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.smallvec-1.15.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.smallvec-1.15.1.bazel index ef1a58e47b6..9ffaf6afce7 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.smallvec-1.15.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.smallvec-1.15.1.bazel @@ -66,6 +66,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.smol_str-0.3.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.smol_str-0.3.2.bazel index ba66fdd7cff..954df9a6361 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.smol_str-0.3.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.smol_str-0.3.2.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.stable_deref_trait-1.2.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.stable_deref_trait-1.2.0.bazel index d01e1329328..a726ed9d70a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.stable_deref_trait-1.2.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.stable_deref_trait-1.2.0.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.streaming-iterator-0.1.9.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.streaming-iterator-0.1.9.bazel index 70243163889..7f8b002061e 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.streaming-iterator-0.1.9.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.streaming-iterator-0.1.9.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.strsim-0.11.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.strsim-0.11.1.bazel index 3b807674bb6..2d86e10662e 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.strsim-0.11.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.strsim-0.11.1.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.syn-2.0.106.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.syn-2.0.106.bazel index b771972149b..50cde9ced99 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.syn-2.0.106.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.syn-2.0.106.bazel @@ -74,6 +74,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.synstructure-0.13.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.synstructure-0.13.2.bazel index 100a3963472..fa9cc6081a5 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.synstructure-0.13.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.synstructure-0.13.2.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.temp-dir-0.1.16.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.temp-dir-0.1.16.bazel index b8c9c3fa890..37f2db5c210 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.temp-dir-0.1.16.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.temp-dir-0.1.16.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.text-size-1.1.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.text-size-1.1.1.bazel index 24c4e086a8e..7dadc9eea33 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.text-size-1.1.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.text-size-1.1.1.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thin-vec-0.2.14.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thin-vec-0.2.14.bazel index 20749982e65..c930359eefe 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thin-vec-0.2.14.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thin-vec-0.2.14.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thiserror-2.0.16.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thiserror-2.0.16.bazel index d4da859d348..3e1ae194c3b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thiserror-2.0.16.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thiserror-2.0.16.bazel @@ -72,6 +72,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thiserror-impl-2.0.16.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thiserror-impl-2.0.16.bazel index 9bce5c77e1d..9d87f60d5d1 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thiserror-impl-2.0.16.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thiserror-impl-2.0.16.bazel @@ -61,6 +61,7 @@ rust_proc_macro( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thread_local-1.1.9.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thread_local-1.1.9.bazel index 5fdccb311d1..01efca58790 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thread_local-1.1.9.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thread_local-1.1.9.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-0.3.43.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-0.3.43.bazel index 095ed4f18ce..c3ee5405393 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-0.3.43.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-0.3.43.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-core-0.1.6.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-core-0.1.6.bazel index c97b1837f2e..57d22c65064 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-core-0.1.6.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-core-0.1.6.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-macros-0.2.24.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-macros-0.2.24.bazel index 74e05258e0c..08d61498717 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-macros-0.2.24.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.time-macros-0.2.24.bazel @@ -61,6 +61,7 @@ rust_proc_macro( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tinystr-0.8.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tinystr-0.8.1.bazel index af42b4cbcb1..896bfb0dd66 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tinystr-0.8.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tinystr-0.8.1.bazel @@ -68,6 +68,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml-0.8.23.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml-0.8.23.bazel index f772d5dcdc2..50cb78eec1e 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml-0.8.23.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml-0.8.23.bazel @@ -66,6 +66,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml-0.9.7.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml-0.9.7.bazel index 73249141b0f..04609ea84f5 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml-0.9.7.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml-0.9.7.bazel @@ -68,6 +68,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_datetime-0.6.11.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_datetime-0.6.11.bazel index 2d752cc867d..2673acb9f66 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_datetime-0.6.11.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_datetime-0.6.11.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_datetime-0.7.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_datetime-0.7.2.bazel index 662a538d5b7..f0a1a3502d0 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_datetime-0.7.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_datetime-0.7.2.bazel @@ -66,6 +66,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_edit-0.22.27.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_edit-0.22.27.bazel index 4a3081f858a..b8a2048b67f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_edit-0.22.27.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_edit-0.22.27.bazel @@ -66,6 +66,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_parser-1.0.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_parser-1.0.3.bazel index 9920a989d97..3ad30e38760 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_parser-1.0.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_parser-1.0.3.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_write-0.1.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_write-0.1.2.bazel index b25d3e86f9f..61e730c7939 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_write-0.1.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_write-0.1.2.bazel @@ -66,6 +66,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_writer-1.0.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_writer-1.0.3.bazel index 178d3e98f70..2bed2419242 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_writer-1.0.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_writer-1.0.3.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-0.1.41.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-0.1.41.bazel index 48d06e879a6..183d4cdd586 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-0.1.41.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-0.1.41.bazel @@ -70,6 +70,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-attributes-0.1.30.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-attributes-0.1.30.bazel index 16782034af3..8f607d2a321 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-attributes-0.1.30.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-attributes-0.1.30.bazel @@ -61,6 +61,7 @@ rust_proc_macro( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-core-0.1.34.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-core-0.1.34.bazel index e758ef8b8e9..c30ffdd41df 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-core-0.1.34.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-core-0.1.34.bazel @@ -66,6 +66,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-flame-0.2.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-flame-0.2.0.bazel index 310b8a8a6d2..23e0eab2f41 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-flame-0.2.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-flame-0.2.0.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-log-0.2.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-log-0.2.0.bazel index 292b84993bc..9cd5f33c7cd 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-log-0.2.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-log-0.2.0.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-subscriber-0.3.20.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-subscriber-0.3.20.bazel index a118ed152c5..f0c94ca745b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-subscriber-0.3.20.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-subscriber-0.3.20.bazel @@ -78,6 +78,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-0.25.9.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-0.25.9.bazel index aec4b5a2fa4..fd97779c54c 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-0.25.9.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-0.25.9.bazel @@ -69,6 +69,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-embedded-template-0.25.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-embedded-template-0.25.0.bazel index 4d3af159e79..c9dd60b03c0 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-embedded-template-0.25.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-embedded-template-0.25.0.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-json-0.24.8.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-json-0.24.8.bazel index 613b9ec6fd1..6b9a7bf0582 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-json-0.24.8.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-json-0.24.8.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-language-0.1.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-language-0.1.5.bazel index 956e222a8f0..b950d1343c8 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-language-0.1.5.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-language-0.1.5.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-ql-0.23.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-ql-0.23.1.bazel index f1b7c0f0118..0b7ce3a9a29 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-ql-0.23.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-ql-0.23.1.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-ruby-0.23.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-ruby-0.23.1.bazel index 443ca47fa2c..f939b4b9493 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-ruby-0.23.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tree-sitter-ruby-0.23.1.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.triomphe-0.1.14.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.triomphe-0.1.14.bazel index 480f760f197..f1774bfb2f0 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.triomphe-0.1.14.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.triomphe-0.1.14.bazel @@ -67,6 +67,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.typed-arena-2.0.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.typed-arena-2.0.2.bazel index f0af1025ad3..1cf6200569b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.typed-arena-2.0.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.typed-arena-2.0.2.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.typeid-1.0.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.typeid-1.0.3.bazel index 07d0afb6bd7..0e5737ac61b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.typeid-1.0.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.typeid-1.0.3.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.uncased-0.9.10.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.uncased-0.9.10.bazel index 3a95385b785..f677429c07b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.uncased-0.9.10.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.uncased-0.9.10.bazel @@ -69,6 +69,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ungrammar-1.16.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ungrammar-1.16.1.bazel index 473cc4ece53..680143ae606 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ungrammar-1.16.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ungrammar-1.16.1.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.unicode-ident-1.0.19.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.unicode-ident-1.0.19.bazel index 0879a535547..75aa1ff078a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.unicode-ident-1.0.19.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.unicode-ident-1.0.19.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.unicode-properties-0.1.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.unicode-properties-0.1.3.bazel index fc560bc6d41..b621e469421 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.unicode-properties-0.1.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.unicode-properties-0.1.3.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.unicode-xid-0.2.6.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.unicode-xid-0.2.6.bazel index 0d91b8333d9..c5725abf313 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.unicode-xid-0.2.6.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.unicode-xid-0.2.6.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.unsafe-libyaml-0.2.11.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.unsafe-libyaml-0.2.11.bazel index 089e3d57c69..c5a1e9accf9 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.unsafe-libyaml-0.2.11.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.unsafe-libyaml-0.2.11.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.url-2.5.7.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.url-2.5.7.bazel index 7f701fa2f9a..043bed2ca2c 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.url-2.5.7.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.url-2.5.7.bazel @@ -66,6 +66,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.utf8_iter-1.0.4.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.utf8_iter-1.0.4.bazel index f933e15e86f..9ebd1462558 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.utf8_iter-1.0.4.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.utf8_iter-1.0.4.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.utf8parse-0.2.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.utf8parse-0.2.2.bazel index 436b71c8e8b..186b6221a21 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.utf8parse-0.2.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.utf8parse-0.2.2.bazel @@ -64,6 +64,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.valuable-0.1.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.valuable-0.1.1.bazel index 020a37ab945..73f685b51f7 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.valuable-0.1.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.valuable-0.1.1.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.version_check-0.9.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.version_check-0.9.5.bazel index 43b406d0976..e742e2f5c3c 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.version_check-0.9.5.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.version_check-0.9.5.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.walkdir-2.5.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.walkdir-2.5.0.bazel index 5ac9c7ffbc7..eaa6ea808b4 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.walkdir-2.5.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.walkdir-2.5.0.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasi-0.11.1+wasi-snapshot-preview1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasi-0.11.1+wasi-snapshot-preview1.bazel index 5e8b84da975..1544ed0659e 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasi-0.11.1+wasi-snapshot-preview1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasi-0.11.1+wasi-snapshot-preview1.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasi-0.14.5+wasi-0.2.4.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasi-0.14.5+wasi-0.2.4.bazel index 0b482a2c9b2..a5826f5cea2 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasi-0.14.5+wasi-0.2.4.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasi-0.14.5+wasi-0.2.4.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasip2-1.0.0+wasi-0.2.4.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasip2-1.0.0+wasi-0.2.4.bazel index 113948d4094..9de7c19c3c2 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasip2-1.0.0+wasi-0.2.4.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasip2-1.0.0+wasi-0.2.4.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-0.2.101.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-0.2.101.bazel index 244a8c5b365..91c146904b6 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-0.2.101.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-0.2.101.bazel @@ -75,6 +75,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-backend-0.2.101.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-backend-0.2.101.bazel index b56eaba879c..8bd3515bef8 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-backend-0.2.101.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-backend-0.2.101.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-0.2.101.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-0.2.101.bazel index 5ee795fafbf..3e207f054b0 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-0.2.101.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-0.2.101.bazel @@ -61,6 +61,7 @@ rust_proc_macro( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-support-0.2.101.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-support-0.2.101.bazel index 6930d6021e9..b2276e1a638 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-support-0.2.101.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-support-0.2.101.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-shared-0.2.101.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-shared-0.2.101.bazel index 948ae73962f..bb7bc40362a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-shared-0.2.101.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-shared-0.2.101.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winapi-util-0.1.11.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winapi-util-0.1.11.bazel index 9a98af20dc9..8730541d4ab 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winapi-util-0.1.11.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winapi-util-0.1.11.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-core-0.61.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-core-0.61.2.bazel index 24e0b959158..df42bab2c4f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-core-0.61.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-core-0.61.2.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-implement-0.60.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-implement-0.60.0.bazel index d48b53ff142..4477961b0a8 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-implement-0.60.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-implement-0.60.0.bazel @@ -61,6 +61,7 @@ rust_proc_macro( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-interface-0.59.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-interface-0.59.1.bazel index 49937afe581..cc4f0390337 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-interface-0.59.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-interface-0.59.1.bazel @@ -61,6 +61,7 @@ rust_proc_macro( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-link-0.1.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-link-0.1.3.bazel index 977e17dfc3b..469607d7d5b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-link-0.1.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-link-0.1.3.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-link-0.2.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-link-0.2.0.bazel index f50b21712e5..e093251e525 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-link-0.2.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-link-0.2.0.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-result-0.3.4.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-result-0.3.4.bazel index e5cec242987..c86097f47b3 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-result-0.3.4.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-result-0.3.4.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-strings-0.4.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-strings-0.4.2.bazel index 412effdf6db..1cfcc59e7ed 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-strings-0.4.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-strings-0.4.2.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.52.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.52.0.bazel index 7e31f8f0880..9aee199dc0a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.52.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.52.0.bazel @@ -72,6 +72,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.59.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.59.0.bazel index f744a0937da..b3222f2a658 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.59.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.59.0.bazel @@ -70,6 +70,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.60.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.60.2.bazel index 1d83a074bfd..2008e7287ac 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.60.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.60.2.bazel @@ -75,6 +75,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.61.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.61.0.bazel index ba1daef32f2..a6f072e5b2a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.61.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-sys-0.61.0.bazel @@ -77,6 +77,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-targets-0.52.6.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-targets-0.52.6.bazel index cd7e40af7c3..82fb2acfc31 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-targets-0.52.6.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-targets-0.52.6.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-targets-0.53.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-targets-0.53.3.bazel index d719429a8dc..56bad6b1174 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-targets-0.53.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-targets-0.53.3.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_aarch64_gnullvm-0.52.6.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_aarch64_gnullvm-0.52.6.bazel index ef1741d80d4..633de17430d 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_aarch64_gnullvm-0.52.6.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_aarch64_gnullvm-0.52.6.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_aarch64_gnullvm-0.53.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_aarch64_gnullvm-0.53.0.bazel index 602461b5c35..00807d34df3 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_aarch64_gnullvm-0.53.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_aarch64_gnullvm-0.53.0.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_aarch64_msvc-0.52.6.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_aarch64_msvc-0.52.6.bazel index f9a5577d654..2aa1466d81d 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_aarch64_msvc-0.52.6.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_aarch64_msvc-0.52.6.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_aarch64_msvc-0.53.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_aarch64_msvc-0.53.0.bazel index e69571a86c9..e66c8c46945 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_aarch64_msvc-0.53.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_aarch64_msvc-0.53.0.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_gnu-0.52.6.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_gnu-0.52.6.bazel index a1a0cbcda3a..d30adc2538f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_gnu-0.52.6.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_gnu-0.52.6.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_gnu-0.53.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_gnu-0.53.0.bazel index ae4bfaa33b3..437938cf242 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_gnu-0.53.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_gnu-0.53.0.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_gnullvm-0.52.6.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_gnullvm-0.52.6.bazel index 0188a24e021..5d18a1d418f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_gnullvm-0.52.6.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_gnullvm-0.52.6.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_gnullvm-0.53.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_gnullvm-0.53.0.bazel index 27afbde319d..51364c25a81 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_gnullvm-0.53.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_gnullvm-0.53.0.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_msvc-0.52.6.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_msvc-0.52.6.bazel index 06d2929a45f..977fc0c5575 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_msvc-0.52.6.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_msvc-0.52.6.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_msvc-0.53.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_msvc-0.53.0.bazel index 7772ad2658c..ca459bbcb83 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_msvc-0.53.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_i686_msvc-0.53.0.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_gnu-0.52.6.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_gnu-0.52.6.bazel index 9520c81c38e..b446bfdbb5b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_gnu-0.52.6.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_gnu-0.52.6.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_gnu-0.53.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_gnu-0.53.0.bazel index 8c35bce1d55..e8ffe9e4cbf 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_gnu-0.53.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_gnu-0.53.0.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_gnullvm-0.52.6.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_gnullvm-0.52.6.bazel index b73914ecb7c..31d4d5a8b6f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_gnullvm-0.52.6.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_gnullvm-0.52.6.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_gnullvm-0.53.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_gnullvm-0.53.0.bazel index 6d9af145384..df9e56de61d 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_gnullvm-0.53.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_gnullvm-0.53.0.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_msvc-0.52.6.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_msvc-0.52.6.bazel index 6cfc3a6ef6f..99ef607128c 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_msvc-0.52.6.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_msvc-0.52.6.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_msvc-0.53.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_msvc-0.53.0.bazel index 6886d7c018a..ceaf0cb6337 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_msvc-0.53.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows_x86_64_msvc-0.53.0.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winnow-0.7.13.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winnow-0.7.13.bazel index 3d741c7c121..997a4bf65d4 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winnow-0.7.13.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.winnow-0.7.13.bazel @@ -66,6 +66,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wit-bindgen-0.45.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wit-bindgen-0.45.1.bazel index b1993606fb8..4960067c91a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wit-bindgen-0.45.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wit-bindgen-0.45.1.bazel @@ -65,6 +65,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.writeable-0.6.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.writeable-0.6.1.bazel index 91386e84b83..28b6f63ce6f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.writeable-0.6.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.writeable-0.6.1.bazel @@ -61,6 +61,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.yansi-1.0.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.yansi-1.0.1.bazel index 33212c84bf0..8770902865a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.yansi-1.0.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.yansi-1.0.1.bazel @@ -66,6 +66,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.yoke-0.8.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.yoke-0.8.0.bazel index 5a2396ce8c2..ecef8b52a73 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.yoke-0.8.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.yoke-0.8.0.bazel @@ -69,6 +69,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.yoke-derive-0.8.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.yoke-derive-0.8.0.bazel index b1f81925305..1529534e17b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.yoke-derive-0.8.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.yoke-derive-0.8.0.bazel @@ -61,6 +61,7 @@ rust_proc_macro( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-0.8.27.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-0.8.27.bazel index 9e99c8ff5ca..e0fee3f0f2e 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-0.8.27.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-0.8.27.bazel @@ -68,6 +68,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-derive-0.8.27.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-derive-0.8.27.bazel index 0b0f63f88cc..11df1449c96 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-derive-0.8.27.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-derive-0.8.27.bazel @@ -61,6 +61,7 @@ rust_proc_macro( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerofrom-0.1.6.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerofrom-0.1.6.bazel index 35d1978548b..fbb85d748c8 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerofrom-0.1.6.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerofrom-0.1.6.bazel @@ -68,6 +68,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerofrom-derive-0.1.6.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerofrom-derive-0.1.6.bazel index 6e1f2b13254..ff9c1ef2142 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerofrom-derive-0.1.6.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerofrom-derive-0.1.6.bazel @@ -61,6 +61,7 @@ rust_proc_macro( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerotrie-0.2.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerotrie-0.2.2.bazel index 94342aec8e3..1bcd44131b7 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerotrie-0.2.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerotrie-0.2.2.bazel @@ -68,6 +68,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerovec-0.11.4.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerovec-0.11.4.bazel index 931a800f5d0..a8fe8f8c7e9 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerovec-0.11.4.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerovec-0.11.4.bazel @@ -69,6 +69,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerovec-derive-0.11.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerovec-derive-0.11.1.bazel index 820d85f680f..ace3c224c5d 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerovec-derive-0.11.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerovec-derive-0.11.1.bazel @@ -61,6 +61,7 @@ rust_proc_macro( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zstd-0.13.3.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zstd-0.13.3.bazel index 2cb5eb09652..ff3e776a7f8 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zstd-0.13.3.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zstd-0.13.3.bazel @@ -67,6 +67,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zstd-safe-7.2.4.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zstd-safe-7.2.4.bazel index f51a0c3a30e..eed1e00af81 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zstd-safe-7.2.4.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zstd-safe-7.2.4.bazel @@ -71,6 +71,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zstd-sys-2.0.16+zstd.1.5.7.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zstd-sys-2.0.16+zstd.1.5.7.bazel index 060e52d4a08..32a06f94788 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zstd-sys-2.0.16+zstd.1.5.7.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zstd-sys-2.0.16+zstd.1.5.7.bazel @@ -70,6 +70,7 @@ rust_library( "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], "@rules_rust//rust/platform:aarch64-unknown-uefi": [], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:arm-unknown-linux-musleabi": [], "@rules_rust//rust/platform:armv7-linux-androideabi": [], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], "@rules_rust//rust/platform:i686-apple-darwin": [], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl b/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl index a56d266ab74..bf11bc6c82f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl @@ -154,7 +154,7 @@ def all_crate_deps( normal (bool, optional): If True, normal dependencies are included in the output list. normal_dev (bool, optional): If True, normal dev dependencies will be - included in the output list.. + included in the output list. proc_macro (bool, optional): If True, proc_macro dependencies are included in the output list. proc_macro_dev (bool, optional): If True, dev proc_macro dependencies are @@ -585,17 +585,18 @@ _CONDITIONS = { "aarch64-unknown-nto-qnx710": ["@rules_rust//rust/platform:aarch64-unknown-nto-qnx710"], "aarch64-unknown-uefi": ["@rules_rust//rust/platform:aarch64-unknown-uefi"], "arm-unknown-linux-gnueabi": ["@rules_rust//rust/platform:arm-unknown-linux-gnueabi"], + "arm-unknown-linux-musleabi": ["@rules_rust//rust/platform:arm-unknown-linux-musleabi"], "armv7-linux-androideabi": ["@rules_rust//rust/platform:armv7-linux-androideabi"], "armv7-unknown-linux-gnueabi": ["@rules_rust//rust/platform:armv7-unknown-linux-gnueabi"], "cfg(all(any(target_arch = \"x86_64\", target_arch = \"arm64ec\"), target_env = \"msvc\", not(windows_raw_dylib)))": ["@rules_rust//rust/platform:x86_64-pc-windows-msvc"], - "cfg(all(any(target_os = \"linux\", target_os = \"android\"), not(any(all(target_os = \"linux\", target_env = \"\"), getrandom_backend = \"custom\", getrandom_backend = \"linux_raw\", getrandom_backend = \"rdrand\", getrandom_backend = \"rndr\"))))": ["@rules_rust//rust/platform:aarch64-linux-android", "@rules_rust//rust/platform:aarch64-unknown-linux-gnu", "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu", "@rules_rust//rust/platform:arm-unknown-linux-gnueabi", "@rules_rust//rust/platform:armv7-linux-androideabi", "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi", "@rules_rust//rust/platform:i686-linux-android", "@rules_rust//rust/platform:i686-unknown-linux-gnu", "@rules_rust//rust/platform:powerpc-unknown-linux-gnu", "@rules_rust//rust/platform:riscv64gc-unknown-linux-gnu", "@rules_rust//rust/platform:s390x-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-linux-android", "@rules_rust//rust/platform:x86_64-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu"], + "cfg(all(any(target_os = \"linux\", target_os = \"android\"), not(any(all(target_os = \"linux\", target_env = \"\"), getrandom_backend = \"custom\", getrandom_backend = \"linux_raw\", getrandom_backend = \"rdrand\", getrandom_backend = \"rndr\"))))": ["@rules_rust//rust/platform:aarch64-linux-android", "@rules_rust//rust/platform:aarch64-unknown-linux-gnu", "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu", "@rules_rust//rust/platform:arm-unknown-linux-gnueabi", "@rules_rust//rust/platform:arm-unknown-linux-musleabi", "@rules_rust//rust/platform:armv7-linux-androideabi", "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi", "@rules_rust//rust/platform:i686-linux-android", "@rules_rust//rust/platform:i686-unknown-linux-gnu", "@rules_rust//rust/platform:powerpc-unknown-linux-gnu", "@rules_rust//rust/platform:riscv64gc-unknown-linux-gnu", "@rules_rust//rust/platform:s390x-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-linux-android", "@rules_rust//rust/platform:x86_64-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu"], "cfg(all(target_arch = \"aarch64\", target_env = \"msvc\", not(windows_raw_dylib)))": ["@rules_rust//rust/platform:aarch64-pc-windows-msvc"], "cfg(all(target_arch = \"wasm32\", target_os = \"unknown\"))": ["@rules_rust//rust/platform:wasm32-unknown-unknown"], "cfg(all(target_arch = \"wasm32\", target_os = \"wasi\", target_env = \"p2\"))": ["@rules_rust//rust/platform:wasm32-wasip2"], "cfg(all(target_arch = \"x86\", target_env = \"gnu\", not(target_abi = \"llvm\"), not(windows_raw_dylib)))": ["@rules_rust//rust/platform:i686-unknown-linux-gnu"], "cfg(all(target_arch = \"x86\", target_env = \"msvc\", not(windows_raw_dylib)))": ["@rules_rust//rust/platform:i686-pc-windows-msvc"], "cfg(all(target_arch = \"x86_64\", target_env = \"gnu\", not(target_abi = \"llvm\"), not(windows_raw_dylib)))": ["@rules_rust//rust/platform:x86_64-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu"], - "cfg(all(target_os = \"linux\", not(target_env = \"ohos\")))": ["@rules_rust//rust/platform:aarch64-unknown-linux-gnu", "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu", "@rules_rust//rust/platform:arm-unknown-linux-gnueabi", "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi", "@rules_rust//rust/platform:i686-unknown-linux-gnu", "@rules_rust//rust/platform:powerpc-unknown-linux-gnu", "@rules_rust//rust/platform:riscv64gc-unknown-linux-gnu", "@rules_rust//rust/platform:s390x-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu"], + "cfg(all(target_os = \"linux\", not(target_env = \"ohos\")))": ["@rules_rust//rust/platform:aarch64-unknown-linux-gnu", "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu", "@rules_rust//rust/platform:arm-unknown-linux-gnueabi", "@rules_rust//rust/platform:arm-unknown-linux-musleabi", "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi", "@rules_rust//rust/platform:i686-unknown-linux-gnu", "@rules_rust//rust/platform:powerpc-unknown-linux-gnu", "@rules_rust//rust/platform:riscv64gc-unknown-linux-gnu", "@rules_rust//rust/platform:s390x-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu"], "cfg(all(target_os = \"linux\", target_env = \"gnu\"))": ["@rules_rust//rust/platform:aarch64-unknown-linux-gnu", "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu", "@rules_rust//rust/platform:arm-unknown-linux-gnueabi", "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi", "@rules_rust//rust/platform:i686-unknown-linux-gnu", "@rules_rust//rust/platform:powerpc-unknown-linux-gnu", "@rules_rust//rust/platform:riscv64gc-unknown-linux-gnu", "@rules_rust//rust/platform:s390x-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu"], "cfg(all(target_os = \"uefi\", getrandom_backend = \"efi_rng\"))": [], "cfg(any())": [], @@ -603,10 +604,10 @@ _CONDITIONS = { "cfg(any(target_os = \"freebsd\", target_os = \"openbsd\", target_os = \"netbsd\", target_os = \"dragonflybsd\", target_os = \"ios\"))": ["@rules_rust//rust/platform:aarch64-apple-ios", "@rules_rust//rust/platform:aarch64-apple-ios-sim", "@rules_rust//rust/platform:i686-unknown-freebsd", "@rules_rust//rust/platform:x86_64-apple-ios", "@rules_rust//rust/platform:x86_64-unknown-freebsd"], "cfg(any(target_os = \"haiku\", target_os = \"redox\", target_os = \"nto\", target_os = \"aix\"))": ["@rules_rust//rust/platform:aarch64-unknown-nto-qnx710"], "cfg(any(target_os = \"ios\", target_os = \"visionos\", target_os = \"watchos\", target_os = \"tvos\"))": ["@rules_rust//rust/platform:aarch64-apple-ios", "@rules_rust//rust/platform:aarch64-apple-ios-sim", "@rules_rust//rust/platform:x86_64-apple-ios"], - "cfg(any(target_os = \"linux\", target_os = \"android\"))": ["@rules_rust//rust/platform:aarch64-linux-android", "@rules_rust//rust/platform:aarch64-unknown-linux-gnu", "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu", "@rules_rust//rust/platform:arm-unknown-linux-gnueabi", "@rules_rust//rust/platform:armv7-linux-androideabi", "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi", "@rules_rust//rust/platform:i686-linux-android", "@rules_rust//rust/platform:i686-unknown-linux-gnu", "@rules_rust//rust/platform:powerpc-unknown-linux-gnu", "@rules_rust//rust/platform:riscv64gc-unknown-linux-gnu", "@rules_rust//rust/platform:s390x-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-linux-android", "@rules_rust//rust/platform:x86_64-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu"], + "cfg(any(target_os = \"linux\", target_os = \"android\"))": ["@rules_rust//rust/platform:aarch64-linux-android", "@rules_rust//rust/platform:aarch64-unknown-linux-gnu", "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu", "@rules_rust//rust/platform:arm-unknown-linux-gnueabi", "@rules_rust//rust/platform:arm-unknown-linux-musleabi", "@rules_rust//rust/platform:armv7-linux-androideabi", "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi", "@rules_rust//rust/platform:i686-linux-android", "@rules_rust//rust/platform:i686-unknown-linux-gnu", "@rules_rust//rust/platform:powerpc-unknown-linux-gnu", "@rules_rust//rust/platform:riscv64gc-unknown-linux-gnu", "@rules_rust//rust/platform:s390x-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-linux-android", "@rules_rust//rust/platform:x86_64-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu"], "cfg(any(target_os = \"macos\", target_os = \"openbsd\", target_os = \"vita\", target_os = \"emscripten\"))": ["@rules_rust//rust/platform:aarch64-apple-darwin", "@rules_rust//rust/platform:i686-apple-darwin", "@rules_rust//rust/platform:wasm32-unknown-emscripten", "@rules_rust//rust/platform:x86_64-apple-darwin"], - "cfg(any(target_pointer_width = \"8\", target_pointer_width = \"16\", target_pointer_width = \"32\"))": ["@rules_rust//rust/platform:arm-unknown-linux-gnueabi", "@rules_rust//rust/platform:armv7-linux-androideabi", "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi", "@rules_rust//rust/platform:i686-apple-darwin", "@rules_rust//rust/platform:i686-linux-android", "@rules_rust//rust/platform:i686-pc-windows-msvc", "@rules_rust//rust/platform:i686-unknown-freebsd", "@rules_rust//rust/platform:i686-unknown-linux-gnu", "@rules_rust//rust/platform:powerpc-unknown-linux-gnu", "@rules_rust//rust/platform:riscv32imc-unknown-none-elf", "@rules_rust//rust/platform:thumbv7em-none-eabi", "@rules_rust//rust/platform:thumbv8m.main-none-eabi", "@rules_rust//rust/platform:wasm32-unknown-emscripten", "@rules_rust//rust/platform:wasm32-unknown-unknown", "@rules_rust//rust/platform:wasm32-wasip1", "@rules_rust//rust/platform:wasm32-wasip1-threads", "@rules_rust//rust/platform:wasm32-wasip2"], - "cfg(not(windows))": ["@rules_rust//rust/platform:aarch64-apple-darwin", "@rules_rust//rust/platform:aarch64-apple-ios", "@rules_rust//rust/platform:aarch64-apple-ios-sim", "@rules_rust//rust/platform:aarch64-linux-android", "@rules_rust//rust/platform:aarch64-unknown-fuchsia", "@rules_rust//rust/platform:aarch64-unknown-linux-gnu", "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu", "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710", "@rules_rust//rust/platform:aarch64-unknown-uefi", "@rules_rust//rust/platform:arm-unknown-linux-gnueabi", "@rules_rust//rust/platform:armv7-linux-androideabi", "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi", "@rules_rust//rust/platform:i686-apple-darwin", "@rules_rust//rust/platform:i686-linux-android", "@rules_rust//rust/platform:i686-unknown-freebsd", "@rules_rust//rust/platform:i686-unknown-linux-gnu", "@rules_rust//rust/platform:powerpc-unknown-linux-gnu", "@rules_rust//rust/platform:riscv32imc-unknown-none-elf", "@rules_rust//rust/platform:riscv64gc-unknown-linux-gnu", "@rules_rust//rust/platform:riscv64gc-unknown-none-elf", "@rules_rust//rust/platform:s390x-unknown-linux-gnu", "@rules_rust//rust/platform:thumbv7em-none-eabi", "@rules_rust//rust/platform:thumbv8m.main-none-eabi", "@rules_rust//rust/platform:wasm32-unknown-emscripten", "@rules_rust//rust/platform:wasm32-unknown-unknown", "@rules_rust//rust/platform:wasm32-wasip1", "@rules_rust//rust/platform:wasm32-wasip1-threads", "@rules_rust//rust/platform:wasm32-wasip2", "@rules_rust//rust/platform:x86_64-apple-darwin", "@rules_rust//rust/platform:x86_64-apple-ios", "@rules_rust//rust/platform:x86_64-linux-android", "@rules_rust//rust/platform:x86_64-unknown-freebsd", "@rules_rust//rust/platform:x86_64-unknown-fuchsia", "@rules_rust//rust/platform:x86_64-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu", "@rules_rust//rust/platform:x86_64-unknown-none", "@rules_rust//rust/platform:x86_64-unknown-uefi"], + "cfg(any(target_pointer_width = \"8\", target_pointer_width = \"16\", target_pointer_width = \"32\"))": ["@rules_rust//rust/platform:arm-unknown-linux-gnueabi", "@rules_rust//rust/platform:arm-unknown-linux-musleabi", "@rules_rust//rust/platform:armv7-linux-androideabi", "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi", "@rules_rust//rust/platform:i686-apple-darwin", "@rules_rust//rust/platform:i686-linux-android", "@rules_rust//rust/platform:i686-pc-windows-msvc", "@rules_rust//rust/platform:i686-unknown-freebsd", "@rules_rust//rust/platform:i686-unknown-linux-gnu", "@rules_rust//rust/platform:powerpc-unknown-linux-gnu", "@rules_rust//rust/platform:riscv32imc-unknown-none-elf", "@rules_rust//rust/platform:thumbv7em-none-eabi", "@rules_rust//rust/platform:thumbv8m.main-none-eabi", "@rules_rust//rust/platform:wasm32-unknown-emscripten", "@rules_rust//rust/platform:wasm32-unknown-unknown", "@rules_rust//rust/platform:wasm32-wasip1", "@rules_rust//rust/platform:wasm32-wasip1-threads", "@rules_rust//rust/platform:wasm32-wasip2"], + "cfg(not(windows))": ["@rules_rust//rust/platform:aarch64-apple-darwin", "@rules_rust//rust/platform:aarch64-apple-ios", "@rules_rust//rust/platform:aarch64-apple-ios-sim", "@rules_rust//rust/platform:aarch64-linux-android", "@rules_rust//rust/platform:aarch64-unknown-fuchsia", "@rules_rust//rust/platform:aarch64-unknown-linux-gnu", "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu", "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710", "@rules_rust//rust/platform:aarch64-unknown-uefi", "@rules_rust//rust/platform:arm-unknown-linux-gnueabi", "@rules_rust//rust/platform:arm-unknown-linux-musleabi", "@rules_rust//rust/platform:armv7-linux-androideabi", "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi", "@rules_rust//rust/platform:i686-apple-darwin", "@rules_rust//rust/platform:i686-linux-android", "@rules_rust//rust/platform:i686-unknown-freebsd", "@rules_rust//rust/platform:i686-unknown-linux-gnu", "@rules_rust//rust/platform:powerpc-unknown-linux-gnu", "@rules_rust//rust/platform:riscv32imc-unknown-none-elf", "@rules_rust//rust/platform:riscv64gc-unknown-linux-gnu", "@rules_rust//rust/platform:riscv64gc-unknown-none-elf", "@rules_rust//rust/platform:s390x-unknown-linux-gnu", "@rules_rust//rust/platform:thumbv7em-none-eabi", "@rules_rust//rust/platform:thumbv8m.main-none-eabi", "@rules_rust//rust/platform:wasm32-unknown-emscripten", "@rules_rust//rust/platform:wasm32-unknown-unknown", "@rules_rust//rust/platform:wasm32-wasip1", "@rules_rust//rust/platform:wasm32-wasip1-threads", "@rules_rust//rust/platform:wasm32-wasip2", "@rules_rust//rust/platform:x86_64-apple-darwin", "@rules_rust//rust/platform:x86_64-apple-ios", "@rules_rust//rust/platform:x86_64-linux-android", "@rules_rust//rust/platform:x86_64-unknown-freebsd", "@rules_rust//rust/platform:x86_64-unknown-fuchsia", "@rules_rust//rust/platform:x86_64-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu", "@rules_rust//rust/platform:x86_64-unknown-none", "@rules_rust//rust/platform:x86_64-unknown-uefi"], "cfg(target_os = \"android\")": ["@rules_rust//rust/platform:aarch64-linux-android", "@rules_rust//rust/platform:armv7-linux-androideabi", "@rules_rust//rust/platform:i686-linux-android", "@rules_rust//rust/platform:x86_64-linux-android"], "cfg(target_os = \"haiku\")": [], "cfg(target_os = \"hermit\")": [], @@ -618,7 +619,7 @@ _CONDITIONS = { "cfg(target_os = \"wasi\")": ["@rules_rust//rust/platform:wasm32-wasip1", "@rules_rust//rust/platform:wasm32-wasip1-threads", "@rules_rust//rust/platform:wasm32-wasip2"], "cfg(target_os = \"windows\")": ["@rules_rust//rust/platform:aarch64-pc-windows-msvc", "@rules_rust//rust/platform:i686-pc-windows-msvc", "@rules_rust//rust/platform:x86_64-pc-windows-msvc"], "cfg(target_vendor = \"apple\")": ["@rules_rust//rust/platform:aarch64-apple-darwin", "@rules_rust//rust/platform:aarch64-apple-ios", "@rules_rust//rust/platform:aarch64-apple-ios-sim", "@rules_rust//rust/platform:i686-apple-darwin", "@rules_rust//rust/platform:x86_64-apple-darwin", "@rules_rust//rust/platform:x86_64-apple-ios"], - "cfg(unix)": ["@rules_rust//rust/platform:aarch64-apple-darwin", "@rules_rust//rust/platform:aarch64-apple-ios", "@rules_rust//rust/platform:aarch64-apple-ios-sim", "@rules_rust//rust/platform:aarch64-linux-android", "@rules_rust//rust/platform:aarch64-unknown-fuchsia", "@rules_rust//rust/platform:aarch64-unknown-linux-gnu", "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu", "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710", "@rules_rust//rust/platform:arm-unknown-linux-gnueabi", "@rules_rust//rust/platform:armv7-linux-androideabi", "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi", "@rules_rust//rust/platform:i686-apple-darwin", "@rules_rust//rust/platform:i686-linux-android", "@rules_rust//rust/platform:i686-unknown-freebsd", "@rules_rust//rust/platform:i686-unknown-linux-gnu", "@rules_rust//rust/platform:powerpc-unknown-linux-gnu", "@rules_rust//rust/platform:riscv64gc-unknown-linux-gnu", "@rules_rust//rust/platform:s390x-unknown-linux-gnu", "@rules_rust//rust/platform:wasm32-unknown-emscripten", "@rules_rust//rust/platform:x86_64-apple-darwin", "@rules_rust//rust/platform:x86_64-apple-ios", "@rules_rust//rust/platform:x86_64-linux-android", "@rules_rust//rust/platform:x86_64-unknown-freebsd", "@rules_rust//rust/platform:x86_64-unknown-fuchsia", "@rules_rust//rust/platform:x86_64-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu"], + "cfg(unix)": ["@rules_rust//rust/platform:aarch64-apple-darwin", "@rules_rust//rust/platform:aarch64-apple-ios", "@rules_rust//rust/platform:aarch64-apple-ios-sim", "@rules_rust//rust/platform:aarch64-linux-android", "@rules_rust//rust/platform:aarch64-unknown-fuchsia", "@rules_rust//rust/platform:aarch64-unknown-linux-gnu", "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu", "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710", "@rules_rust//rust/platform:arm-unknown-linux-gnueabi", "@rules_rust//rust/platform:arm-unknown-linux-musleabi", "@rules_rust//rust/platform:armv7-linux-androideabi", "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi", "@rules_rust//rust/platform:i686-apple-darwin", "@rules_rust//rust/platform:i686-linux-android", "@rules_rust//rust/platform:i686-unknown-freebsd", "@rules_rust//rust/platform:i686-unknown-linux-gnu", "@rules_rust//rust/platform:powerpc-unknown-linux-gnu", "@rules_rust//rust/platform:riscv64gc-unknown-linux-gnu", "@rules_rust//rust/platform:s390x-unknown-linux-gnu", "@rules_rust//rust/platform:wasm32-unknown-emscripten", "@rules_rust//rust/platform:x86_64-apple-darwin", "@rules_rust//rust/platform:x86_64-apple-ios", "@rules_rust//rust/platform:x86_64-linux-android", "@rules_rust//rust/platform:x86_64-unknown-freebsd", "@rules_rust//rust/platform:x86_64-unknown-fuchsia", "@rules_rust//rust/platform:x86_64-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu"], "cfg(windows)": ["@rules_rust//rust/platform:aarch64-pc-windows-msvc", "@rules_rust//rust/platform:i686-pc-windows-msvc", "@rules_rust//rust/platform:x86_64-pc-windows-msvc"], "cfg(windows_raw_dylib)": [], "i686-apple-darwin": ["@rules_rust//rust/platform:i686-apple-darwin"], diff --git a/misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/MODULE.bazel b/misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/MODULE.bazel deleted file mode 100644 index 22ffb59624d..00000000000 --- a/misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/MODULE.bazel +++ /dev/null @@ -1,151 +0,0 @@ -"""bazelbuild/rules_rust""" - -module( - name = "rules_rust", - version = "0.68.1.codeql.1", -) - -############################################################################### -## Core -############################################################################### - -bazel_dep(name = "bazel_features", version = "1.32.0") -bazel_dep(name = "bazel_skylib", version = "1.8.2") -bazel_dep(name = "platforms", version = "1.0.0") -bazel_dep(name = "rules_cc", version = "0.2.4") -bazel_dep(name = "rules_license", version = "1.0.0") -bazel_dep(name = "rules_shell", version = "0.6.1") -bazel_dep(name = "apple_support", version = "1.24.1", repo_name = "build_bazel_apple_support") - -internal_deps = use_extension("//rust/private:internal_extensions.bzl", "i") -use_repo( - internal_deps, - "rrra", - "rrra__anyhow-1.0.71", - "rrra__camino-1.1.9", - "rrra__clap-4.3.11", - "rrra__env_logger-0.10.0", - "rrra__itertools-0.11.0", - "rrra__log-0.4.19", - "rrra__serde-1.0.171", - "rrra__serde_json-1.0.102", - "rules_rust_tinyjson", -) - -cargo_internal_deps = use_extension("//cargo/private:internal_extensions.bzl", "i") -use_repo( - cargo_internal_deps, - "rrc", - "rrc__cargo-util-schemas-0.3.1", - "rrc__cargo_toml-0.20.5", - "rrc__pathdiff-0.1.0", - "rrc__semver-1.0.25", - "rrc__toml-0.8.20", -) - -rust = use_extension("//rust:extensions.bzl", "rust") -rust.toolchain(edition = "2021") -use_repo(rust, "rust_toolchains") - -register_toolchains( - "@rust_toolchains//:all", -) - -rust_host_tools = use_extension("//rust:extensions.bzl", "rust_host_tools") -rust_host_tools.host_tools( - name = "rust_host_tools", -) -use_repo( - rust_host_tools, - "rust_host_tools", -) - -rust_test = use_extension("//test:test_extensions.bzl", "rust_test", dev_dependency = True) -use_repo( - rust_test, - "buildkite_config", - "generated_inputs_in_external_repo", - "libc", - "rtra", - "rtra__serde-1.0.228", - "rtra__serde_json-1.0.145", - "rtvsc", - "rtvsc__serde-1.0.228", - "rtvsc__serde_json-1.0.145", - "rules_rust_test_load_arbitrary_tool", - "rules_rust_toolchain_test_target_json", -) - -bazel_dep(name = "rules_python", version = "1.9.0", dev_dependency = True) -bazel_dep(name = "rules_testing", version = "0.7.0", dev_dependency = True) -bazel_dep(name = "bazel_ci_rules", version = "1.0.0", dev_dependency = True) - -############################################################################### -## Crate Universe -############################################################################### - -crate_universe_internal_deps = use_extension( - "//crate_universe/private:internal_extensions.bzl", - "cu", -) -use_repo( - crate_universe_internal_deps, - "cargo_bazel.buildifier-darwin-amd64", - "cargo_bazel.buildifier-darwin-arm64", - "cargo_bazel.buildifier-linux-amd64", - "cargo_bazel.buildifier-linux-arm64", - "cargo_bazel.buildifier-windows-amd64.exe", - "cui", - "cui__anyhow-1.0.98", - "cui__camino-1.1.9", - "cui__cargo-lock-10.1.0", - "cui__cargo-platform-0.1.9", - "cui__cargo_metadata-0.19.2", - "cui__cargo_toml-0.22.1", - "cui__cfg-expr-0.18.0", - "cui__clap-4.5.37", - "cui__crates-index-3.7.0", - "cui__glob-0.3.2", - "cui__hex-0.4.3", - "cui__indoc-2.0.6", - "cui__itertools-0.14.0", - "cui__maplit-1.0.2", - "cui__normpath-1.3.0", - "cui__once_cell-1.21.3", - "cui__pathdiff-0.2.3", - "cui__regex-1.11.1", - "cui__semver-1.0.26", - "cui__serde-1.0.219", - "cui__serde_json-1.0.140", - "cui__serde_starlark-0.1.17", - "cui__sha2-0.10.8", - "cui__spdx-0.10.8", - "cui__tempfile-3.19.1", - "cui__tera-1.20.0", - "cui__textwrap-0.16.2", - "cui__toml-0.8.21", - "cui__tracing-0.1.41", - "cui__tracing-subscriber-0.3.19", - "cui__url-2.5.4", - "cui__walkdir-2.5.0", -) - -crate_universe_internal_non_repro_deps = use_extension( - "//crate_universe/private:internal_extensions.bzl", - "cu_nr", -) -use_repo( - crate_universe_internal_non_repro_deps, - "cargo_bazel_bootstrap", -) - -crate_universe_internal_dev_deps = use_extension( - "//crate_universe/private:internal_extensions.bzl", - "cu_dev", - dev_dependency = True, -) -use_repo( - crate_universe_internal_dev_deps, - "cross_rs", - "cross_rs_host_bin", -) diff --git a/misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/patches/include_rmeta_in_stdlib.patch b/misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/patches/include_rmeta_in_stdlib.patch deleted file mode 100644 index 3707cb51b63..00000000000 --- a/misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/patches/include_rmeta_in_stdlib.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/rust/private/repository_utils.bzl b/rust/private/repository_utils.bzl -index 05b741947..f88074af6 100644 ---- a/rust/private/repository_utils.bzl -+++ b/rust/private/repository_utils.bzl -@@ -280,6 +280,7 @@ rust_stdlib_filegroup( - srcs = glob( - [ - "lib/rustlib/{target_triple}/lib/*.rlib", -+ "lib/rustlib/{target_triple}/lib/*.rmeta", - "lib/rustlib/{target_triple}/lib/*{dylib_ext}*", - "lib/rustlib/{target_triple}/lib/*{staticlib_ext}", - "lib/rustlib/{target_triple}/lib/self-contained/**", diff --git a/misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/source.json b/misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/source.json deleted file mode 100644 index 6048521ce2f..00000000000 --- a/misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/source.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "integrity": "sha256-yKqAbPYGZnmsI0YyQe6ArWkiZdrQRl9RERy74wuJA1I=", - "strip_prefix": "", - "url": "https://github.com/bazelbuild/rules_rust/releases/download/0.68.1/rules_rust-0.68.1.tar.gz", - "patches": { - "include_rmeta_in_stdlib.patch": "sha256-7n8XHpfkLUMEbRG6lKqdhLWydsWlRRG+Ywkxk6LvY9c=" - }, - "patch_strip": 1 -} diff --git a/misc/bazel/registry/modules/rules_rust/metadata.json b/misc/bazel/registry/modules/rules_rust/metadata.json deleted file mode 100644 index deffe6f6dfa..00000000000 --- a/misc/bazel/registry/modules/rules_rust/metadata.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "homepage": "https://github.com/bazelbuild/rules_rust", - "maintainers": [], - "repository": [ - "github:bazelbuild/rules_rust" - ], - "versions": [ - "0.68.1.codeql.1" - ], - "yanked_versions": {} -} From da7da80b2b1ec88e0b14e0313ed88e133c3d28fb Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 10 Mar 2026 08:42:05 +0000 Subject: [PATCH 016/185] C++: Add pseudo-buildless test cases (some missing declarations). --- .../Arithmetic/IntMultToLong/Buildless.c | 28 +++++++++++++++++++ .../IntMultToLong/IntMultToLong.expected | 5 ++++ 2 files changed, 33 insertions(+) create mode 100644 cpp/ql/test/query-tests/Likely Bugs/Arithmetic/IntMultToLong/Buildless.c diff --git a/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/IntMultToLong/Buildless.c b/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/IntMultToLong/Buildless.c new file mode 100644 index 00000000000..8f14110a3b9 --- /dev/null +++ b/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/IntMultToLong/Buildless.c @@ -0,0 +1,28 @@ +// semmle-extractor-options: --expect_errors + +void test_float_double1(float f, double d) { + float r1 = f * f; // GOOD + float r2 = f * d; // GOOD + double r3 = f * f; // BAD + double r4 = f * d; // GOOD + + float f1 = fabsf(f * f); // GOOD [FALSE POSITIVE] + float f2 = fabsf(f * d); // GOOD + double f3 = fabs(f * f); // BAD + double f4 = fabs(f * d); // GOOD +} + +double fabs(double f); +float fabsf(float f); + +void test_float_double2(float f, double d) { + float r1 = f * f; // GOOD + float r2 = f * d; // GOOD + double r3 = f * f; // BAD + double r4 = f * d; // GOOD + + float f1 = fabsf(f * f); // GOOD + float f2 = fabsf(f * d); // GOOD + double f3 = fabs(f * f); // BAD + double f4 = fabs(f * d); // GOOD +} diff --git a/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/IntMultToLong/IntMultToLong.expected b/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/IntMultToLong/IntMultToLong.expected index 2806aaa809f..1a2427beb20 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/IntMultToLong/IntMultToLong.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/IntMultToLong/IntMultToLong.expected @@ -1,3 +1,8 @@ +| Buildless.c:6:17:6:21 | ... * ... | Multiplication result may overflow 'float' before it is converted to 'double'. | +| Buildless.c:9:22:9:26 | ... * ... | Multiplication result may overflow 'float' before it is converted to 'double'. | +| Buildless.c:11:22:11:26 | ... * ... | Multiplication result may overflow 'float' before it is converted to 'double'. | +| Buildless.c:21:17:21:21 | ... * ... | Multiplication result may overflow 'float' before it is converted to 'double'. | +| Buildless.c:26:22:26:26 | ... * ... | Multiplication result may overflow 'float' before it is converted to 'double'. | | IntMultToLong.c:4:10:4:14 | ... * ... | Multiplication result may overflow 'int' before it is converted to 'long long'. | | IntMultToLong.c:7:16:7:20 | ... * ... | Multiplication result may overflow 'int' before it is converted to 'long long'. | | IntMultToLong.c:18:19:18:23 | ... * ... | Multiplication result may overflow 'float' before it is converted to 'double'. | From 00d8a100515db3cf39cc8531bf5964e81b98fc64 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 11 Mar 2026 17:42:30 +0000 Subject: [PATCH 017/185] C++: Add Function.hasAmbiguousReturnType. --- cpp/ql/lib/semmle/code/cpp/Function.qll | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/Function.qll b/cpp/ql/lib/semmle/code/cpp/Function.qll index 10b156e3fb6..b5ea5b3cbc7 100644 --- a/cpp/ql/lib/semmle/code/cpp/Function.qll +++ b/cpp/ql/lib/semmle/code/cpp/Function.qll @@ -524,6 +524,14 @@ class Function extends Declaration, ControlFlowNode, AccessHolder, @function { not exists(NewOrNewArrayExpr new | e = new.getAllocatorCall().getArgument(0)) ) } + + /** + * Holds if this function has ambiguous return type (this occurs sometimes in + * Build Mode None). + */ + predicate hasAmbiguousReturnType() { + count(this.getType()) != 1 + } } pragma[noinline] From 6552c849f0d05d706b1cff7fe5ff21ff0d345f1e Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 11 Mar 2026 15:42:28 +0000 Subject: [PATCH 018/185] C++: Fix BMN issue in cpp/integer-multiplication-cast-to-long. --- cpp/ql/src/Likely Bugs/Arithmetic/IntMultToLong.ql | 4 +++- .../Likely Bugs/Arithmetic/IntMultToLong/Buildless.c | 6 +++--- .../Arithmetic/IntMultToLong/IntMultToLong.expected | 3 --- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/cpp/ql/src/Likely Bugs/Arithmetic/IntMultToLong.ql b/cpp/ql/src/Likely Bugs/Arithmetic/IntMultToLong.ql index a54ac9020c8..6747d177c80 100644 --- a/cpp/ql/src/Likely Bugs/Arithmetic/IntMultToLong.ql +++ b/cpp/ql/src/Likely Bugs/Arithmetic/IntMultToLong.ql @@ -218,7 +218,9 @@ where // only report if we cannot prove that the result of the // multiplication will be less (resp. greater) than the // maximum (resp. minimum) number we can compute. - overflows(me, t1) + overflows(me, t1) and + // exclude cases where the expression type may not have been extracted accurately + not me.getParent().(Call).getTarget().hasAmbiguousReturnType() select me, "Multiplication result may overflow '" + me.getType().toString() + "' before it is converted to '" + me.getFullyConverted().getType().toString() + "'." diff --git a/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/IntMultToLong/Buildless.c b/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/IntMultToLong/Buildless.c index 8f14110a3b9..3d01a28fae0 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/IntMultToLong/Buildless.c +++ b/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/IntMultToLong/Buildless.c @@ -6,9 +6,9 @@ void test_float_double1(float f, double d) { double r3 = f * f; // BAD double r4 = f * d; // GOOD - float f1 = fabsf(f * f); // GOOD [FALSE POSITIVE] + float f1 = fabsf(f * f); // GOOD float f2 = fabsf(f * d); // GOOD - double f3 = fabs(f * f); // BAD + double f3 = fabs(f * f); // BAD [NOT DETECTED] double f4 = fabs(f * d); // GOOD } @@ -23,6 +23,6 @@ void test_float_double2(float f, double d) { float f1 = fabsf(f * f); // GOOD float f2 = fabsf(f * d); // GOOD - double f3 = fabs(f * f); // BAD + double f3 = fabs(f * f); // BAD [NOT DETECTED] double f4 = fabs(f * d); // GOOD } diff --git a/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/IntMultToLong/IntMultToLong.expected b/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/IntMultToLong/IntMultToLong.expected index 1a2427beb20..05b2b7e1ea3 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/IntMultToLong/IntMultToLong.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/IntMultToLong/IntMultToLong.expected @@ -1,8 +1,5 @@ | Buildless.c:6:17:6:21 | ... * ... | Multiplication result may overflow 'float' before it is converted to 'double'. | -| Buildless.c:9:22:9:26 | ... * ... | Multiplication result may overflow 'float' before it is converted to 'double'. | -| Buildless.c:11:22:11:26 | ... * ... | Multiplication result may overflow 'float' before it is converted to 'double'. | | Buildless.c:21:17:21:21 | ... * ... | Multiplication result may overflow 'float' before it is converted to 'double'. | -| Buildless.c:26:22:26:26 | ... * ... | Multiplication result may overflow 'float' before it is converted to 'double'. | | IntMultToLong.c:4:10:4:14 | ... * ... | Multiplication result may overflow 'int' before it is converted to 'long long'. | | IntMultToLong.c:7:16:7:20 | ... * ... | Multiplication result may overflow 'int' before it is converted to 'long long'. | | IntMultToLong.c:18:19:18:23 | ... * ... | Multiplication result may overflow 'float' before it is converted to 'double'. | From 4a39055322bff79e0f2e4d3c3e283c6291440e19 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 11 Mar 2026 17:52:34 +0000 Subject: [PATCH 019/185] C++: Change note. --- .../2026-03-11-integer-multiplication-cast-to-long.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cpp/ql/src/change-notes/2026-03-11-integer-multiplication-cast-to-long.md diff --git a/cpp/ql/src/change-notes/2026-03-11-integer-multiplication-cast-to-long.md b/cpp/ql/src/change-notes/2026-03-11-integer-multiplication-cast-to-long.md new file mode 100644 index 00000000000..a0efd8a8785 --- /dev/null +++ b/cpp/ql/src/change-notes/2026-03-11-integer-multiplication-cast-to-long.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Fixed an issue with the "Multiplication result converted to larger type" (`cpp/integer-multiplication-cast-to-long`) query causing false positive results in Build Mode Node databases. From 6c792e69b341de543d31598c63acbc8fa4cba429 Mon Sep 17 00:00:00 2001 From: Jeongsoo Lee Date: Wed, 11 Mar 2026 13:53:24 -0700 Subject: [PATCH 020/185] Expose the indirection index --- .../semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll index fe954c640d1..d1eccf8c1cc 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll @@ -767,10 +767,11 @@ module Public { */ class UninitializedNode extends Node { LocalVariable v; + int indirectionIndex; UninitializedNode() { exists(SsaImpl::Definition def, SsaImpl::SourceVariable sv | - def.getIndirectionIndex() = 0 and + def.getIndirectionIndex() = indirectionIndex and def.getValue().asInstruction() instanceof UninitializedInstruction and SsaImpl::defToNode(this, def, sv) and v = sv.getBaseVariable().(SsaImpl::BaseIRVariable).getIRVariable().getAst() @@ -779,6 +780,9 @@ module Public { /** Gets the uninitialized local variable corresponding to this node. */ LocalVariable getLocalVariable() { result = v } + + /** Gets the level of indirection to get to this node. */ + int getIndirectionIndex() { result = indirectionIndex } } /** From ca7017f3d721eb5ede1eeedad89296592e188a7b Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 18 Feb 2026 08:30:40 +0100 Subject: [PATCH 021/185] Rust: Add more type inference tests --- .../type-inference/overloading.rs | 49 +++ .../type-inference/regressions.rs | 32 ++ .../type-inference/type-inference.expected | 354 ++++++++++++++++++ 3 files changed, 435 insertions(+) diff --git a/rust/ql/test/library-tests/type-inference/overloading.rs b/rust/ql/test/library-tests/type-inference/overloading.rs index 0bf6598c1d1..9d5e0f39cf7 100644 --- a/rust/ql/test/library-tests/type-inference/overloading.rs +++ b/rust/ql/test/library-tests/type-inference/overloading.rs @@ -400,3 +400,52 @@ mod from_default { x } } + +mod inherent_before_trait { + struct S(T); + + trait Trait { + fn foo(&self); + fn bar(&self); + } + + impl S { + // S::foo + fn foo(x: &Self) {} + + // S::bar + fn bar(&self) {} + } + + impl Trait for S { + // _as_Trait>::foo + fn foo(&self) { + S::foo(self); // $ MISSING: target=S::foo + S::::foo(self); // $ MISSING: target=S::foo + self.foo() // $ target=_as_Trait>::foo + } + + // _as_Trait>::bar + fn bar(&self) { + S::bar(self); // $ target=S::bar + S::::bar(self); // $ target=S::bar + self.bar() // $ target=S::bar + } + } + + impl Trait for S { + // _as_Trait>::foo + fn foo(&self) { + // `S::foo(self);` is not valid + S::::foo(self); // $ MISSING: target=_as_Trait>::foo + self.foo() // $ target=_as_Trait>::foo + } + + // _as_Trait>::bar + fn bar(&self) { + // `S::bar(self);` is not valid + S::::bar(self); // $ target=_as_Trait>::bar + self.bar() // $ target=_as_Trait>::bar + } + } +} diff --git a/rust/ql/test/library-tests/type-inference/regressions.rs b/rust/ql/test/library-tests/type-inference/regressions.rs index 9365588c64a..37c61b2b7e7 100644 --- a/rust/ql/test/library-tests/type-inference/regressions.rs +++ b/rust/ql/test/library-tests/type-inference/regressions.rs @@ -74,3 +74,35 @@ mod regression2 { let x = s1 - &s2; // $ target=S1SubRefS2 type=x:S2 } } + +mod regression3 { + trait SomeTrait {} + + trait MyFrom { + fn my_from(value: T) -> Self; + } + + impl MyFrom for T { + fn my_from(s: T) -> Self { + s + } + } + + impl MyFrom for Option { + fn my_from(val: T) -> Option { + Some(val) + } + } + + pub struct S(Ts); + + pub fn f(x: T2) -> T2 + where + T2: SomeTrait + MyFrom>, + Option: MyFrom, + { + let y = MyFrom::my_from(x); // $ target=my_from + let z = MyFrom::my_from(y); // $ target=my_from + z + } +} 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 d3ec61e9603..c9b948939ac 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -4012,6 +4012,70 @@ inferCertainType | overloading.rs:397:10:397:10 | b | | {EXTERNAL LOCATION} | bool | | overloading.rs:397:25:401:5 | { ... } | | overloading.rs:372:5:372:14 | S1 | | overloading.rs:398:20:398:20 | b | | {EXTERNAL LOCATION} | bool | +| overloading.rs:408:16:408:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| overloading.rs:408:16:408:20 | SelfParam | TRef | overloading.rs:407:5:410:5 | Self [trait Trait] | +| overloading.rs:409:16:409:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| overloading.rs:409:16:409:20 | SelfParam | TRef | overloading.rs:407:5:410:5 | Self [trait Trait] | +| overloading.rs:414:16:414:16 | x | | {EXTERNAL LOCATION} | & | +| overloading.rs:414:16:414:16 | x | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:414:16:414:16 | x | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:414:26:414:27 | { ... } | | {EXTERNAL LOCATION} | () | +| overloading.rs:417:16:417:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| overloading.rs:417:16:417:20 | SelfParam | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:417:16:417:20 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:417:23:417:24 | { ... } | | {EXTERNAL LOCATION} | () | +| overloading.rs:422:16:422:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| overloading.rs:422:16:422:20 | SelfParam | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:422:16:422:20 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:422:23:426:9 | { ... } | | {EXTERNAL LOCATION} | () | +| overloading.rs:423:13:423:24 | ...::foo(...) | | {EXTERNAL LOCATION} | () | +| overloading.rs:423:20:423:23 | self | | {EXTERNAL LOCATION} | & | +| overloading.rs:423:20:423:23 | self | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:423:20:423:23 | self | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:424:13:424:31 | ...::foo(...) | | {EXTERNAL LOCATION} | () | +| overloading.rs:424:27:424:30 | self | | {EXTERNAL LOCATION} | & | +| overloading.rs:424:27:424:30 | self | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:424:27:424:30 | self | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:425:13:425:16 | self | | {EXTERNAL LOCATION} | & | +| overloading.rs:425:13:425:16 | self | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:425:13:425:16 | self | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:429:16:429:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| overloading.rs:429:16:429:20 | SelfParam | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:429:16:429:20 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:429:23:433:9 | { ... } | | {EXTERNAL LOCATION} | () | +| overloading.rs:430:13:430:24 | ...::bar(...) | | {EXTERNAL LOCATION} | () | +| overloading.rs:430:20:430:23 | self | | {EXTERNAL LOCATION} | & | +| overloading.rs:430:20:430:23 | self | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:430:20:430:23 | self | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:431:13:431:31 | ...::bar(...) | | {EXTERNAL LOCATION} | () | +| overloading.rs:431:27:431:30 | self | | {EXTERNAL LOCATION} | & | +| overloading.rs:431:27:431:30 | self | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:431:27:431:30 | self | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:432:13:432:16 | self | | {EXTERNAL LOCATION} | & | +| overloading.rs:432:13:432:16 | self | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:432:13:432:16 | self | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:438:16:438:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| overloading.rs:438:16:438:20 | SelfParam | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:438:16:438:20 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i64 | +| overloading.rs:438:23:442:9 | { ... } | | {EXTERNAL LOCATION} | () | +| overloading.rs:440:13:440:31 | ...::foo(...) | | {EXTERNAL LOCATION} | () | +| overloading.rs:440:27:440:30 | self | | {EXTERNAL LOCATION} | & | +| overloading.rs:440:27:440:30 | self | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:440:27:440:30 | self | TRef.T | {EXTERNAL LOCATION} | i64 | +| overloading.rs:441:13:441:16 | self | | {EXTERNAL LOCATION} | & | +| overloading.rs:441:13:441:16 | self | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:441:13:441:16 | self | TRef.T | {EXTERNAL LOCATION} | i64 | +| overloading.rs:445:16:445:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| overloading.rs:445:16:445:20 | SelfParam | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:445:16:445:20 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i64 | +| overloading.rs:445:23:449:9 | { ... } | | {EXTERNAL LOCATION} | () | +| overloading.rs:447:13:447:31 | ...::bar(...) | | {EXTERNAL LOCATION} | () | +| overloading.rs:447:27:447:30 | self | | {EXTERNAL LOCATION} | & | +| overloading.rs:447:27:447:30 | self | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:447:27:447:30 | self | TRef.T | {EXTERNAL LOCATION} | i64 | +| overloading.rs:448:13:448:16 | self | | {EXTERNAL LOCATION} | & | +| overloading.rs:448:13:448:16 | self | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:448:13:448:16 | self | TRef.T | {EXTERNAL LOCATION} | i64 | | 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} | () | @@ -4960,6 +5024,17 @@ inferCertainType | regressions.rs:67:29:67:33 | other | TRef | regressions.rs:41:5:42:14 | S2 | | regressions.rs:71:14:75:5 | { ... } | | {EXTERNAL LOCATION} | () | | regressions.rs:74:22:74:24 | &s2 | | {EXTERNAL LOCATION} | & | +| regressions.rs:82:20:82:24 | value | | regressions.rs:81:18:81:18 | T | +| regressions.rs:86:20:86:20 | s | | regressions.rs:85:10:85:10 | T | +| regressions.rs:86:34:88:9 | { ... } | | regressions.rs:85:10:85:10 | T | +| regressions.rs:87:13:87:13 | s | | regressions.rs:85:10:85:10 | T | +| regressions.rs:92:20:92:22 | val | | regressions.rs:91:10:91:10 | T | +| regressions.rs:92:41:94:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| regressions.rs:92:41:94:9 | { ... } | T | regressions.rs:91:10:91:10 | T | +| regressions.rs:93:18:93:20 | val | | regressions.rs:91:10:91:10 | T | +| regressions.rs:99:22:99:22 | x | | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:103:5:107:5 | { ... } | | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:104:33:104:33 | x | | regressions.rs:99:18:99:19 | T2 | inferType | associated_types.rs:5:15:5:18 | SelfParam | | associated_types.rs:1:1:2:21 | Wrapper | | associated_types.rs:5:15:5:18 | SelfParam | A | associated_types.rs:4:6:4:6 | A | @@ -12675,6 +12750,74 @@ inferType | overloading.rs:399:17:399:29 | ...::from(...) | | overloading.rs:372:5:372:14 | S1 | | overloading.rs:399:28:399:28 | s | | overloading.rs:364:5:365:13 | S | | overloading.rs:400:9:400:9 | x | | overloading.rs:372:5:372:14 | S1 | +| overloading.rs:408:16:408:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| overloading.rs:408:16:408:20 | SelfParam | TRef | overloading.rs:407:5:410:5 | Self [trait Trait] | +| overloading.rs:409:16:409:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| overloading.rs:409:16:409:20 | SelfParam | TRef | overloading.rs:407:5:410:5 | Self [trait Trait] | +| overloading.rs:414:16:414:16 | x | | {EXTERNAL LOCATION} | & | +| overloading.rs:414:16:414:16 | x | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:414:16:414:16 | x | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:414:26:414:27 | { ... } | | {EXTERNAL LOCATION} | () | +| overloading.rs:417:16:417:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| overloading.rs:417:16:417:20 | SelfParam | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:417:16:417:20 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:417:23:417:24 | { ... } | | {EXTERNAL LOCATION} | () | +| overloading.rs:422:16:422:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| overloading.rs:422:16:422:20 | SelfParam | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:422:16:422:20 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:422:23:426:9 | { ... } | | {EXTERNAL LOCATION} | () | +| overloading.rs:423:13:423:24 | ...::foo(...) | | {EXTERNAL LOCATION} | () | +| overloading.rs:423:20:423:23 | self | | {EXTERNAL LOCATION} | & | +| overloading.rs:423:20:423:23 | self | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:423:20:423:23 | self | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:424:13:424:31 | ...::foo(...) | | {EXTERNAL LOCATION} | () | +| overloading.rs:424:27:424:30 | self | | {EXTERNAL LOCATION} | & | +| overloading.rs:424:27:424:30 | self | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:424:27:424:30 | self | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:425:13:425:16 | self | | {EXTERNAL LOCATION} | & | +| overloading.rs:425:13:425:16 | self | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:425:13:425:16 | self | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:425:13:425:22 | self.foo() | | {EXTERNAL LOCATION} | () | +| overloading.rs:429:16:429:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| overloading.rs:429:16:429:20 | SelfParam | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:429:16:429:20 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:429:23:433:9 | { ... } | | {EXTERNAL LOCATION} | () | +| overloading.rs:430:13:430:24 | ...::bar(...) | | {EXTERNAL LOCATION} | () | +| overloading.rs:430:20:430:23 | self | | {EXTERNAL LOCATION} | & | +| overloading.rs:430:20:430:23 | self | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:430:20:430:23 | self | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:431:13:431:31 | ...::bar(...) | | {EXTERNAL LOCATION} | () | +| overloading.rs:431:27:431:30 | self | | {EXTERNAL LOCATION} | & | +| overloading.rs:431:27:431:30 | self | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:431:27:431:30 | self | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:432:13:432:16 | self | | {EXTERNAL LOCATION} | & | +| overloading.rs:432:13:432:16 | self | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:432:13:432:16 | self | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:432:13:432:22 | self.bar() | | {EXTERNAL LOCATION} | () | +| overloading.rs:438:16:438:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| overloading.rs:438:16:438:20 | SelfParam | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:438:16:438:20 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i64 | +| overloading.rs:438:23:442:9 | { ... } | | {EXTERNAL LOCATION} | () | +| overloading.rs:440:13:440:31 | ...::foo(...) | | {EXTERNAL LOCATION} | () | +| overloading.rs:440:27:440:30 | self | | {EXTERNAL LOCATION} | & | +| overloading.rs:440:27:440:30 | self | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:440:27:440:30 | self | TRef.T | {EXTERNAL LOCATION} | i64 | +| overloading.rs:441:13:441:16 | self | | {EXTERNAL LOCATION} | & | +| overloading.rs:441:13:441:16 | self | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:441:13:441:16 | self | TRef.T | {EXTERNAL LOCATION} | i64 | +| overloading.rs:441:13:441:22 | self.foo() | | {EXTERNAL LOCATION} | () | +| overloading.rs:445:16:445:20 | SelfParam | | {EXTERNAL LOCATION} | & | +| overloading.rs:445:16:445:20 | SelfParam | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:445:16:445:20 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i64 | +| overloading.rs:445:23:449:9 | { ... } | | {EXTERNAL LOCATION} | () | +| overloading.rs:447:13:447:31 | ...::bar(...) | | {EXTERNAL LOCATION} | () | +| overloading.rs:447:27:447:30 | self | | {EXTERNAL LOCATION} | & | +| overloading.rs:447:27:447:30 | self | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:447:27:447:30 | self | TRef.T | {EXTERNAL LOCATION} | i64 | +| overloading.rs:448:13:448:16 | self | | {EXTERNAL LOCATION} | & | +| overloading.rs:448:13:448:16 | self | TRef | overloading.rs:405:5:405:19 | S | +| overloading.rs:448:13:448:16 | self | TRef.T | {EXTERNAL LOCATION} | i64 | +| overloading.rs:448:13:448:22 | self.bar() | | {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 | @@ -14818,4 +14961,215 @@ inferType | regressions.rs:74:22:74:24 | &s2 | | {EXTERNAL LOCATION} | & | | regressions.rs:74:22:74:24 | &s2 | TRef | regressions.rs:41:5:42:14 | S2 | | regressions.rs:74:23:74:24 | s2 | | regressions.rs:41:5:42:14 | S2 | +| regressions.rs:82:20:82:24 | value | | regressions.rs:81:18:81:18 | T | +| regressions.rs:86:20:86:20 | s | | regressions.rs:85:10:85:10 | T | +| regressions.rs:86:34:88:9 | { ... } | | regressions.rs:85:10:85:10 | T | +| regressions.rs:87:13:87:13 | s | | regressions.rs:85:10:85:10 | T | +| regressions.rs:92:20:92:22 | val | | regressions.rs:91:10:91:10 | T | +| regressions.rs:92:41:94:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| regressions.rs:92:41:94:9 | { ... } | T | regressions.rs:91:10:91:10 | T | +| regressions.rs:93:13:93:21 | Some(...) | | {EXTERNAL LOCATION} | Option | +| regressions.rs:93:13:93:21 | Some(...) | T | regressions.rs:91:10:91:10 | T | +| regressions.rs:93:18:93:20 | val | | regressions.rs:91:10:91:10 | T | +| regressions.rs:99:22:99:22 | x | | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:103:5:107:5 | { ... } | | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:104:13:104:13 | y | | {EXTERNAL LOCATION} | Option | +| regressions.rs:104:13:104:13 | y | | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:104:13:104:13 | y | | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:104:13:104:13 | y | T | {EXTERNAL LOCATION} | Option | +| regressions.rs:104:13:104:13 | y | T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:104:13:104:13 | y | T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:104:13:104:13 | y | T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:104:13:104:13 | y | T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:104:13:104:13 | y | T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:104:13:104:13 | y | T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:104:13:104:13 | y | T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:104:13:104:13 | y | T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:104:13:104:13 | y | T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:104:13:104:13 | y | T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:104:13:104:13 | y | T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:104:13:104:13 | y | T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:104:13:104:13 | y | T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:104:13:104:13 | y | T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:104:17:104:34 | ...::my_from(...) | | {EXTERNAL LOCATION} | Option | +| regressions.rs:104:17:104:34 | ...::my_from(...) | | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:104:17:104:34 | ...::my_from(...) | | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T | {EXTERNAL LOCATION} | Option | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:104:33:104:33 | x | | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:13:105:13 | z | | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:13:105:13 | z | | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:13:105:13 | z | | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:13:105:13 | z | T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:13:105:13 | z | T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:13:105:13 | z | T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:13:105:13 | z | T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:13:105:13 | z | T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:13:105:13 | z | T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:13:105:13 | z | T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:13:105:13 | z | T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:13:105:13 | z | T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:13:105:13 | z | T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:13:105:13 | z | T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:13:105:13 | z | T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:13:105:13 | z | T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:13:105:13 | z | T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:13:105:13 | z | T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:17:105:34 | ...::my_from(...) | | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:17:105:34 | ...::my_from(...) | | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:17:105:34 | ...::my_from(...) | | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:33:105:33 | y | | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:33:105:33 | y | | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:33:105:33 | y | | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:33:105:33 | y | T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:33:105:33 | y | T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:33:105:33 | y | T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:33:105:33 | y | T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:33:105:33 | y | T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:33:105:33 | y | T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:33:105:33 | y | T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:33:105:33 | y | T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:33:105:33 | y | T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:33:105:33 | y | T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:33:105:33 | y | T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:33:105:33 | y | T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:33:105:33 | y | T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:33:105:33 | y | T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:33:105:33 | y | T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:106:9:106:9 | z | | {EXTERNAL LOCATION} | Option | +| regressions.rs:106:9:106:9 | z | | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:106:9:106:9 | z | | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:106:9:106:9 | z | T | {EXTERNAL LOCATION} | Option | +| regressions.rs:106:9:106:9 | z | T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:106:9:106:9 | z | T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:106:9:106:9 | z | T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:106:9:106:9 | z | T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:106:9:106:9 | z | T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:106:9:106:9 | z | T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:106:9:106:9 | z | T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:106:9:106:9 | z | T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:106:9:106:9 | z | T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:106:9:106:9 | z | T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:106:9:106:9 | z | T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:106:9:106:9 | z | T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:106:9:106:9 | z | T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:106:9:106:9 | z | T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | +| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | +| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | testFailures From 1b6f3a43ef4f75187d9a050679b458b95c426a66 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 23 Feb 2026 10:41:43 +0100 Subject: [PATCH 022/185] Rust: Unify type inference logic for associated functions --- .../rust/elements/internal/ImplImpl.qll | 6 + .../elements/internal/InvocationExprImpl.qll | 2 +- .../typeinference/BlanketImplementation.qll | 23 +- .../internal/typeinference/FunctionType.qll | 239 +- .../internal/typeinference/TypeInference.qll | 2216 ++++++++--------- .../PathResolutionConsistency.expected | 6 - .../dataflow/taint/inline-taint-flow.expected | 8 + .../test/library-tests/dataflow/taint/main.rs | 4 +- .../type-inference/overloading.rs | 4 +- .../type-inference/type-inference.expected | 186 -- .../BrokenCryptoAlgorithm.expected | 6 + .../PathResolutionConsistency.expected | 2 - .../BrokenCryptoAlgorithm/test_cipher.rs | 12 +- shared/util/codeql/util/Option.qll | 3 + 14 files changed, 1273 insertions(+), 1444 deletions(-) delete mode 100644 rust/ql/test/query-tests/security/CWE-327/BrokenCryptoAlgorithm/CONSISTENCY/PathResolutionConsistency.expected diff --git a/rust/ql/lib/codeql/rust/elements/internal/ImplImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ImplImpl.qll index 298e07f4b3e..3ff04276c63 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ImplImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ImplImpl.qll @@ -33,5 +33,11 @@ module Impl { result = "impl " + trait + this.getSelfTy().toAbbreviatedString() + " { ... }" ) } + + /** + * Holds if this is an inherent `impl` block, that is, one that does not implement a trait. + */ + pragma[nomagic] + predicate isInherent() { not this.hasTrait() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/InvocationExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/InvocationExprImpl.qll index e5dd4cdaee6..412a3b51ae8 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/InvocationExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/InvocationExprImpl.qll @@ -6,7 +6,7 @@ module Impl { private newtype TArgumentPosition = TPositionalArgumentPosition(int i) { - i in [0 .. max([any(ParamList l).getNumberOfParams(), any(ArgList l).getNumberOfArgs()]) - 1] + i in [0 .. max([any(ParamList l).getNumberOfParams(), any(ArgList l).getNumberOfArgs()])] } or TSelfArgumentPosition() or TTypeQualifierArgumentPosition() diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/BlanketImplementation.qll b/rust/ql/lib/codeql/rust/internal/typeinference/BlanketImplementation.qll index 51781a47305..db1402280d4 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/BlanketImplementation.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/BlanketImplementation.qll @@ -41,16 +41,19 @@ private predicate hasFirstNonTrivialTraitBound(TypeParamItemNode tp, Trait trait */ pragma[nomagic] predicate isBlanketLike(ImplItemNode i, TypePath blanketSelfPath, TypeParam blanketTypeParam) { - blanketTypeParam = i.getBlanketImplementationTypeParam() and - blanketSelfPath.isEmpty() - or - exists(TypeMention tm, Type root, TypeParameter tp | - tm = i.(Impl).getSelfTy() and - complexSelfRoot(root, tp) and - tm.getType() = root and - tm.getTypeAt(blanketSelfPath) = TTypeParamTypeParameter(blanketTypeParam) and - blanketSelfPath = TypePath::singleton(tp) and - hasFirstNonTrivialTraitBound(blanketTypeParam, _) + i.(Impl).hasTrait() and + ( + blanketTypeParam = i.getBlanketImplementationTypeParam() and + blanketSelfPath.isEmpty() + or + exists(TypeMention tm, Type root, TypeParameter tp | + tm = i.(Impl).getSelfTy() and + complexSelfRoot(root, tp) and + tm.getType() = root and + tm.getTypeAt(blanketSelfPath) = TTypeParamTypeParameter(blanketTypeParam) and + blanketSelfPath = TypePath::singleton(tp) and + hasFirstNonTrivialTraitBound(blanketTypeParam, _) + ) ) } diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll index f8611ce2a3c..841f165d2c3 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll @@ -5,60 +5,112 @@ private import TypeAbstraction private import TypeMention private import TypeInference -private newtype TFunctionPosition = - TArgumentFunctionPosition(ArgumentPosition pos) or - TReturnFunctionPosition() +private signature predicate includeSelfSig(); + +// We construct `FunctionPosition` and `FunctionPositionAdj` using two different underlying +// `newtype`s in order to prevent unintended mixing of the two +private module MkFunctionPosition { + private newtype TFunctionPosition = + TArgumentFunctionPosition(ArgumentPosition pos) { + if pos.isSelf() then includeSelf() else any() + } or + TReturnFunctionPosition() + + class FunctionPosition extends TFunctionPosition { + int asPosition() { result = this.asArgumentPosition().asPosition() } + + predicate isPosition() { exists(this.asPosition()) } + + ArgumentPosition asArgumentPosition() { this = TArgumentFunctionPosition(result) } + + predicate isTypeQualifier() { this.asArgumentPosition().isTypeQualifier() } + + predicate isReturn() { this = TReturnFunctionPosition() } + + TypeMention getTypeMention(Function f) { + result = f.getParam(this.asPosition()).getTypeRepr() + or + this.isReturn() and + result = getReturnTypeMention(f) + } + + string toString() { + result = this.asArgumentPosition().toString() + or + this.isReturn() and + result = "(return)" + } + } +} + +private predicate any_() { any() } /** * A position of a type related to a function. * * Either `self`, `return`, or a positional parameter index. */ -class FunctionPosition extends TFunctionPosition { +final class FunctionPosition extends MkFunctionPosition::FunctionPosition { predicate isSelf() { this.asArgumentPosition().isSelf() } - int asPosition() { result = this.asArgumentPosition().asPosition() } - - predicate isPosition() { exists(this.asPosition()) } - - ArgumentPosition asArgumentPosition() { this = TArgumentFunctionPosition(result) } - - predicate isTypeQualifier() { this.asArgumentPosition().isTypeQualifier() } - predicate isSelfOrTypeQualifier() { this.isSelf() or this.isTypeQualifier() } - predicate isReturn() { this = TReturnFunctionPosition() } - - /** Gets the corresponding position when `f` is invoked via a function call. */ - bindingset[f] - FunctionPosition getFunctionCallAdjusted(Function f) { - this.isReturn() and - result = this + override TypeMention getTypeMention(Function f) { + result = super.getTypeMention(f) or - if f.hasSelfParam() - then - this.isSelf() and result.asPosition() = 0 - or - result.asPosition() = this.asPosition() + 1 - else result = this - } - - TypeMention getTypeMention(Function f) { this.isSelf() and result = getSelfParamTypeMention(f.getSelfParam()) - or - result = f.getParam(this.asPosition()).getTypeRepr() - or - this.isReturn() and - result = getReturnTypeMention(f) } - string toString() { - result = this.asArgumentPosition().toString() + /** + * Gets the corresponding position when function call syntax is used, assuming + * this position is for a method. + */ + pragma[nomagic] + FunctionPositionAdj getFunctionCallAdjusted() { + this.isReturn() and result.isReturn() or - this.isReturn() and - result = "(return)" + this.isTypeQualifier() and + result.isTypeQualifier() + or + this.isSelf() and result.asPosition() = 0 + or + result.asPosition() = this.asPosition() + 1 } + + /** + * Gets the corresponding position when function call syntax is used, assuming + * this position is _not_ for a method. + */ + pragma[nomagic] + FunctionPositionAdj asAdjusted() { + this.isReturn() and result.isReturn() + or + this.isTypeQualifier() and + result.isTypeQualifier() + or + result.asPosition() = this.asPosition() + } + + /** + * Gets the corresponding position when `f` is invoked via function call + * syntax. + */ + bindingset[f] + FunctionPositionAdj getFunctionCallAdjusted(Function f) { + if f.hasSelfParam() then result = this.getFunctionCallAdjusted() else result = this.asAdjusted() + } +} + +private predicate none_() { none() } + +/** + * A function-call adjust position of a type related to a function. + * + * Either `return` or a positional parameter index. + */ +final class FunctionPositionAdj extends MkFunctionPosition::FunctionPosition { + FunctionPosition asNonAdjusted() { this = result.asAdjusted() } } /** @@ -75,6 +127,20 @@ module FunctionPositionMatchingInput { } } +/** + * A helper module for implementing `Matching(WithEnvironment)InputSig` with + * `DeclarationPosition = AccessPosition = FunctionPositionAdj`. + */ +module FunctionPositionAdjMatchingInput { + class DeclarationPosition = FunctionPositionAdj; + + class AccessPosition = DeclarationPosition; + + predicate accessDeclarationPositionMatch(AccessPosition apos, DeclarationPosition dpos) { + apos = dpos + } +} + private newtype TAssocFunctionType = /** An associated function `f` in `parent` should be specialized for `i` at `pos`. */ MkAssocFunctionType( @@ -197,8 +263,7 @@ class AssocFunctionType extends MkAssocFunctionType { exists(Function f, ImplOrTraitItemNode i, FunctionPosition pos | this.appliesTo(f, i, pos) | result = pos.getTypeMention(f) or - pos.isSelf() and - not f.hasSelfParam() and + pos.isTypeQualifier() and result = [i.(Impl).getSelfTy().(AstNode), i.(Trait).getName()] ) } @@ -209,7 +274,7 @@ class AssocFunctionType extends MkAssocFunctionType { } pragma[nomagic] -private Trait getALookupTrait(Type t) { +Trait getALookupTrait(Type t) { result = t.(TypeParamTypeParameter).getTypeParam().(TypeParamItemNode).resolveABound() or result = t.(SelfTypeParameter).getTrait() @@ -310,12 +375,13 @@ signature module ArgsAreInstantiationsOfInputSig { * Holds if `f` inside `i` needs to have the type corresponding to type parameter * `tp` checked. * - * If `i` is an inherent implementation, `tp` is a type parameter of the type being - * implemented, otherwise `tp` is a type parameter of the trait (being implemented). + * `tp` is a type parameter of the trait being implemented by `f` or the trait to which + * `f` belongs. * - * `pos` is one of the positions in `f` in which the relevant type occours. + * `posAdj` is one of the function-call adjusted positions in `f` in which the relevant + * type occurs. */ - predicate toCheck(ImplOrTraitItemNode i, Function f, TypeParameter tp, FunctionPosition pos); + predicate toCheck(ImplOrTraitItemNode i, Function f, TypeParameter tp, FunctionPositionAdj posAdj); /** A call whose argument types are to be checked. */ class Call { @@ -323,7 +389,7 @@ signature module ArgsAreInstantiationsOfInputSig { Location getLocation(); - Type getArgType(FunctionPosition pos, TypePath path); + Type getArgType(FunctionPositionAdj posAdj, TypePath path); predicate hasTargetCand(ImplOrTraitItemNode i, Function f); } @@ -337,9 +403,9 @@ signature module ArgsAreInstantiationsOfInputSig { module ArgsAreInstantiationsOf { pragma[nomagic] private predicate toCheckRanked( - ImplOrTraitItemNode i, Function f, TypeParameter tp, FunctionPosition pos, int rnk + ImplOrTraitItemNode i, Function f, TypeParameter tp, FunctionPositionAdj posAdj, int rnk ) { - Input::toCheck(i, f, tp, pos) and + Input::toCheck(i, f, tp, posAdj) and tp = rank[rnk + 1](TypeParameter tp0, int j | Input::toCheck(i, f, tp0, _) and @@ -351,53 +417,59 @@ module ArgsAreInstantiationsOf { pragma[nomagic] private predicate toCheck( - ImplOrTraitItemNode i, Function f, TypeParameter tp, FunctionPosition pos, AssocFunctionType t + ImplOrTraitItemNode i, Function f, TypeParameter tp, FunctionPositionAdj posAdj, + AssocFunctionType t ) { - Input::toCheck(i, f, tp, pos) and - t.appliesTo(f, i, pos) + exists(FunctionPosition pos | + Input::toCheck(i, f, tp, posAdj) and + t.appliesTo(f, i, pos) and + posAdj = pos.getFunctionCallAdjusted(f) + ) } - private newtype TCallAndPos = - MkCallAndPos(Input::Call call, FunctionPosition pos) { exists(call.getArgType(pos, _)) } + private newtype TCallAndPosAdj = + MkCallAndPosAdj(Input::Call call, FunctionPositionAdj posAdj) { + exists(call.getArgType(posAdj, _)) + } - /** A call tagged with a position. */ - private class CallAndPos extends MkCallAndPos { + /** A call tagged with a function-call adjusted position. */ + private class CallAndPosAdj extends MkCallAndPosAdj { Input::Call call; - FunctionPosition pos; + FunctionPositionAdj posAdj; - CallAndPos() { this = MkCallAndPos(call, pos) } + CallAndPosAdj() { this = MkCallAndPosAdj(call, posAdj) } Input::Call getCall() { result = call } - FunctionPosition getPos() { result = pos } + FunctionPositionAdj getPosAdj() { result = posAdj } Location getLocation() { result = call.getLocation() } - Type getTypeAt(TypePath path) { result = call.getArgType(pos, path) } + Type getTypeAt(TypePath path) { result = call.getArgType(posAdj, path) } - string toString() { result = call.toString() + " [arg " + pos + "]" } + string toString() { result = call.toString() + " [arg " + posAdj + "]" } } pragma[nomagic] private predicate potentialInstantiationOf0( - CallAndPos cp, Input::Call call, TypeParameter tp, FunctionPosition pos, Function f, + CallAndPosAdj cp, Input::Call call, TypeParameter tp, FunctionPositionAdj posAdj, Function f, TypeAbstraction abs, AssocFunctionType constraint ) { - cp = MkCallAndPos(call, pragma[only_bind_into](pos)) and + cp = MkCallAndPosAdj(call, pragma[only_bind_into](posAdj)) and call.hasTargetCand(abs, f) and - toCheck(abs, f, tp, pragma[only_bind_into](pos), constraint) + toCheck(abs, f, tp, pragma[only_bind_into](posAdj), constraint) } private module ArgIsInstantiationOfToIndexInput implements - IsInstantiationOfInputSig + IsInstantiationOfInputSig { pragma[nomagic] predicate potentialInstantiationOf( - CallAndPos cp, TypeAbstraction abs, AssocFunctionType constraint + CallAndPosAdj cp, TypeAbstraction abs, AssocFunctionType constraint ) { - exists(Input::Call call, TypeParameter tp, FunctionPosition pos, int rnk, Function f | - potentialInstantiationOf0(cp, call, tp, pos, f, abs, constraint) and - toCheckRanked(abs, f, tp, pos, rnk) + exists(Input::Call call, TypeParameter tp, FunctionPositionAdj posAdj, int rnk, Function f | + potentialInstantiationOf0(cp, call, tp, posAdj, f, abs, constraint) and + toCheckRanked(abs, f, tp, posAdj, rnk) | rnk = 0 or @@ -409,24 +481,25 @@ module ArgsAreInstantiationsOf { } private module ArgIsInstantiationOfToIndex = - ArgIsInstantiationOf; + ArgIsInstantiationOf; pragma[nomagic] private predicate argIsInstantiationOf( - Input::Call call, FunctionPosition pos, ImplOrTraitItemNode i, Function f, int rnk + Input::Call call, ImplOrTraitItemNode i, Function f, int rnk ) { - ArgIsInstantiationOfToIndex::argIsInstantiationOf(MkCallAndPos(call, pos), i, _) and - toCheckRanked(i, f, _, pos, rnk) + exists(FunctionPositionAdj posAdj | + ArgIsInstantiationOfToIndex::argIsInstantiationOf(MkCallAndPosAdj(call, posAdj), i, _) and + toCheckRanked(i, f, _, posAdj, rnk) + ) } pragma[nomagic] private predicate argsAreInstantiationsOfToIndex( Input::Call call, ImplOrTraitItemNode i, Function f, int rnk ) { - exists(FunctionPosition pos | - argIsInstantiationOf(call, pos, i, f, rnk) and - call.hasTargetCand(i, f) - | + argIsInstantiationOf(call, i, f, rnk) and + call.hasTargetCand(i, f) and + ( rnk = 0 or argsAreInstantiationsOfToIndex(call, i, f, rnk - 1) @@ -448,11 +521,11 @@ module ArgsAreInstantiationsOf { } private module ArgsAreNotInstantiationOfInput implements - IsInstantiationOfInputSig + IsInstantiationOfInputSig { pragma[nomagic] predicate potentialInstantiationOf( - CallAndPos cp, TypeAbstraction abs, AssocFunctionType constraint + CallAndPosAdj cp, TypeAbstraction abs, AssocFunctionType constraint ) { potentialInstantiationOf0(cp, _, _, _, _, abs, constraint) } @@ -461,13 +534,13 @@ module ArgsAreInstantiationsOf { } private module ArgsAreNotInstantiationOf = - ArgIsInstantiationOf; + ArgIsInstantiationOf; pragma[nomagic] private predicate argsAreNotInstantiationsOf0( - Input::Call call, FunctionPosition pos, ImplOrTraitItemNode i + Input::Call call, FunctionPositionAdj posAdj, ImplOrTraitItemNode i ) { - ArgsAreNotInstantiationOf::argIsNotInstantiationOf(MkCallAndPos(call, pos), i, _, _) + ArgsAreNotInstantiationOf::argIsNotInstantiationOf(MkCallAndPosAdj(call, posAdj), i, _, _) } /** @@ -478,10 +551,10 @@ module ArgsAreInstantiationsOf { */ pragma[nomagic] predicate argsAreNotInstantiationsOf(Input::Call call, ImplOrTraitItemNode i, Function f) { - exists(FunctionPosition pos | - argsAreNotInstantiationsOf0(call, pos, i) and + exists(FunctionPositionAdj posAdj | + argsAreNotInstantiationsOf0(call, posAdj, i) and call.hasTargetCand(i, f) and - Input::toCheck(i, f, _, pos) + Input::toCheck(i, f, _, posAdj) ) } } diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll index 70dfe9e9005..295b5b84b2c 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll @@ -298,14 +298,17 @@ private class FunctionDeclaration extends Function { } pragma[nomagic] - Type getParameterType(ImplOrTraitItemNodeOption i, FunctionPosition pos, TypePath path) { + Type getParameterType(ImplOrTraitItemNodeOption i, FunctionPositionAdj posAdj, TypePath path) { i = parent and ( - not pos.isReturn() and - result = getAssocFunctionTypeAt(this, i.asSome(), pos, path) + exists(FunctionPosition pos | + not pos.isReturn() and + result = getAssocFunctionTypeAt(this, i.asSome(), pos, path) and + posAdj = pos.getFunctionCallAdjusted(this) + ) or i.isNone() and - result = this.getParam(pos.asPosition()).getTypeRepr().(TypeMention).getTypeAt(path) + result = this.getParam(posAdj.asPosition()).getTypeRepr().(TypeMention).getTypeAt(path) ) } @@ -343,6 +346,10 @@ private class FunctionDeclaration extends Function { } } +private class AssocFunction extends FunctionDeclaration { + AssocFunction() { this.isAssoc(_) } +} + pragma[nomagic] private TypeMention getCallExprTypeMentionArgument(CallExpr ce, TypeArgumentPosition apos) { exists(Path p, int i | p = CallExprImpl::getFunctionPath(ce) | @@ -1106,6 +1113,43 @@ private Trait getCallExprTraitQualifier(CallExpr ce) { ) } +pragma[nomagic] +private predicate nonAssocFunction(ItemNode i) { not i instanceof AssocFunction } + +/** + * A call expression that can resolve to something that is not an associated + * function, and hence does not need type inference for resolution. + */ +private class NonAssocCallExpr extends CallExpr { + NonAssocCallExpr() { + forex(ItemNode i | i = CallExprImpl::getResolvedFunction(this) | nonAssocFunction(i)) + } + + /** + * Gets the target of this call, which can be resolved using only path resolution. + */ + ItemNode resolveCallTargetViaPathResolution() { result = CallExprImpl::getResolvedFunction(this) } + + pragma[nomagic] + Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { + result = getCallExprTypeArgument(this, apos, path) + } + + AstNode getNodeAt(FunctionPosition pos) { + result = this.getSyntacticArgument(pos.asArgumentPosition()) + or + result = this and pos.isReturn() + } + + pragma[nomagic] + Type getInferredType(FunctionPosition pos, TypePath path) { + pos.isTypeQualifier() and + result = getCallExprTypeQualifier(this, path, false) + or + result = inferType(this.getNodeAt(pos), path) + } +} + /** * Provides functionality related to context-based typing of calls. */ @@ -1236,42 +1280,6 @@ private module ContextTyping { } } -/** - * Holds if function `f` with the name `name` and the arity `arity` exists in - * `i`, and the type at position `pos` is `t`. - */ -pragma[nomagic] -private predicate assocFunctionInfo( - Function f, string name, int arity, ImplOrTraitItemNode i, FunctionPosition pos, - AssocFunctionType t -) { - f = i.getASuccessor(name) and - arity = f.getParamList().getNumberOfParams() and - t.appliesTo(f, i, pos) -} - -/** - * Holds if function `f` with the name `name` and the arity `arity` exists in - * blanket (like) implementation `impl` of `trait`, and the type at position - * `pos` is `t`. - * - * `blanketPath` points to the type `blanketTypeParam` inside `t`, which - * is the type parameter used in the blanket implementation. - */ -pragma[nomagic] -private predicate functionInfoBlanketLike( - Function f, string name, int arity, ImplItemNode impl, Trait trait, FunctionPosition pos, - AssocFunctionType t, TypePath blanketPath, TypeParam blanketTypeParam -) { - exists(TypePath blanketSelfPath | - assocFunctionInfo(f, name, arity, impl, pos, t) and - TTypeParamTypeParameter(blanketTypeParam) = t.getTypeAt(blanketPath) and - blanketPath = any(string s) + blanketSelfPath and - BlanketImplementation::isBlanketLike(impl, blanketSelfPath, blanketTypeParam) and - trait = impl.resolveTraitTy() - ) -} - /** * Holds if the type path `path` pointing to `type` is stripped of any leading * complex root type allowed for `self` parameters, such as `&`, `Box`, `Rc`, @@ -1327,7 +1335,7 @@ private class BorrowKind extends TBorrowKind { } /** - * Provides logic for resolving calls to methods. + * Provides logic for resolving calls to associated functions. * * When resolving a method call, a list of [candidate receiver types][1] is constructed * @@ -1361,190 +1369,356 @@ private class BorrowKind extends TBorrowKind { * * [1]: https://doc.rust-lang.org/reference/expressions/method-call-expr.html#r-expr.method.candidate-receivers */ -private module MethodResolution { +private module AssocFunctionResolution { /** - * Holds if method `m` with the name `name` and the arity `arity` exists in - * `i`, and the type of the `self` parameter is `selfType`. + * Holds if function `f` with the name `name` and the arity `arity` exists in + * `i`, and the type at function-call adjusted position `posAdj` is `t`. + */ + pragma[nomagic] + private predicate assocFunctionInfo( + Function f, string name, int arity, ImplOrTraitItemNode i, FunctionPositionAdj posAdj, + AssocFunctionType t + ) { + exists(FunctionPosition pos | + f = i.getASuccessor(name) and + arity = f.getNumberOfParamsInclSelf() and + t.appliesTo(f, i, pos) and + posAdj = pos.getFunctionCallAdjusted(f) + ) + } + + /** + * Holds if the non-method trait function `f` mentions the implicit `Self` type + * parameter at position `pos`. + */ + pragma[nomagic] + private predicate traitSelfTypeParameterOccurrence( + TraitItemNode trait, NonMethodFunction f, FunctionPosition pos + ) { + FunctionOverloading::traitTypeParameterOccurrence(trait, f, _, pos, _, TSelfTypeParameter(trait)) + } + + /** + * Holds if the non-method function `f` implements a trait function that mentions + * the implicit `Self` type parameter at position `pos`. + */ + pragma[nomagic] + private predicate traitImplSelfTypeParameterOccurrence( + ImplItemNode impl, NonMethodFunction f, FunctionPosition pos + ) { + exists(NonMethodFunction traitFunction | + f = impl.getAnAssocItem() and + f.implements(traitFunction) and + traitSelfTypeParameterOccurrence(_, traitFunction, pos) + ) + } + + private module TypeOption = Option; + + private class TypeOption = TypeOption::Option; + + /** + * Holds if function `f` with the name `name` and the arity `arity` exists in + * `i`, and the type at function-call adjusted position `selfPosAdj` is `selfType`. * - * `strippedTypePath` points to the type `strippedType` inside `selfType`, - * which is the (possibly complex-stripped) root type of `selfType`. For example, - * if `m` has a `&self` parameter, then `strippedTypePath` is `getRefSharedTypeParameter()` + * `selfPosAdj` is a position relevant for call resolution: either a position + * corresponding to the `self` parameter of `f` (if present); a type qualifier + * position; or a position where the implicit `Self` type parameter of some trait + * is mentioned in some non-method function `f_trait`, and either `f = f_trait` + * or `f` implements `f_trait`. + * + * `strippedTypePath` points to the type `strippedType` inside `selfType`, which + * is the (possibly complex-stripped) root type of `selfType`. For example, if + * `f` has a `&self` parameter, then `strippedTypePath` is `getRefSharedTypeParameter()` * and `strippedType` is the type inside the reference. + * + * `implType` is the type being implemented by `i` (`None` when `i` is a trait). + * + * `trait` is the trait being implemented by `i` or `i` itself (`None` when `i` is inherent). + * + * `isMethod` indicates whether `f` is a method. */ pragma[nomagic] - private predicate methodInfo( - Method m, string name, int arity, FunctionPosition selfPos, ImplOrTraitItemNode i, - AssocFunctionType selfType, TypePath strippedTypePath, Type strippedType + private predicate assocFunctionInfo( + Function f, string name, int arity, FunctionPositionAdj selfPosAdj, ImplOrTraitItemNode i, + AssocFunctionType selfType, TypePath strippedTypePath, Type strippedType, TypeOption implType, + TypeOption trait, boolean isMethod ) { - assocFunctionInfo(m, name, arity, i, selfPos, selfType) and + assocFunctionInfo(f, name, arity, i, selfPosAdj, selfType) and strippedType = selfType.getTypeAt(strippedTypePath) and - isComplexRootStripped(strippedTypePath, strippedType) and - selfPos.isSelfOrTypeQualifier() - } - - pragma[nomagic] - private predicate methodInfoTypeParam( - Method m, string name, int arity, FunctionPosition selfPos, ImplOrTraitItemNode i, - AssocFunctionType selfType, TypePath strippedTypePath, TypeParam tp - ) { - methodInfo(m, name, arity, selfPos, i, selfType, strippedTypePath, TTypeParamTypeParameter(tp)) - } - - /** - * Same as `methodInfo`, but restricted to non-blanket implementations, and - * allowing for any `strippedType` when the corresponding type inside `m` is - * a type parameter. - */ - pragma[inline] - private predicate methodInfoNonBlanket( - Method m, string name, int arity, FunctionPosition selfPos, ImplOrTraitItemNode i, - AssocFunctionType selfType, TypePath strippedTypePath, Type strippedType - ) { ( - methodInfo(m, name, arity, selfPos, i, selfType, strippedTypePath, strippedType) or - methodInfoTypeParam(m, name, arity, selfPos, i, selfType, strippedTypePath, _) + isComplexRootStripped(strippedTypePath, strippedType) + or + selfPosAdj.isTypeQualifier() and strippedTypePath.isEmpty() ) and - not BlanketImplementation::isBlanketLike(i, _, _) + ( + f instanceof Method and + selfPosAdj.asPosition() = 0 + or + selfPosAdj.isTypeQualifier() + or + exists(FunctionPosition pos | selfPosAdj = pos.asAdjusted() | + traitSelfTypeParameterOccurrence(i, f, pos) + or + traitImplSelfTypeParameterOccurrence(i, f, pos) + ) + ) and + ( + implType.asSome() = resolveImplSelfTypeAt(i, TypePath::nil()) + or + i instanceof Trait and + implType.isNone() + ) and + ( + trait.asSome() = + [ + TTrait(i).(Type), + TTrait(i.(ImplItemNode).resolveTraitTy()).(Type) + ] + or + i.(Impl).isInherent() and trait.isNone() + ) and + if f instanceof Method then isMethod = true else isMethod = false } /** - * Holds if method `m` with the name `name` and the arity `arity` exists in - * blanket (like) implementation `impl` of `trait`, and the type of the `self` - * parameter is `selfType`. + * Holds if function `f` with the name `name` and the arity `arity` exists in + * blanket (like) implementation `impl`, and the type at function-call adjusted + * position `selfPosAdj` is `selfType`. + * + * `selfPosAdj` is a position relevant for call resolution: either a position + * corresponding to the `self` parameter of `f` (if present); a type qualifier + * position; or a position where the implicit `Self` type parameter of some trait + * is mentioned in some non-method function `f_trait`, and `f` implements `f_trait`. * * `blanketPath` points to the type `blanketTypeParam` inside `selfType`, which * is the type parameter used in the blanket implementation. + * + * `implType` is the type being implemented by `i`. + * + * `trait` is the trait being implemented by `i`. + * + * `isMethod` indicates whether `f` is a method. */ pragma[nomagic] - private predicate methodInfoBlanketLike( - Method m, string name, int arity, FunctionPosition selfPos, ImplItemNode impl, Trait trait, - AssocFunctionType selfType, TypePath blanketPath, TypeParam blanketTypeParam + private predicate assocFunctionInfoBlanketLike( + Function f, string name, int arity, ImplItemNode impl, TypeOption implType, TypeOption trait, + FunctionPositionAdj selfPosAdj, AssocFunctionType selfType, TypePath blanketPath, + TypeParam blanketTypeParam, boolean isMethod ) { - functionInfoBlanketLike(m, name, arity, impl, trait, selfPos, selfType, blanketPath, - blanketTypeParam) and - selfPos.isSelfOrTypeQualifier() + exists(TypePath blanketSelfPath | + assocFunctionInfo(f, name, arity, selfPosAdj, impl, selfType, _, _, implType, trait, isMethod) and + TTypeParamTypeParameter(blanketTypeParam) = selfType.getTypeAt(blanketPath) and + blanketPath = any(string s) + blanketSelfPath and + BlanketImplementation::isBlanketLike(impl, blanketSelfPath, blanketTypeParam) + ) } pragma[nomagic] - private predicate methodTraitInfo(string name, int arity, Trait trait) { + private predicate assocFunctionTraitInfo(string name, int arity, Trait trait) { exists(ImplItemNode i | - methodInfo(_, name, arity, _, i, _, _, _) and + assocFunctionInfo(_, name, arity, i, _, _) and trait = i.resolveTraitTy() ) or - methodInfo(_, name, arity, _, trait, _, _, _) + assocFunctionInfo(_, name, arity, trait, _, _) } pragma[nomagic] - private predicate methodCallTraitCandidate(Element mc, Trait trait) { - mc = - any(MethodCall mc0 | + private predicate assocFunctionCallTraitCandidate(Element afc, Trait trait) { + afc = + any(AssocFunctionCall afc0 | exists(string name, int arity | - mc0.hasNameAndArity(name, arity) and - methodTraitInfo(name, arity, trait) - | - not mc0.hasTrait() - or - trait = mc0.getTrait() + afc0.hasNameAndArity(name, arity) and + assocFunctionTraitInfo(name, arity, trait) and + // we only need to check visibility of traits that are not mentioned explicitly + not afc0.hasATrait() ) ) } - private module MethodTraitIsVisible = TraitIsVisible; + private module AssocFunctionTraitIsVisible = TraitIsVisible; - private predicate methodCallVisibleTraitCandidate = MethodTraitIsVisible::traitIsVisible/2; - - bindingset[mc, impl] + bindingset[afc, impl] pragma[inline_late] - private predicate methodCallVisibleImplTraitCandidate(MethodCall mc, ImplItemNode impl) { - methodCallVisibleTraitCandidate(mc, impl.resolveTraitTy()) + private predicate callVisibleImplTraitCandidate(AssocFunctionCall afc, ImplItemNode impl) { + AssocFunctionTraitIsVisible::traitIsVisible(afc, impl.resolveTraitTy()) } /** - * Holds if method call `mc` may target a method in `i` with `self` parameter having - * type `selfType`. + * Checks that the explicit type qualifier of a call (if any), `typeQualifier`, + * matches the type being implemented by the target, `implType`. + */ + bindingset[implType] + private predicate callTypeQualifierCheck(TypeOption implType, TypeOption typeQualifier) { + typeQualifier = [implType, TypeOption::none_()] + } + + /** + * Checks that the explicit trait qualifier of a call (if any), `traitQualifier`, + * matches the trait being implemented by the target (or in which the target is defined), + * `trait`, and that when a receiver is present in the call, the target is a method. + */ + bindingset[trait, isMethod] + pragma[inline_late] + private predicate callTraitQualifierAndReceiverCheck( + TypeOption trait, Boolean isMethod, TypeOption traitQualifier, boolean hasReceiver + ) { + traitQualifier = [trait, TypeOption::none_()] and + hasReceiver = [isMethod, false] + } + + bindingset[implType, trait, isMethod] + private predicate callCheck( + TypeOption implType, TypeOption trait, Boolean isMethod, TypeOption typeQualifier, + TypeOption traitQualifier, boolean hasReceiver + ) { + callTypeQualifierCheck(implType, typeQualifier) and + callTraitQualifierAndReceiverCheck(trait, isMethod, traitQualifier, hasReceiver) + } + + pragma[nomagic] + private predicate assocFunctionInfoNonBlanketLikeCheck( + Function f, string name, int arity, FunctionPositionAdj selfPosAdj, ImplOrTraitItemNode i, + AssocFunctionType selfType, TypePath strippedTypePath, Type strippedType, + TypeOption typeQualifier, TypeOption traitQualifier, boolean hasReceiver + ) { + exists(TypeOption implType, TypeOption trait, boolean isMethod | + assocFunctionInfo(f, name, arity, selfPosAdj, i, selfType, strippedTypePath, strippedType, + implType, trait, isMethod) and + not BlanketImplementation::isBlanketLike(i, _, _) and + callCheck(implType, trait, isMethod, typeQualifier, traitQualifier, hasReceiver) + ) + } + + pragma[nomagic] + private predicate assocFunctionInfoNonBlanketLikeTypeParamCheck( + Function f, string name, int arity, FunctionPositionAdj selfPosAdj, ImplOrTraitItemNode i, + AssocFunctionType selfType, TypePath strippedTypePath, TypeOption typeQualifier, + TypeOption traitQualifier, boolean hasReceiver + ) { + assocFunctionInfoNonBlanketLikeCheck(f, name, arity, selfPosAdj, i, selfType, strippedTypePath, + TTypeParamTypeParameter(_), typeQualifier, traitQualifier, hasReceiver) + } + + /** + * Holds if call `afc` may target function `f` in `i` with type `selfType` at + * function-call adjusted position `selfPosAdj`. * * `strippedTypePath` points to the type `strippedType` inside `selfType`, * which is the (possibly complex-stripped) root type of `selfType`. - * - * This predicate only checks for matching method names and arities, and whether - * the trait being implemented by `i` (when `i` is not a trait itself) is visible - * at `mc`. */ - bindingset[mc, strippedTypePath, strippedType] + bindingset[afc, strippedTypePath, strippedType] pragma[inline_late] - private predicate methodCallNonBlanketCandidate( - MethodCall mc, Method m, FunctionPosition selfPos, ImplOrTraitItemNode i, - AssocFunctionType self, TypePath strippedTypePath, Type strippedType + private predicate nonBlanketLikeCandidate( + AssocFunctionCall afc, Function f, FunctionPositionAdj selfPosAdj, ImplOrTraitItemNode i, + AssocFunctionType selfType, TypePath strippedTypePath, Type strippedType ) { - exists(string name, int arity | - mc.hasNameAndArity(name, arity) and - methodInfoNonBlanket(m, name, arity, selfPos, i, self, strippedTypePath, strippedType) + exists( + string name, int arity, TypeOption typeQualifier, TypeOption traitQualifier, + boolean hasReceiver | - i = - any(Impl impl | - not impl.hasTrait() - or - methodCallVisibleImplTraitCandidate(mc, impl) - ) + afc.hasSyntacticInfo(name, arity, typeQualifier, traitQualifier, hasReceiver) and + if not afc.hasATrait() and i.(Impl).hasTrait() + then callVisibleImplTraitCandidate(afc, i) + else any() + | + assocFunctionInfoNonBlanketLikeCheck(f, name, arity, selfPosAdj, i, selfType, + strippedTypePath, strippedType, typeQualifier, traitQualifier, hasReceiver) or - methodCallVisibleTraitCandidate(mc, i) - or - i.(ImplItemNode).resolveTraitTy() = mc.getTrait() + assocFunctionInfoNonBlanketLikeTypeParamCheck(f, name, arity, selfPosAdj, i, selfType, + strippedTypePath, typeQualifier, traitQualifier, hasReceiver) + ) + } + + bindingset[name, arity, typeQualifier, traitQualifier, hasReceiver] + pragma[inline_late] + private predicate assocFunctionInfoBlanketLikeCheck( + Function f, string name, int arity, FunctionPositionAdj selfPosAdj, ImplItemNode impl, + AssocFunctionType selfType, TypePath blanketPath, TypeParam blanketTypeParam, + TypeOption typeQualifier, TypeOption traitQualifier, boolean hasReceiver + ) { + exists(TypeOption implType, TypeOption trait, boolean isMethod | + assocFunctionInfoBlanketLike(f, name, arity, impl, implType, trait, selfPosAdj, selfType, + blanketPath, blanketTypeParam, isMethod) and + callTraitQualifierAndReceiverCheck(trait, isMethod, traitQualifier, hasReceiver) and + if impl.isBlanketImplementation() + then any() + else callTypeQualifierCheck(implType, typeQualifier) ) } /** - * Holds if method call `mc` may target a method in blanket (like) implementation - * `impl` with `self` parameter having type `selfType`. + * Holds if call `afc` may target function `f` in blanket (like) implementation + * `impl` with type `selfType` at function-call adjusted position `selfPosAdj`. * * `blanketPath` points to the type `blanketTypeParam` inside `selfType`, which * is the type parameter used in the blanket implementation. - * - * This predicate only checks for matching method names and arities, and whether - * the trait being implemented by `i` (when `i` is not a trait itself) is visible - * at `mc`. */ - bindingset[mc] + bindingset[afc] pragma[inline_late] - private predicate methodCallBlanketLikeCandidate( - MethodCall mc, Method m, FunctionPosition selfPos, ImplItemNode impl, AssocFunctionType self, - TypePath blanketPath, TypeParam blanketTypeParam + private predicate blanketLikeCandidate( + AssocFunctionCall afc, Function f, FunctionPositionAdj selfPosAdj, ImplItemNode impl, + AssocFunctionType self, TypePath blanketPath, TypeParam blanketTypeParam ) { - exists(string name, int arity | - mc.hasNameAndArity(name, arity) and - methodInfoBlanketLike(m, name, arity, selfPos, impl, _, self, blanketPath, blanketTypeParam) + exists( + string name, int arity, TypeOption typeQualifier, TypeOption traitQualifier, + boolean hasReceiver | - methodCallVisibleImplTraitCandidate(mc, impl) - or - impl.resolveTraitTy() = mc.getTrait() + afc.hasSyntacticInfo(name, arity, typeQualifier, traitQualifier, hasReceiver) and + assocFunctionInfoBlanketLikeCheck(f, name, arity, selfPosAdj, impl, self, blanketPath, + blanketTypeParam, typeQualifier, traitQualifier, hasReceiver) + | + if not afc.hasATrait() then callVisibleImplTraitCandidate(afc, impl) else any() ) } /** - * A (potential) method call. + * A (potential) call to an associated function. * * This is either: * - * 1. `MethodCallMethodCallExpr`: an actual method call, `x.m()`; - * 2. `MethodCallIndexExpr`: an index expression, `x[i]`, which is [syntactic sugar][1] + * 1. `AssocFunctionCallMethodCallExpr`: a method call, `x.m()`; + * 2. `AssocFunctionCallIndexExpr`: an index expression, `x[i]`, which is [syntactic sugar][1] * for `*x.index(i)`; - * 3. `MethodCallCallExpr`: a qualified function call, `Q::m(x)`, where `m` is a method; - * or - * 4. `MethodCallOperation`: an operation expression, `x + y`, which is syntactic sugar + * 3. `AssocFunctionCallCallExpr`: a qualified function call, `Q::f(x)`; or + * 4. `AssocFunctionCallOperation`: an operation expression, `x + y`, which is syntactic sugar * for `Add::add(x, y)`. * * Note that only in case 1 and 2 is auto-dereferencing and borrowing allowed. * - * Note also that only case 4 is a _potential_ method call; in all other cases, we are - * guaranteed that the target is a method. + * Note also that only case 3 is a _potential_ call; in all other cases, we are guaranteed that + * the target is an associated function (in fact, a method). * * [1]: https://doc.rust-lang.org/std/ops/trait.Index.html */ - abstract class MethodCall extends Expr { + abstract class AssocFunctionCall extends Expr { + /** + * Holds if this call targets a function named `name` with `arity` parameters + * (including `self`). + */ + pragma[nomagic] abstract predicate hasNameAndArity(string name, int arity); - abstract Expr getArg(ArgumentPosition pos); + abstract Expr getNonReturnNodeAt(FunctionPosition pos); + + FunctionPositionAdj getFunctionCallAdjustedPosition(FunctionPosition pos) { + if this.hasReceiver() + then result = pos.getFunctionCallAdjusted() + else result = pos.asAdjusted() + } + + AstNode getNodeAt(FunctionPositionAdj posAdj) { + exists(FunctionPosition pos | + result = this.getNonReturnNodeAt(pos) and + posAdj = this.getFunctionCallAdjustedPosition(pos) + ) + or + result = this and posAdj.isReturn() + } + + /** Holds if this call has a receiver and hence must target a method. */ + abstract predicate hasReceiver(); abstract predicate supportsAutoDerefAndBorrow(); @@ -1554,163 +1728,242 @@ private module MethodResolution { /** Holds if this call targets a trait. */ predicate hasTrait() { exists(this.getTrait()) } - AstNode getNodeAt(FunctionPosition apos) { - result = this.getArg(apos.asArgumentPosition()) + Trait getATrait() { + result = this.getTrait() or - result = this and apos.isReturn() + result = getALookupTrait(getCallExprTypeQualifier(this, TypePath::nil(), _)) } - Type getArgumentTypeAt(ArgumentPosition pos, TypePath path) { - result = inferType(this.getArg(pos), path) + predicate hasATrait() { exists(this.getATrait()) } + + private Type getNonTypeParameterTypeQualifier() { + result = getCallExprTypeQualifier(this, TypePath::nil(), _) and + not result instanceof TypeParameter } /** - * Same as `getACandidateReceiverTypeAt`, but without borrows. + * Holds if this call has the given purely syntactic information, that is, + * information that does not rely on type inference. */ pragma[nomagic] - Type getACandidateReceiverTypeAtNoBorrow( - FunctionPosition selfPos, DerefChain derefChain, TypePath path + predicate hasSyntacticInfo( + string name, int arity, TypeOption typeQualifier, TypeOption traitQualifier, + boolean hasReceiver ) { - result = this.getArgumentTypeAt(selfPos.asArgumentPosition(), path) and - selfPos.isSelfOrTypeQualifier() and - derefChain.isEmpty() - or - exists(DerefImplItemNode impl, DerefChain suffix | - result = - ImplicitDeref::getDereferencedCandidateReceiverType(this, selfPos, impl, suffix, path) and - derefChain = DerefChain::cons(impl, suffix) + this.hasNameAndArity(name, arity) and + (if this.hasReceiver() then hasReceiver = true else hasReceiver = false) and + ( + typeQualifier.asSome() = this.getNonTypeParameterTypeQualifier() + or + not exists(this.getNonTypeParameterTypeQualifier()) and + typeQualifier.isNone() + ) and + ( + traitQualifier.asSome() = TTrait(this.getATrait()) + or + not this.hasATrait() and + traitQualifier.isNone() ) } + Type getTypeAt(FunctionPositionAdj posAdj, TypePath path) { + result = inferType(this.getNodeAt(posAdj), path) + } + /** - * Holds if the method inside `i` with matching name and arity can be ruled + * Holds if `selfPosAdj` is a potentially relevant function-call adjusted position + * for resolving this call. + * + * Only holds when we don't know for sure that the target is a method (in those + * cases we rely on the receiver only). + */ + pragma[nomagic] + private predicate isRelevantSelfPosAdj(FunctionPositionAdj selfPosAdj) { + not this.hasReceiver() and + exists(TypePath strippedTypePath, Type strippedType | + strippedType = substituteLookupTraits(this.getTypeAt(selfPosAdj, strippedTypePath)) and + strippedType != TNeverType() and + strippedType != TUnknownType() + | + nonBlanketLikeCandidate(this, _, selfPosAdj, _, _, strippedTypePath, strippedType) + or + blanketLikeCandidate(this, _, selfPosAdj, _, _, strippedTypePath, _) + ) + } + + predicate hasReceiverAtPos(FunctionPositionAdj posAdj) { + this.hasReceiver() and posAdj.asPosition() = 0 + } + + /** + * Holds if the function 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. + * by `derefChain` and `borrow` is incompatible with the type at function-call + * adjusted position `selfPosAdj`. * * The types are incompatible because they disagree on a concrete type somewhere * inside `root`. */ pragma[nomagic] private predicate hasIncompatibleTarget( - ImplOrTraitItemNode i, FunctionPosition selfPos, DerefChain derefChain, BorrowKind borrow, - Type root + ImplOrTraitItemNode i, FunctionPositionAdj selfPosAdj, DerefChain derefChain, + BorrowKind borrow, Type root ) { exists(TypePath path | - ReceiverIsInstantiationOfSelfParam::argIsNotInstantiationOf(MkMethodCallCand(this, selfPos, - derefChain, borrow), i, _, path) and + SelfArgIsInstantiationOf::argIsNotInstantiationOf(this, i, selfPosAdj, derefChain, borrow, + path) and path.isCons(root.getATypeParameter(), _) ) + or + exists(AssocFunctionType selfType | + SelfArgIsInstantiationOf::argIsInstantiationOf(this, i, selfPosAdj, derefChain, borrow, + selfType) and + OverloadedCallArgsAreInstantiationsOf::argsAreNotInstantiationsOf(this, i) and + root = selfType.getTypeAt(TypePath::nil()) + ) } /** - * Holds if the method inside blanket-like implementation `impl` with matching name + * Holds if the function inside blanket-like implementation `impl` with matching name * and arity can be ruled out as a target of this call, either because the candidate - * receiver type represented by `derefChain` and `borrow` is incompatible with the `self` - * parameter type, or because the blanket constraint is not satisfied. + * receiver type represented by `derefChain` and `borrow` is incompatible with the type + * at function-call adjusted position `selfPosAdj`, or because the blanket constraint + * is not satisfied. */ pragma[nomagic] private predicate hasIncompatibleBlanketLikeTarget( - ImplItemNode impl, FunctionPosition selfPos, DerefChain derefChain, BorrowKind borrow + ImplItemNode impl, FunctionPositionAdj selfPosAdj, DerefChain derefChain, BorrowKind borrow ) { - ReceiverIsNotInstantiationOfBlanketLikeSelfParam::argIsNotInstantiationOf(MkMethodCallCand(this, - selfPos, derefChain, borrow), impl, _, _) + SelfArgIsNotInstantiationOfBlanketLike::argIsNotInstantiationOf(MkAssocFunctionCallCand(this, + selfPosAdj, derefChain, borrow), impl, _, _) or - ReceiverSatisfiesBlanketLikeConstraint::dissatisfiesBlanketConstraint(MkMethodCallCand(this, - selfPos, derefChain, borrow), impl) + ArgSatisfiesBlanketLikeConstraint::dissatisfiesBlanketConstraint(MkAssocFunctionCallCand(this, + selfPosAdj, derefChain, borrow), impl) + } + + pragma[nomagic] + private predicate hasNoInherentTargetCheck( + FunctionPositionAdj selfPosAdj, DerefChain derefChain, BorrowKind borrow + ) { + MkAssocFunctionCallCand(this, selfPosAdj, derefChain, borrow) + .(AssocFunctionCallCand) + .hasNoInherentTargetCheck() + } + + pragma[nomagic] + private predicate hasNoInherentTargetTypeQualifierCheck() { + exists(FunctionPositionAdj typeQualifierPos | + typeQualifierPos.isTypeQualifier() and + this.hasNoInherentTargetCheck(typeQualifierPos, DerefChain::nil(), TNoBorrowKind()) + ) + } + + pragma[nomagic] + predicate hasNoInherentTarget( + FunctionPositionAdj selfPosAdj, DerefChain derefChain, BorrowKind borrow + ) { + this.hasNoInherentTargetCheck(selfPosAdj, derefChain, borrow) and + if exists(this.getNonTypeParameterTypeQualifier()) and not selfPosAdj.isTypeQualifier() + then + // If this call is of the form `Foo::bar(x)` and we are resolving with respect to the type + // of `x`, then we additionally need to check that the type qualifier does not give rise + // to an inherent target + this.hasNoInherentTargetTypeQualifierCheck() + else any() } /** - * Same as `getACandidateReceiverTypeAt`, but excludes pseudo types `!` and `unknown`. + * Same as `getSelfTypeAt`, but excludes pseudo types `!` and `unknown`. */ pragma[nomagic] - Type getANonPseudoCandidateReceiverTypeAt( - FunctionPosition selfPos, DerefChain derefChain, BorrowKind borrow, TypePath path + Type getANonPseudoSelfTypeAt( + FunctionPositionAdj selfPosAdj, DerefChain derefChain, BorrowKind borrow, TypePath path ) { - result = this.getACandidateReceiverTypeAt(selfPos, derefChain, borrow, path) and + result = this.getSelfTypeAt(selfPosAdj, derefChain, borrow, path) and result != TNeverType() and result != TUnknownType() } pragma[nomagic] - private Type getComplexStrippedType( - FunctionPosition selfPos, DerefChain derefChain, BorrowKind borrow, TypePath strippedTypePath + private Type getComplexStrippedSelfType( + FunctionPositionAdj selfPosAdj, DerefChain derefChain, BorrowKind borrow, + TypePath strippedTypePath ) { - result = - this.getANonPseudoCandidateReceiverTypeAt(selfPos, derefChain, borrow, strippedTypePath) and - isComplexRootStripped(strippedTypePath, result) + result = this.getANonPseudoSelfTypeAt(selfPosAdj, derefChain, borrow, strippedTypePath) and + ( + isComplexRootStripped(strippedTypePath, result) + or + selfPosAdj.isTypeQualifier() and strippedTypePath.isEmpty() + ) } bindingset[derefChain, borrow, strippedTypePath, strippedType] private predicate hasNoCompatibleNonBlanketLikeTargetCheck( - FunctionPosition selfPos, DerefChain derefChain, BorrowKind borrow, TypePath strippedTypePath, - Type strippedType + FunctionPositionAdj selfPosAdj, DerefChain derefChain, BorrowKind borrow, + TypePath strippedTypePath, Type strippedType ) { forall(ImplOrTraitItemNode i | - methodCallNonBlanketCandidate(this, _, selfPos, i, _, strippedTypePath, strippedType) + nonBlanketLikeCandidate(this, _, selfPosAdj, i, _, strippedTypePath, strippedType) | - this.hasIncompatibleTarget(i, selfPos, derefChain, borrow, strippedType) + this.hasIncompatibleTarget(i, selfPosAdj, derefChain, borrow, strippedType) ) } bindingset[derefChain, borrow, strippedTypePath, strippedType] private predicate hasNoCompatibleTargetCheck( - FunctionPosition selfPos, DerefChain derefChain, BorrowKind borrow, TypePath strippedTypePath, - Type strippedType + FunctionPositionAdj selfPosAdj, DerefChain derefChain, BorrowKind borrow, + TypePath strippedTypePath, Type strippedType ) { - this.hasNoCompatibleNonBlanketLikeTargetCheck(selfPos, derefChain, borrow, strippedTypePath, - strippedType) and - forall(ImplItemNode i | methodCallBlanketLikeCandidate(this, _, selfPos, i, _, _, _) | - this.hasIncompatibleBlanketLikeTarget(i, selfPos, derefChain, borrow) + this.hasNoCompatibleNonBlanketLikeTargetCheck(selfPosAdj, derefChain, borrow, + strippedTypePath, strippedType) and + forall(ImplItemNode i | blanketLikeCandidate(this, _, selfPosAdj, i, _, _, _) | + this.hasIncompatibleBlanketLikeTarget(i, selfPosAdj, derefChain, borrow) ) } bindingset[derefChain, borrow, strippedTypePath, strippedType] private predicate hasNoCompatibleNonBlanketTargetCheck( - FunctionPosition selfPos, DerefChain derefChain, BorrowKind borrow, TypePath strippedTypePath, - Type strippedType + FunctionPositionAdj selfPosAdj, DerefChain derefChain, BorrowKind borrow, + TypePath strippedTypePath, Type strippedType ) { - this.hasNoCompatibleNonBlanketLikeTargetCheck(selfPos, derefChain, borrow, strippedTypePath, - strippedType) and + this.hasNoCompatibleNonBlanketLikeTargetCheck(selfPosAdj, derefChain, borrow, + strippedTypePath, strippedType) and forall(ImplItemNode i | - methodCallBlanketLikeCandidate(this, _, selfPos, i, _, _, _) and + blanketLikeCandidate(this, _, selfPosAdj, i, _, _, _) and not i.isBlanketImplementation() | - this.hasIncompatibleBlanketLikeTarget(i, selfPos, derefChain, borrow) + this.hasIncompatibleBlanketLikeTarget(i, selfPosAdj, derefChain, borrow) ) } // forex using recursion pragma[nomagic] private predicate hasNoCompatibleTargetNoBorrowToIndex( - FunctionPosition selfPos, DerefChain derefChain, TypePath strippedTypePath, Type strippedType, - int n + FunctionPositionAdj selfPosAdj, DerefChain derefChain, TypePath strippedTypePath, + Type strippedType, int n ) { - ( - this.supportsAutoDerefAndBorrow() - or - // needed for the `hasNoCompatibleTarget` check in - // `ReceiverSatisfiesBlanketLikeConstraintInput::hasBlanketCandidate` - derefChain.isEmpty() - ) and + this.supportsAutoDerefAndBorrow() and + this.hasReceiverAtPos(selfPosAdj) and strippedType = - this.getComplexStrippedType(selfPos, derefChain, TNoBorrowKind(), strippedTypePath) and + this.getComplexStrippedSelfType(selfPosAdj, derefChain, TNoBorrowKind(), strippedTypePath) and n = -1 or - this.hasNoCompatibleTargetNoBorrowToIndex(selfPos, derefChain, strippedTypePath, strippedType, - n - 1) and - exists(Type t | t = getNthLookupType(strippedType, n) | - this.hasNoCompatibleTargetCheck(selfPos, derefChain, TNoBorrowKind(), strippedTypePath, t) + this.hasNoCompatibleTargetNoBorrowToIndex(selfPosAdj, derefChain, strippedTypePath, + strippedType, n - 1) and + exists(Type t | + t = getNthLookupType(strippedType, n) and + this.hasNoCompatibleTargetCheck(selfPosAdj, derefChain, TNoBorrowKind(), strippedTypePath, t) ) } /** * Holds if the candidate receiver type represented by `derefChain` does not - * have a matching method target. + * have a matching call target at function-call adjusted position `selfPosAdj`. */ pragma[nomagic] - predicate hasNoCompatibleTargetNoBorrow(FunctionPosition selfPos, DerefChain derefChain) { + predicate hasNoCompatibleTargetNoBorrow(FunctionPositionAdj selfPosAdj, DerefChain derefChain) { exists(Type strippedType | - this.hasNoCompatibleTargetNoBorrowToIndex(selfPos, derefChain, _, strippedType, + this.hasNoCompatibleTargetNoBorrowToIndex(selfPosAdj, derefChain, _, strippedType, getLastLookupTypeIndex(strippedType)) ) } @@ -1718,38 +1971,44 @@ private module MethodResolution { // forex using recursion pragma[nomagic] private predicate hasNoCompatibleNonBlanketTargetNoBorrowToIndex( - FunctionPosition selfPos, DerefChain derefChain, TypePath strippedTypePath, Type strippedType, - int n + FunctionPositionAdj selfPosAdj, DerefChain derefChain, TypePath strippedTypePath, + Type strippedType, int n ) { ( - this.supportsAutoDerefAndBorrow() + this.supportsAutoDerefAndBorrow() and + this.hasReceiverAtPos(selfPosAdj) or - // needed for the `hasNoCompatibleTarget` check in - // `ReceiverSatisfiesBlanketLikeConstraintInput::hasBlanketCandidate` - derefChain.isEmpty() + // needed for the `hasNoCompatibleNonBlanketTarget` check in + // `ArgSatisfiesBlanketLikeConstraintInput::hasBlanketCandidate` + exists(ImplItemNode i | + derefChain.isEmpty() and + blanketLikeCandidate(this, _, selfPosAdj, i, _, _, _) and + i.isBlanketImplementation() + ) ) and strippedType = - this.getComplexStrippedType(selfPos, derefChain, TNoBorrowKind(), strippedTypePath) and + this.getComplexStrippedSelfType(selfPosAdj, derefChain, TNoBorrowKind(), strippedTypePath) and n = -1 or - this.hasNoCompatibleNonBlanketTargetNoBorrowToIndex(selfPos, derefChain, strippedTypePath, + this.hasNoCompatibleNonBlanketTargetNoBorrowToIndex(selfPosAdj, derefChain, strippedTypePath, strippedType, n - 1) and - exists(Type t | t = getNthLookupType(strippedType, n) | - this.hasNoCompatibleNonBlanketTargetCheck(selfPos, derefChain, TNoBorrowKind(), + exists(Type t | + t = getNthLookupType(strippedType, n) and + this.hasNoCompatibleNonBlanketTargetCheck(selfPosAdj, derefChain, TNoBorrowKind(), strippedTypePath, t) ) } /** * Holds if the candidate receiver type represented by `derefChain` does not have - * a matching non-blanket method target. + * a matching non-blanket call target at function-call adjusted position `selfPosAdj`. */ pragma[nomagic] predicate hasNoCompatibleNonBlanketTargetNoBorrow( - FunctionPosition selfPos, DerefChain derefChain + FunctionPositionAdj selfPosAdj, DerefChain derefChain ) { exists(Type strippedType | - this.hasNoCompatibleNonBlanketTargetNoBorrowToIndex(selfPos, derefChain, _, strippedType, + this.hasNoCompatibleNonBlanketTargetNoBorrowToIndex(selfPosAdj, derefChain, _, strippedType, getLastLookupTypeIndex(strippedType)) ) } @@ -1757,30 +2016,35 @@ private module MethodResolution { // forex using recursion pragma[nomagic] private predicate hasNoCompatibleTargetSharedBorrowToIndex( - FunctionPosition selfPos, DerefChain derefChain, TypePath strippedTypePath, Type strippedType, - int n + FunctionPositionAdj selfPosAdj, DerefChain derefChain, TypePath strippedTypePath, + Type strippedType, int n ) { - this.hasNoCompatibleTargetNoBorrow(selfPos, derefChain) and + this.hasNoCompatibleTargetNoBorrow(selfPosAdj, derefChain) and strippedType = - this.getComplexStrippedType(selfPos, derefChain, TSomeBorrowKind(false), strippedTypePath) and + this.getComplexStrippedSelfType(selfPosAdj, derefChain, TSomeBorrowKind(false), + strippedTypePath) and n = -1 or - this.hasNoCompatibleTargetSharedBorrowToIndex(selfPos, derefChain, strippedTypePath, + this.hasNoCompatibleTargetSharedBorrowToIndex(selfPosAdj, derefChain, strippedTypePath, strippedType, n - 1) and - exists(Type t | t = getNthLookupType(strippedType, n) | - this.hasNoCompatibleNonBlanketLikeTargetCheck(selfPos, derefChain, TSomeBorrowKind(false), - strippedTypePath, t) + exists(Type t | + t = getNthLookupType(strippedType, n) and + this.hasNoCompatibleNonBlanketLikeTargetCheck(selfPosAdj, derefChain, + TSomeBorrowKind(false), strippedTypePath, t) ) } /** * Holds if the candidate receiver type represented by `derefChain`, followed - * by a shared borrow, does not have a matching method target. + * by a shared borrow, does not have a matching call target at function-call + * adjusted position `selfPosAdj`. */ pragma[nomagic] - predicate hasNoCompatibleTargetSharedBorrow(FunctionPosition selfPos, DerefChain derefChain) { + predicate hasNoCompatibleTargetSharedBorrow( + FunctionPositionAdj selfPosAdj, DerefChain derefChain + ) { exists(Type strippedType | - this.hasNoCompatibleTargetSharedBorrowToIndex(selfPos, derefChain, _, strippedType, + this.hasNoCompatibleTargetSharedBorrowToIndex(selfPosAdj, derefChain, _, strippedType, getLastLookupTypeIndex(strippedType)) ) } @@ -1788,30 +2052,33 @@ private module MethodResolution { // forex using recursion pragma[nomagic] private predicate hasNoCompatibleTargetMutBorrowToIndex( - FunctionPosition selfPos, DerefChain derefChain, TypePath strippedTypePath, Type strippedType, - int n + FunctionPositionAdj selfPosAdj, DerefChain derefChain, TypePath strippedTypePath, + Type strippedType, int n ) { - this.hasNoCompatibleTargetSharedBorrow(selfPos, derefChain) and + this.hasNoCompatibleTargetSharedBorrow(selfPosAdj, derefChain) and strippedType = - this.getComplexStrippedType(selfPos, derefChain, TSomeBorrowKind(true), strippedTypePath) and + this.getComplexStrippedSelfType(selfPosAdj, derefChain, TSomeBorrowKind(true), + strippedTypePath) and n = -1 or - this.hasNoCompatibleTargetMutBorrowToIndex(selfPos, derefChain, strippedTypePath, + this.hasNoCompatibleTargetMutBorrowToIndex(selfPosAdj, derefChain, strippedTypePath, strippedType, n - 1) and - exists(Type t | t = getNthLookupType(strippedType, n) | - this.hasNoCompatibleNonBlanketLikeTargetCheck(selfPos, derefChain, TSomeBorrowKind(true), + exists(Type t | + t = getNthLookupType(strippedType, n) and + this.hasNoCompatibleNonBlanketLikeTargetCheck(selfPosAdj, derefChain, TSomeBorrowKind(true), strippedTypePath, t) ) } /** * Holds if the candidate receiver type represented by `derefChain`, followed - * by a `mut` borrow, does not have a matching method target. + * by a `mut` borrow, does not have a matching call target at function-call + * adjusted position `selfPosAdj`. */ pragma[nomagic] - predicate hasNoCompatibleTargetMutBorrow(FunctionPosition selfPos, DerefChain derefChain) { + predicate hasNoCompatibleTargetMutBorrow(FunctionPositionAdj selfPosAdj, DerefChain derefChain) { exists(Type strippedType | - this.hasNoCompatibleTargetMutBorrowToIndex(selfPos, derefChain, _, strippedType, + this.hasNoCompatibleTargetMutBorrowToIndex(selfPosAdj, derefChain, _, strippedType, getLastLookupTypeIndex(strippedType)) ) } @@ -1819,32 +2086,35 @@ private module MethodResolution { // forex using recursion pragma[nomagic] private predicate hasNoCompatibleNonBlanketTargetSharedBorrowToIndex( - FunctionPosition selfPos, DerefChain derefChain, TypePath strippedTypePath, Type strippedType, - int n + FunctionPositionAdj selfPosAdj, DerefChain derefChain, TypePath strippedTypePath, + Type strippedType, int n ) { - this.hasNoCompatibleTargetNoBorrow(selfPos, derefChain) and + this.hasNoCompatibleTargetNoBorrow(selfPosAdj, derefChain) and strippedType = - this.getComplexStrippedType(selfPos, derefChain, TSomeBorrowKind(false), strippedTypePath) and + this.getComplexStrippedSelfType(selfPosAdj, derefChain, TSomeBorrowKind(false), + strippedTypePath) and n = -1 or - this.hasNoCompatibleNonBlanketTargetSharedBorrowToIndex(selfPos, derefChain, strippedTypePath, - strippedType, n - 1) and - exists(Type t | t = getNthLookupType(strippedType, n) | - this.hasNoCompatibleNonBlanketTargetCheck(selfPos, derefChain, TSomeBorrowKind(false), + this.hasNoCompatibleNonBlanketTargetSharedBorrowToIndex(selfPosAdj, derefChain, + strippedTypePath, strippedType, n - 1) and + exists(Type t | + t = getNthLookupType(strippedType, n) and + this.hasNoCompatibleNonBlanketTargetCheck(selfPosAdj, derefChain, TSomeBorrowKind(false), strippedTypePath, t) ) } /** * Holds if the candidate receiver type represented by `derefChain`, followed - * by a shared borrow, does not have a matching non-blanket method target. + * by a shared borrow, does not have a matching non-blanket call target at + * function-call adjusted position `selfPosAdj`. */ pragma[nomagic] predicate hasNoCompatibleNonBlanketTargetSharedBorrow( - FunctionPosition selfPos, DerefChain derefChain + FunctionPositionAdj selfPosAdj, DerefChain derefChain ) { exists(Type strippedType | - this.hasNoCompatibleNonBlanketTargetSharedBorrowToIndex(selfPos, derefChain, _, + this.hasNoCompatibleNonBlanketTargetSharedBorrowToIndex(selfPosAdj, derefChain, _, strippedType, getLastLookupTypeIndex(strippedType)) ) } @@ -1852,38 +2122,68 @@ private module MethodResolution { // forex using recursion pragma[nomagic] private predicate hasNoCompatibleNonBlanketTargetMutBorrowToIndex( - FunctionPosition selfPos, DerefChain derefChain, TypePath strippedTypePath, Type strippedType, - int n + FunctionPositionAdj selfPosAdj, DerefChain derefChain, TypePath strippedTypePath, + Type strippedType, int n ) { - this.hasNoCompatibleNonBlanketTargetSharedBorrow(selfPos, derefChain) and + this.hasNoCompatibleNonBlanketTargetSharedBorrow(selfPosAdj, derefChain) and strippedType = - this.getComplexStrippedType(selfPos, derefChain, TSomeBorrowKind(true), strippedTypePath) and + this.getComplexStrippedSelfType(selfPosAdj, derefChain, TSomeBorrowKind(true), + strippedTypePath) and n = -1 or - this.hasNoCompatibleNonBlanketTargetMutBorrowToIndex(selfPos, derefChain, strippedTypePath, + this.hasNoCompatibleNonBlanketTargetMutBorrowToIndex(selfPosAdj, derefChain, strippedTypePath, strippedType, n - 1) and - exists(Type t | t = getNthLookupType(strippedType, n) | - this.hasNoCompatibleNonBlanketTargetCheck(selfPos, derefChain, TSomeBorrowKind(true), + exists(Type t | + t = getNthLookupType(strippedType, n) and + this.hasNoCompatibleNonBlanketTargetCheck(selfPosAdj, derefChain, TSomeBorrowKind(true), strippedTypePath, t) ) } /** * Holds if the candidate receiver type represented by `derefChain`, followed - * by a `mut` borrow, does not have a matching non-blanket method target. + * by a `mut` borrow, does not have a matching non-blanket call target at + * function-call adjusted position `selfPosAdj`. */ pragma[nomagic] predicate hasNoCompatibleNonBlanketTargetMutBorrow( - FunctionPosition selfPos, DerefChain derefChain + FunctionPositionAdj selfPosAdj, DerefChain derefChain ) { exists(Type strippedType | - this.hasNoCompatibleNonBlanketTargetMutBorrowToIndex(selfPos, derefChain, _, strippedType, - getLastLookupTypeIndex(strippedType)) + this.hasNoCompatibleNonBlanketTargetMutBorrowToIndex(selfPosAdj, derefChain, _, + strippedType, getLastLookupTypeIndex(strippedType)) ) } /** - * Gets a [candidate receiver type][1] of this method call at `path`. + * Same as `getSelfTypeAt`, but without borrows. + */ + pragma[nomagic] + Type getSelfTypeAtNoBorrow(FunctionPositionAdj selfPosAdj, DerefChain derefChain, TypePath path) { + result = this.getTypeAt(selfPosAdj, path) and + derefChain.isEmpty() and + ( + this.hasReceiverAtPos(selfPosAdj) + or + selfPosAdj.isTypeQualifier() + or + this.isRelevantSelfPosAdj(selfPosAdj) + ) + or + exists(DerefImplItemNode impl, DerefChain suffix | + result = + ImplicitDeref::getDereferencedCandidateReceiverType(this, selfPosAdj, impl, suffix, path) and + derefChain = DerefChain::cons(impl, suffix) + ) + } + + /** + * Gets the type of this call at function-call adjusted position `selfPosAdj` and + * type path `path`. + * + * In case this call supports auto-dereferencing and borrowing and `selfPosAdj` is + * position 0 (corresponding to the receiver), the result is a + * [candidate receiver type][1]: * * The type is obtained by repeatedly dereferencing the receiver expression's type, * as long as the method cannot be resolved in an earlier candidate type, and possibly @@ -1895,20 +2195,19 @@ private module MethodResolution { * [1]: https://doc.rust-lang.org/reference/expressions/method-call-expr.html#r-expr.method.candidate-receivers */ pragma[nomagic] - Type getACandidateReceiverTypeAt( - FunctionPosition selfPos, DerefChain derefChain, BorrowKind borrow, TypePath path + Type getSelfTypeAt( + FunctionPositionAdj selfPosAdj, DerefChain derefChain, BorrowKind borrow, TypePath path ) { - result = this.getACandidateReceiverTypeAtNoBorrow(selfPos, derefChain, path) and + result = this.getSelfTypeAtNoBorrow(selfPosAdj, derefChain, path) and borrow.isNoBorrow() or exists(RefType rt | // first try shared borrow - this.supportsAutoDerefAndBorrow() and - this.hasNoCompatibleTargetNoBorrow(selfPos, derefChain) and + this.hasNoCompatibleTargetNoBorrow(selfPosAdj, derefChain) and borrow.isSharedBorrow() or // then try mutable borrow - this.hasNoCompatibleTargetSharedBorrow(selfPos, derefChain) and + this.hasNoCompatibleTargetSharedBorrow(selfPosAdj, derefChain) and borrow.isMutableBorrow() | rt = borrow.getRefType() and @@ -1917,7 +2216,7 @@ private module MethodResolution { result = rt or exists(TypePath suffix | - result = this.getACandidateReceiverTypeAtNoBorrow(selfPos, derefChain, suffix) and + result = this.getSelfTypeAtNoBorrow(selfPosAdj, derefChain, suffix) and path = TypePath::cons(rt.getPositionalTypeParameter(0), suffix) ) ) @@ -1925,15 +2224,18 @@ private module MethodResolution { } /** - * Gets a method that this call resolves to after having applied a sequence of - * dereferences and possibly a borrow on the receiver type, encoded in `derefChain` - * and `borrow`. + * Gets a function that this call resolves to after having applied a sequence of + * dereferences and possibly a borrow on the receiver type at `selfPosAdj`, encoded + * in `derefChain` and `borrow`. */ pragma[nomagic] - Method resolveCallTarget(ImplOrTraitItemNode i, DerefChain derefChain, BorrowKind borrow) { - exists(MethodCallCand mcc | - mcc = MkMethodCallCand(this, _, derefChain, borrow) and - result = mcc.resolveCallTarget(i) + AssocFunction resolveCallTarget( + ImplOrTraitItemNode i, FunctionPositionAdj selfPosAdj, DerefChain derefChain, + BorrowKind borrow + ) { + exists(AssocFunctionCallCand afcc | + afcc = MkAssocFunctionCallCand(this, selfPosAdj, derefChain, borrow) and + result = afcc.resolveCallTarget(i) ) } @@ -1943,21 +2245,25 @@ private module MethodResolution { * resolve the call target. */ predicate argumentHasImplicitDerefChainBorrow(Expr arg, DerefChain derefChain, BorrowKind borrow) { - exists(this.resolveCallTarget(_, derefChain, borrow)) and - arg = this.getArg(any(ArgumentPosition apos | apos.isSelf())) and - not (derefChain.isEmpty() and borrow.isNoBorrow()) + exists(FunctionPositionAdj selfAdj | + this.hasReceiverAtPos(selfAdj) and + exists(this.resolveCallTarget(_, selfAdj, derefChain, borrow)) and + arg = this.getNodeAt(selfAdj) and + not (derefChain.isEmpty() and borrow.isNoBorrow()) + ) } } - private class MethodCallMethodCallExpr extends MethodCall instanceof MethodCallExpr { - pragma[nomagic] + private class AssocFunctionCallMethodCallExpr extends AssocFunctionCall instanceof MethodCallExpr { override predicate hasNameAndArity(string name, int arity) { name = super.getIdentifier().getText() and - arity = super.getArgList().getNumberOfArgs() + arity = super.getNumberOfSyntacticArguments() } - override Expr getArg(ArgumentPosition pos) { - result = MethodCallExpr.super.getSyntacticArgument(pos) + override predicate hasReceiver() { any() } + + override Expr getNonReturnNodeAt(FunctionPosition pos) { + result = super.getSyntacticArgument(pos.asArgumentPosition()) } override predicate supportsAutoDerefAndBorrow() { any() } @@ -1965,24 +2271,25 @@ private module MethodResolution { override Trait getTrait() { none() } } - private class MethodCallIndexExpr extends MethodCall instanceof IndexExpr { + private class AssocFunctionCallIndexExpr extends AssocFunctionCall, IndexExpr { private predicate isInMutableContext() { // todo: does not handle all cases yet VariableImpl::assignmentOperationDescendant(_, this) } - pragma[nomagic] override predicate hasNameAndArity(string name, int arity) { (if this.isInMutableContext() then name = "index_mut" else name = "index") and - arity = 1 + arity = 2 } - override Expr getArg(ArgumentPosition pos) { + override predicate hasReceiver() { any() } + + override Expr getNonReturnNodeAt(FunctionPosition pos) { pos.isSelf() and - result = super.getBase() + result = this.getBase() or pos.asPosition() = 0 and - result = super.getIndex() + result = this.getIndex() } override predicate supportsAutoDerefAndBorrow() { any() } @@ -1994,95 +2301,88 @@ private module MethodResolution { } } - private class MethodCallCallExpr extends MethodCall instanceof CallExpr { - MethodCallCallExpr() { + private class AssocFunctionCallCallExpr extends AssocFunctionCall, CallExpr { + AssocFunctionCallCallExpr() { exists(getCallExprPathQualifier(this)) and - // even if a method cannot be resolved by path resolution, it may still + // even if a target cannot be resolved by path resolution, it may still // be possible to resolve a blanket implementation (so not `forex`) - forall(ItemNode i | i = CallExprImpl::getResolvedFunction(this) | i instanceof Method) + forall(ItemNode i | i = CallExprImpl::getResolvedFunction(this) | i instanceof AssocFunction) } - pragma[nomagic] override predicate hasNameAndArity(string name, int arity) { name = CallExprImpl::getFunctionPath(this).getText() and - arity = super.getArgList().getNumberOfArgs() - 1 + arity = this.getNumberOfSyntacticArguments() } - override Expr getArg(ArgumentPosition pos) { - pos.isSelf() and - result = super.getSyntacticPositionalArgument(0) - or - result = super.getSyntacticPositionalArgument(pos.asPosition() + 1) + override predicate hasReceiver() { none() } + + override Expr getNonReturnNodeAt(FunctionPosition pos) { + result = this.getSyntacticPositionalArgument(pos.asPosition()) } - override Type getArgumentTypeAt(ArgumentPosition pos, TypePath path) { - result = super.getArgumentTypeAt(pos, path) + override Type getTypeAt(FunctionPositionAdj posAdj, TypePath path) { + result = super.getTypeAt(posAdj, path) or - pos.isTypeQualifier() and + posAdj.isTypeQualifier() and result = getCallExprTypeQualifier(this, path, _) } - pragma[nomagic] - predicate hasNoInherentTarget() { - // `_` is fine below, because auto-deref/borrow is not supported - MkMethodCallCand(this, _, _, _).(MethodCallCand).hasNoInherentTarget() - } - override predicate supportsAutoDerefAndBorrow() { none() } override Trait getTrait() { result = getCallExprTraitQualifier(this) } } - final class MethodCallOperation extends MethodCall instanceof Operation { - pragma[nomagic] + final class AssocFunctionCallOperation extends AssocFunctionCall, Operation { override predicate hasNameAndArity(string name, int arity) { - super.isOverloaded(_, name, _) and - arity = super.getNumberOfOperands() - 1 + this.isOverloaded(_, name, _) and + arity = this.getNumberOfOperands() } - override Expr getArg(ArgumentPosition pos) { + override predicate hasReceiver() { any() } + + override Expr getNonReturnNodeAt(FunctionPosition pos) { pos.isSelf() and - result = super.getOperand(0) + result = this.getOperand(0) or - result = super.getOperand(pos.asPosition() + 1) + result = this.getOperand(pos.asPosition() + 1) } - private predicate implicitBorrowAt(ArgumentPosition pos, boolean isMutable) { - exists(int borrows | super.isOverloaded(_, _, borrows) | - pos.isSelf() and + private predicate implicitBorrowAt(FunctionPositionAdj posAdj, boolean isMutable) { + exists(int borrows | this.isOverloaded(_, _, borrows) | + posAdj.asPosition() = 0 and borrows >= 1 and if this instanceof CompoundAssignmentExpr then isMutable = true else isMutable = false or - pos.asPosition() = 0 and + posAdj.asPosition() = 1 and borrows = 2 and isMutable = false ) } - override Type getArgumentTypeAt(ArgumentPosition pos, TypePath path) { + override Type getTypeAt(FunctionPositionAdj posAdj, TypePath path) { exists(boolean isMutable, RefType rt | - this.implicitBorrowAt(pos, isMutable) and + this.implicitBorrowAt(posAdj, isMutable) and rt = getRefType(isMutable) | result = rt and path.isEmpty() or exists(TypePath path0 | - result = inferType(this.getArg(pos), path0) and + result = inferType(this.getNodeAt(posAdj), path0) and path = TypePath::cons(rt.getPositionalTypeParameter(0), path0) ) ) or - not this.implicitBorrowAt(pos, _) and - result = inferType(this.getArg(pos), path) + not this.implicitBorrowAt(posAdj, _) and + result = inferType(this.getNodeAt(posAdj), path) } override predicate argumentHasImplicitDerefChainBorrow( Expr arg, DerefChain derefChain, BorrowKind borrow ) { - exists(ArgumentPosition apos, boolean isMutable | - this.implicitBorrowAt(apos, isMutable) and - arg = this.getArg(apos) and + exists(FunctionPositionAdj posAdj, boolean isMutable | + this.implicitBorrowAt(posAdj, isMutable) and + arg = this.getNodeAt(posAdj) and derefChain = DerefChain::nil() and borrow = TSomeBorrowKind(isMutable) ) @@ -2090,164 +2390,194 @@ private module MethodResolution { override predicate supportsAutoDerefAndBorrow() { none() } - override Trait getTrait() { super.isOverloaded(result, _, _) } + override Trait getTrait() { this.isOverloaded(result, _, _) } } pragma[nomagic] - private Method getMethodSuccessor(ImplOrTraitItemNode i, string name, int arity) { + private AssocFunction getAssocFunctionSuccessor(ImplOrTraitItemNode i, string name, int arity) { result = i.getASuccessor(name) and - arity = result.getParamList().getNumberOfParams() + arity = result.getNumberOfParamsInclSelf() } - private newtype TMethodCallCand = - MkMethodCallCand( - MethodCall mc, FunctionPosition selfPos, DerefChain derefChain, BorrowKind borrow + private newtype TAssocFunctionCallCand = + MkAssocFunctionCallCand( + AssocFunctionCall afc, FunctionPositionAdj selfPosAdj, DerefChain derefChain, + BorrowKind borrow ) { - exists(mc.getACandidateReceiverTypeAt(selfPos, derefChain, borrow, _)) + exists(afc.getANonPseudoSelfTypeAt(selfPosAdj, derefChain, borrow, _)) } - /** A method call with a dereference chain and a potential borrow. */ - private class MethodCallCand extends MkMethodCallCand { - MethodCall mc_; - FunctionPosition selfPos; + /** A call with a dereference chain and a potential borrow at a given position. */ + final private class AssocFunctionCallCand extends MkAssocFunctionCallCand { + AssocFunctionCall afc_; + FunctionPositionAdj selfPosAdj_; DerefChain derefChain; BorrowKind borrow; - MethodCallCand() { this = MkMethodCallCand(mc_, selfPos, derefChain, borrow) } + AssocFunctionCallCand() { + this = MkAssocFunctionCallCand(afc_, selfPosAdj_, derefChain, borrow) + } - MethodCall getMethodCall() { result = mc_ } + AssocFunctionCall getAssocFunctionCall() { result = afc_ } Type getTypeAt(TypePath path) { result = - substituteLookupTraits(mc_.getANonPseudoCandidateReceiverTypeAt(selfPos, derefChain, borrow, - path)) + substituteLookupTraits(afc_.getANonPseudoSelfTypeAt(selfPosAdj_, derefChain, borrow, path)) } pragma[nomagic] predicate hasNoCompatibleNonBlanketTarget() { - mc_.hasNoCompatibleNonBlanketTargetSharedBorrow(selfPos, derefChain) and + afc_.hasNoCompatibleNonBlanketTargetSharedBorrow(selfPosAdj_, derefChain) and borrow.isSharedBorrow() or - mc_.hasNoCompatibleNonBlanketTargetMutBorrow(selfPos, derefChain) and + afc_.hasNoCompatibleNonBlanketTargetMutBorrow(selfPosAdj_, derefChain) and borrow.isMutableBorrow() or - mc_.hasNoCompatibleNonBlanketTargetNoBorrow(selfPos, derefChain) and + afc_.hasNoCompatibleNonBlanketTargetNoBorrow(selfPosAdj_, derefChain) and borrow.isNoBorrow() } pragma[nomagic] predicate hasSignature( - MethodCall mc, FunctionPosition selfPos_, TypePath strippedTypePath, Type strippedType, - string name, int arity + AssocFunctionCall afc, FunctionPositionAdj selfPosAdj, TypePath strippedTypePath, + Type strippedType, string name, int arity ) { strippedType = this.getTypeAt(strippedTypePath) and - isComplexRootStripped(strippedTypePath, strippedType) and - mc = mc_ and - mc.hasNameAndArity(name, arity) and - selfPos = selfPos_ + ( + isComplexRootStripped(strippedTypePath, strippedType) + or + selfPosAdj_.isTypeQualifier() and strippedTypePath.isEmpty() + ) and + afc = afc_ and + afc.hasNameAndArity(name, arity) and + selfPosAdj = selfPosAdj_ } /** - * Holds if the inherent method inside `impl` with matching name and arity can be + * Holds if the inherent function inside `impl` with matching name and arity can be * ruled out as a candidate for this call. */ pragma[nomagic] private predicate hasIncompatibleInherentTarget(Impl impl) { - ReceiverIsNotInstantiationOfInherentSelfParam::argIsNotInstantiationOf(this, impl, _, _) + SelfArgIsNotInstantiationOfInherent::argIsNotInstantiationOf(this, impl, _, _) } - /** - * Holds if this method call has no inherent target, i.e., it does not - * resolve to a method in an `impl` block for the type of the receiver. - */ pragma[nomagic] - predicate hasNoInherentTarget() { - mc_.hasTrait() - or - exists(TypePath strippedTypePath, Type strippedType, string name, int arity | - this.hasSignature(_, selfPos, strippedTypePath, strippedType, name, arity) and + predicate hasNoInherentTargetCheck() { + exists( + TypePath strippedTypePath, Type strippedType, string name, int arity, + TypeOption typeQualifier, TypeOption traitQualifier, boolean hasReceiver, + boolean targetMustBeMethod + | + // Calls to inherent functions are always of the form `x.m(...)` or `Foo::bar(...)`, + // where `Foo` is a type. In case `bar` is a method, we can use both the type qualifier + // and the type of the first argument to rule out candidates + selfPosAdj_.isTypeQualifier() and targetMustBeMethod = false + or + selfPosAdj_.asPosition() = 0 and targetMustBeMethod = true + | + afc_.hasSyntacticInfo(name, arity, typeQualifier, traitQualifier, hasReceiver) and + (if hasReceiver = true then targetMustBeMethod = true else any()) and + this.hasSignature(_, selfPosAdj_, strippedTypePath, strippedType, name, arity) and forall(Impl i | - methodInfoNonBlanket(_, name, arity, selfPos, i, _, strippedTypePath, strippedType) and - not i.hasTrait() + i.isInherent() and + ( + assocFunctionInfoNonBlanketLikeCheck(_, name, arity, selfPosAdj_, i, _, + strippedTypePath, strippedType, typeQualifier, traitQualifier, targetMustBeMethod) + or + assocFunctionInfoNonBlanketLikeTypeParamCheck(_, name, arity, selfPosAdj_, i, _, + strippedTypePath, typeQualifier, traitQualifier, targetMustBeMethod) + ) | this.hasIncompatibleInherentTarget(i) ) ) } + /** + * Holds if this function call has no inherent target, i.e., it does not + * resolve to a function in an `impl` block for the type of the receiver. + */ pragma[nomagic] - private predicate argIsInstantiationOf(ImplOrTraitItemNode i, string name, int arity) { - ReceiverIsInstantiationOfSelfParam::argIsInstantiationOf(this, i, _) and - mc_.hasNameAndArity(name, arity) + predicate hasNoInherentTarget() { + afc_.hasTrait() + or + afc_.hasNoInherentTarget(selfPosAdj_, derefChain, borrow) } pragma[nomagic] - Method resolveCallTargetCand(ImplOrTraitItemNode i) { + private predicate selfArgIsInstantiationOf(ImplOrTraitItemNode i, string name, int arity) { + SelfArgIsInstantiationOf::argIsInstantiationOf(this, i, _) and + afc_.hasNameAndArity(name, arity) + } + + pragma[nomagic] + AssocFunction resolveCallTargetCand(ImplOrTraitItemNode i) { exists(string name, int arity | - this.argIsInstantiationOf(i, name, arity) and - result = getMethodSuccessor(i, name, arity) + this.selfArgIsInstantiationOf(i, name, arity) and + result = getAssocFunctionSuccessor(i, name, arity) ) } - /** Gets a method that matches this method call. */ + /** Gets the associated function targeted by this call, if any. */ pragma[nomagic] - Method resolveCallTarget(ImplOrTraitItemNode i) { + AssocFunction resolveCallTarget(ImplOrTraitItemNode i) { result = this.resolveCallTargetCand(i) and not FunctionOverloading::functionResolutionDependsOnArgument(i, result, _, _) or - MethodArgsAreInstantiationsOf::argsAreInstantiationsOf(this, i, result) + OverloadedCallArgsAreInstantiationsOf::argsAreInstantiationsOf(this, i, result) } string toString() { - result = mc_.toString() + " [" + derefChain.toString() + "; " + borrow + "]" + result = afc_ + " at " + selfPosAdj_ + " [" + derefChain.toString() + "; " + borrow + "]" } - Location getLocation() { result = mc_.getLocation() } + Location getLocation() { result = afc_.getLocation() } } /** * Provides logic for resolving implicit `Deref::deref` calls. */ private module ImplicitDeref { - private newtype TMethodCallDerefCand = - MkMethodCallDerefCand(MethodCall mc, FunctionPosition selfPos, DerefChain derefChain) { - mc.supportsAutoDerefAndBorrow() and - mc.hasNoCompatibleTargetMutBorrow(selfPos, derefChain) and - exists(mc.getACandidateReceiverTypeAtNoBorrow(selfPos, derefChain, TypePath::nil())) + private newtype TCallDerefCand = + MkCallDerefCand(AssocFunctionCall afc, FunctionPositionAdj selfPosAdj, DerefChain derefChain) { + afc.supportsAutoDerefAndBorrow() and + afc.hasReceiverAtPos(selfPosAdj) and + afc.hasNoCompatibleTargetMutBorrow(selfPosAdj, derefChain) and + exists(afc.getSelfTypeAtNoBorrow(selfPosAdj, derefChain, TypePath::nil())) } - /** A method call with a dereference chain. */ - private class MethodCallDerefCand extends MkMethodCallDerefCand { - MethodCall mc; - FunctionPosition selfPos; + /** A call with a dereference chain. */ + private class CallDerefCand extends MkCallDerefCand { + AssocFunctionCall afc; + FunctionPositionAdj selfPosAdj; DerefChain derefChain; - MethodCallDerefCand() { this = MkMethodCallDerefCand(mc, selfPos, derefChain) } + CallDerefCand() { this = MkCallDerefCand(afc, selfPosAdj, derefChain) } Type getTypeAt(TypePath path) { - result = - substituteLookupTraits(mc.getACandidateReceiverTypeAtNoBorrow(selfPos, derefChain, path)) and + result = substituteLookupTraits(afc.getSelfTypeAtNoBorrow(selfPosAdj, derefChain, path)) and result != TNeverType() and result != TUnknownType() } - string toString() { result = mc.toString() + " [" + derefChain.toString() + "]" } + string toString() { result = afc + " [" + derefChain.toString() + "]" } - Location getLocation() { result = mc.getLocation() } + Location getLocation() { result = afc.getLocation() } } - private module MethodCallSatisfiesDerefConstraintInput implements - SatisfiesConstraintInputSig + private module CallSatisfiesDerefConstraintInput implements + SatisfiesConstraintInputSig { pragma[nomagic] - predicate relevantConstraint(MethodCallDerefCand mc, Type constraint) { + predicate relevantConstraint(CallDerefCand mc, Type constraint) { exists(mc) and constraint.(TraitType).getTrait() instanceof DerefTrait } } - private module MethodCallSatisfiesDerefConstraint = - SatisfiesConstraint; + private module CallSatisfiesDerefConstraint = + SatisfiesConstraint; pragma[nomagic] private AssociatedTypeTypeParameter getDerefTargetTypeParameter() { @@ -2255,38 +2585,38 @@ private module MethodResolution { } /** - * Gets the type of the receiver of `mc` at `path` after applying the implicit + * Gets the type of the receiver of `afc` at `path` after applying the implicit * dereference inside `impl`, following the existing dereference chain `derefChain`. */ pragma[nomagic] Type getDereferencedCandidateReceiverType( - MethodCall mc, FunctionPosition selfPos, DerefImplItemNode impl, DerefChain derefChain, - TypePath path + AssocFunctionCall afc, FunctionPositionAdj selfPosAdj, DerefImplItemNode impl, + DerefChain derefChain, TypePath path ) { - exists(MethodCallDerefCand mcc, TypePath exprPath | - mcc = MkMethodCallDerefCand(mc, selfPos, derefChain) and - MethodCallSatisfiesDerefConstraint::satisfiesConstraintTypeThrough(mcc, impl, _, exprPath, - result) and + exists(CallDerefCand cdc, TypePath exprPath | + cdc = MkCallDerefCand(afc, selfPosAdj, derefChain) and + CallSatisfiesDerefConstraint::satisfiesConstraintTypeThrough(cdc, impl, _, exprPath, result) and exprPath.isCons(getDerefTargetTypeParameter(), path) ) } } - private module ReceiverSatisfiesBlanketLikeConstraintInput implements - BlanketImplementation::SatisfiesBlanketConstraintInputSig + private module ArgSatisfiesBlanketLikeConstraintInput implements + BlanketImplementation::SatisfiesBlanketConstraintInputSig { pragma[nomagic] predicate hasBlanketCandidate( - MethodCallCand mcc, ImplItemNode impl, TypePath blanketPath, TypeParam blanketTypeParam + AssocFunctionCallCand afcc, ImplItemNode impl, TypePath blanketPath, + TypeParam blanketTypeParam ) { - exists(MethodCall mc, FunctionPosition selfPos, BorrowKind borrow | - mcc = MkMethodCallCand(mc, selfPos, _, borrow) and - methodCallBlanketLikeCandidate(mc, _, selfPos, impl, _, blanketPath, blanketTypeParam) and + exists(AssocFunctionCall afc, FunctionPositionAdj selfPosAdj, BorrowKind borrow | + afcc = MkAssocFunctionCallCand(afc, selfPosAdj, _, borrow) and + blanketLikeCandidate(afc, _, selfPosAdj, impl, _, blanketPath, blanketTypeParam) and // Only apply blanket implementations when no other implementations are possible; // this is to account for codebases that use the (unstable) specialization feature // (https://rust-lang.github.io/rfcs/1210-impl-specialization.html), as well as // cases where our blanket implementation filtering is not precise enough. - (mcc.hasNoCompatibleNonBlanketTarget() or not impl.isBlanketImplementation()) + if impl.isBlanketImplementation() then afcc.hasNoCompatibleNonBlanketTarget() else any() | borrow.isNoBorrow() or @@ -2295,116 +2625,147 @@ private module MethodResolution { } } - private module ReceiverSatisfiesBlanketLikeConstraint = - BlanketImplementation::SatisfiesBlanketConstraint; + private module ArgSatisfiesBlanketLikeConstraint = + BlanketImplementation::SatisfiesBlanketConstraint; /** - * A configuration for matching the type of a receiver against the type of - * a `self` parameter. + * A configuration for matching the type of an argument against the type of + * a function at a function-call adjusted position relevant for dispatch + * (such as a `self` parameter). */ - private module ReceiverIsInstantiationOfSelfParamInput implements - IsInstantiationOfInputSig + private module SelfArgIsInstantiationOfInput implements + IsInstantiationOfInputSig { pragma[nomagic] additional predicate potentialInstantiationOf0( - MethodCallCand mcc, ImplOrTraitItemNode i, AssocFunctionType selfType + AssocFunctionCallCand afcc, ImplOrTraitItemNode i, AssocFunctionType selfType ) { exists( - MethodCall mc, FunctionPosition selfPos, Method m, TypePath strippedTypePath, - Type strippedType + AssocFunctionCall afc, FunctionPositionAdj selfPosAdj, Function f, + TypePath strippedTypePath, Type strippedType | - mcc.hasSignature(mc, selfPos, strippedTypePath, strippedType, _, _) + afcc.hasSignature(afc, selfPosAdj, strippedTypePath, strippedType, _, _) | - methodCallNonBlanketCandidate(mc, m, selfPos, i, selfType, strippedTypePath, strippedType) + nonBlanketLikeCandidate(afc, f, selfPosAdj, i, selfType, strippedTypePath, strippedType) or - methodCallBlanketLikeCandidate(mc, m, selfPos, i, selfType, _, _) and - ReceiverSatisfiesBlanketLikeConstraint::satisfiesBlanketConstraint(mcc, i) + blanketLikeCandidate(afc, f, selfPosAdj, i, selfType, _, _) and + ArgSatisfiesBlanketLikeConstraint::satisfiesBlanketConstraint(afcc, i) ) } pragma[nomagic] predicate potentialInstantiationOf( - MethodCallCand mcc, TypeAbstraction abs, AssocFunctionType constraint + AssocFunctionCallCand afcc, TypeAbstraction abs, AssocFunctionType constraint ) { - potentialInstantiationOf0(mcc, abs, constraint) and + potentialInstantiationOf0(afcc, abs, constraint) and if abs.(Impl).hasTrait() then - // inherent methods take precedence over trait methods, so only allow - // trait methods when there are no matching inherent methods - mcc.hasNoInherentTarget() + // inherent functions take precedence over trait functions, so only allow + // trait functions when there are no matching inherent functions + afcc.hasNoInherentTarget() else any() } predicate relevantConstraint(AssocFunctionType constraint) { - methodInfo(_, _, _, _, _, constraint, _, _) + assocFunctionInfo(_, _, _, _, _, constraint, _, _, _, _, _) } } - private module ReceiverIsInstantiationOfSelfParam = - ArgIsInstantiationOf; + private module SelfArgIsInstantiationOf { + import ArgIsInstantiationOf + + pragma[nomagic] + predicate argIsNotInstantiationOf( + AssocFunctionCall afc, ImplOrTraitItemNode i, FunctionPositionAdj selfPosAdj, + DerefChain derefChain, BorrowKind borrow, TypePath path + ) { + argIsNotInstantiationOf(MkAssocFunctionCallCand(afc, selfPosAdj, derefChain, borrow), i, _, + path) + } + + pragma[nomagic] + predicate argIsInstantiationOf( + AssocFunctionCall afc, ImplOrTraitItemNode i, FunctionPositionAdj selfPosAdj, + DerefChain derefChain, BorrowKind borrow, AssocFunctionType selfType + ) { + argIsInstantiationOf(MkAssocFunctionCallCand(afc, selfPosAdj, derefChain, borrow), i, selfType) + } + } /** - * A configuration for anti-matching the type of a receiver against the type of - * a `self` parameter belonging to a blanket (like) implementation. + * A configuration for anti-matching the type of an argument against the type of + * a function at a function-call adjusted position relevant for dispatch + * (such as a `self` parameter) in a blanket (like) implementation. */ - private module ReceiverIsNotInstantiationOfBlanketLikeSelfParamInput implements - IsInstantiationOfInputSig + private module SelfArgIsNotInstantiationOfBlanketLikeInput implements + IsInstantiationOfInputSig { pragma[nomagic] predicate potentialInstantiationOf( - MethodCallCand mcc, TypeAbstraction abs, AssocFunctionType constraint + AssocFunctionCallCand afcc, TypeAbstraction abs, AssocFunctionType constraint ) { - exists(MethodCall mc, FunctionPosition selfPos | - mcc = MkMethodCallCand(mc, selfPos, _, _) and - methodCallBlanketLikeCandidate(mc, _, selfPos, abs, constraint, _, _) and + exists(AssocFunctionCall afc, FunctionPositionAdj selfPosAdj | + afcc = MkAssocFunctionCallCand(afc, selfPosAdj, _, _) and + blanketLikeCandidate(afc, _, selfPosAdj, abs, constraint, _, _) and if abs.(Impl).hasTrait() then - // inherent methods take precedence over trait methods, so only allow - // trait methods when there are no matching inherent methods - mcc.hasNoInherentTarget() + // inherent functions take precedence over trait functions, so only allow + // trait functions when there are no matching inherent functions + afcc.hasNoInherentTarget() else any() ) } } - private module ReceiverIsNotInstantiationOfBlanketLikeSelfParam = - ArgIsInstantiationOf; + private module SelfArgIsNotInstantiationOfBlanketLike = + ArgIsInstantiationOf; /** - * A configuration for anti-matching the type of a receiver against the type of - * a `self` parameter in an inherent method. + * A configuration for anti-matching the type of an argument against the type of + * a function at a function-call adjusted position relevant for dispatch (such as + * a `self` parameter) in an inherent function. */ - private module ReceiverIsNotInstantiationOfInherentSelfParamInput implements - IsInstantiationOfInputSig + private module SelfArgIsNotInstantiationOfInherentInput implements + IsInstantiationOfInputSig { pragma[nomagic] predicate potentialInstantiationOf( - MethodCallCand mcc, TypeAbstraction abs, AssocFunctionType constraint + AssocFunctionCallCand afcc, TypeAbstraction abs, AssocFunctionType constraint ) { - ReceiverIsInstantiationOfSelfParamInput::potentialInstantiationOf0(mcc, abs, constraint) and - abs = any(Impl i | not i.hasTrait()) + SelfArgIsInstantiationOfInput::potentialInstantiationOf0(afcc, abs, constraint) and + abs.(Impl).isInherent() and + exists(AssocFunctionCall afc, FunctionPositionAdj selfPosAdj | + afcc = MkAssocFunctionCallCand(afc, selfPosAdj, _, _) + | + selfPosAdj.isTypeQualifier() or + afc.hasReceiverAtPos(selfPosAdj) + ) } } - private module ReceiverIsNotInstantiationOfInherentSelfParam = - ArgIsInstantiationOf; + private module SelfArgIsNotInstantiationOfInherent = + ArgIsInstantiationOf; /** * A configuration for matching the types of positional arguments against the * types of parameters, when needed to disambiguate the call. */ - private module MethodArgsAreInstantiationsOfInput implements ArgsAreInstantiationsOfInputSig { - predicate toCheck(ImplOrTraitItemNode i, Function f, TypeParameter traitTp, FunctionPosition pos) { - FunctionOverloading::functionResolutionDependsOnArgument(i, f, traitTp, pos) + private module OverloadedCallArgsAreInstantiationsOfInput implements + ArgsAreInstantiationsOfInputSig + { + predicate toCheck( + ImplOrTraitItemNode i, Function f, TypeParameter traitTp, FunctionPositionAdj posAdj + ) { + exists(FunctionPosition pos | + FunctionOverloading::functionResolutionDependsOnArgument(i, f, traitTp, pos) and + posAdj = pos.getFunctionCallAdjusted(f) + ) } - class Call extends MethodCallCand { - Type getArgType(FunctionPosition pos, TypePath path) { - result = mc_.getArgumentTypeAt(pos.asArgumentPosition(), path) - or - pos.isReturn() and - result = inferType(mc_.getNodeAt(pos), path) + class Call extends AssocFunctionCallCand { + Type getArgType(FunctionPositionAdj posAdj, TypePath path) { + result = this.getAssocFunctionCall().getTypeAt(posAdj, path) } predicate hasTargetCand(ImplOrTraitItemNode i, Function f) { @@ -2413,50 +2774,55 @@ private module MethodResolution { } } - private module MethodArgsAreInstantiationsOf = - ArgsAreInstantiationsOf; + private module OverloadedCallArgsAreInstantiationsOf { + import ArgsAreInstantiationsOf + + pragma[nomagic] + predicate argsAreNotInstantiationsOf(AssocFunctionCall afc, ImplOrTraitItemNode i) { + argsAreNotInstantiationsOf(MkAssocFunctionCallCand(afc, _, _, _), i, _) + } + } } /** - * A matching configuration for resolving types of method call expressions - * like `foo.bar(baz)`. + * A matching configuration for resolving types of function call expressions + * like `foo.bar(baz)` and `Foo::bar(baz)`. */ -private module MethodCallMatchingInput implements MatchingWithEnvironmentInputSig { - import FunctionPositionMatchingInput - - private class MethodDeclaration extends Method, FunctionDeclaration { } +private module FunctionCallMatchingInput implements MatchingWithEnvironmentInputSig { + import FunctionPositionAdjMatchingInput private newtype TDeclaration = - TMethodFunctionDeclaration(ImplOrTraitItemNode i, MethodDeclaration m) { m.isAssoc(i) } + TFunctionDeclaration(ImplOrTraitItemNodeOption i, FunctionDeclaration f) { f.isFor(i) } - final class Declaration extends TMethodFunctionDeclaration { - ImplOrTraitItemNode parent; - ImplOrTraitItemNodeOption someParent; - MethodDeclaration m; + final class Declaration extends TFunctionDeclaration { + ImplOrTraitItemNodeOption i; + FunctionDeclaration f; - Declaration() { - this = TMethodFunctionDeclaration(parent, m) and - someParent.asSome() = parent - } + Declaration() { this = TFunctionDeclaration(i, f) } - predicate isMethod(ImplOrTraitItemNode i, Method method) { - this = TMethodFunctionDeclaration(i, method) + predicate isAssocFunction(ImplOrTraitItemNode i_, Function f_) { + i_ = i.asSome() and + f_ = f } TypeParameter getTypeParameter(TypeParameterPosition ppos) { - result = m.getTypeParameter(someParent, ppos) + result = f.getTypeParameter(i, ppos) } - Type getDeclaredType(DeclarationPosition dpos, TypePath path) { - result = m.getParameterType(someParent, dpos, path) + Type getDeclaredType(FunctionPositionAdj posAdj, TypePath path) { + result = f.getParameterType(i, posAdj, path) or - dpos.isReturn() and - result = m.getReturnType(someParent, path) + posAdj.isReturn() and + result = f.getReturnType(i, path) } - string toString() { result = m.toStringExt(parent) } + string toString() { + i.isNone() and result = f.toString() + or + result = f.toStringExt(i.asSome()) + } - Location getLocation() { result = m.getLocation() } + Location getLocation() { result = f.getLocation() } } class AccessEnvironment = string; @@ -2477,10 +2843,34 @@ private module MethodCallMatchingInput implements MatchingWithEnvironmentInputSi ) } - final private class MethodCallFinal = MethodResolution::MethodCall; + private string noDerefChainBorrow() { + exists(DerefChain derefChain, BorrowKind borrow | + derefChain.isEmpty() and + borrow.isNoBorrow() and + result = encodeDerefChainBorrow(derefChain, borrow) + ) + } - class Access extends MethodCallFinal, ContextTyping::ContextTypedCallCand { - Access() { + abstract class Access extends ContextTyping::ContextTypedCallCand { + abstract AstNode getNodeAt(FunctionPositionAdj posAdj); + + bindingset[derefChainBorrow] + abstract Type getInferredType(string derefChainBorrow, FunctionPositionAdj posAdj, TypePath path); + + abstract Declaration getTarget(string derefChainBorrow); + + /** + * Holds if the return type of this call at `path` may have to be inferred + * from the context. + */ + abstract predicate hasUnknownTypeAt( + string derefChainBorrow, FunctionPositionAdj posAdj, TypePath path + ); + } + + private class AssocFunctionCallAccess extends Access instanceof AssocFunctionResolution::AssocFunctionCall + { + AssocFunctionCallAccess() { // handled in the `OperationMatchingInput` module not this instanceof Operation } @@ -2497,99 +2887,166 @@ private module MethodCallMatchingInput implements MatchingWithEnvironmentInputSi result = getCallExprTypeArgument(this, apos, path) } + override AstNode getNodeAt(FunctionPositionAdj posAdj) { + result = AssocFunctionResolution::AssocFunctionCall.super.getNodeAt(posAdj) + } + pragma[nomagic] - private Type getInferredSelfType(AccessPosition apos, string derefChainBorrow, TypePath path) { + private Type getInferredSelfType( + FunctionPositionAdj posAdj, string derefChainBorrow, TypePath path + ) { exists(DerefChain derefChain, BorrowKind borrow | - result = this.getACandidateReceiverTypeAt(apos, derefChain, borrow, path) and - derefChainBorrow = encodeDerefChainBorrow(derefChain, borrow) + result = super.getSelfTypeAt(posAdj, derefChain, borrow, path) and + derefChainBorrow = encodeDerefChainBorrow(derefChain, borrow) and + super.hasReceiverAtPos(posAdj) ) } pragma[nomagic] - Type getInferredNonSelfType(AccessPosition apos, TypePath path) { + private Type getInferredNonSelfType(FunctionPositionAdj posAdj, TypePath path) { if // index expression `x[i]` desugars to `*x.index(i)`, so we must account for // the implicit deref - apos.isReturn() and + posAdj.isReturn() and this instanceof IndexExpr then path.isEmpty() and result instanceof RefType or exists(TypePath suffix | - result = inferType(this.getNodeAt(apos), suffix) and + result = super.getTypeAt(posAdj, suffix) and path = TypePath::cons(getRefTypeParameter(_), suffix) ) else ( - not apos.isSelf() and - result = inferType(this.getNodeAt(apos), path) + not super.hasReceiverAtPos(posAdj) and + result = super.getTypeAt(posAdj, path) ) } bindingset[derefChainBorrow] - Type getInferredType(string derefChainBorrow, AccessPosition apos, TypePath path) { - result = this.getInferredSelfType(apos, derefChainBorrow, path) + override Type getInferredType(string derefChainBorrow, FunctionPositionAdj posAdj, TypePath path) { + result = this.getInferredSelfType(posAdj, derefChainBorrow, path) or - result = this.getInferredNonSelfType(apos, path) + result = this.getInferredNonSelfType(posAdj, path) } - Method getTarget(ImplOrTraitItemNode i, string derefChainBorrow) { + private AssocFunction getTarget(ImplOrTraitItemNode i, string derefChainBorrow) { exists(DerefChain derefChain, BorrowKind borrow | derefChainBorrow = encodeDerefChainBorrow(derefChain, borrow) and - result = this.resolveCallTarget(i, derefChain, borrow) // mutual recursion; resolving method calls requires resolving types and vice versa + result = super.resolveCallTarget(i, _, derefChain, borrow) // mutual recursion; resolving method calls requires resolving types and vice versa ) } - Declaration getTarget(string derefChainBorrow) { - exists(ImplOrTraitItemNode i, Method m | - m = this.getTarget(i, derefChainBorrow) and - result = TMethodFunctionDeclaration(i, m) + override Declaration getTarget(string derefChainBorrow) { + exists(ImplOrTraitItemNodeOption i, AssocFunction f | + f = this.getTarget(i.asSome(), derefChainBorrow) and + result = TFunctionDeclaration(i, f) ) } - /** - * Holds if the return type of this call at `path` may have to be inferred - * from the context. - */ pragma[nomagic] - predicate hasUnknownTypeAt(string derefChainBorrow, FunctionPosition pos, TypePath path) { - exists(ImplOrTraitItemNode i | - this.hasUnknownTypeAt(i, this.getTarget(i, derefChainBorrow), pos, path) + override predicate hasUnknownTypeAt( + string derefChainBorrow, FunctionPositionAdj posAdj, TypePath path + ) { + exists(FunctionPosition pos | posAdj = super.getFunctionCallAdjustedPosition(pos) | + exists(ImplOrTraitItemNode i | + this.hasUnknownTypeAt(i, this.getTarget(i, derefChainBorrow), pos, path) + ) + or + derefChainBorrow = noDerefChainBorrow() and + forex(ImplOrTraitItemNode i, Function f | + f = CallExprImpl::getResolvedFunction(this) and + f = i.getAnAssocItem() + | + this.hasUnknownTypeAt(i, f, pos, path) + ) + ) + } + } + + private class NonAssocFunctionCallAccess extends Access instanceof NonAssocCallExpr { + pragma[nomagic] + override Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { + result = NonAssocCallExpr.super.getTypeArgument(apos, path) + } + + override AstNode getNodeAt(FunctionPositionAdj posAdj) { + result = NonAssocCallExpr.super.getNodeAt(posAdj.asNonAdjusted()) + } + + pragma[nomagic] + private Type getInferredType(FunctionPositionAdj posAdj, TypePath path) { + result = super.getInferredType(posAdj.asNonAdjusted(), path) + } + + bindingset[derefChainBorrow] + override Type getInferredType(string derefChainBorrow, FunctionPositionAdj posAdj, TypePath path) { + exists(derefChainBorrow) and + result = this.getInferredType(posAdj, path) + } + + pragma[nomagic] + private Declaration getTarget() { + exists(ImplOrTraitItemNodeOption i, FunctionDeclaration f | + f = super.resolveCallTargetViaPathResolution() and + f.isDirectlyFor(i) and + result = TFunctionDeclaration(i, f) + ) + } + + override Declaration getTarget(string derefChainBorrow) { + result = this.getTarget() and + derefChainBorrow = noDerefChainBorrow() + } + + pragma[nomagic] + override predicate hasUnknownTypeAt( + string derefChainBorrow, FunctionPositionAdj posAdj, TypePath path + ) { + derefChainBorrow = noDerefChainBorrow() and + exists(ImplOrTraitItemNodeOption i, FunctionDeclaration f | + TFunctionDeclaration(i, f) = this.getTarget() and + this.hasUnknownTypeAt(i.asSome(), f, posAdj.asNonAdjusted(), path) ) } } } -private module MethodCallMatching = MatchingWithEnvironment; +private module FunctionCallMatching = MatchingWithEnvironment; pragma[nomagic] -private Type inferMethodCallType0( - MethodCallMatchingInput::Access a, MethodCallMatchingInput::AccessPosition apos, AstNode n, - string derefChainBorrow, TypePath path +private Type inferFunctionCallType0( + FunctionCallMatchingInput::Access call, FunctionPositionAdj posAdj, AstNode n, + DerefChain derefChain, BorrowKind borrow, TypePath path ) { exists(TypePath path0 | - n = a.getNodeAt(apos) and - ( - result = MethodCallMatching::inferAccessType(a, derefChainBorrow, apos, path0) + n = call.getNodeAt(posAdj) and + exists(string derefChainBorrow | + FunctionCallMatchingInput::decodeDerefChainBorrow(derefChainBorrow, derefChain, borrow) + | + result = FunctionCallMatching::inferAccessType(call, derefChainBorrow, posAdj, path0) or - a.hasUnknownTypeAt(derefChainBorrow, apos, path0) and + call.hasUnknownTypeAt(derefChainBorrow, posAdj, path0) and result = TUnknownType() ) | if // index expression `x[i]` desugars to `*x.index(i)`, so we must account for // the implicit deref - apos.isReturn() and - a instanceof IndexExpr + posAdj.isReturn() and + call instanceof IndexExpr then path0.isCons(getRefTypeParameter(_), path) else path = path0 ) } pragma[nomagic] -private Type inferMethodCallTypeNonSelf(AstNode n, FunctionPosition pos, TypePath path) { - result = inferMethodCallType0(_, pos, n, _, path) and - not pos.isSelf() +private Type inferFunctionCallTypeNonSelf(AstNode n, FunctionPosition pos, TypePath path) { + exists(FunctionCallMatchingInput::Access call, FunctionPositionAdj posAdj | + posAdj = pos.asAdjusted() and + result = inferFunctionCallType0(call, posAdj, n, _, _, path) and + not call.(AssocFunctionResolution::AssocFunctionCall).hasReceiverAtPos(posAdj) + ) } /** @@ -2600,14 +3057,12 @@ private Type inferMethodCallTypeNonSelf(AstNode n, FunctionPosition pos, TypePat * empty, at which point the inferred type can be applied back to `n`. */ pragma[nomagic] -private Type inferMethodCallTypeSelf(MethodCall mc, AstNode n, DerefChain derefChain, TypePath path) { - exists( - MethodCallMatchingInput::AccessPosition apos, string derefChainBorrow, BorrowKind borrow, - TypePath path0 - | - result = inferMethodCallType0(mc, apos, n, derefChainBorrow, path0) and - apos.isSelf() and - MethodCallMatchingInput::decodeDerefChainBorrow(derefChainBorrow, derefChain, borrow) +private Type inferFunctionCallTypeSelf( + FunctionCallMatchingInput::Access call, AstNode n, DerefChain derefChain, TypePath path +) { + exists(FunctionPositionAdj posAdj, BorrowKind borrow, TypePath path0 | + call.(AssocFunctionResolution::AssocFunctionCall).hasReceiverAtPos(posAdj) and + result = inferFunctionCallType0(call, posAdj, n, derefChain, borrow, path0) | borrow.isNoBorrow() and path = path0 @@ -2624,7 +3079,7 @@ private Type inferMethodCallTypeSelf(MethodCall mc, AstNode n, DerefChain derefC DerefChain derefChain0, Type t0, TypePath path0, DerefImplItemNode impl, Type selfParamType, TypePath selfPath | - t0 = inferMethodCallTypeSelf(mc, n, derefChain0, path0) and + t0 = inferFunctionCallTypeSelf(call, n, derefChain0, path0) and derefChain0.isCons(impl, derefChain) and selfParamType = impl.resolveSelfTypeAt(selfPath) | @@ -2641,445 +3096,23 @@ private Type inferMethodCallTypeSelf(MethodCall mc, AstNode n, DerefChain derefC ) } -private Type inferMethodCallTypePreCheck(AstNode n, FunctionPosition pos, TypePath path) { - result = inferMethodCallTypeNonSelf(n, pos, path) +private Type inferFunctionCallTypePreCheck(AstNode n, FunctionPosition pos, TypePath path) { + result = inferFunctionCallTypeNonSelf(n, pos, path) or - exists(MethodCall mc | - result = inferMethodCallTypeSelf(mc, n, DerefChain::nil(), path) and - if mc instanceof CallExpr then pos.asPosition() = 0 else pos.isSelf() + exists(FunctionCallMatchingInput::Access a | + result = inferFunctionCallTypeSelf(a, n, DerefChain::nil(), path) and + if a.(AssocFunctionResolution::AssocFunctionCall).hasReceiver() + then pos.isSelf() + else pos.asPosition() = 0 ) } /** - * Gets the type of `n` at `path`, where `n` is either a method call or an - * argument/receiver of a method call. + * Gets the type of `n` at `path`, where `n` is either a function call or an + * argument/receiver of a function call. */ -private predicate inferMethodCallType = - ContextTyping::CheckContextTyping::check/2; - -/** - * Provides logic for resolving calls to non-method items. This includes - * "calls" to tuple variants and tuple structs. - */ -private module NonMethodResolution { - pragma[nomagic] - private predicate traitFunctionResolutionDependsOnArgument0( - TraitItemNode trait, NonMethodFunction traitFunction, FunctionPosition pos, ImplItemNode impl, - NonMethodFunction implFunction, TypePath path, TypeParameter traitTp - ) { - implFunction = impl.getAnAssocItem() and - implFunction.implements(traitFunction) and - FunctionOverloading::traitTypeParameterOccurrence(trait, traitFunction, _, pos, path, traitTp) and - ( - traitTp = TSelfTypeParameter(trait) - or - FunctionOverloading::functionResolutionDependsOnArgument(impl, implFunction, traitTp, pos) - ) - } - - /** - * Holds if resolving the function `implFunction` in `impl` requires inspecting - * the type of applied _arguments_ or possibly knowing the return type. - * - * `traitTp` is a type parameter of the trait being implemented by `impl`, and - * we need to check that the type of `f` corresponding to `traitTp` is satisfied - * at any one of the positions `pos` in which that type occurs in `f` (at `path`). - * - * As for method resolution, we always check the type being implemented (corresponding - * to `traitTp` being the special `Self` type parameter). - */ - pragma[nomagic] - private predicate traitFunctionResolutionDependsOnArgument( - TraitItemNode trait, NonMethodFunction traitFunction, FunctionPosition pos, ImplItemNode impl, - NonMethodFunction implFunction, TypePath path, TypeParameter traitTp - ) { - traitFunctionResolutionDependsOnArgument0(trait, traitFunction, pos, impl, implFunction, path, - traitTp) and - // Exclude functions where we cannot resolve all relevant type mentions; this allows - // for blanket implementations to be applied in those cases - forall(TypeParameter traitTp0 | - traitFunctionResolutionDependsOnArgument0(trait, traitFunction, _, impl, implFunction, _, - traitTp0) - | - exists(FunctionPosition pos0, TypePath path0 | - traitFunctionResolutionDependsOnArgument0(trait, traitFunction, pos0, impl, implFunction, - path0, traitTp0) and - exists(getAssocFunctionTypeAt(implFunction, impl, pos0, path0)) - ) - ) - } - - /** - * Holds if `f` inside `i` either implements trait function `traitFunction` inside `trait` - * or is equal to `traitFunction`, and the type of `f` at `pos` and `path` is `t`, which - * corresponds to the `Self` type parameter of `trait`. - */ - pragma[nomagic] - private predicate traitFunctionHasSelfType( - TraitItemNode trait, NonMethodFunction traitFunction, FunctionPosition pos, TypePath path, - Type t, ImplOrTraitItemNode i, NonMethodFunction f - ) { - exists(ImplItemNode impl, NonMethodFunction implFunction, AssocFunctionType aft | - traitFunctionResolutionDependsOnArgument(trait, traitFunction, pos, impl, implFunction, path, - TSelfTypeParameter(trait)) and - aft.appliesTo(f, i, pos) and - t = aft.getTypeAt(path) - | - i = trait and - f = traitFunction - or - i = impl and - f = implFunction and - not BlanketImplementation::isBlanketLike(i, _, _) - ) - } - - pragma[nomagic] - private predicate functionResolutionDependsOnArgument( - ImplItemNode impl, NonMethodFunction f, FunctionPosition pos, TypeParameter tp - ) { - traitFunctionResolutionDependsOnArgument(_, _, pos, impl, f, _, tp) - or - // For inherent implementations of generic types, we also need to check the type being - // implemented. We arbitrarily choose the first type parameter of the type being implemented - // to represent this case. - f = impl.getAnAssocItem() and - not impl.(Impl).hasTrait() and - tp = TTypeParamTypeParameter(impl.resolveSelfTy().getTypeParam(0)) and - pos.isTypeQualifier() - } - - pragma[nomagic] - private predicate functionInfoBlanketLikeRelevantPos( - NonMethodFunction f, string name, int arity, ImplItemNode impl, Trait trait, - FunctionPosition pos, AssocFunctionType t, TypePath blanketPath, TypeParam blanketTypeParam - ) { - functionInfoBlanketLike(f, name, arity, impl, trait, pos, t, blanketPath, blanketTypeParam) and - ( - if pos.isReturn() - then - // We only check that the context of the call provides relevant type information - // when no argument can - not exists(FunctionPosition pos0 | - functionInfoBlanketLike(f, name, arity, impl, trait, pos0, _, _, _) and - not pos0.isReturn() - ) - else any() - ) - } - - pragma[nomagic] - private predicate blanketLikeCallTraitCandidate(Element fc, Trait trait) { - 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; - - /** A (potential) non-method call, `f(x)`. */ - final class NonMethodCall extends CallExpr { - NonMethodCall() { - // even if a function cannot be resolved by path resolution, it may still - // be possible to resolve a blanket implementation (so not `forex`) - forall(Function f | f = CallExprImpl::getResolvedFunction(this) | - f instanceof NonMethodFunction - ) - } - - pragma[nomagic] - predicate hasNameAndArity(string name, int arity) { - name = CallExprImpl::getFunctionPath(this).getText() and - arity = this.getArgList().getNumberOfArgs() - } - - /** - * Gets the item that this function call resolves to using path resolution, - * if any. - */ - private ItemNode getPathResolutionResolved() { - result = CallExprImpl::getResolvedFunction(this) and - not result.(Function).hasSelfParam() - } - - /** - * Gets the associated function that this function call resolves to using path - * resolution, if any. - */ - pragma[nomagic] - NonMethodFunction getPathResolutionResolved(ImplOrTraitItemNode i) { - result = this.getPathResolutionResolved() and - result = i.getAnAssocItem() - } - - /** - * Gets the blanket function that this call may resolve to, if any. - */ - pragma[nomagic] - NonMethodFunction resolveCallTargetBlanketCand(ImplItemNode impl) { - exists(string name | - this.hasNameAndArity(pragma[only_bind_into](name), _) and - ArgIsInstantiationOfBlanketParam::argIsInstantiationOf(MkCallAndBlanketPos(this, _), impl, _) and - result = impl.getASuccessor(pragma[only_bind_into](name)) - ) - } - - /** 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()) } - - AstNode getNodeAt(FunctionPosition pos) { - result = this.getSyntacticArgument(pos.asArgumentPosition()) - or - result = this and pos.isReturn() - } - - Type getTypeAt(FunctionPosition pos, TypePath path) { - result = inferType(this.getNodeAt(pos), path) - } - - pragma[nomagic] - NonMethodFunction resolveCallTargetNonBlanketCand(ImplItemNode i) { - not this.hasTrait() and - result = this.getPathResolutionResolved(i) and - not exists(this.resolveCallTargetViaPathResolution()) and - functionResolutionDependsOnArgument(i, result, _, _) - } - - pragma[nomagic] - predicate resolveCallTargetBlanketLikeCand( - ImplItemNode impl, FunctionPosition pos, TypePath blanketPath, TypeParam blanketTypeParam - ) { - exists(string name, int arity, Trait trait, AssocFunctionType t | - this.hasNameAndArity(name, arity) and - exists(this.getTypeAt(pos, blanketPath)) and - functionInfoBlanketLikeRelevantPos(_, name, arity, impl, trait, pos, t, blanketPath, - blanketTypeParam) and - BlanketTraitIsVisible::traitIsVisible(this, trait) - | - not this.hasTrait() - or - trait = this.getTrait() - ) - } - - pragma[nomagic] - predicate hasTraitResolved(TraitItemNode trait, NonMethodFunction resolved) { - resolved = this.getPathResolutionResolved() and - trait = this.getTrait() - } - - /** - * Holds if this call has no compatible non-blanket target, and it has some - * candidate blanket target. - */ - pragma[nomagic] - predicate hasNoCompatibleNonBlanketTarget() { - this.resolveCallTargetBlanketLikeCand(_, _, _, _) and - not exists(this.resolveCallTargetViaPathResolution()) and - forall(ImplOrTraitItemNode i, Function f | f = this.resolveCallTargetNonBlanketCand(i) | - NonMethodArgsAreInstantiationsOfNonBlanket::argsAreNotInstantiationsOf(this, i, f) - ) and - ( - not this.hasTraitResolved(_, _) - or - exists( - TraitItemNode trait, NonMethodFunction resolved, FunctionPosition pos, TypePath path, - Type t - | - this.(NonMethodArgsAreInstantiationsOfNonBlanketInput::Call) - .hasTraitResolvedSelfType(trait, resolved, pos, path, t) - | - forall(ImplOrTraitItemNode i, Function f | - traitFunctionHasSelfType(trait, resolved, pos, path, t, i, f) - | - NonMethodArgsAreInstantiationsOfNonBlanket::argsAreNotInstantiationsOf(this, i, f) - ) - ) - ) - } - - /** - * Gets the target of this call, which can be resolved using only path resolution. - */ - pragma[nomagic] - ItemNode resolveCallTargetViaPathResolution() { - not this.hasTrait() and - result = this.getPathResolutionResolved() and - not functionResolutionDependsOnArgument(_, result, _, _) - } - - /** - * Gets the target of this call, which can be resolved using type inference. - */ - pragma[nomagic] - NonMethodFunction resolveCallTargetViaTypeInference(ImplOrTraitItemNode i) { - result = this.resolveCallTargetBlanketCand(i) and - not FunctionOverloading::functionResolutionDependsOnArgument(_, result, _, _) - or - NonMethodArgsAreInstantiationsOfBlanket::argsAreInstantiationsOf(this, i, result) - or - NonMethodArgsAreInstantiationsOfNonBlanket::argsAreInstantiationsOf(this, i, result) - } - } - - private newtype TCallAndBlanketPos = - MkCallAndBlanketPos(NonMethodCall fc, FunctionPosition pos) { - fc.resolveCallTargetBlanketLikeCand(_, pos, _, _) - } - - /** A call tagged with a position. */ - private class CallAndBlanketPos extends MkCallAndBlanketPos { - NonMethodCall fc; - FunctionPosition pos; - - CallAndBlanketPos() { this = MkCallAndBlanketPos(fc, pos) } - - Location getLocation() { result = fc.getLocation() } - - Type getTypeAt(TypePath path) { result = fc.getTypeAt(pos, path) } - - string toString() { result = fc.toString() + " [arg " + pos + "]" } - } - - private module ArgSatisfiesBlanketConstraintInput implements - BlanketImplementation::SatisfiesBlanketConstraintInputSig - { - pragma[nomagic] - predicate hasBlanketCandidate( - CallAndBlanketPos fcp, ImplItemNode impl, TypePath blanketPath, TypeParam blanketTypeParam - ) { - exists(NonMethodCall fc, FunctionPosition pos | - fcp = MkCallAndBlanketPos(fc, pos) and - fc.resolveCallTargetBlanketLikeCand(impl, pos, blanketPath, blanketTypeParam) and - // Only apply blanket implementations when no other implementations are possible; - // this is to account for codebases that use the (unstable) specialization feature - // (https://rust-lang.github.io/rfcs/1210-impl-specialization.html), as well as - // cases where our blanket implementation filtering is not precise enough. - (fc.hasNoCompatibleNonBlanketTarget() or not impl.isBlanketImplementation()) - ) - } - } - - private module ArgSatisfiesBlanketConstraint = - BlanketImplementation::SatisfiesBlanketConstraint; - - /** - * A configuration for matching the type of an argument against the type of - * a parameter that mentions a satisfied blanket type parameter. - */ - private module ArgIsInstantiationOfBlanketParamInput implements - IsInstantiationOfInputSig - { - pragma[nomagic] - predicate potentialInstantiationOf( - CallAndBlanketPos fcp, TypeAbstraction abs, AssocFunctionType constraint - ) { - exists(FunctionPosition pos | - ArgSatisfiesBlanketConstraint::satisfiesBlanketConstraint(fcp, abs) and - fcp = MkCallAndBlanketPos(_, pos) and - functionInfoBlanketLikeRelevantPos(_, _, _, abs, _, pos, constraint, _, _) - ) - } - - predicate relevantConstraint(AssocFunctionType constraint) { - functionInfoBlanketLikeRelevantPos(_, _, _, _, _, _, constraint, _, _) - } - } - - private module ArgIsInstantiationOfBlanketParam = - ArgIsInstantiationOf; - - private Type getArgType( - NonMethodCall call, FunctionPosition pos, TypePath path, boolean isDefaultTypeArg - ) { - result = inferType(call.getNodeAt(pos), path) and - isDefaultTypeArg = false - or - result = getCallExprTypeQualifier(call, path, isDefaultTypeArg) and - pos.isTypeQualifier() - } - - private module NonMethodArgsAreInstantiationsOfBlanketInput implements - ArgsAreInstantiationsOfInputSig - { - predicate toCheck(ImplOrTraitItemNode i, Function f, TypeParameter tp, FunctionPosition pos) { - functionResolutionDependsOnArgument(i, f, pos, tp) - } - - final class Call extends NonMethodCall { - Type getArgType(FunctionPosition pos, TypePath path) { - result = getArgType(this, pos, path, false) - } - - predicate hasTargetCand(ImplOrTraitItemNode i, Function f) { - f = this.resolveCallTargetBlanketCand(i) - } - } - } - - private module NonMethodArgsAreInstantiationsOfBlanket = - ArgsAreInstantiationsOf; - - private module NonMethodArgsAreInstantiationsOfNonBlanketInput implements - ArgsAreInstantiationsOfInputSig - { - predicate toCheck(ImplOrTraitItemNode i, Function f, TypeParameter traitTp, FunctionPosition pos) { - functionResolutionDependsOnArgument(i, f, pos, traitTp) - or - // Also match against the trait function itself - FunctionOverloading::traitTypeParameterOccurrence(i, f, _, pos, _, traitTp) and - traitTp = TSelfTypeParameter(i) - } - - class Call extends NonMethodCall { - Type getArgType(FunctionPosition pos, TypePath path) { - result = getArgType(this, pos, path, _) - } - - /** - * Holds if this call is of the form `Trait::function(args)`, and the type at `pos` and - * `path` matches the `Self` type parameter of `Trait`. - */ - pragma[nomagic] - predicate hasTraitResolvedSelfType( - TraitItemNode trait, NonMethodFunction function, FunctionPosition pos, TypePath path, Type t - ) { - this.hasTraitResolved(trait, function) and - FunctionOverloading::traitTypeParameterOccurrence(trait, function, _, pos, path, - TSelfTypeParameter(trait)) and - t = substituteLookupTraits(this.getArgType(pos, path)) and - t != TUnknownType() - } - - predicate hasTargetCand(ImplOrTraitItemNode i, Function f) { - f = this.resolveCallTargetNonBlanketCand(i) - or - exists( - TraitItemNode trait, NonMethodFunction resolved, FunctionPosition pos, TypePath path, - Type t - | - this.hasTraitResolvedSelfType(trait, resolved, pos, path, t) and - traitFunctionHasSelfType(trait, resolved, pos, path, t, i, f) - ) - } - } - } - - private module NonMethodArgsAreInstantiationsOfNonBlanket = - ArgsAreInstantiationsOf; -} +private predicate inferFunctionCallType = + ContextTyping::CheckContextTyping::check/2; abstract private class TupleLikeConstructor extends Addressable { final TypeParameter getTypeParameter(TypeParameterPosition ppos) { @@ -3130,140 +3163,30 @@ private class TupleLikeVariant extends TupleLikeConstructor instanceof Variant { } /** - * A matching configuration for resolving types of calls like - * `foo::bar(baz)` where the target is not a method. - * - * This also includes "calls" to tuple variants and tuple structs such - * as `Result::Ok(42)`. + * A matching configuration for resolving types of tuple-like variants and tuple + * structs such as `Result::Ok(42)`. */ -private module NonMethodCallMatchingInput implements MatchingInputSig { +private module TupleLikeConstructionMatchingInput implements MatchingInputSig { import FunctionPositionMatchingInput - private class NonMethodFunctionDeclaration extends NonMethodFunction, FunctionDeclaration { } + class Declaration = TupleLikeConstructor; - private newtype TDeclaration = - TNonMethodFunctionDeclaration(ImplOrTraitItemNodeOption i, NonMethodFunctionDeclaration f) { - f.isFor(i) - } or - TTupleLikeConstructorDeclaration(TupleLikeConstructor tc) - - abstract class Declaration extends TDeclaration { - abstract TypeParameter getTypeParameter(TypeParameterPosition ppos); - - pragma[nomagic] - abstract Type getParameterType(DeclarationPosition dpos, TypePath path); - - abstract Type getReturnType(TypePath path); - - Type getDeclaredType(DeclarationPosition dpos, TypePath path) { - result = this.getParameterType(dpos, path) - or - dpos.isReturn() and - result = this.getReturnType(path) - } - - abstract string toString(); - - abstract Location getLocation(); - } - - private class NonMethodFunctionDecl extends Declaration, TNonMethodFunctionDeclaration { - private ImplOrTraitItemNodeOption i; - private NonMethodFunctionDeclaration f; - - NonMethodFunctionDecl() { this = TNonMethodFunctionDeclaration(i, f) } - - override TypeParameter getTypeParameter(TypeParameterPosition ppos) { - result = f.getTypeParameter(i, ppos) - } - - override Type getParameterType(DeclarationPosition dpos, TypePath path) { - result = f.getParameterType(i, dpos, path) - } - - override Type getReturnType(TypePath path) { result = f.getReturnType(i, path) } - - override string toString() { - i.isNone() and result = f.toString() - or - result = f.toStringExt(i.asSome()) - } - - override Location getLocation() { result = f.getLocation() } - } - - private class TupleLikeConstructorDeclaration extends Declaration, - TTupleLikeConstructorDeclaration - { - TupleLikeConstructor tc; - - TupleLikeConstructorDeclaration() { this = TTupleLikeConstructorDeclaration(tc) } - - override TypeParameter getTypeParameter(TypeParameterPosition ppos) { - result = tc.getTypeParameter(ppos) - } - - override Type getParameterType(DeclarationPosition dpos, TypePath path) { - result = tc.getParameterType(dpos, path) - } - - override Type getReturnType(TypePath path) { result = tc.getReturnType(path) } - - override string toString() { result = tc.toString() } - - override Location getLocation() { result = tc.getLocation() } - } - - class Access extends NonMethodResolution::NonMethodCall, ContextTyping::ContextTypedCallCand { - pragma[nomagic] + class Access extends NonAssocCallExpr, ContextTyping::ContextTypedCallCand { override Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { - result = getCallExprTypeArgument(this, apos, path) + result = NonAssocCallExpr.super.getTypeArgument(apos, path) } - pragma[nomagic] - Type getInferredType(AccessPosition apos, TypePath path) { - apos.isTypeQualifier() and - result = getCallExprTypeQualifier(this, path, false) - or - result = inferType(this.getNodeAt(apos), path) - } - - pragma[inline] - Declaration getTarget() { - exists(ImplOrTraitItemNodeOption i, NonMethodFunctionDeclaration f | - result = TNonMethodFunctionDeclaration(i, f) - | - f = this.resolveCallTargetViaTypeInference(i.asSome()) // mutual recursion; resolving some associated function calls requires resolving types - or - f = this.resolveCallTargetViaPathResolution() and - f.isDirectlyFor(i) - ) - or - exists(ItemNode i | i = this.resolveCallTargetViaPathResolution() | - result = TTupleLikeConstructorDeclaration(i) - ) - } + Declaration getTarget() { result = this.resolveCallTargetViaPathResolution() } /** - * Holds if the return type of this call at `path` may have to be inferred - * from the context. + * Holds if the return type of this tuple-like construction at `path` may have to be inferred + * from the context, for example in `Result::Ok(42)` the error type has to be inferred from the + * context. */ pragma[nomagic] predicate hasUnknownTypeAt(FunctionPosition pos, TypePath path) { - exists(ImplOrTraitItemNodeOption i, NonMethodFunctionDeclaration f | - TNonMethodFunctionDeclaration(i, f) = this.getTarget() and - this.hasUnknownTypeAt(i.asSome(), f, pos, path) - ) - or - forex(ImplOrTraitItemNode i, NonMethodFunctionDeclaration f | - f = this.getPathResolutionResolved(i) - | - this.hasUnknownTypeAt(i, f, pos, path) - ) - or - // Tuple declarations, such as `Result::Ok(...)`, may also be context typed exists(TupleLikeConstructor tc, TypeParameter tp | - tc = this.resolveCallTargetViaPathResolution() and + tc = this.getTarget() and pos.isReturn() and tp = tc.getReturnType(path) and not tp = tc.getParameterType(_, _) and @@ -3277,44 +3200,44 @@ private module NonMethodCallMatchingInput implements MatchingInputSig { } } -private module NonMethodCallMatching = Matching; +private module TupleLikeConstructionMatching = Matching; pragma[nomagic] -private Type inferNonMethodCallType0(AstNode n, FunctionPosition pos, TypePath path) { - exists(NonMethodCallMatchingInput::Access a | n = a.getNodeAt(pos) | - result = NonMethodCallMatching::inferAccessType(a, pos, path) +private Type inferTupleLikeConstructionTypePreCheck(AstNode n, FunctionPosition pos, TypePath path) { + exists(TupleLikeConstructionMatchingInput::Access a | n = a.getNodeAt(pos) | + result = TupleLikeConstructionMatching::inferAccessType(a, pos, path) or a.hasUnknownTypeAt(pos, path) and result = TUnknownType() ) } -private predicate inferNonMethodCallType = - ContextTyping::CheckContextTyping::check/2; +private predicate inferTupleLikeConstructionType = + ContextTyping::CheckContextTyping::check/2; /** * A matching configuration for resolving types of operations like `a + b`. */ private module OperationMatchingInput implements MatchingInputSig { private import codeql.rust.elements.internal.OperationImpl::Impl as OperationImpl - import FunctionPositionMatchingInput + import FunctionPositionAdjMatchingInput - class Declaration extends MethodCallMatchingInput::Declaration { + class Declaration extends FunctionCallMatchingInput::Declaration { private Method getSelfOrImpl() { - result = m + result = f or - m.implements(result) + f.implements(result) } pragma[nomagic] - private predicate borrowsAt(DeclarationPosition pos) { + private predicate borrowsAt(FunctionPositionAdj posAdj) { exists(TraitItemNode t, string path, string method | this.getSelfOrImpl() = t.getAssocItem(method) and path = t.getCanonicalPath(_) and exists(int borrows | OperationImpl::isOverloaded(_, _, path, method, borrows) | - pos.isSelf() and borrows >= 1 + posAdj.asPosition() = 0 and borrows >= 1 or - pos.asPosition() = 0 and + posAdj.asPosition() = 1 and borrows >= 2 ) ) @@ -3323,30 +3246,30 @@ private module OperationMatchingInput implements MatchingInputSig { pragma[nomagic] private predicate derefsReturn() { this.getSelfOrImpl() = any(DerefTrait t).getDerefFunction() } - Type getDeclaredType(DeclarationPosition dpos, TypePath path) { + Type getDeclaredType(FunctionPositionAdj posAdj, TypePath path) { exists(TypePath path0 | - result = super.getDeclaredType(dpos, path0) and + result = super.getDeclaredType(posAdj, path0) and if - this.borrowsAt(dpos) + this.borrowsAt(posAdj) or - dpos.isReturn() and this.derefsReturn() + posAdj.isReturn() and this.derefsReturn() then path0.isCons(getRefTypeParameter(_), path) else path0 = path ) } } - class Access extends MethodResolution::MethodCallOperation { + class Access extends AssocFunctionResolution::AssocFunctionCallOperation { Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { none() } pragma[nomagic] - Type getInferredType(AccessPosition apos, TypePath path) { - result = inferType(this.getNodeAt(apos), path) + Type getInferredType(FunctionPositionAdj posAdj, TypePath path) { + result = inferType(this.getNodeAt(posAdj), path) } Declaration getTarget() { exists(ImplOrTraitItemNode i | - result.isMethod(i, this.resolveCallTarget(i, _, _)) // mutual recursion + result.isAssocFunction(i, this.resolveCallTarget(i, _, _, _)) // mutual recursion ) } } @@ -3355,15 +3278,16 @@ private module OperationMatchingInput implements MatchingInputSig { private module OperationMatching = Matching; pragma[nomagic] -private Type inferOperationType0(AstNode n, FunctionPosition pos, TypePath path) { - exists(OperationMatchingInput::Access a | - n = a.getNodeAt(pos) and - result = OperationMatching::inferAccessType(a, pos, path) +private Type inferOperationTypePreCheck(AstNode n, FunctionPosition pos, TypePath path) { + exists(OperationMatchingInput::Access a, FunctionPositionAdj posAdj | + n = a.getNodeAt(posAdj) and + posAdj = pos.getFunctionCallAdjusted() and + result = OperationMatching::inferAccessType(a, posAdj, path) ) } private predicate inferOperationType = - ContextTyping::CheckContextTyping::check/2; + ContextTyping::CheckContextTyping::check/2; pragma[nomagic] private Type getFieldExprLookupType(FieldExpr fe, string name, DerefChain derefChain) { @@ -4057,7 +3981,8 @@ private module Cached { cached predicate implicitDerefChainBorrow(Expr e, DerefChain derefChain, boolean borrow) { exists(BorrowKind bk | - any(MethodResolution::MethodCall mc).argumentHasImplicitDerefChainBorrow(e, derefChain, bk) and + any(AssocFunctionResolution::AssocFunctionCall afc) + .argumentHasImplicitDerefChainBorrow(e, derefChain, bk) and if bk.isNoBorrow() then borrow = false else borrow = true ) or @@ -4082,15 +4007,14 @@ private module Cached { cached Addressable resolveCallTarget(InvocationExpr call, boolean dispatch) { dispatch = false and - result = call.(NonMethodResolution::NonMethodCall).resolveCallTargetViaPathResolution() + result = call.(NonAssocCallExpr).resolveCallTargetViaPathResolution() or 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) + result = call.(AssocFunctionResolution::AssocFunctionCall).resolveCallTarget(i, _, _, _) ) } @@ -4179,9 +4103,9 @@ private module Cached { or result = inferStructExprType(n, path) or - result = inferMethodCallType(n, path) + result = inferFunctionCallType(n, path) or - result = inferNonMethodCallType(n, path) + result = inferTupleLikeConstructionType(n, path) or result = inferOperationType(n, path) or @@ -4249,14 +4173,14 @@ private module Debug { t = self.getTypeAt(path) } - predicate debugInferMethodCallType(AstNode n, TypePath path, Type t) { + predicate debugInferFunctionCallType(AstNode n, TypePath path, Type t) { n = getRelevantLocatable() and - t = inferMethodCallType(n, path) + t = inferFunctionCallType(n, path) } - predicate debugInferNonMethodCallType(AstNode n, TypePath path, Type t) { + predicate debugInferTupleLikeConstructionType(AstNode n, TypePath path, Type t) { n = getRelevantLocatable() and - t = inferNonMethodCallType(n, path) + t = inferTupleLikeConstructionType(n, path) } predicate debugTypeMention(TypeMention tm, TypePath path, Type type) { 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 8ca58acd1d0..e69de29bb2d 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,6 +0,0 @@ -multipleResolvedTargets -| test.rs:389:30:389:67 | pinned.poll_read(...) | -| test.rs:416:26:416:54 | pinned.poll_fill_buf(...) | -| test.rs:423:27:423:71 | ... .poll_fill_buf(...) | -| test.rs:447:30:447:67 | pinned.poll_read(...) | -| test.rs:470:26:470:54 | pinned.poll_fill_buf(...) | 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 255af4cc86e..763bff966d3 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 @@ -100,7 +100,9 @@ edges | main.rs:161:10:161:18 | source(...) | main.rs:161:10:161:25 | ... .shr(...) | provenance | MaD:30 | | main.rs:162:19:162:27 | source(...) | main.rs:162:10:162:28 | 1i64.shr(...) | provenance | MaD:30 | | main.rs:164:10:164:18 | source(...) | main.rs:164:10:164:30 | ... .bitor(...) | provenance | MaD:19 | +| main.rs:165:10:165:18 | source(...) | main.rs:165:10:165:27 | ... .bitor(...) | provenance | MaD:19 | | main.rs:166:21:166:29 | source(...) | main.rs:166:10:166:30 | 1i64.bitor(...) | provenance | MaD:19 | +| main.rs:167:18:167:26 | source(...) | main.rs:167:10:167:27 | 1.bitor(...) | provenance | MaD:19 | | main.rs:170:5:170:5 | [post] a | main.rs:171:5:171:5 | a | provenance | | | main.rs:170:5:170:5 | [post] a | main.rs:172:5:172:5 | a | provenance | | | main.rs:170:5:170:5 | [post] a | main.rs:173:5:173:5 | a | provenance | | @@ -351,8 +353,12 @@ nodes | main.rs:162:19:162:27 | source(...) | semmle.label | source(...) | | main.rs:164:10:164:18 | source(...) | semmle.label | source(...) | | main.rs:164:10:164:30 | ... .bitor(...) | semmle.label | ... .bitor(...) | +| main.rs:165:10:165:18 | source(...) | semmle.label | source(...) | +| main.rs:165:10:165:27 | ... .bitor(...) | semmle.label | ... .bitor(...) | | main.rs:166:10:166:30 | 1i64.bitor(...) | semmle.label | 1i64.bitor(...) | | main.rs:166:21:166:29 | source(...) | semmle.label | source(...) | +| main.rs:167:10:167:27 | 1.bitor(...) | semmle.label | 1.bitor(...) | +| main.rs:167:18:167:26 | source(...) | semmle.label | source(...) | | main.rs:170:5:170:5 | [post] a | semmle.label | [post] a | | main.rs:170:18:170:26 | source(...) | semmle.label | source(...) | | main.rs:171:5:171:5 | [post] a | semmle.label | [post] a | @@ -516,7 +522,9 @@ testFailures | main.rs:161:10:161:25 | ... .shr(...) | main.rs:161:10:161:18 | source(...) | main.rs:161:10:161:25 | ... .shr(...) | $@ | main.rs:161:10:161:18 | source(...) | source(...) | | main.rs:162:10:162:28 | 1i64.shr(...) | main.rs:162:19:162:27 | source(...) | main.rs:162:10:162:28 | 1i64.shr(...) | $@ | main.rs:162:19:162:27 | source(...) | source(...) | | main.rs:164:10:164:30 | ... .bitor(...) | main.rs:164:10:164:18 | source(...) | main.rs:164:10:164:30 | ... .bitor(...) | $@ | main.rs:164:10:164:18 | source(...) | source(...) | +| main.rs:165:10:165:27 | ... .bitor(...) | main.rs:165:10:165:18 | source(...) | main.rs:165:10:165:27 | ... .bitor(...) | $@ | main.rs:165:10:165:18 | source(...) | source(...) | | main.rs:166:10:166:30 | 1i64.bitor(...) | main.rs:166:21:166:29 | source(...) | main.rs:166:10:166:30 | 1i64.bitor(...) | $@ | main.rs:166:21:166:29 | source(...) | source(...) | +| main.rs:167:10:167:27 | 1.bitor(...) | main.rs:167:18:167:26 | source(...) | main.rs:167:10:167:27 | 1.bitor(...) | $@ | main.rs:167:18:167:26 | source(...) | source(...) | | main.rs:176:10:176:10 | a | main.rs:170:18:170:26 | source(...) | main.rs:176:10:176:10 | a | $@ | main.rs:170:18:170:26 | source(...) | source(...) | | main.rs:176:10:176:10 | a | main.rs:171:18:171:26 | source(...) | main.rs:176:10:176:10 | a | $@ | main.rs:171:18:171:26 | source(...) | source(...) | | main.rs:176:10:176:10 | a | main.rs:172:18:172:26 | source(...) | main.rs:176:10:176:10 | a | $@ | main.rs:172:18:172:26 | 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 07770cc7118..05dbd1eb702 100644 --- a/rust/ql/test/library-tests/dataflow/taint/main.rs +++ b/rust/ql/test/library-tests/dataflow/taint/main.rs @@ -162,9 +162,9 @@ fn std_ops() { sink(1i64.shr(source(2))); // $ hasTaintFlow=2 sink(source(1).bitor(2i64)); // $ hasTaintFlow=1 - sink(source(1).bitor(2)); // $ MISSING: hasTaintFlow=1 + sink(source(1).bitor(2)); // $ hasTaintFlow=1 sink(1i64.bitor(source(2))); // $ hasTaintFlow=2 - sink(1.bitor(source(2))); // $ MISSING: hasTaintFlow=2 + sink(1.bitor(source(2))); // $ hasTaintFlow=2 let mut a: i64 = 1; a.add_assign(source(2)); diff --git a/rust/ql/test/library-tests/type-inference/overloading.rs b/rust/ql/test/library-tests/type-inference/overloading.rs index 9d5e0f39cf7..94b5a8b69e4 100644 --- a/rust/ql/test/library-tests/type-inference/overloading.rs +++ b/rust/ql/test/library-tests/type-inference/overloading.rs @@ -421,7 +421,7 @@ mod inherent_before_trait { // _as_Trait>::foo fn foo(&self) { S::foo(self); // $ MISSING: target=S::foo - S::::foo(self); // $ MISSING: target=S::foo + S::::foo(self); // $ target=S::foo self.foo() // $ target=_as_Trait>::foo } @@ -437,7 +437,7 @@ mod inherent_before_trait { // _as_Trait>::foo fn foo(&self) { // `S::foo(self);` is not valid - S::::foo(self); // $ MISSING: target=_as_Trait>::foo + S::::foo(self); // $ target=_as_Trait>::foo self.foo() // $ target=_as_Trait>::foo } 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 c9b948939ac..bd3b0490f18 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -14974,202 +14974,16 @@ inferType | regressions.rs:99:22:99:22 | x | | regressions.rs:99:18:99:19 | T2 | | regressions.rs:103:5:107:5 | { ... } | | regressions.rs:99:18:99:19 | T2 | | regressions.rs:104:13:104:13 | y | | {EXTERNAL LOCATION} | Option | -| regressions.rs:104:13:104:13 | y | | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:104:13:104:13 | y | | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:104:13:104:13 | y | T | {EXTERNAL LOCATION} | Option | | regressions.rs:104:13:104:13 | y | T | regressions.rs:99:14:99:15 | T1 | | regressions.rs:104:13:104:13 | y | T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:104:13:104:13 | y | T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:104:13:104:13 | y | T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:104:13:104:13 | y | T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:104:13:104:13 | y | T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:104:13:104:13 | y | T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:104:13:104:13 | y | T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:104:13:104:13 | y | T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:104:13:104:13 | y | T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:104:13:104:13 | y | T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:104:13:104:13 | y | T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:104:13:104:13 | y | T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:104:13:104:13 | y | T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:104:13:104:13 | y | T.T.T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | | regressions.rs:104:17:104:34 | ...::my_from(...) | | {EXTERNAL LOCATION} | Option | -| regressions.rs:104:17:104:34 | ...::my_from(...) | | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:104:17:104:34 | ...::my_from(...) | | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:104:17:104:34 | ...::my_from(...) | T | {EXTERNAL LOCATION} | Option | | regressions.rs:104:17:104:34 | ...::my_from(...) | T | regressions.rs:99:14:99:15 | T1 | | regressions.rs:104:17:104:34 | ...::my_from(...) | T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:104:17:104:34 | ...::my_from(...) | T.T.T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | | regressions.rs:104:33:104:33 | x | | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:13:105:13 | z | | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:13:105:13 | z | | regressions.rs:99:14:99:15 | T1 | | regressions.rs:105:13:105:13 | z | | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:13:105:13 | z | T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:13:105:13 | z | T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:13:105:13 | z | T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:13:105:13 | z | T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:13:105:13 | z | T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:13:105:13 | z | T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:13:105:13 | z | T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:13:105:13 | z | T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:13:105:13 | z | T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:13:105:13 | z | T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:13:105:13 | z | T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:13:105:13 | z | T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:13:105:13 | z | T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:13:105:13 | z | T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:13:105:13 | z | T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:13:105:13 | z | T.T.T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:17:105:34 | ...::my_from(...) | | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:17:105:34 | ...::my_from(...) | | regressions.rs:99:14:99:15 | T1 | | regressions.rs:105:17:105:34 | ...::my_from(...) | | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:17:105:34 | ...::my_from(...) | T.T.T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | | regressions.rs:105:33:105:33 | y | | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:33:105:33 | y | | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:33:105:33 | y | | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:33:105:33 | y | T | {EXTERNAL LOCATION} | Option | | regressions.rs:105:33:105:33 | y | T | regressions.rs:99:14:99:15 | T1 | | regressions.rs:105:33:105:33 | y | T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:33:105:33 | y | T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:33:105:33 | y | T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:33:105:33 | y | T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:33:105:33 | y | T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:33:105:33 | y | T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:33:105:33 | y | T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:33:105:33 | y | T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:33:105:33 | y | T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:33:105:33 | y | T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:33:105:33 | y | T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:33:105:33 | y | T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:33:105:33 | y | T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:105:33:105:33 | y | T.T.T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:106:9:106:9 | z | | {EXTERNAL LOCATION} | Option | -| regressions.rs:106:9:106:9 | z | | regressions.rs:99:14:99:15 | T1 | | regressions.rs:106:9:106:9 | z | | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:106:9:106:9 | z | T | {EXTERNAL LOCATION} | Option | -| regressions.rs:106:9:106:9 | z | T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:106:9:106:9 | z | T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:106:9:106:9 | z | T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:106:9:106:9 | z | T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:106:9:106:9 | z | T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:106:9:106:9 | z | T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:106:9:106:9 | z | T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:106:9:106:9 | z | T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:106:9:106:9 | z | T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:106:9:106:9 | z | T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:106:9:106:9 | z | T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:106:9:106:9 | z | T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:106:9:106:9 | z | T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:106:9:106:9 | z | T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | -| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T.T.T.T.T | {EXTERNAL LOCATION} | Option | -| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T.T.T.T.T | regressions.rs:99:14:99:15 | T1 | -| regressions.rs:106:9:106:9 | z | T.T.T.T.T.T.T.T.T.T | regressions.rs:99:18:99:19 | T2 | testFailures diff --git a/rust/ql/test/query-tests/security/CWE-327/BrokenCryptoAlgorithm/BrokenCryptoAlgorithm.expected b/rust/ql/test/query-tests/security/CWE-327/BrokenCryptoAlgorithm/BrokenCryptoAlgorithm.expected index ef0a9e0d806..a04fd96739c 100644 --- a/rust/ql/test/query-tests/security/CWE-327/BrokenCryptoAlgorithm/BrokenCryptoAlgorithm.expected +++ b/rust/ql/test/query-tests/security/CWE-327/BrokenCryptoAlgorithm/BrokenCryptoAlgorithm.expected @@ -21,3 +21,9 @@ | test_cipher.rs:109:23:109:56 | ...::new_with_eff_key_len(...) | $@ is broken or weak, and should not be used. | test_cipher.rs:109:23:109:56 | ...::new_with_eff_key_len(...) | The cryptographic algorithm RC2 | | test_cipher.rs:114:23:114:50 | ...::new(...) | $@ is broken or weak, and should not be used. | test_cipher.rs:114:23:114:50 | ...::new(...) | The cryptographic algorithm RC5 | | test_cipher.rs:118:23:118:55 | ...::new_from_slice(...) | $@ is broken or weak, and should not be used. | test_cipher.rs:118:23:118:55 | ...::new_from_slice(...) | The cryptographic algorithm RC5 | +| test_cipher.rs:136:23:136:76 | ...::new(...) | $@ is broken or weak, and should not be used. | test_cipher.rs:136:23:136:76 | ...::new(...) | The cryptographic algorithm DES | +| test_cipher.rs:139:23:139:64 | ...::new(...) | $@ is broken or weak, and should not be used. | test_cipher.rs:139:23:139:64 | ...::new(...) | The cryptographic algorithm DES | +| test_cipher.rs:142:23:142:76 | ...::new_from_slices(...) | $@ is broken or weak, and should not be used. | test_cipher.rs:142:23:142:76 | ...::new_from_slices(...) | The cryptographic algorithm DES | +| test_cipher.rs:145:23:145:76 | ...::new(...) | $@ is broken or weak, and should not be used. | test_cipher.rs:145:23:145:76 | ...::new(...) | The cryptographic algorithm DES | +| test_cipher.rs:171:23:171:65 | ...::new(...) | $@ is broken or weak, and should not be used. | test_cipher.rs:171:23:171:65 | ...::new(...) | The cryptographic algorithm DES | +| test_cipher.rs:175:23:175:65 | ...::new(...) | $@ is broken or weak, and should not be used. | test_cipher.rs:175:23:175:65 | ...::new(...) | The cryptographic algorithm RC2 | 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 deleted file mode 100644 index 18400b7ab59..00000000000 --- a/rust/ql/test/query-tests/security/CWE-327/BrokenCryptoAlgorithm/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,2 +0,0 @@ -multipleResolvedTargets -| test_cipher.rs:114:23:114:50 | ...::new(...) | 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 17db0f9ceb1..81964436720 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 @@ -133,16 +133,16 @@ fn test_cbc( _ = aes_cipher1.encrypt_padded_mut::(data, data_len).unwrap(); // des (broken) - let des_cipher1 = cbc::Encryptor::::new(key.into(), iv.into()); // $ MISSING: Alert[rust/weak-cryptographic-algorithm] + let des_cipher1 = cbc::Encryptor::::new(key.into(), iv.into()); // $ Alert[rust/weak-cryptographic-algorithm] _ = des_cipher1.encrypt_padded_mut::(data, data_len).unwrap(); - let des_cipher2 = MyDesEncryptor::new(key.into(), iv.into()); // $ MISSING: Alert[rust/weak-cryptographic-algorithm] + let des_cipher2 = MyDesEncryptor::new(key.into(), iv.into()); // $ Alert[rust/weak-cryptographic-algorithm] _ = des_cipher2.encrypt_padded_mut::(data, data_len).unwrap(); - let des_cipher3 = cbc::Encryptor::::new_from_slices(&key, &iv).unwrap(); // $ MISSING: Alert[rust/weak-cryptographic-algorithm] + let des_cipher3 = cbc::Encryptor::::new_from_slices(&key, &iv).unwrap(); // $ Alert[rust/weak-cryptographic-algorithm] _ = des_cipher3.encrypt_padded_mut::(data, data_len).unwrap(); - let des_cipher4 = cbc::Encryptor::::new(key.into(), iv.into()); // $ MISSING: Alert[rust/weak-cryptographic-algorithm] + let des_cipher4 = cbc::Encryptor::::new(key.into(), iv.into()); // $ Alert[rust/weak-cryptographic-algorithm] _ = des_cipher4.encrypt_padded_b2b_mut::(input, data).unwrap(); } @@ -168,10 +168,10 @@ fn test_ecb( _ = 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] + let des_cipher1 = ecb::Encryptor::::new(key.into()); // $ 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] + let rc2_cipher1 = ecb::Encryptor::::new(key.into()); // $ Alert[rust/weak-cryptographic-algorithm] _ = rc2_cipher1.encrypt_padded_mut::(data, data_len).unwrap(); } diff --git a/shared/util/codeql/util/Option.qll b/shared/util/codeql/util/Option.qll index 77cc89504f5..2be9e10fef5 100644 --- a/shared/util/codeql/util/Option.qll +++ b/shared/util/codeql/util/Option.qll @@ -56,6 +56,9 @@ module Option { /** Gets the given element wrapped as an `Option`. */ Some some(T c) { result = TSome(c) } + + /** Gets the `None` value. */ + None none_() { any() } } /** From 48bf4fd82aea7075c4e7576fe301938099ebdd90 Mon Sep 17 00:00:00 2001 From: Taus Date: Wed, 11 Mar 2026 16:01:47 +0000 Subject: [PATCH 023/185] Python: Add test for missing relative import in namespace packages --- .../pkg/caller.py | 5 +++ .../pkg/helper.py | 2 ++ .../test.expected | 1 + .../test.ql | 35 +++++++++++++++++++ 4 files changed, 43 insertions(+) create mode 100644 python/ql/test/experimental/import-resolution-namespace-relative/pkg/caller.py create mode 100644 python/ql/test/experimental/import-resolution-namespace-relative/pkg/helper.py create mode 100644 python/ql/test/experimental/import-resolution-namespace-relative/test.expected create mode 100644 python/ql/test/experimental/import-resolution-namespace-relative/test.ql diff --git a/python/ql/test/experimental/import-resolution-namespace-relative/pkg/caller.py b/python/ql/test/experimental/import-resolution-namespace-relative/pkg/caller.py new file mode 100644 index 00000000000..f30065eec99 --- /dev/null +++ b/python/ql/test/experimental/import-resolution-namespace-relative/pkg/caller.py @@ -0,0 +1,5 @@ +from . import helper + +def use_relative(): + tainted = source() + helper.process(tainted) diff --git a/python/ql/test/experimental/import-resolution-namespace-relative/pkg/helper.py b/python/ql/test/experimental/import-resolution-namespace-relative/pkg/helper.py new file mode 100644 index 00000000000..43167b8cfa7 --- /dev/null +++ b/python/ql/test/experimental/import-resolution-namespace-relative/pkg/helper.py @@ -0,0 +1,2 @@ +def process(value): + sink(value) #$ MISSING: prints=source diff --git a/python/ql/test/experimental/import-resolution-namespace-relative/test.expected b/python/ql/test/experimental/import-resolution-namespace-relative/test.expected new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/python/ql/test/experimental/import-resolution-namespace-relative/test.expected @@ -0,0 +1 @@ + diff --git a/python/ql/test/experimental/import-resolution-namespace-relative/test.ql b/python/ql/test/experimental/import-resolution-namespace-relative/test.ql new file mode 100644 index 00000000000..f826c02e423 --- /dev/null +++ b/python/ql/test/experimental/import-resolution-namespace-relative/test.ql @@ -0,0 +1,35 @@ +import python +import semmle.python.dataflow.new.DataFlow +import semmle.python.dataflow.new.TaintTracking +import utils.test.InlineExpectationsTest + +private module TestConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node node) { + node.(DataFlow::CallCfgNode).getFunction().asCfgNode().(NameNode).getId() = "source" + } + + predicate isSink(DataFlow::Node node) { + exists(DataFlow::CallCfgNode call | + call.getFunction().asCfgNode().(NameNode).getId() = "sink" and + node = call.getArg(0) + ) + } +} + +private module TestFlow = TaintTracking::Global; + +module FlowTest implements TestSig { + string getARelevantTag() { result = "prints" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + exists(DataFlow::Node sink | + TestFlow::flow(_, sink) and + tag = "prints" and + location = sink.getLocation() and + value = "source" and + element = sink.toString() + ) + } +} + +import MakeTest From e16bb226c08c8131e10748d7e4990a03e4d0220f Mon Sep 17 00:00:00 2001 From: Taus Date: Wed, 11 Mar 2026 23:02:09 +0000 Subject: [PATCH 024/185] Python: Fix resolution of relative imports from namespace packages The fix may look a bit obscure, so here's what's going on. When we see `from . import helper`, we create an `ImportExpr` with level equal to 1 (corresponding to the number of dots). To resolve such imports, we compute the name of the enclosing package, as part of `ImportExpr.qualifiedTopName()`. For this form of import expression, it is equivalent to `this.getEnclosingModule().getPackageName()`. But `qualifiedTopName` requires that `valid_module_name` holds for its result, and this was _not_ the case for namespace packages. To fix this, we extend `valid_module_name` to include the module names of _any_ folder, not just regular package (which are the ones where there's a `__init__.py` in the folder). Note that this doesn't simply include all folders -- only the ones that result in valid module names in Python. --- python/ql/lib/semmle/python/Import.qll | 4 ++++ .../import-resolution-namespace-relative/pkg/helper.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/python/ql/lib/semmle/python/Import.qll b/python/ql/lib/semmle/python/Import.qll index e8a7facccad..2f7fae95539 100644 --- a/python/ql/lib/semmle/python/Import.qll +++ b/python/ql/lib/semmle/python/Import.qll @@ -17,6 +17,10 @@ private predicate valid_module_name(string name) { exists(Module m | m.getName() = name) or exists(Builtin cmod | cmod.getClass() = Builtin::special("ModuleType") and cmod.getName() = name) + or + // Namespace packages may not have a corresponding Module entity, + // but their names are still valid for the purpose of import resolution. + name = moduleNameFromFile(any(Folder f)) } /** An artificial expression representing an import */ diff --git a/python/ql/test/experimental/import-resolution-namespace-relative/pkg/helper.py b/python/ql/test/experimental/import-resolution-namespace-relative/pkg/helper.py index 43167b8cfa7..b9407161e08 100644 --- a/python/ql/test/experimental/import-resolution-namespace-relative/pkg/helper.py +++ b/python/ql/test/experimental/import-resolution-namespace-relative/pkg/helper.py @@ -1,2 +1,2 @@ def process(value): - sink(value) #$ MISSING: prints=source + sink(value) #$ prints=source From 3ee369b7109fc4debf92272fbc9554e8b680a4cb Mon Sep 17 00:00:00 2001 From: Taus Date: Wed, 11 Mar 2026 23:14:57 +0000 Subject: [PATCH 025/185] Python: Add change note --- .../2026-03-11-fix-unresolved-relative-imports.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 python/ql/lib/change-notes/2026-03-11-fix-unresolved-relative-imports.md diff --git a/python/ql/lib/change-notes/2026-03-11-fix-unresolved-relative-imports.md b/python/ql/lib/change-notes/2026-03-11-fix-unresolved-relative-imports.md new file mode 100644 index 00000000000..15290fb3d66 --- /dev/null +++ b/python/ql/lib/change-notes/2026-03-11-fix-unresolved-relative-imports.md @@ -0,0 +1,5 @@ +--- +category: fix +--- + +- Fixed the resolution of relative imports such as `from . import helper` inside namespace packages (directories without an `__init__.py` file), which previously did not work correctly, leading to missing flow. From f58a6e5d3a3e76dd06de0472cc48ff67280ef33e Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 13 Mar 2026 10:01:02 +0000 Subject: [PATCH 026/185] Change @security-severity for XSS queries from 6.1 to 7.8 --- cpp/ql/src/Security/CWE/CWE-079/CgiXss.ql | 2 +- csharp/ql/src/Security Features/CWE-079/XSS.ql | 2 +- go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql | 2 +- go/ql/src/Security/CWE-079/ReflectedXss.ql | 2 +- go/ql/src/Security/CWE-079/StoredXss.ql | 2 +- .../CWE/CWE-079/AndroidWebViewAddJavascriptInterface.ql | 2 +- .../CWE/CWE-079/AndroidWebViewSettingsEnabledJavaScript.ql | 2 +- java/ql/src/Security/CWE/CWE-079/XSS.ql | 2 +- python/ql/src/Security/CWE-079/Jinja2WithoutEscaping.ql | 2 +- python/ql/src/Security/CWE-079/ReflectedXss.ql | 2 +- ruby/ql/src/queries/security/cwe-079/ReflectedXSS.ql | 2 +- ruby/ql/src/queries/security/cwe-079/StoredXSS.ql | 2 +- ruby/ql/src/queries/security/cwe-079/UnsafeHtmlConstruction.ql | 2 +- rust/ql/src/queries/security/CWE-079/XSS.ql | 2 +- swift/ql/src/queries/Security/CWE-079/UnsafeWebViewFetch.ql | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/cpp/ql/src/Security/CWE/CWE-079/CgiXss.ql b/cpp/ql/src/Security/CWE/CWE-079/CgiXss.ql index 994aba733d2..0e4a8f9741c 100644 --- a/cpp/ql/src/Security/CWE/CWE-079/CgiXss.ql +++ b/cpp/ql/src/Security/CWE/CWE-079/CgiXss.ql @@ -4,7 +4,7 @@ * allows for a cross-site scripting vulnerability. * @kind path-problem * @problem.severity error - * @security-severity 6.1 + * @security-severity 7.8 * @precision high * @id cpp/cgi-xss * @tags security diff --git a/csharp/ql/src/Security Features/CWE-079/XSS.ql b/csharp/ql/src/Security Features/CWE-079/XSS.ql index 8735d89ef50..b819ed06bf8 100644 --- a/csharp/ql/src/Security Features/CWE-079/XSS.ql +++ b/csharp/ql/src/Security Features/CWE-079/XSS.ql @@ -4,7 +4,7 @@ * allows for a cross-site scripting vulnerability. * @kind path-problem * @problem.severity error - * @security-severity 6.1 + * @security-severity 7.8 * @precision high * @id cs/web/xss * @tags security diff --git a/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql b/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql index 15373ee85ed..f556630965c 100644 --- a/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql +++ b/go/ql/src/Security/CWE-079/HtmlTemplateEscapingBypassXss.ql @@ -5,7 +5,7 @@ * scripting vulnerability. * @kind path-problem * @problem.severity error - * @security-severity 6.1 + * @security-severity 7.8 * @precision high * @id go/html-template-escaping-bypass-xss * @tags security diff --git a/go/ql/src/Security/CWE-079/ReflectedXss.ql b/go/ql/src/Security/CWE-079/ReflectedXss.ql index 0fca12ac285..ebabb69f0a4 100644 --- a/go/ql/src/Security/CWE-079/ReflectedXss.ql +++ b/go/ql/src/Security/CWE-079/ReflectedXss.ql @@ -4,7 +4,7 @@ * a cross-site scripting vulnerability. * @kind path-problem * @problem.severity error - * @security-severity 6.1 + * @security-severity 7.8 * @precision high * @id go/reflected-xss * @tags security diff --git a/go/ql/src/Security/CWE-079/StoredXss.ql b/go/ql/src/Security/CWE-079/StoredXss.ql index 83628b31042..dcae0a5f9c1 100644 --- a/go/ql/src/Security/CWE-079/StoredXss.ql +++ b/go/ql/src/Security/CWE-079/StoredXss.ql @@ -4,7 +4,7 @@ * a stored cross-site scripting vulnerability. * @kind path-problem * @problem.severity error - * @security-severity 6.1 + * @security-severity 7.8 * @precision low * @id go/stored-xss * @tags security diff --git a/java/ql/src/Security/CWE/CWE-079/AndroidWebViewAddJavascriptInterface.ql b/java/ql/src/Security/CWE/CWE-079/AndroidWebViewAddJavascriptInterface.ql index 4368b537ab7..3b4abcaa7f6 100644 --- a/java/ql/src/Security/CWE/CWE-079/AndroidWebViewAddJavascriptInterface.ql +++ b/java/ql/src/Security/CWE/CWE-079/AndroidWebViewAddJavascriptInterface.ql @@ -4,7 +4,7 @@ * @description Exposing a Java object in a WebView with a JavaScript interface can lead to malicious JavaScript controlling the application. * @kind problem * @problem.severity warning - * @security-severity 6.1 + * @security-severity 7.8 * @precision medium * @tags security * external/cwe/cwe-079 diff --git a/java/ql/src/Security/CWE/CWE-079/AndroidWebViewSettingsEnabledJavaScript.ql b/java/ql/src/Security/CWE/CWE-079/AndroidWebViewSettingsEnabledJavaScript.ql index 561b2af8de0..3ea2b207c04 100644 --- a/java/ql/src/Security/CWE/CWE-079/AndroidWebViewSettingsEnabledJavaScript.ql +++ b/java/ql/src/Security/CWE/CWE-079/AndroidWebViewSettingsEnabledJavaScript.ql @@ -4,7 +4,7 @@ * @kind problem * @id java/android/websettings-javascript-enabled * @problem.severity warning - * @security-severity 6.1 + * @security-severity 7.8 * @precision medium * @tags security * external/cwe/cwe-079 diff --git a/java/ql/src/Security/CWE/CWE-079/XSS.ql b/java/ql/src/Security/CWE/CWE-079/XSS.ql index 9ae92a7e362..f1261ebff74 100644 --- a/java/ql/src/Security/CWE/CWE-079/XSS.ql +++ b/java/ql/src/Security/CWE/CWE-079/XSS.ql @@ -4,7 +4,7 @@ * allows for a cross-site scripting vulnerability. * @kind path-problem * @problem.severity error - * @security-severity 6.1 + * @security-severity 7.8 * @precision high * @id java/xss * @tags security diff --git a/python/ql/src/Security/CWE-079/Jinja2WithoutEscaping.ql b/python/ql/src/Security/CWE-079/Jinja2WithoutEscaping.ql index 97bbb72edec..fd03ba433a1 100644 --- a/python/ql/src/Security/CWE-079/Jinja2WithoutEscaping.ql +++ b/python/ql/src/Security/CWE-079/Jinja2WithoutEscaping.ql @@ -4,7 +4,7 @@ * cause a cross-site scripting vulnerability. * @kind problem * @problem.severity error - * @security-severity 6.1 + * @security-severity 7.8 * @precision medium * @id py/jinja2/autoescape-false * @tags security diff --git a/python/ql/src/Security/CWE-079/ReflectedXss.ql b/python/ql/src/Security/CWE-079/ReflectedXss.ql index 11ebad00e37..286dbece126 100644 --- a/python/ql/src/Security/CWE-079/ReflectedXss.ql +++ b/python/ql/src/Security/CWE-079/ReflectedXss.ql @@ -4,7 +4,7 @@ * allows for a cross-site scripting vulnerability. * @kind path-problem * @problem.severity error - * @security-severity 6.1 + * @security-severity 7.8 * @sub-severity high * @precision high * @id py/reflective-xss diff --git a/ruby/ql/src/queries/security/cwe-079/ReflectedXSS.ql b/ruby/ql/src/queries/security/cwe-079/ReflectedXSS.ql index 8cc60618cc5..04eed164046 100644 --- a/ruby/ql/src/queries/security/cwe-079/ReflectedXSS.ql +++ b/ruby/ql/src/queries/security/cwe-079/ReflectedXSS.ql @@ -4,7 +4,7 @@ * allows for a cross-site scripting vulnerability. * @kind path-problem * @problem.severity error - * @security-severity 6.1 + * @security-severity 7.8 * @sub-severity high * @precision high * @id rb/reflected-xss diff --git a/ruby/ql/src/queries/security/cwe-079/StoredXSS.ql b/ruby/ql/src/queries/security/cwe-079/StoredXSS.ql index a621aee00b0..a2a1752f7f4 100644 --- a/ruby/ql/src/queries/security/cwe-079/StoredXSS.ql +++ b/ruby/ql/src/queries/security/cwe-079/StoredXSS.ql @@ -4,7 +4,7 @@ * a stored cross-site scripting vulnerability. * @kind path-problem * @problem.severity error - * @security-severity 6.1 + * @security-severity 7.8 * @precision high * @id rb/stored-xss * @tags security diff --git a/ruby/ql/src/queries/security/cwe-079/UnsafeHtmlConstruction.ql b/ruby/ql/src/queries/security/cwe-079/UnsafeHtmlConstruction.ql index c1527783fc3..3fa40cd6f91 100644 --- a/ruby/ql/src/queries/security/cwe-079/UnsafeHtmlConstruction.ql +++ b/ruby/ql/src/queries/security/cwe-079/UnsafeHtmlConstruction.ql @@ -4,7 +4,7 @@ * user to perform a cross-site scripting attack. * @kind path-problem * @problem.severity error - * @security-severity 6.1 + * @security-severity 7.8 * @precision high * @id rb/html-constructed-from-input * @tags security diff --git a/rust/ql/src/queries/security/CWE-079/XSS.ql b/rust/ql/src/queries/security/CWE-079/XSS.ql index 3c43f5043c7..e7609196b3e 100644 --- a/rust/ql/src/queries/security/CWE-079/XSS.ql +++ b/rust/ql/src/queries/security/CWE-079/XSS.ql @@ -4,7 +4,7 @@ * allows for a cross-site scripting vulnerability. * @kind path-problem * @problem.severity error - * @security-severity 6.1 + * @security-severity 7.8 * @precision high * @id rust/xss * @tags security diff --git a/swift/ql/src/queries/Security/CWE-079/UnsafeWebViewFetch.ql b/swift/ql/src/queries/Security/CWE-079/UnsafeWebViewFetch.ql index 7243d2216a5..3a2de3fa80a 100644 --- a/swift/ql/src/queries/Security/CWE-079/UnsafeWebViewFetch.ql +++ b/swift/ql/src/queries/Security/CWE-079/UnsafeWebViewFetch.ql @@ -3,7 +3,7 @@ * @description Fetching data in a WebView without restricting the base URL may allow an attacker to access sensitive local data, or enable cross-site scripting attack. * @kind path-problem * @problem.severity warning - * @security-severity 6.1 + * @security-severity 7.8 * @precision high * @id swift/unsafe-webview-fetch * @tags security From 056aa342fee99d9367f4041db89beee59417d3b7 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 13 Mar 2026 10:02:01 +0000 Subject: [PATCH 027/185] Change @security-severity for log injection queries from 7.8 to 6.1 --- csharp/ql/src/Security Features/CWE-117/LogForging.ql | 2 +- go/ql/src/Security/CWE-117/LogInjection.ql | 2 +- java/ql/src/Security/CWE/CWE-117/LogInjection.ql | 2 +- python/ql/src/Security/CWE-117/LogInjection.ql | 2 +- ruby/ql/src/queries/security/cwe-117/LogInjection.ql | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/csharp/ql/src/Security Features/CWE-117/LogForging.ql b/csharp/ql/src/Security Features/CWE-117/LogForging.ql index 9494af33570..a922f1c02f8 100644 --- a/csharp/ql/src/Security Features/CWE-117/LogForging.ql +++ b/csharp/ql/src/Security Features/CWE-117/LogForging.ql @@ -4,7 +4,7 @@ * insertion of forged log entries by a malicious user. * @kind path-problem * @problem.severity error - * @security-severity 7.8 + * @security-severity 6.1 * @precision high * @id cs/log-forging * @tags security diff --git a/go/ql/src/Security/CWE-117/LogInjection.ql b/go/ql/src/Security/CWE-117/LogInjection.ql index 5b6586c8e4e..08febfd842e 100644 --- a/go/ql/src/Security/CWE-117/LogInjection.ql +++ b/go/ql/src/Security/CWE-117/LogInjection.ql @@ -4,7 +4,7 @@ * insertion of forged log entries by a malicious user. * @kind path-problem * @problem.severity error - * @security-severity 7.8 + * @security-severity 6.1 * @precision medium * @id go/log-injection * @tags security diff --git a/java/ql/src/Security/CWE/CWE-117/LogInjection.ql b/java/ql/src/Security/CWE/CWE-117/LogInjection.ql index dd4ffb6a10a..f3efb578f76 100644 --- a/java/ql/src/Security/CWE/CWE-117/LogInjection.ql +++ b/java/ql/src/Security/CWE/CWE-117/LogInjection.ql @@ -4,7 +4,7 @@ * insertion of forged log entries by malicious users. * @kind path-problem * @problem.severity error - * @security-severity 7.8 + * @security-severity 6.1 * @precision medium * @id java/log-injection * @tags security diff --git a/python/ql/src/Security/CWE-117/LogInjection.ql b/python/ql/src/Security/CWE-117/LogInjection.ql index f1b72faaccb..64b29e142e0 100644 --- a/python/ql/src/Security/CWE-117/LogInjection.ql +++ b/python/ql/src/Security/CWE-117/LogInjection.ql @@ -4,7 +4,7 @@ * insertion of forged log entries by a malicious user. * @kind path-problem * @problem.severity error - * @security-severity 7.8 + * @security-severity 6.1 * @precision medium * @id py/log-injection * @tags security diff --git a/ruby/ql/src/queries/security/cwe-117/LogInjection.ql b/ruby/ql/src/queries/security/cwe-117/LogInjection.ql index 624c2f90e64..50a4a718e32 100644 --- a/ruby/ql/src/queries/security/cwe-117/LogInjection.ql +++ b/ruby/ql/src/queries/security/cwe-117/LogInjection.ql @@ -4,7 +4,7 @@ * insertion of forged log entries by a malicious user. * @kind path-problem * @problem.severity error - * @security-severity 7.8 + * @security-severity 6.1 * @precision medium * @id rb/log-injection * @tags security From 52809133f56a3ebf5a1bd1aae259fb024477492a Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 13 Mar 2026 11:10:43 +0000 Subject: [PATCH 028/185] Add change notes --- .../2026-03-13-adjust-xss-and-log-injection-severity.md | 4 ++++ .../2026-03-13-adjust-xss-and-log-injection-severity.md | 5 +++++ .../2026-03-13-adjust-xss-and-log-injection-severity.md | 5 +++++ .../2026-03-13-adjust-xss-and-log-injection-severity.md | 5 +++++ .../2026-03-13-adjust-xss-and-log-injection-severity.md | 5 +++++ .../2026-03-13-adjust-xss-and-log-injection-severity.md | 5 +++++ .../2026-03-13-adjust-xss-and-log-injection-severity.md | 4 ++++ .../2026-03-13-adjust-xss-and-log-injection-severity.md | 4 ++++ 8 files changed, 37 insertions(+) create mode 100644 cpp/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md create mode 100644 csharp/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md create mode 100644 go/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md create mode 100644 java/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md create mode 100644 python/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md create mode 100644 ruby/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md create mode 100644 rust/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md create mode 100644 swift/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md diff --git a/cpp/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md b/cpp/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md new file mode 100644 index 00000000000..0810e9c49ba --- /dev/null +++ b/cpp/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md @@ -0,0 +1,4 @@ +--- +category: queryMetadata +--- +* The `@security-severity` metadata of `cpp/cgi-xss` has been increased from 6.1 (medium) to 7.8 (high). diff --git a/csharp/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md b/csharp/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md new file mode 100644 index 00000000000..c317194bc25 --- /dev/null +++ b/csharp/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md @@ -0,0 +1,5 @@ +--- +category: queryMetadata +--- +* The `@security-severity` metadata of `cs/log-forging` has been reduced from 7.8 (high) to 6.1 (medium). +* The `@security-severity` metadata of `cs/web/xss` has been increased from 6.1 (medium) to 7.8 (high). diff --git a/go/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md b/go/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md new file mode 100644 index 00000000000..45320bcd719 --- /dev/null +++ b/go/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md @@ -0,0 +1,5 @@ +--- +category: queryMetadata +--- +* The `@security-severity` metadata of `go/log-injection` has been reduced from 7.8 (high) to 6.1 (medium). +* The `@security-severity` metadata of `go/html-template-escaping-bypass-xss`, `go/reflected-xss` and `go/stored-xss` has been increased from 6.1 (medium) to 7.8 (high). diff --git a/java/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md b/java/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md new file mode 100644 index 00000000000..fa1288af16e --- /dev/null +++ b/java/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md @@ -0,0 +1,5 @@ +--- +category: queryMetadata +--- +* The `@security-severity` metadata of `java/log-injection` has been reduced from 7.8 (high) to 6.1 (medium). +* The `@security-severity` metadata of `java/android/webview-addjavascriptinterface`, `java/android/websettings-javascript-enabled` and `java/xss` has been increased from 6.1 (medium) to 7.8 (high). diff --git a/python/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md b/python/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md new file mode 100644 index 00000000000..4278d0171e3 --- /dev/null +++ b/python/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md @@ -0,0 +1,5 @@ +--- +category: queryMetadata +--- +* The `@security-severity` metadata of `py/log-injection` has been reduced from 7.8 (high) to 6.1 (medium). +* The `@security-severity` metadata of `py/jinja2/autoescape-false` and `py/reflective-xss` has been increased from 6.1 (medium) to 7.8 (high). diff --git a/ruby/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md b/ruby/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md new file mode 100644 index 00000000000..459c2ce7f91 --- /dev/null +++ b/ruby/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md @@ -0,0 +1,5 @@ +--- +category: queryMetadata +--- +* The `@security-severity` metadata of `rb/log-injection` has been reduced from 7.8 (high) to 6.1 (medium). +* The `@security-severity` metadata of `rb/reflected-xss`, `rb/stored-xss` and `rb/html-constructed-from-input` has been increased from 6.1 (medium) to 7.8 (high). diff --git a/rust/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md b/rust/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md new file mode 100644 index 00000000000..7c24d4147a5 --- /dev/null +++ b/rust/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md @@ -0,0 +1,4 @@ +--- +category: queryMetadata +--- +* The `@security-severity` metadata of `rust/xss` has been increased from 6.1 (medium) to 7.8 (high). diff --git a/swift/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md b/swift/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md new file mode 100644 index 00000000000..a46302ed146 --- /dev/null +++ b/swift/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md @@ -0,0 +1,4 @@ +--- +category: queryMetadata +--- +* The `@security-severity` metadata of `swift/unsafe-webview-fetch` has been increased from 6.1 (medium) to 7.8 (high). From 7094fb07a463d9411329f8f6cabca9b628cf0e12 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 13 Mar 2026 14:31:08 +0100 Subject: [PATCH 029/185] Rust: Replace `FunctionPosition` with `FunctionPositionAdj` --- .../typeinference/FunctionOverloading.qll | 3 +- .../internal/typeinference/FunctionType.qll | 219 ++---- .../internal/typeinference/TypeInference.qll | 718 +++++++++--------- 3 files changed, 413 insertions(+), 527 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionOverloading.qll b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionOverloading.qll index 0f65d21dcf7..6e4cc6e2c2e 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionOverloading.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionOverloading.qll @@ -124,7 +124,8 @@ private predicate functionResolutionDependsOnArgumentCand( implHasSibling(impl, trait) and traitTypeParameterOccurrence(trait, _, functionName, pos, path, traitTp) and f = impl.getASuccessor(functionName) and - not pos.isSelfOrTypeQualifier() + not pos.isTypeQualifier() and + not (f instanceof Method and pos.asPosition() = 0) ) } diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll index 841f165d2c3..37df796a7be 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll @@ -5,112 +5,49 @@ private import TypeAbstraction private import TypeMention private import TypeInference -private signature predicate includeSelfSig(); - -// We construct `FunctionPosition` and `FunctionPositionAdj` using two different underlying -// `newtype`s in order to prevent unintended mixing of the two -private module MkFunctionPosition { - private newtype TFunctionPosition = - TArgumentFunctionPosition(ArgumentPosition pos) { - if pos.isSelf() then includeSelf() else any() - } or - TReturnFunctionPosition() - - class FunctionPosition extends TFunctionPosition { - int asPosition() { result = this.asArgumentPosition().asPosition() } - - predicate isPosition() { exists(this.asPosition()) } - - ArgumentPosition asArgumentPosition() { this = TArgumentFunctionPosition(result) } - - predicate isTypeQualifier() { this.asArgumentPosition().isTypeQualifier() } - - predicate isReturn() { this = TReturnFunctionPosition() } - - TypeMention getTypeMention(Function f) { - result = f.getParam(this.asPosition()).getTypeRepr() - or - this.isReturn() and - result = getReturnTypeMention(f) - } - - string toString() { - result = this.asArgumentPosition().toString() - or - this.isReturn() and - result = "(return)" - } - } -} - -private predicate any_() { any() } +private newtype TFunctionPosition = + TArgumentFunctionPosition(ArgumentPosition pos) { not pos.isSelf() } or + TReturnFunctionPosition() /** - * A position of a type related to a function. + * A function-call adjusted position of a type related to a function. * - * Either `self`, `return`, or a positional parameter index. + * Either `return` or a positional parameter index, where `self` is translated + * to position `0` and subsequent positional parameters at index `i` are + * translated to position `i + 1`. */ -final class FunctionPosition extends MkFunctionPosition::FunctionPosition { - predicate isSelf() { this.asArgumentPosition().isSelf() } +class FunctionPosition extends TFunctionPosition { + int asPosition() { result = this.asArgumentPosition().asPosition() } - predicate isSelfOrTypeQualifier() { this.isSelf() or this.isTypeQualifier() } + predicate isPosition() { exists(this.asPosition()) } - override TypeMention getTypeMention(Function f) { - result = super.getTypeMention(f) + ArgumentPosition asArgumentPosition() { this = TArgumentFunctionPosition(result) } + + predicate isTypeQualifier() { this.asArgumentPosition().isTypeQualifier() } + + predicate isReturn() { this = TReturnFunctionPosition() } + + TypeMention getTypeMention(Function f) { + ( + if f instanceof Method + then + result = f.getParam(this.asPosition() - 1).getTypeRepr() + or + result = getSelfParamTypeMention(f.getSelfParam()) and + this.asPosition() = 0 + else result = f.getParam(this.asPosition()).getTypeRepr() + ) or - this.isSelf() and - result = getSelfParamTypeMention(f.getSelfParam()) + this.isReturn() and + result = getReturnTypeMention(f) } - /** - * Gets the corresponding position when function call syntax is used, assuming - * this position is for a method. - */ - pragma[nomagic] - FunctionPositionAdj getFunctionCallAdjusted() { - this.isReturn() and result.isReturn() + string toString() { + result = this.asArgumentPosition().toString() or - this.isTypeQualifier() and - result.isTypeQualifier() - or - this.isSelf() and result.asPosition() = 0 - or - result.asPosition() = this.asPosition() + 1 + this.isReturn() and + result = "(return)" } - - /** - * Gets the corresponding position when function call syntax is used, assuming - * this position is _not_ for a method. - */ - pragma[nomagic] - FunctionPositionAdj asAdjusted() { - this.isReturn() and result.isReturn() - or - this.isTypeQualifier() and - result.isTypeQualifier() - or - result.asPosition() = this.asPosition() - } - - /** - * Gets the corresponding position when `f` is invoked via function call - * syntax. - */ - bindingset[f] - FunctionPositionAdj getFunctionCallAdjusted(Function f) { - if f.hasSelfParam() then result = this.getFunctionCallAdjusted() else result = this.asAdjusted() - } -} - -private predicate none_() { none() } - -/** - * A function-call adjust position of a type related to a function. - * - * Either `return` or a positional parameter index. - */ -final class FunctionPositionAdj extends MkFunctionPosition::FunctionPosition { - FunctionPosition asNonAdjusted() { this = result.asAdjusted() } } /** @@ -127,20 +64,6 @@ module FunctionPositionMatchingInput { } } -/** - * A helper module for implementing `Matching(WithEnvironment)InputSig` with - * `DeclarationPosition = AccessPosition = FunctionPositionAdj`. - */ -module FunctionPositionAdjMatchingInput { - class DeclarationPosition = FunctionPositionAdj; - - class AccessPosition = DeclarationPosition; - - predicate accessDeclarationPositionMatch(AccessPosition apos, DeclarationPosition dpos) { - apos = dpos - } -} - private newtype TAssocFunctionType = /** An associated function `f` in `parent` should be specialized for `i` at `pos`. */ MkAssocFunctionType( @@ -378,10 +301,10 @@ signature module ArgsAreInstantiationsOfInputSig { * `tp` is a type parameter of the trait being implemented by `f` or the trait to which * `f` belongs. * - * `posAdj` is one of the function-call adjusted positions in `f` in which the relevant + * `pos` is one of the function-call adjusted positions in `f` in which the relevant * type occurs. */ - predicate toCheck(ImplOrTraitItemNode i, Function f, TypeParameter tp, FunctionPositionAdj posAdj); + predicate toCheck(ImplOrTraitItemNode i, Function f, TypeParameter tp, FunctionPosition pos); /** A call whose argument types are to be checked. */ class Call { @@ -389,7 +312,7 @@ signature module ArgsAreInstantiationsOfInputSig { Location getLocation(); - Type getArgType(FunctionPositionAdj posAdj, TypePath path); + Type getArgType(FunctionPosition pos, TypePath path); predicate hasTargetCand(ImplOrTraitItemNode i, Function f); } @@ -403,9 +326,9 @@ signature module ArgsAreInstantiationsOfInputSig { module ArgsAreInstantiationsOf { pragma[nomagic] private predicate toCheckRanked( - ImplOrTraitItemNode i, Function f, TypeParameter tp, FunctionPositionAdj posAdj, int rnk + ImplOrTraitItemNode i, Function f, TypeParameter tp, FunctionPosition pos, int rnk ) { - Input::toCheck(i, f, tp, posAdj) and + Input::toCheck(i, f, tp, pos) and tp = rank[rnk + 1](TypeParameter tp0, int j | Input::toCheck(i, f, tp0, _) and @@ -417,59 +340,53 @@ module ArgsAreInstantiationsOf { pragma[nomagic] private predicate toCheck( - ImplOrTraitItemNode i, Function f, TypeParameter tp, FunctionPositionAdj posAdj, - AssocFunctionType t + ImplOrTraitItemNode i, Function f, TypeParameter tp, FunctionPosition pos, AssocFunctionType t ) { - exists(FunctionPosition pos | - Input::toCheck(i, f, tp, posAdj) and - t.appliesTo(f, i, pos) and - posAdj = pos.getFunctionCallAdjusted(f) - ) + Input::toCheck(i, f, tp, pos) and + t.appliesTo(f, i, pos) } - private newtype TCallAndPosAdj = - MkCallAndPosAdj(Input::Call call, FunctionPositionAdj posAdj) { - exists(call.getArgType(posAdj, _)) - } + private newtype TCallAndPos = + MkCallAndPos(Input::Call call, FunctionPosition pos) { exists(call.getArgType(pos, _)) } /** A call tagged with a function-call adjusted position. */ - private class CallAndPosAdj extends MkCallAndPosAdj { + private class CallAndPos extends MkCallAndPos { Input::Call call; - FunctionPositionAdj posAdj; + FunctionPosition pos; - CallAndPosAdj() { this = MkCallAndPosAdj(call, posAdj) } + CallAndPos() { this = MkCallAndPos(call, pos) } Input::Call getCall() { result = call } - FunctionPositionAdj getPosAdj() { result = posAdj } + FunctionPosition getPos() { result = pos } Location getLocation() { result = call.getLocation() } - Type getTypeAt(TypePath path) { result = call.getArgType(posAdj, path) } + Type getTypeAt(TypePath path) { result = call.getArgType(pos, path) } - string toString() { result = call.toString() + " [arg " + posAdj + "]" } + string toString() { result = call.toString() + " [arg " + pos + "]" } } pragma[nomagic] private predicate potentialInstantiationOf0( - CallAndPosAdj cp, Input::Call call, TypeParameter tp, FunctionPositionAdj posAdj, Function f, + CallAndPos cp, Input::Call call, TypeParameter tp, FunctionPosition pos, Function f, TypeAbstraction abs, AssocFunctionType constraint ) { - cp = MkCallAndPosAdj(call, pragma[only_bind_into](posAdj)) and + cp = MkCallAndPos(call, pragma[only_bind_into](pos)) and call.hasTargetCand(abs, f) and - toCheck(abs, f, tp, pragma[only_bind_into](posAdj), constraint) + toCheck(abs, f, tp, pragma[only_bind_into](pos), constraint) } private module ArgIsInstantiationOfToIndexInput implements - IsInstantiationOfInputSig + IsInstantiationOfInputSig { pragma[nomagic] predicate potentialInstantiationOf( - CallAndPosAdj cp, TypeAbstraction abs, AssocFunctionType constraint + CallAndPos cp, TypeAbstraction abs, AssocFunctionType constraint ) { - exists(Input::Call call, TypeParameter tp, FunctionPositionAdj posAdj, int rnk, Function f | - potentialInstantiationOf0(cp, call, tp, posAdj, f, abs, constraint) and - toCheckRanked(abs, f, tp, posAdj, rnk) + exists(Input::Call call, TypeParameter tp, FunctionPosition pos, int rnk, Function f | + potentialInstantiationOf0(cp, call, tp, pos, f, abs, constraint) and + toCheckRanked(abs, f, tp, pos, rnk) | rnk = 0 or @@ -481,15 +398,15 @@ module ArgsAreInstantiationsOf { } private module ArgIsInstantiationOfToIndex = - ArgIsInstantiationOf; + ArgIsInstantiationOf; pragma[nomagic] private predicate argIsInstantiationOf( Input::Call call, ImplOrTraitItemNode i, Function f, int rnk ) { - exists(FunctionPositionAdj posAdj | - ArgIsInstantiationOfToIndex::argIsInstantiationOf(MkCallAndPosAdj(call, posAdj), i, _) and - toCheckRanked(i, f, _, posAdj, rnk) + exists(FunctionPosition pos | + ArgIsInstantiationOfToIndex::argIsInstantiationOf(MkCallAndPos(call, pos), i, _) and + toCheckRanked(i, f, _, pos, rnk) ) } @@ -521,11 +438,11 @@ module ArgsAreInstantiationsOf { } private module ArgsAreNotInstantiationOfInput implements - IsInstantiationOfInputSig + IsInstantiationOfInputSig { pragma[nomagic] predicate potentialInstantiationOf( - CallAndPosAdj cp, TypeAbstraction abs, AssocFunctionType constraint + CallAndPos cp, TypeAbstraction abs, AssocFunctionType constraint ) { potentialInstantiationOf0(cp, _, _, _, _, abs, constraint) } @@ -534,13 +451,13 @@ module ArgsAreInstantiationsOf { } private module ArgsAreNotInstantiationOf = - ArgIsInstantiationOf; + ArgIsInstantiationOf; pragma[nomagic] private predicate argsAreNotInstantiationsOf0( - Input::Call call, FunctionPositionAdj posAdj, ImplOrTraitItemNode i + Input::Call call, FunctionPosition pos, ImplOrTraitItemNode i ) { - ArgsAreNotInstantiationOf::argIsNotInstantiationOf(MkCallAndPosAdj(call, posAdj), i, _, _) + ArgsAreNotInstantiationOf::argIsNotInstantiationOf(MkCallAndPos(call, pos), i, _, _) } /** @@ -551,10 +468,10 @@ module ArgsAreInstantiationsOf { */ pragma[nomagic] predicate argsAreNotInstantiationsOf(Input::Call call, ImplOrTraitItemNode i, Function f) { - exists(FunctionPositionAdj posAdj | - argsAreNotInstantiationsOf0(call, posAdj, i) and + exists(FunctionPosition pos | + argsAreNotInstantiationsOf0(call, pos, i) and call.hasTargetCand(i, f) and - Input::toCheck(i, f, _, posAdj) + Input::toCheck(i, f, _, pos) ) } } diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll index 295b5b84b2c..2720f9b25f3 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll @@ -298,17 +298,14 @@ private class FunctionDeclaration extends Function { } pragma[nomagic] - Type getParameterType(ImplOrTraitItemNodeOption i, FunctionPositionAdj posAdj, TypePath path) { + Type getParameterType(ImplOrTraitItemNodeOption i, FunctionPosition pos, TypePath path) { i = parent and ( - exists(FunctionPosition pos | - not pos.isReturn() and - result = getAssocFunctionTypeAt(this, i.asSome(), pos, path) and - posAdj = pos.getFunctionCallAdjusted(this) - ) + not pos.isReturn() and + result = getAssocFunctionTypeAt(this, i.asSome(), pos, path) or i.isNone() and - result = this.getParam(posAdj.asPosition()).getTypeRepr().(TypeMention).getTypeAt(path) + result = this.getParam(pos.asPosition()).getTypeRepr().(TypeMention).getTypeAt(path) ) } @@ -1035,9 +1032,12 @@ private module StructExprMatchingInput implements MatchingInputSig { private module StructExprMatching = Matching; pragma[nomagic] -private Type inferStructExprType0(AstNode n, FunctionPosition pos, TypePath path) { +private Type inferStructExprType0( + AstNode n, FunctionPosition pos, boolean hasReceiver, TypePath path +) { exists(StructExprMatchingInput::Access a, StructExprMatchingInput::AccessPosition apos | n = a.getNodeAt(apos) and + hasReceiver = false and if apos.isStructPos() then pos.isReturn() else pos.asPosition() = 0 // the actual position doesn't matter, as long as it is positional | result = StructExprMatching::inferAccessType(a, apos, path) @@ -1052,7 +1052,7 @@ private Type inferStructExprType0(AstNode n, FunctionPosition pos, TypePath path * a field expression of a struct expression. */ private predicate inferStructExprType = - ContextTyping::CheckContextTyping::check/2; + ContextTyping::CheckContextTyping::check/2; pragma[nomagic] private TupleType inferTupleRootType(AstNode n) { @@ -1240,7 +1240,9 @@ private module ContextTyping { pragma[nomagic] private predicate hasUnknownType(AstNode n) { hasUnknownTypeAt(n, _) } - signature Type inferCallTypeSig(AstNode n, FunctionPosition pos, TypePath path); + signature Type inferCallTypeSig( + AstNode n, FunctionPosition pos, boolean hasReceiver, TypePath path + ); /** * Given a predicate `inferCallType` for inferring the type of a call at a given @@ -1248,33 +1250,35 @@ private module ContextTyping { * predicate and checks that types are only propagated into arguments when they * are context-typed. */ - module CheckContextTyping { + module CheckContextTyping { pragma[nomagic] - private Type inferCallNonReturnType(AstNode n, FunctionPosition pos, TypePath path) { - result = inferCallType(n, pos, path) and + private Type inferCallNonReturnType( + AstNode n, FunctionPosition pos, boolean hasReceiver, TypePath path + ) { + result = inferCallType(n, pos, hasReceiver, path) and not pos.isReturn() } pragma[nomagic] private Type inferCallNonReturnType( - AstNode n, FunctionPosition pos, TypePath prefix, TypePath path + AstNode n, FunctionPosition pos, boolean hasReceiver, TypePath prefix, TypePath path ) { - result = inferCallNonReturnType(n, pos, path) and + result = inferCallNonReturnType(n, pos, hasReceiver, path) and hasUnknownType(n) and prefix = path.getAPrefix() } pragma[nomagic] Type check(AstNode n, TypePath path) { - result = inferCallType(n, any(FunctionPosition pos | pos.isReturn()), path) + result = inferCallType(n, any(FunctionPosition pos | pos.isReturn()), _, path) or - exists(FunctionPosition pos, TypePath prefix | - result = inferCallNonReturnType(n, pos, prefix, path) and + exists(FunctionPosition pos, boolean hasReceiver, TypePath prefix | + result = inferCallNonReturnType(n, pos, hasReceiver, prefix, path) and hasUnknownTypeAt(n, prefix) | // Never propagate type information directly into the receiver, since its type // must already have been known in order to resolve the call - if pos.isSelf() then not prefix.isEmpty() else any() + if pos.asPosition() = 0 and hasReceiver = true then not prefix.isEmpty() else any() ) } } @@ -1372,19 +1376,16 @@ private class BorrowKind extends TBorrowKind { private module AssocFunctionResolution { /** * Holds if function `f` with the name `name` and the arity `arity` exists in - * `i`, and the type at function-call adjusted position `posAdj` is `t`. + * `i`, and the type at function-call adjusted position `pos` is `t`. */ pragma[nomagic] private predicate assocFunctionInfo( - Function f, string name, int arity, ImplOrTraitItemNode i, FunctionPositionAdj posAdj, + Function f, string name, int arity, ImplOrTraitItemNode i, FunctionPosition pos, AssocFunctionType t ) { - exists(FunctionPosition pos | - f = i.getASuccessor(name) and - arity = f.getNumberOfParamsInclSelf() and - t.appliesTo(f, i, pos) and - posAdj = pos.getFunctionCallAdjusted(f) - ) + f = i.getASuccessor(name) and + arity = f.getNumberOfParamsInclSelf() and + t.appliesTo(f, i, pos) } /** @@ -1419,9 +1420,9 @@ private module AssocFunctionResolution { /** * Holds if function `f` with the name `name` and the arity `arity` exists in - * `i`, and the type at function-call adjusted position `selfPosAdj` is `selfType`. + * `i`, and the type at function-call adjusted position `selfPos` is `selfType`. * - * `selfPosAdj` is a position relevant for call resolution: either a position + * `selfPos` is a position relevant for call resolution: either a position * corresponding to the `self` parameter of `f` (if present); a type qualifier * position; or a position where the implicit `Self` type parameter of some trait * is mentioned in some non-method function `f_trait`, and either `f = f_trait` @@ -1440,28 +1441,26 @@ private module AssocFunctionResolution { */ pragma[nomagic] private predicate assocFunctionInfo( - Function f, string name, int arity, FunctionPositionAdj selfPosAdj, ImplOrTraitItemNode i, + Function f, string name, int arity, FunctionPosition selfPos, ImplOrTraitItemNode i, AssocFunctionType selfType, TypePath strippedTypePath, Type strippedType, TypeOption implType, TypeOption trait, boolean isMethod ) { - assocFunctionInfo(f, name, arity, i, selfPosAdj, selfType) and + assocFunctionInfo(f, name, arity, i, selfPos, selfType) and strippedType = selfType.getTypeAt(strippedTypePath) and ( isComplexRootStripped(strippedTypePath, strippedType) or - selfPosAdj.isTypeQualifier() and strippedTypePath.isEmpty() + selfPos.isTypeQualifier() and strippedTypePath.isEmpty() ) and ( f instanceof Method and - selfPosAdj.asPosition() = 0 + selfPos.asPosition() = 0 or - selfPosAdj.isTypeQualifier() + selfPos.isTypeQualifier() or - exists(FunctionPosition pos | selfPosAdj = pos.asAdjusted() | - traitSelfTypeParameterOccurrence(i, f, pos) - or - traitImplSelfTypeParameterOccurrence(i, f, pos) - ) + traitSelfTypeParameterOccurrence(i, f, selfPos) + or + traitImplSelfTypeParameterOccurrence(i, f, selfPos) ) and ( implType.asSome() = resolveImplSelfTypeAt(i, TypePath::nil()) @@ -1484,9 +1483,9 @@ private module AssocFunctionResolution { /** * Holds if function `f` with the name `name` and the arity `arity` exists in * blanket (like) implementation `impl`, and the type at function-call adjusted - * position `selfPosAdj` is `selfType`. + * position `selfPos` is `selfType`. * - * `selfPosAdj` is a position relevant for call resolution: either a position + * `selfPos` is a position relevant for call resolution: either a position * corresponding to the `self` parameter of `f` (if present); a type qualifier * position; or a position where the implicit `Self` type parameter of some trait * is mentioned in some non-method function `f_trait`, and `f` implements `f_trait`. @@ -1503,11 +1502,11 @@ private module AssocFunctionResolution { pragma[nomagic] private predicate assocFunctionInfoBlanketLike( Function f, string name, int arity, ImplItemNode impl, TypeOption implType, TypeOption trait, - FunctionPositionAdj selfPosAdj, AssocFunctionType selfType, TypePath blanketPath, + FunctionPosition selfPos, AssocFunctionType selfType, TypePath blanketPath, TypeParam blanketTypeParam, boolean isMethod ) { exists(TypePath blanketSelfPath | - assocFunctionInfo(f, name, arity, selfPosAdj, impl, selfType, _, _, implType, trait, isMethod) and + assocFunctionInfo(f, name, arity, selfPos, impl, selfType, _, _, implType, trait, isMethod) and TTypeParamTypeParameter(blanketTypeParam) = selfType.getTypeAt(blanketPath) and blanketPath = any(string s) + blanketSelfPath and BlanketImplementation::isBlanketLike(impl, blanketSelfPath, blanketTypeParam) @@ -1579,12 +1578,12 @@ private module AssocFunctionResolution { pragma[nomagic] private predicate assocFunctionInfoNonBlanketLikeCheck( - Function f, string name, int arity, FunctionPositionAdj selfPosAdj, ImplOrTraitItemNode i, + Function f, string name, int arity, FunctionPosition selfPos, ImplOrTraitItemNode i, AssocFunctionType selfType, TypePath strippedTypePath, Type strippedType, TypeOption typeQualifier, TypeOption traitQualifier, boolean hasReceiver ) { exists(TypeOption implType, TypeOption trait, boolean isMethod | - assocFunctionInfo(f, name, arity, selfPosAdj, i, selfType, strippedTypePath, strippedType, + assocFunctionInfo(f, name, arity, selfPos, i, selfType, strippedTypePath, strippedType, implType, trait, isMethod) and not BlanketImplementation::isBlanketLike(i, _, _) and callCheck(implType, trait, isMethod, typeQualifier, traitQualifier, hasReceiver) @@ -1593,17 +1592,17 @@ private module AssocFunctionResolution { pragma[nomagic] private predicate assocFunctionInfoNonBlanketLikeTypeParamCheck( - Function f, string name, int arity, FunctionPositionAdj selfPosAdj, ImplOrTraitItemNode i, + Function f, string name, int arity, FunctionPosition selfPos, ImplOrTraitItemNode i, AssocFunctionType selfType, TypePath strippedTypePath, TypeOption typeQualifier, TypeOption traitQualifier, boolean hasReceiver ) { - assocFunctionInfoNonBlanketLikeCheck(f, name, arity, selfPosAdj, i, selfType, strippedTypePath, + assocFunctionInfoNonBlanketLikeCheck(f, name, arity, selfPos, i, selfType, strippedTypePath, TTypeParamTypeParameter(_), typeQualifier, traitQualifier, hasReceiver) } /** * Holds if call `afc` may target function `f` in `i` with type `selfType` at - * function-call adjusted position `selfPosAdj`. + * function-call adjusted position `selfPos`. * * `strippedTypePath` points to the type `strippedType` inside `selfType`, * which is the (possibly complex-stripped) root type of `selfType`. @@ -1611,7 +1610,7 @@ private module AssocFunctionResolution { bindingset[afc, strippedTypePath, strippedType] pragma[inline_late] private predicate nonBlanketLikeCandidate( - AssocFunctionCall afc, Function f, FunctionPositionAdj selfPosAdj, ImplOrTraitItemNode i, + AssocFunctionCall afc, Function f, FunctionPosition selfPos, ImplOrTraitItemNode i, AssocFunctionType selfType, TypePath strippedTypePath, Type strippedType ) { exists( @@ -1623,10 +1622,10 @@ private module AssocFunctionResolution { then callVisibleImplTraitCandidate(afc, i) else any() | - assocFunctionInfoNonBlanketLikeCheck(f, name, arity, selfPosAdj, i, selfType, - strippedTypePath, strippedType, typeQualifier, traitQualifier, hasReceiver) + assocFunctionInfoNonBlanketLikeCheck(f, name, arity, selfPos, i, selfType, strippedTypePath, + strippedType, typeQualifier, traitQualifier, hasReceiver) or - assocFunctionInfoNonBlanketLikeTypeParamCheck(f, name, arity, selfPosAdj, i, selfType, + assocFunctionInfoNonBlanketLikeTypeParamCheck(f, name, arity, selfPos, i, selfType, strippedTypePath, typeQualifier, traitQualifier, hasReceiver) ) } @@ -1634,12 +1633,12 @@ private module AssocFunctionResolution { bindingset[name, arity, typeQualifier, traitQualifier, hasReceiver] pragma[inline_late] private predicate assocFunctionInfoBlanketLikeCheck( - Function f, string name, int arity, FunctionPositionAdj selfPosAdj, ImplItemNode impl, + Function f, string name, int arity, FunctionPosition selfPos, ImplItemNode impl, AssocFunctionType selfType, TypePath blanketPath, TypeParam blanketTypeParam, TypeOption typeQualifier, TypeOption traitQualifier, boolean hasReceiver ) { exists(TypeOption implType, TypeOption trait, boolean isMethod | - assocFunctionInfoBlanketLike(f, name, arity, impl, implType, trait, selfPosAdj, selfType, + assocFunctionInfoBlanketLike(f, name, arity, impl, implType, trait, selfPos, selfType, blanketPath, blanketTypeParam, isMethod) and callTraitQualifierAndReceiverCheck(trait, isMethod, traitQualifier, hasReceiver) and if impl.isBlanketImplementation() @@ -1650,7 +1649,7 @@ private module AssocFunctionResolution { /** * Holds if call `afc` may target function `f` in blanket (like) implementation - * `impl` with type `selfType` at function-call adjusted position `selfPosAdj`. + * `impl` with type `selfType` at function-call adjusted position `selfPos`. * * `blanketPath` points to the type `blanketTypeParam` inside `selfType`, which * is the type parameter used in the blanket implementation. @@ -1658,7 +1657,7 @@ private module AssocFunctionResolution { bindingset[afc] pragma[inline_late] private predicate blanketLikeCandidate( - AssocFunctionCall afc, Function f, FunctionPositionAdj selfPosAdj, ImplItemNode impl, + AssocFunctionCall afc, Function f, FunctionPosition selfPos, ImplItemNode impl, AssocFunctionType self, TypePath blanketPath, TypeParam blanketTypeParam ) { exists( @@ -1666,7 +1665,7 @@ private module AssocFunctionResolution { boolean hasReceiver | afc.hasSyntacticInfo(name, arity, typeQualifier, traitQualifier, hasReceiver) and - assocFunctionInfoBlanketLikeCheck(f, name, arity, selfPosAdj, impl, self, blanketPath, + assocFunctionInfoBlanketLikeCheck(f, name, arity, selfPos, impl, self, blanketPath, blanketTypeParam, typeQualifier, traitQualifier, hasReceiver) | if not afc.hasATrait() then callVisibleImplTraitCandidate(afc, impl) else any() @@ -1702,19 +1701,10 @@ private module AssocFunctionResolution { abstract Expr getNonReturnNodeAt(FunctionPosition pos); - FunctionPositionAdj getFunctionCallAdjustedPosition(FunctionPosition pos) { - if this.hasReceiver() - then result = pos.getFunctionCallAdjusted() - else result = pos.asAdjusted() - } - - AstNode getNodeAt(FunctionPositionAdj posAdj) { - exists(FunctionPosition pos | - result = this.getNonReturnNodeAt(pos) and - posAdj = this.getFunctionCallAdjustedPosition(pos) - ) + AstNode getNodeAt(FunctionPosition pos) { + result = this.getNonReturnNodeAt(pos) or - result = this and posAdj.isReturn() + result = this and pos.isReturn() } /** Holds if this call has a receiver and hence must target a method. */ @@ -1766,57 +1756,54 @@ private module AssocFunctionResolution { ) } - Type getTypeAt(FunctionPositionAdj posAdj, TypePath path) { - result = inferType(this.getNodeAt(posAdj), path) + Type getTypeAt(FunctionPosition pos, TypePath path) { + result = inferType(this.getNodeAt(pos), path) } /** - * Holds if `selfPosAdj` is a potentially relevant function-call adjusted position + * Holds if `selfPos` is a potentially relevant function-call adjusted position * for resolving this call. * * Only holds when we don't know for sure that the target is a method (in those * cases we rely on the receiver only). */ pragma[nomagic] - private predicate isRelevantSelfPosAdj(FunctionPositionAdj selfPosAdj) { + private predicate isRelevantSelfPos(FunctionPosition selfPos) { not this.hasReceiver() and exists(TypePath strippedTypePath, Type strippedType | - strippedType = substituteLookupTraits(this.getTypeAt(selfPosAdj, strippedTypePath)) and + strippedType = substituteLookupTraits(this.getTypeAt(selfPos, strippedTypePath)) and strippedType != TNeverType() and strippedType != TUnknownType() | - nonBlanketLikeCandidate(this, _, selfPosAdj, _, _, strippedTypePath, strippedType) + nonBlanketLikeCandidate(this, _, selfPos, _, _, strippedTypePath, strippedType) or - blanketLikeCandidate(this, _, selfPosAdj, _, _, strippedTypePath, _) + blanketLikeCandidate(this, _, selfPos, _, _, strippedTypePath, _) ) } - predicate hasReceiverAtPos(FunctionPositionAdj posAdj) { - this.hasReceiver() and posAdj.asPosition() = 0 - } + predicate hasReceiverAtPos(FunctionPosition pos) { this.hasReceiver() and pos.asPosition() = 0 } /** * Holds if the function 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 type at function-call - * adjusted position `selfPosAdj`. + * adjusted position `selfPos`. * * The types are incompatible because they disagree on a concrete type somewhere * inside `root`. */ pragma[nomagic] private predicate hasIncompatibleTarget( - ImplOrTraitItemNode i, FunctionPositionAdj selfPosAdj, DerefChain derefChain, - BorrowKind borrow, Type root + ImplOrTraitItemNode i, FunctionPosition selfPos, DerefChain derefChain, BorrowKind borrow, + Type root ) { exists(TypePath path | - SelfArgIsInstantiationOf::argIsNotInstantiationOf(this, i, selfPosAdj, derefChain, borrow, - path) and + SelfArgIsInstantiationOf::argIsNotInstantiationOf(this, i, selfPos, derefChain, borrow, path) and path.isCons(root.getATypeParameter(), _) ) or exists(AssocFunctionType selfType | - SelfArgIsInstantiationOf::argIsInstantiationOf(this, i, selfPosAdj, derefChain, borrow, + SelfArgIsInstantiationOf::argIsInstantiationOf(this, i, selfPos, derefChain, borrow, selfType) and OverloadedCallArgsAreInstantiationsOf::argsAreNotInstantiationsOf(this, i) and root = selfType.getTypeAt(TypePath::nil()) @@ -1827,43 +1814,41 @@ private module AssocFunctionResolution { * Holds if the function inside blanket-like implementation `impl` with matching name * and arity can be ruled out as a target of this call, either because the candidate * receiver type represented by `derefChain` and `borrow` is incompatible with the type - * at function-call adjusted position `selfPosAdj`, or because the blanket constraint + * at function-call adjusted position `selfPos`, or because the blanket constraint * is not satisfied. */ pragma[nomagic] private predicate hasIncompatibleBlanketLikeTarget( - ImplItemNode impl, FunctionPositionAdj selfPosAdj, DerefChain derefChain, BorrowKind borrow + ImplItemNode impl, FunctionPosition selfPos, DerefChain derefChain, BorrowKind borrow ) { SelfArgIsNotInstantiationOfBlanketLike::argIsNotInstantiationOf(MkAssocFunctionCallCand(this, - selfPosAdj, derefChain, borrow), impl, _, _) + selfPos, derefChain, borrow), impl, _, _) or ArgSatisfiesBlanketLikeConstraint::dissatisfiesBlanketConstraint(MkAssocFunctionCallCand(this, - selfPosAdj, derefChain, borrow), impl) + selfPos, derefChain, borrow), impl) } pragma[nomagic] private predicate hasNoInherentTargetCheck( - FunctionPositionAdj selfPosAdj, DerefChain derefChain, BorrowKind borrow + FunctionPosition selfPos, DerefChain derefChain, BorrowKind borrow ) { - MkAssocFunctionCallCand(this, selfPosAdj, derefChain, borrow) + MkAssocFunctionCallCand(this, selfPos, derefChain, borrow) .(AssocFunctionCallCand) .hasNoInherentTargetCheck() } pragma[nomagic] private predicate hasNoInherentTargetTypeQualifierCheck() { - exists(FunctionPositionAdj typeQualifierPos | + exists(FunctionPosition typeQualifierPos | typeQualifierPos.isTypeQualifier() and this.hasNoInherentTargetCheck(typeQualifierPos, DerefChain::nil(), TNoBorrowKind()) ) } pragma[nomagic] - predicate hasNoInherentTarget( - FunctionPositionAdj selfPosAdj, DerefChain derefChain, BorrowKind borrow - ) { - this.hasNoInherentTargetCheck(selfPosAdj, derefChain, borrow) and - if exists(this.getNonTypeParameterTypeQualifier()) and not selfPosAdj.isTypeQualifier() + predicate hasNoInherentTarget(FunctionPosition selfPos, DerefChain derefChain, BorrowKind borrow) { + this.hasNoInherentTargetCheck(selfPos, derefChain, borrow) and + if exists(this.getNonTypeParameterTypeQualifier()) and not selfPos.isTypeQualifier() then // If this call is of the form `Foo::bar(x)` and we are resolving with respect to the type // of `x`, then we additionally need to check that the type qualifier does not give rise @@ -1877,93 +1862,92 @@ private module AssocFunctionResolution { */ pragma[nomagic] Type getANonPseudoSelfTypeAt( - FunctionPositionAdj selfPosAdj, DerefChain derefChain, BorrowKind borrow, TypePath path + FunctionPosition selfPos, DerefChain derefChain, BorrowKind borrow, TypePath path ) { - result = this.getSelfTypeAt(selfPosAdj, derefChain, borrow, path) and + result = this.getSelfTypeAt(selfPos, derefChain, borrow, path) and result != TNeverType() and result != TUnknownType() } pragma[nomagic] private Type getComplexStrippedSelfType( - FunctionPositionAdj selfPosAdj, DerefChain derefChain, BorrowKind borrow, - TypePath strippedTypePath + FunctionPosition selfPos, DerefChain derefChain, BorrowKind borrow, TypePath strippedTypePath ) { - result = this.getANonPseudoSelfTypeAt(selfPosAdj, derefChain, borrow, strippedTypePath) and + result = this.getANonPseudoSelfTypeAt(selfPos, derefChain, borrow, strippedTypePath) and ( isComplexRootStripped(strippedTypePath, result) or - selfPosAdj.isTypeQualifier() and strippedTypePath.isEmpty() + selfPos.isTypeQualifier() and strippedTypePath.isEmpty() ) } bindingset[derefChain, borrow, strippedTypePath, strippedType] private predicate hasNoCompatibleNonBlanketLikeTargetCheck( - FunctionPositionAdj selfPosAdj, DerefChain derefChain, BorrowKind borrow, - TypePath strippedTypePath, Type strippedType + FunctionPosition selfPos, DerefChain derefChain, BorrowKind borrow, TypePath strippedTypePath, + Type strippedType ) { forall(ImplOrTraitItemNode i | - nonBlanketLikeCandidate(this, _, selfPosAdj, i, _, strippedTypePath, strippedType) + nonBlanketLikeCandidate(this, _, selfPos, i, _, strippedTypePath, strippedType) | - this.hasIncompatibleTarget(i, selfPosAdj, derefChain, borrow, strippedType) + this.hasIncompatibleTarget(i, selfPos, derefChain, borrow, strippedType) ) } bindingset[derefChain, borrow, strippedTypePath, strippedType] private predicate hasNoCompatibleTargetCheck( - FunctionPositionAdj selfPosAdj, DerefChain derefChain, BorrowKind borrow, - TypePath strippedTypePath, Type strippedType + FunctionPosition selfPos, DerefChain derefChain, BorrowKind borrow, TypePath strippedTypePath, + Type strippedType ) { - this.hasNoCompatibleNonBlanketLikeTargetCheck(selfPosAdj, derefChain, borrow, - strippedTypePath, strippedType) and - forall(ImplItemNode i | blanketLikeCandidate(this, _, selfPosAdj, i, _, _, _) | - this.hasIncompatibleBlanketLikeTarget(i, selfPosAdj, derefChain, borrow) + this.hasNoCompatibleNonBlanketLikeTargetCheck(selfPos, derefChain, borrow, strippedTypePath, + strippedType) and + forall(ImplItemNode i | blanketLikeCandidate(this, _, selfPos, i, _, _, _) | + this.hasIncompatibleBlanketLikeTarget(i, selfPos, derefChain, borrow) ) } bindingset[derefChain, borrow, strippedTypePath, strippedType] private predicate hasNoCompatibleNonBlanketTargetCheck( - FunctionPositionAdj selfPosAdj, DerefChain derefChain, BorrowKind borrow, - TypePath strippedTypePath, Type strippedType + FunctionPosition selfPos, DerefChain derefChain, BorrowKind borrow, TypePath strippedTypePath, + Type strippedType ) { - this.hasNoCompatibleNonBlanketLikeTargetCheck(selfPosAdj, derefChain, borrow, - strippedTypePath, strippedType) and + this.hasNoCompatibleNonBlanketLikeTargetCheck(selfPos, derefChain, borrow, strippedTypePath, + strippedType) and forall(ImplItemNode i | - blanketLikeCandidate(this, _, selfPosAdj, i, _, _, _) and + blanketLikeCandidate(this, _, selfPos, i, _, _, _) and not i.isBlanketImplementation() | - this.hasIncompatibleBlanketLikeTarget(i, selfPosAdj, derefChain, borrow) + this.hasIncompatibleBlanketLikeTarget(i, selfPos, derefChain, borrow) ) } // forex using recursion pragma[nomagic] private predicate hasNoCompatibleTargetNoBorrowToIndex( - FunctionPositionAdj selfPosAdj, DerefChain derefChain, TypePath strippedTypePath, - Type strippedType, int n + FunctionPosition selfPos, DerefChain derefChain, TypePath strippedTypePath, Type strippedType, + int n ) { this.supportsAutoDerefAndBorrow() and - this.hasReceiverAtPos(selfPosAdj) and + this.hasReceiverAtPos(selfPos) and strippedType = - this.getComplexStrippedSelfType(selfPosAdj, derefChain, TNoBorrowKind(), strippedTypePath) and + this.getComplexStrippedSelfType(selfPos, derefChain, TNoBorrowKind(), strippedTypePath) and n = -1 or - this.hasNoCompatibleTargetNoBorrowToIndex(selfPosAdj, derefChain, strippedTypePath, - strippedType, n - 1) and + this.hasNoCompatibleTargetNoBorrowToIndex(selfPos, derefChain, strippedTypePath, strippedType, + n - 1) and exists(Type t | t = getNthLookupType(strippedType, n) and - this.hasNoCompatibleTargetCheck(selfPosAdj, derefChain, TNoBorrowKind(), strippedTypePath, t) + this.hasNoCompatibleTargetCheck(selfPos, derefChain, TNoBorrowKind(), strippedTypePath, t) ) } /** * Holds if the candidate receiver type represented by `derefChain` does not - * have a matching call target at function-call adjusted position `selfPosAdj`. + * have a matching call target at function-call adjusted position `selfPos`. */ pragma[nomagic] - predicate hasNoCompatibleTargetNoBorrow(FunctionPositionAdj selfPosAdj, DerefChain derefChain) { + predicate hasNoCompatibleTargetNoBorrow(FunctionPosition selfPos, DerefChain derefChain) { exists(Type strippedType | - this.hasNoCompatibleTargetNoBorrowToIndex(selfPosAdj, derefChain, _, strippedType, + this.hasNoCompatibleTargetNoBorrowToIndex(selfPos, derefChain, _, strippedType, getLastLookupTypeIndex(strippedType)) ) } @@ -1971,44 +1955,44 @@ private module AssocFunctionResolution { // forex using recursion pragma[nomagic] private predicate hasNoCompatibleNonBlanketTargetNoBorrowToIndex( - FunctionPositionAdj selfPosAdj, DerefChain derefChain, TypePath strippedTypePath, - Type strippedType, int n + FunctionPosition selfPos, DerefChain derefChain, TypePath strippedTypePath, Type strippedType, + int n ) { ( this.supportsAutoDerefAndBorrow() and - this.hasReceiverAtPos(selfPosAdj) + this.hasReceiverAtPos(selfPos) or // needed for the `hasNoCompatibleNonBlanketTarget` check in // `ArgSatisfiesBlanketLikeConstraintInput::hasBlanketCandidate` exists(ImplItemNode i | derefChain.isEmpty() and - blanketLikeCandidate(this, _, selfPosAdj, i, _, _, _) and + blanketLikeCandidate(this, _, selfPos, i, _, _, _) and i.isBlanketImplementation() ) ) and strippedType = - this.getComplexStrippedSelfType(selfPosAdj, derefChain, TNoBorrowKind(), strippedTypePath) and + this.getComplexStrippedSelfType(selfPos, derefChain, TNoBorrowKind(), strippedTypePath) and n = -1 or - this.hasNoCompatibleNonBlanketTargetNoBorrowToIndex(selfPosAdj, derefChain, strippedTypePath, + this.hasNoCompatibleNonBlanketTargetNoBorrowToIndex(selfPos, derefChain, strippedTypePath, strippedType, n - 1) and exists(Type t | t = getNthLookupType(strippedType, n) and - this.hasNoCompatibleNonBlanketTargetCheck(selfPosAdj, derefChain, TNoBorrowKind(), + this.hasNoCompatibleNonBlanketTargetCheck(selfPos, derefChain, TNoBorrowKind(), strippedTypePath, t) ) } /** * Holds if the candidate receiver type represented by `derefChain` does not have - * a matching non-blanket call target at function-call adjusted position `selfPosAdj`. + * a matching non-blanket call target at function-call adjusted position `selfPos`. */ pragma[nomagic] predicate hasNoCompatibleNonBlanketTargetNoBorrow( - FunctionPositionAdj selfPosAdj, DerefChain derefChain + FunctionPosition selfPos, DerefChain derefChain ) { exists(Type strippedType | - this.hasNoCompatibleNonBlanketTargetNoBorrowToIndex(selfPosAdj, derefChain, _, strippedType, + this.hasNoCompatibleNonBlanketTargetNoBorrowToIndex(selfPos, derefChain, _, strippedType, getLastLookupTypeIndex(strippedType)) ) } @@ -2016,35 +2000,33 @@ private module AssocFunctionResolution { // forex using recursion pragma[nomagic] private predicate hasNoCompatibleTargetSharedBorrowToIndex( - FunctionPositionAdj selfPosAdj, DerefChain derefChain, TypePath strippedTypePath, - Type strippedType, int n + FunctionPosition selfPos, DerefChain derefChain, TypePath strippedTypePath, Type strippedType, + int n ) { - this.hasNoCompatibleTargetNoBorrow(selfPosAdj, derefChain) and + this.hasNoCompatibleTargetNoBorrow(selfPos, derefChain) and strippedType = - this.getComplexStrippedSelfType(selfPosAdj, derefChain, TSomeBorrowKind(false), + this.getComplexStrippedSelfType(selfPos, derefChain, TSomeBorrowKind(false), strippedTypePath) and n = -1 or - this.hasNoCompatibleTargetSharedBorrowToIndex(selfPosAdj, derefChain, strippedTypePath, + this.hasNoCompatibleTargetSharedBorrowToIndex(selfPos, derefChain, strippedTypePath, strippedType, n - 1) and exists(Type t | t = getNthLookupType(strippedType, n) and - this.hasNoCompatibleNonBlanketLikeTargetCheck(selfPosAdj, derefChain, - TSomeBorrowKind(false), strippedTypePath, t) + this.hasNoCompatibleNonBlanketLikeTargetCheck(selfPos, derefChain, TSomeBorrowKind(false), + strippedTypePath, t) ) } /** * Holds if the candidate receiver type represented by `derefChain`, followed * by a shared borrow, does not have a matching call target at function-call - * adjusted position `selfPosAdj`. + * adjusted position `selfPos`. */ pragma[nomagic] - predicate hasNoCompatibleTargetSharedBorrow( - FunctionPositionAdj selfPosAdj, DerefChain derefChain - ) { + predicate hasNoCompatibleTargetSharedBorrow(FunctionPosition selfPos, DerefChain derefChain) { exists(Type strippedType | - this.hasNoCompatibleTargetSharedBorrowToIndex(selfPosAdj, derefChain, _, strippedType, + this.hasNoCompatibleTargetSharedBorrowToIndex(selfPos, derefChain, _, strippedType, getLastLookupTypeIndex(strippedType)) ) } @@ -2052,20 +2034,19 @@ private module AssocFunctionResolution { // forex using recursion pragma[nomagic] private predicate hasNoCompatibleTargetMutBorrowToIndex( - FunctionPositionAdj selfPosAdj, DerefChain derefChain, TypePath strippedTypePath, - Type strippedType, int n + FunctionPosition selfPos, DerefChain derefChain, TypePath strippedTypePath, Type strippedType, + int n ) { - this.hasNoCompatibleTargetSharedBorrow(selfPosAdj, derefChain) and + this.hasNoCompatibleTargetSharedBorrow(selfPos, derefChain) and strippedType = - this.getComplexStrippedSelfType(selfPosAdj, derefChain, TSomeBorrowKind(true), - strippedTypePath) and + this.getComplexStrippedSelfType(selfPos, derefChain, TSomeBorrowKind(true), strippedTypePath) and n = -1 or - this.hasNoCompatibleTargetMutBorrowToIndex(selfPosAdj, derefChain, strippedTypePath, + this.hasNoCompatibleTargetMutBorrowToIndex(selfPos, derefChain, strippedTypePath, strippedType, n - 1) and exists(Type t | t = getNthLookupType(strippedType, n) and - this.hasNoCompatibleNonBlanketLikeTargetCheck(selfPosAdj, derefChain, TSomeBorrowKind(true), + this.hasNoCompatibleNonBlanketLikeTargetCheck(selfPos, derefChain, TSomeBorrowKind(true), strippedTypePath, t) ) } @@ -2073,12 +2054,12 @@ private module AssocFunctionResolution { /** * Holds if the candidate receiver type represented by `derefChain`, followed * by a `mut` borrow, does not have a matching call target at function-call - * adjusted position `selfPosAdj`. + * adjusted position `selfPos`. */ pragma[nomagic] - predicate hasNoCompatibleTargetMutBorrow(FunctionPositionAdj selfPosAdj, DerefChain derefChain) { + predicate hasNoCompatibleTargetMutBorrow(FunctionPosition selfPos, DerefChain derefChain) { exists(Type strippedType | - this.hasNoCompatibleTargetMutBorrowToIndex(selfPosAdj, derefChain, _, strippedType, + this.hasNoCompatibleTargetMutBorrowToIndex(selfPos, derefChain, _, strippedType, getLastLookupTypeIndex(strippedType)) ) } @@ -2086,20 +2067,20 @@ private module AssocFunctionResolution { // forex using recursion pragma[nomagic] private predicate hasNoCompatibleNonBlanketTargetSharedBorrowToIndex( - FunctionPositionAdj selfPosAdj, DerefChain derefChain, TypePath strippedTypePath, - Type strippedType, int n + FunctionPosition selfPos, DerefChain derefChain, TypePath strippedTypePath, Type strippedType, + int n ) { - this.hasNoCompatibleTargetNoBorrow(selfPosAdj, derefChain) and + this.hasNoCompatibleTargetNoBorrow(selfPos, derefChain) and strippedType = - this.getComplexStrippedSelfType(selfPosAdj, derefChain, TSomeBorrowKind(false), + this.getComplexStrippedSelfType(selfPos, derefChain, TSomeBorrowKind(false), strippedTypePath) and n = -1 or - this.hasNoCompatibleNonBlanketTargetSharedBorrowToIndex(selfPosAdj, derefChain, - strippedTypePath, strippedType, n - 1) and + this.hasNoCompatibleNonBlanketTargetSharedBorrowToIndex(selfPos, derefChain, strippedTypePath, + strippedType, n - 1) and exists(Type t | t = getNthLookupType(strippedType, n) and - this.hasNoCompatibleNonBlanketTargetCheck(selfPosAdj, derefChain, TSomeBorrowKind(false), + this.hasNoCompatibleNonBlanketTargetCheck(selfPos, derefChain, TSomeBorrowKind(false), strippedTypePath, t) ) } @@ -2107,14 +2088,14 @@ private module AssocFunctionResolution { /** * Holds if the candidate receiver type represented by `derefChain`, followed * by a shared borrow, does not have a matching non-blanket call target at - * function-call adjusted position `selfPosAdj`. + * function-call adjusted position `selfPos`. */ pragma[nomagic] predicate hasNoCompatibleNonBlanketTargetSharedBorrow( - FunctionPositionAdj selfPosAdj, DerefChain derefChain + FunctionPosition selfPos, DerefChain derefChain ) { exists(Type strippedType | - this.hasNoCompatibleNonBlanketTargetSharedBorrowToIndex(selfPosAdj, derefChain, _, + this.hasNoCompatibleNonBlanketTargetSharedBorrowToIndex(selfPos, derefChain, _, strippedType, getLastLookupTypeIndex(strippedType)) ) } @@ -2122,20 +2103,19 @@ private module AssocFunctionResolution { // forex using recursion pragma[nomagic] private predicate hasNoCompatibleNonBlanketTargetMutBorrowToIndex( - FunctionPositionAdj selfPosAdj, DerefChain derefChain, TypePath strippedTypePath, - Type strippedType, int n + FunctionPosition selfPos, DerefChain derefChain, TypePath strippedTypePath, Type strippedType, + int n ) { - this.hasNoCompatibleNonBlanketTargetSharedBorrow(selfPosAdj, derefChain) and + this.hasNoCompatibleNonBlanketTargetSharedBorrow(selfPos, derefChain) and strippedType = - this.getComplexStrippedSelfType(selfPosAdj, derefChain, TSomeBorrowKind(true), - strippedTypePath) and + this.getComplexStrippedSelfType(selfPos, derefChain, TSomeBorrowKind(true), strippedTypePath) and n = -1 or - this.hasNoCompatibleNonBlanketTargetMutBorrowToIndex(selfPosAdj, derefChain, strippedTypePath, + this.hasNoCompatibleNonBlanketTargetMutBorrowToIndex(selfPos, derefChain, strippedTypePath, strippedType, n - 1) and exists(Type t | t = getNthLookupType(strippedType, n) and - this.hasNoCompatibleNonBlanketTargetCheck(selfPosAdj, derefChain, TSomeBorrowKind(true), + this.hasNoCompatibleNonBlanketTargetCheck(selfPos, derefChain, TSomeBorrowKind(true), strippedTypePath, t) ) } @@ -2143,15 +2123,15 @@ private module AssocFunctionResolution { /** * Holds if the candidate receiver type represented by `derefChain`, followed * by a `mut` borrow, does not have a matching non-blanket call target at - * function-call adjusted position `selfPosAdj`. + * function-call adjusted position `selfPos`. */ pragma[nomagic] predicate hasNoCompatibleNonBlanketTargetMutBorrow( - FunctionPositionAdj selfPosAdj, DerefChain derefChain + FunctionPosition selfPos, DerefChain derefChain ) { exists(Type strippedType | - this.hasNoCompatibleNonBlanketTargetMutBorrowToIndex(selfPosAdj, derefChain, _, - strippedType, getLastLookupTypeIndex(strippedType)) + this.hasNoCompatibleNonBlanketTargetMutBorrowToIndex(selfPos, derefChain, _, strippedType, + getLastLookupTypeIndex(strippedType)) ) } @@ -2159,29 +2139,29 @@ private module AssocFunctionResolution { * Same as `getSelfTypeAt`, but without borrows. */ pragma[nomagic] - Type getSelfTypeAtNoBorrow(FunctionPositionAdj selfPosAdj, DerefChain derefChain, TypePath path) { - result = this.getTypeAt(selfPosAdj, path) and + Type getSelfTypeAtNoBorrow(FunctionPosition selfPos, DerefChain derefChain, TypePath path) { + result = this.getTypeAt(selfPos, path) and derefChain.isEmpty() and ( - this.hasReceiverAtPos(selfPosAdj) + this.hasReceiverAtPos(selfPos) or - selfPosAdj.isTypeQualifier() + selfPos.isTypeQualifier() or - this.isRelevantSelfPosAdj(selfPosAdj) + this.isRelevantSelfPos(selfPos) ) or exists(DerefImplItemNode impl, DerefChain suffix | result = - ImplicitDeref::getDereferencedCandidateReceiverType(this, selfPosAdj, impl, suffix, path) and + ImplicitDeref::getDereferencedCandidateReceiverType(this, selfPos, impl, suffix, path) and derefChain = DerefChain::cons(impl, suffix) ) } /** - * Gets the type of this call at function-call adjusted position `selfPosAdj` and + * Gets the type of this call at function-call adjusted position `selfPos` and * type path `path`. * - * In case this call supports auto-dereferencing and borrowing and `selfPosAdj` is + * In case this call supports auto-dereferencing and borrowing and `selfPos` is * position 0 (corresponding to the receiver), the result is a * [candidate receiver type][1]: * @@ -2196,18 +2176,18 @@ private module AssocFunctionResolution { */ pragma[nomagic] Type getSelfTypeAt( - FunctionPositionAdj selfPosAdj, DerefChain derefChain, BorrowKind borrow, TypePath path + FunctionPosition selfPos, DerefChain derefChain, BorrowKind borrow, TypePath path ) { - result = this.getSelfTypeAtNoBorrow(selfPosAdj, derefChain, path) and + result = this.getSelfTypeAtNoBorrow(selfPos, derefChain, path) and borrow.isNoBorrow() or exists(RefType rt | // first try shared borrow - this.hasNoCompatibleTargetNoBorrow(selfPosAdj, derefChain) and + this.hasNoCompatibleTargetNoBorrow(selfPos, derefChain) and borrow.isSharedBorrow() or // then try mutable borrow - this.hasNoCompatibleTargetSharedBorrow(selfPosAdj, derefChain) and + this.hasNoCompatibleTargetSharedBorrow(selfPos, derefChain) and borrow.isMutableBorrow() | rt = borrow.getRefType() and @@ -2216,7 +2196,7 @@ private module AssocFunctionResolution { result = rt or exists(TypePath suffix | - result = this.getSelfTypeAtNoBorrow(selfPosAdj, derefChain, suffix) and + result = this.getSelfTypeAtNoBorrow(selfPos, derefChain, suffix) and path = TypePath::cons(rt.getPositionalTypeParameter(0), suffix) ) ) @@ -2225,16 +2205,15 @@ private module AssocFunctionResolution { /** * Gets a function that this call resolves to after having applied a sequence of - * dereferences and possibly a borrow on the receiver type at `selfPosAdj`, encoded + * dereferences and possibly a borrow on the receiver type at `selfPos`, encoded * in `derefChain` and `borrow`. */ pragma[nomagic] AssocFunction resolveCallTarget( - ImplOrTraitItemNode i, FunctionPositionAdj selfPosAdj, DerefChain derefChain, - BorrowKind borrow + ImplOrTraitItemNode i, FunctionPosition selfPos, DerefChain derefChain, BorrowKind borrow ) { exists(AssocFunctionCallCand afcc | - afcc = MkAssocFunctionCallCand(this, selfPosAdj, derefChain, borrow) and + afcc = MkAssocFunctionCallCand(this, selfPos, derefChain, borrow) and result = afcc.resolveCallTarget(i) ) } @@ -2245,7 +2224,7 @@ private module AssocFunctionResolution { * resolve the call target. */ predicate argumentHasImplicitDerefChainBorrow(Expr arg, DerefChain derefChain, BorrowKind borrow) { - exists(FunctionPositionAdj selfAdj | + exists(FunctionPosition selfAdj | this.hasReceiverAtPos(selfAdj) and exists(this.resolveCallTarget(_, selfAdj, derefChain, borrow)) and arg = this.getNodeAt(selfAdj) and @@ -2263,7 +2242,10 @@ private module AssocFunctionResolution { override predicate hasReceiver() { any() } override Expr getNonReturnNodeAt(FunctionPosition pos) { - result = super.getSyntacticArgument(pos.asArgumentPosition()) + result = super.getReceiver() and + pos.asPosition() = 0 + or + result = super.getPositionalArgument(pos.asPosition() - 1) } override predicate supportsAutoDerefAndBorrow() { any() } @@ -2285,10 +2267,10 @@ private module AssocFunctionResolution { override predicate hasReceiver() { any() } override Expr getNonReturnNodeAt(FunctionPosition pos) { - pos.isSelf() and + pos.asPosition() = 0 and result = this.getBase() or - pos.asPosition() = 0 and + pos.asPosition() = 1 and result = this.getIndex() } @@ -2320,10 +2302,10 @@ private module AssocFunctionResolution { result = this.getSyntacticPositionalArgument(pos.asPosition()) } - override Type getTypeAt(FunctionPositionAdj posAdj, TypePath path) { - result = super.getTypeAt(posAdj, path) + override Type getTypeAt(FunctionPosition pos, TypePath path) { + result = super.getTypeAt(pos, path) or - posAdj.isTypeQualifier() and + pos.isTypeQualifier() and result = getCallExprTypeQualifier(this, path, _) } @@ -2341,48 +2323,45 @@ private module AssocFunctionResolution { override predicate hasReceiver() { any() } override Expr getNonReturnNodeAt(FunctionPosition pos) { - pos.isSelf() and - result = this.getOperand(0) - or - result = this.getOperand(pos.asPosition() + 1) + result = this.getOperand(pos.asPosition()) } - private predicate implicitBorrowAt(FunctionPositionAdj posAdj, boolean isMutable) { + private predicate implicitBorrowAt(FunctionPosition pos, boolean isMutable) { exists(int borrows | this.isOverloaded(_, _, borrows) | - posAdj.asPosition() = 0 and + pos.asPosition() = 0 and borrows >= 1 and if this instanceof CompoundAssignmentExpr then isMutable = true else isMutable = false or - posAdj.asPosition() = 1 and + pos.asPosition() = 1 and borrows = 2 and isMutable = false ) } - override Type getTypeAt(FunctionPositionAdj posAdj, TypePath path) { + override Type getTypeAt(FunctionPosition pos, TypePath path) { exists(boolean isMutable, RefType rt | - this.implicitBorrowAt(posAdj, isMutable) and + this.implicitBorrowAt(pos, isMutable) and rt = getRefType(isMutable) | result = rt and path.isEmpty() or exists(TypePath path0 | - result = inferType(this.getNodeAt(posAdj), path0) and + result = inferType(this.getNodeAt(pos), path0) and path = TypePath::cons(rt.getPositionalTypeParameter(0), path0) ) ) or - not this.implicitBorrowAt(posAdj, _) and - result = inferType(this.getNodeAt(posAdj), path) + not this.implicitBorrowAt(pos, _) and + result = inferType(this.getNodeAt(pos), path) } override predicate argumentHasImplicitDerefChainBorrow( Expr arg, DerefChain derefChain, BorrowKind borrow ) { - exists(FunctionPositionAdj posAdj, boolean isMutable | - this.implicitBorrowAt(posAdj, isMutable) and - arg = this.getNodeAt(posAdj) and + exists(FunctionPosition pos, boolean isMutable | + this.implicitBorrowAt(pos, isMutable) and + arg = this.getNodeAt(pos) and derefChain = DerefChain::nil() and borrow = TSomeBorrowKind(isMutable) ) @@ -2401,56 +2380,53 @@ private module AssocFunctionResolution { private newtype TAssocFunctionCallCand = MkAssocFunctionCallCand( - AssocFunctionCall afc, FunctionPositionAdj selfPosAdj, DerefChain derefChain, - BorrowKind borrow + AssocFunctionCall afc, FunctionPosition selfPos, DerefChain derefChain, BorrowKind borrow ) { - exists(afc.getANonPseudoSelfTypeAt(selfPosAdj, derefChain, borrow, _)) + exists(afc.getANonPseudoSelfTypeAt(selfPos, derefChain, borrow, _)) } /** A call with a dereference chain and a potential borrow at a given position. */ final private class AssocFunctionCallCand extends MkAssocFunctionCallCand { AssocFunctionCall afc_; - FunctionPositionAdj selfPosAdj_; + FunctionPosition selfPos_; DerefChain derefChain; BorrowKind borrow; - AssocFunctionCallCand() { - this = MkAssocFunctionCallCand(afc_, selfPosAdj_, derefChain, borrow) - } + AssocFunctionCallCand() { this = MkAssocFunctionCallCand(afc_, selfPos_, derefChain, borrow) } AssocFunctionCall getAssocFunctionCall() { result = afc_ } Type getTypeAt(TypePath path) { result = - substituteLookupTraits(afc_.getANonPseudoSelfTypeAt(selfPosAdj_, derefChain, borrow, path)) + substituteLookupTraits(afc_.getANonPseudoSelfTypeAt(selfPos_, derefChain, borrow, path)) } pragma[nomagic] predicate hasNoCompatibleNonBlanketTarget() { - afc_.hasNoCompatibleNonBlanketTargetSharedBorrow(selfPosAdj_, derefChain) and + afc_.hasNoCompatibleNonBlanketTargetSharedBorrow(selfPos_, derefChain) and borrow.isSharedBorrow() or - afc_.hasNoCompatibleNonBlanketTargetMutBorrow(selfPosAdj_, derefChain) and + afc_.hasNoCompatibleNonBlanketTargetMutBorrow(selfPos_, derefChain) and borrow.isMutableBorrow() or - afc_.hasNoCompatibleNonBlanketTargetNoBorrow(selfPosAdj_, derefChain) and + afc_.hasNoCompatibleNonBlanketTargetNoBorrow(selfPos_, derefChain) and borrow.isNoBorrow() } pragma[nomagic] predicate hasSignature( - AssocFunctionCall afc, FunctionPositionAdj selfPosAdj, TypePath strippedTypePath, - Type strippedType, string name, int arity + AssocFunctionCall afc, FunctionPosition selfPos, TypePath strippedTypePath, Type strippedType, + string name, int arity ) { strippedType = this.getTypeAt(strippedTypePath) and ( isComplexRootStripped(strippedTypePath, strippedType) or - selfPosAdj_.isTypeQualifier() and strippedTypePath.isEmpty() + selfPos_.isTypeQualifier() and strippedTypePath.isEmpty() ) and afc = afc_ and afc.hasNameAndArity(name, arity) and - selfPosAdj = selfPosAdj_ + selfPos = selfPos_ } /** @@ -2472,20 +2448,20 @@ private module AssocFunctionResolution { // Calls to inherent functions are always of the form `x.m(...)` or `Foo::bar(...)`, // where `Foo` is a type. In case `bar` is a method, we can use both the type qualifier // and the type of the first argument to rule out candidates - selfPosAdj_.isTypeQualifier() and targetMustBeMethod = false + selfPos_.isTypeQualifier() and targetMustBeMethod = false or - selfPosAdj_.asPosition() = 0 and targetMustBeMethod = true + selfPos_.asPosition() = 0 and targetMustBeMethod = true | afc_.hasSyntacticInfo(name, arity, typeQualifier, traitQualifier, hasReceiver) and (if hasReceiver = true then targetMustBeMethod = true else any()) and - this.hasSignature(_, selfPosAdj_, strippedTypePath, strippedType, name, arity) and + this.hasSignature(_, selfPos_, strippedTypePath, strippedType, name, arity) and forall(Impl i | i.isInherent() and ( - assocFunctionInfoNonBlanketLikeCheck(_, name, arity, selfPosAdj_, i, _, - strippedTypePath, strippedType, typeQualifier, traitQualifier, targetMustBeMethod) + assocFunctionInfoNonBlanketLikeCheck(_, name, arity, selfPos_, i, _, strippedTypePath, + strippedType, typeQualifier, traitQualifier, targetMustBeMethod) or - assocFunctionInfoNonBlanketLikeTypeParamCheck(_, name, arity, selfPosAdj_, i, _, + assocFunctionInfoNonBlanketLikeTypeParamCheck(_, name, arity, selfPos_, i, _, strippedTypePath, typeQualifier, traitQualifier, targetMustBeMethod) ) | @@ -2502,7 +2478,7 @@ private module AssocFunctionResolution { predicate hasNoInherentTarget() { afc_.hasTrait() or - afc_.hasNoInherentTarget(selfPosAdj_, derefChain, borrow) + afc_.hasNoInherentTarget(selfPos_, derefChain, borrow) } pragma[nomagic] @@ -2529,7 +2505,7 @@ private module AssocFunctionResolution { } string toString() { - result = afc_ + " at " + selfPosAdj_ + " [" + derefChain.toString() + "; " + borrow + "]" + result = afc_ + " at " + selfPos_ + " [" + derefChain.toString() + "; " + borrow + "]" } Location getLocation() { result = afc_.getLocation() } @@ -2540,23 +2516,23 @@ private module AssocFunctionResolution { */ private module ImplicitDeref { private newtype TCallDerefCand = - MkCallDerefCand(AssocFunctionCall afc, FunctionPositionAdj selfPosAdj, DerefChain derefChain) { + MkCallDerefCand(AssocFunctionCall afc, FunctionPosition selfPos, DerefChain derefChain) { afc.supportsAutoDerefAndBorrow() and - afc.hasReceiverAtPos(selfPosAdj) and - afc.hasNoCompatibleTargetMutBorrow(selfPosAdj, derefChain) and - exists(afc.getSelfTypeAtNoBorrow(selfPosAdj, derefChain, TypePath::nil())) + afc.hasReceiverAtPos(selfPos) and + afc.hasNoCompatibleTargetMutBorrow(selfPos, derefChain) and + exists(afc.getSelfTypeAtNoBorrow(selfPos, derefChain, TypePath::nil())) } /** A call with a dereference chain. */ private class CallDerefCand extends MkCallDerefCand { AssocFunctionCall afc; - FunctionPositionAdj selfPosAdj; + FunctionPosition selfPos; DerefChain derefChain; - CallDerefCand() { this = MkCallDerefCand(afc, selfPosAdj, derefChain) } + CallDerefCand() { this = MkCallDerefCand(afc, selfPos, derefChain) } Type getTypeAt(TypePath path) { - result = substituteLookupTraits(afc.getSelfTypeAtNoBorrow(selfPosAdj, derefChain, path)) and + result = substituteLookupTraits(afc.getSelfTypeAtNoBorrow(selfPos, derefChain, path)) and result != TNeverType() and result != TUnknownType() } @@ -2590,11 +2566,11 @@ private module AssocFunctionResolution { */ pragma[nomagic] Type getDereferencedCandidateReceiverType( - AssocFunctionCall afc, FunctionPositionAdj selfPosAdj, DerefImplItemNode impl, + AssocFunctionCall afc, FunctionPosition selfPos, DerefImplItemNode impl, DerefChain derefChain, TypePath path ) { exists(CallDerefCand cdc, TypePath exprPath | - cdc = MkCallDerefCand(afc, selfPosAdj, derefChain) and + cdc = MkCallDerefCand(afc, selfPos, derefChain) and CallSatisfiesDerefConstraint::satisfiesConstraintTypeThrough(cdc, impl, _, exprPath, result) and exprPath.isCons(getDerefTargetTypeParameter(), path) ) @@ -2609,9 +2585,9 @@ private module AssocFunctionResolution { AssocFunctionCallCand afcc, ImplItemNode impl, TypePath blanketPath, TypeParam blanketTypeParam ) { - exists(AssocFunctionCall afc, FunctionPositionAdj selfPosAdj, BorrowKind borrow | - afcc = MkAssocFunctionCallCand(afc, selfPosAdj, _, borrow) and - blanketLikeCandidate(afc, _, selfPosAdj, impl, _, blanketPath, blanketTypeParam) and + exists(AssocFunctionCall afc, FunctionPosition selfPos, BorrowKind borrow | + afcc = MkAssocFunctionCallCand(afc, selfPos, _, borrow) and + blanketLikeCandidate(afc, _, selfPos, impl, _, blanketPath, blanketTypeParam) and // Only apply blanket implementations when no other implementations are possible; // this is to account for codebases that use the (unstable) specialization feature // (https://rust-lang.github.io/rfcs/1210-impl-specialization.html), as well as @@ -2642,14 +2618,14 @@ private module AssocFunctionResolution { AssocFunctionCallCand afcc, ImplOrTraitItemNode i, AssocFunctionType selfType ) { exists( - AssocFunctionCall afc, FunctionPositionAdj selfPosAdj, Function f, - TypePath strippedTypePath, Type strippedType + AssocFunctionCall afc, FunctionPosition selfPos, Function f, TypePath strippedTypePath, + Type strippedType | - afcc.hasSignature(afc, selfPosAdj, strippedTypePath, strippedType, _, _) + afcc.hasSignature(afc, selfPos, strippedTypePath, strippedType, _, _) | - nonBlanketLikeCandidate(afc, f, selfPosAdj, i, selfType, strippedTypePath, strippedType) + nonBlanketLikeCandidate(afc, f, selfPos, i, selfType, strippedTypePath, strippedType) or - blanketLikeCandidate(afc, f, selfPosAdj, i, selfType, _, _) and + blanketLikeCandidate(afc, f, selfPos, i, selfType, _, _) and ArgSatisfiesBlanketLikeConstraint::satisfiesBlanketConstraint(afcc, i) ) } @@ -2677,19 +2653,18 @@ private module AssocFunctionResolution { pragma[nomagic] predicate argIsNotInstantiationOf( - AssocFunctionCall afc, ImplOrTraitItemNode i, FunctionPositionAdj selfPosAdj, - DerefChain derefChain, BorrowKind borrow, TypePath path + AssocFunctionCall afc, ImplOrTraitItemNode i, FunctionPosition selfPos, DerefChain derefChain, + BorrowKind borrow, TypePath path ) { - argIsNotInstantiationOf(MkAssocFunctionCallCand(afc, selfPosAdj, derefChain, borrow), i, _, - path) + argIsNotInstantiationOf(MkAssocFunctionCallCand(afc, selfPos, derefChain, borrow), i, _, path) } pragma[nomagic] predicate argIsInstantiationOf( - AssocFunctionCall afc, ImplOrTraitItemNode i, FunctionPositionAdj selfPosAdj, - DerefChain derefChain, BorrowKind borrow, AssocFunctionType selfType + AssocFunctionCall afc, ImplOrTraitItemNode i, FunctionPosition selfPos, DerefChain derefChain, + BorrowKind borrow, AssocFunctionType selfType ) { - argIsInstantiationOf(MkAssocFunctionCallCand(afc, selfPosAdj, derefChain, borrow), i, selfType) + argIsInstantiationOf(MkAssocFunctionCallCand(afc, selfPos, derefChain, borrow), i, selfType) } } @@ -2705,9 +2680,9 @@ private module AssocFunctionResolution { predicate potentialInstantiationOf( AssocFunctionCallCand afcc, TypeAbstraction abs, AssocFunctionType constraint ) { - exists(AssocFunctionCall afc, FunctionPositionAdj selfPosAdj | - afcc = MkAssocFunctionCallCand(afc, selfPosAdj, _, _) and - blanketLikeCandidate(afc, _, selfPosAdj, abs, constraint, _, _) and + exists(AssocFunctionCall afc, FunctionPosition selfPos | + afcc = MkAssocFunctionCallCand(afc, selfPos, _, _) and + blanketLikeCandidate(afc, _, selfPos, abs, constraint, _, _) and if abs.(Impl).hasTrait() then // inherent functions take precedence over trait functions, so only allow @@ -2735,11 +2710,11 @@ private module AssocFunctionResolution { ) { SelfArgIsInstantiationOfInput::potentialInstantiationOf0(afcc, abs, constraint) and abs.(Impl).isInherent() and - exists(AssocFunctionCall afc, FunctionPositionAdj selfPosAdj | - afcc = MkAssocFunctionCallCand(afc, selfPosAdj, _, _) + exists(AssocFunctionCall afc, FunctionPosition selfPos | + afcc = MkAssocFunctionCallCand(afc, selfPos, _, _) | - selfPosAdj.isTypeQualifier() or - afc.hasReceiverAtPos(selfPosAdj) + selfPos.isTypeQualifier() or + afc.hasReceiverAtPos(selfPos) ) } } @@ -2754,18 +2729,13 @@ private module AssocFunctionResolution { private module OverloadedCallArgsAreInstantiationsOfInput implements ArgsAreInstantiationsOfInputSig { - predicate toCheck( - ImplOrTraitItemNode i, Function f, TypeParameter traitTp, FunctionPositionAdj posAdj - ) { - exists(FunctionPosition pos | - FunctionOverloading::functionResolutionDependsOnArgument(i, f, traitTp, pos) and - posAdj = pos.getFunctionCallAdjusted(f) - ) + predicate toCheck(ImplOrTraitItemNode i, Function f, TypeParameter traitTp, FunctionPosition pos) { + FunctionOverloading::functionResolutionDependsOnArgument(i, f, traitTp, pos) } class Call extends AssocFunctionCallCand { - Type getArgType(FunctionPositionAdj posAdj, TypePath path) { - result = this.getAssocFunctionCall().getTypeAt(posAdj, path) + Type getArgType(FunctionPosition pos, TypePath path) { + result = this.getAssocFunctionCall().getTypeAt(pos, path) } predicate hasTargetCand(ImplOrTraitItemNode i, Function f) { @@ -2789,7 +2759,7 @@ private module AssocFunctionResolution { * like `foo.bar(baz)` and `Foo::bar(baz)`. */ private module FunctionCallMatchingInput implements MatchingWithEnvironmentInputSig { - import FunctionPositionAdjMatchingInput + import FunctionPositionMatchingInput private newtype TDeclaration = TFunctionDeclaration(ImplOrTraitItemNodeOption i, FunctionDeclaration f) { f.isFor(i) } @@ -2809,10 +2779,10 @@ private module FunctionCallMatchingInput implements MatchingWithEnvironmentInput result = f.getTypeParameter(i, ppos) } - Type getDeclaredType(FunctionPositionAdj posAdj, TypePath path) { - result = f.getParameterType(i, posAdj, path) + Type getDeclaredType(FunctionPosition pos, TypePath path) { + result = f.getParameterType(i, pos, path) or - posAdj.isReturn() and + pos.isReturn() and result = f.getReturnType(i, path) } @@ -2852,10 +2822,10 @@ private module FunctionCallMatchingInput implements MatchingWithEnvironmentInput } abstract class Access extends ContextTyping::ContextTypedCallCand { - abstract AstNode getNodeAt(FunctionPositionAdj posAdj); + abstract AstNode getNodeAt(FunctionPosition pos); bindingset[derefChainBorrow] - abstract Type getInferredType(string derefChainBorrow, FunctionPositionAdj posAdj, TypePath path); + abstract Type getInferredType(string derefChainBorrow, FunctionPosition pos, TypePath path); abstract Declaration getTarget(string derefChainBorrow); @@ -2863,9 +2833,7 @@ private module FunctionCallMatchingInput implements MatchingWithEnvironmentInput * Holds if the return type of this call at `path` may have to be inferred * from the context. */ - abstract predicate hasUnknownTypeAt( - string derefChainBorrow, FunctionPositionAdj posAdj, TypePath path - ); + abstract predicate hasUnknownTypeAt(string derefChainBorrow, FunctionPosition pos, TypePath path); } private class AssocFunctionCallAccess extends Access instanceof AssocFunctionResolution::AssocFunctionCall @@ -2887,47 +2855,45 @@ private module FunctionCallMatchingInput implements MatchingWithEnvironmentInput result = getCallExprTypeArgument(this, apos, path) } - override AstNode getNodeAt(FunctionPositionAdj posAdj) { - result = AssocFunctionResolution::AssocFunctionCall.super.getNodeAt(posAdj) + override AstNode getNodeAt(FunctionPosition pos) { + result = AssocFunctionResolution::AssocFunctionCall.super.getNodeAt(pos) } pragma[nomagic] - private Type getInferredSelfType( - FunctionPositionAdj posAdj, string derefChainBorrow, TypePath path - ) { + private Type getInferredSelfType(FunctionPosition pos, string derefChainBorrow, TypePath path) { exists(DerefChain derefChain, BorrowKind borrow | - result = super.getSelfTypeAt(posAdj, derefChain, borrow, path) and + result = super.getSelfTypeAt(pos, derefChain, borrow, path) and derefChainBorrow = encodeDerefChainBorrow(derefChain, borrow) and - super.hasReceiverAtPos(posAdj) + super.hasReceiverAtPos(pos) ) } pragma[nomagic] - private Type getInferredNonSelfType(FunctionPositionAdj posAdj, TypePath path) { + private Type getInferredNonSelfType(FunctionPosition pos, TypePath path) { if // index expression `x[i]` desugars to `*x.index(i)`, so we must account for // the implicit deref - posAdj.isReturn() and + pos.isReturn() and this instanceof IndexExpr then path.isEmpty() and result instanceof RefType or exists(TypePath suffix | - result = super.getTypeAt(posAdj, suffix) and + result = super.getTypeAt(pos, suffix) and path = TypePath::cons(getRefTypeParameter(_), suffix) ) else ( - not super.hasReceiverAtPos(posAdj) and - result = super.getTypeAt(posAdj, path) + not super.hasReceiverAtPos(pos) and + result = super.getTypeAt(pos, path) ) } bindingset[derefChainBorrow] - override Type getInferredType(string derefChainBorrow, FunctionPositionAdj posAdj, TypePath path) { - result = this.getInferredSelfType(posAdj, derefChainBorrow, path) + override Type getInferredType(string derefChainBorrow, FunctionPosition pos, TypePath path) { + result = this.getInferredSelfType(pos, derefChainBorrow, path) or - result = this.getInferredNonSelfType(posAdj, path) + result = this.getInferredNonSelfType(pos, path) } private AssocFunction getTarget(ImplOrTraitItemNode i, string derefChainBorrow) { @@ -2945,21 +2911,17 @@ private module FunctionCallMatchingInput implements MatchingWithEnvironmentInput } pragma[nomagic] - override predicate hasUnknownTypeAt( - string derefChainBorrow, FunctionPositionAdj posAdj, TypePath path - ) { - exists(FunctionPosition pos | posAdj = super.getFunctionCallAdjustedPosition(pos) | - exists(ImplOrTraitItemNode i | - this.hasUnknownTypeAt(i, this.getTarget(i, derefChainBorrow), pos, path) - ) - or - derefChainBorrow = noDerefChainBorrow() and - forex(ImplOrTraitItemNode i, Function f | - f = CallExprImpl::getResolvedFunction(this) and - f = i.getAnAssocItem() - | - this.hasUnknownTypeAt(i, f, pos, path) - ) + override predicate hasUnknownTypeAt(string derefChainBorrow, FunctionPosition pos, TypePath path) { + exists(ImplOrTraitItemNode i | + this.hasUnknownTypeAt(i, this.getTarget(i, derefChainBorrow), pos, path) + ) + or + derefChainBorrow = noDerefChainBorrow() and + forex(ImplOrTraitItemNode i, Function f | + f = CallExprImpl::getResolvedFunction(this) and + f = i.getAnAssocItem() + | + this.hasUnknownTypeAt(i, f, pos, path) ) } } @@ -2970,19 +2932,19 @@ private module FunctionCallMatchingInput implements MatchingWithEnvironmentInput result = NonAssocCallExpr.super.getTypeArgument(apos, path) } - override AstNode getNodeAt(FunctionPositionAdj posAdj) { - result = NonAssocCallExpr.super.getNodeAt(posAdj.asNonAdjusted()) + override AstNode getNodeAt(FunctionPosition pos) { + result = NonAssocCallExpr.super.getNodeAt(pos) } pragma[nomagic] - private Type getInferredType(FunctionPositionAdj posAdj, TypePath path) { - result = super.getInferredType(posAdj.asNonAdjusted(), path) + private Type getInferredType(FunctionPosition pos, TypePath path) { + result = super.getInferredType(pos, path) } bindingset[derefChainBorrow] - override Type getInferredType(string derefChainBorrow, FunctionPositionAdj posAdj, TypePath path) { + override Type getInferredType(string derefChainBorrow, FunctionPosition pos, TypePath path) { exists(derefChainBorrow) and - result = this.getInferredType(posAdj, path) + result = this.getInferredType(pos, path) } pragma[nomagic] @@ -3000,13 +2962,11 @@ private module FunctionCallMatchingInput implements MatchingWithEnvironmentInput } pragma[nomagic] - override predicate hasUnknownTypeAt( - string derefChainBorrow, FunctionPositionAdj posAdj, TypePath path - ) { + override predicate hasUnknownTypeAt(string derefChainBorrow, FunctionPosition pos, TypePath path) { derefChainBorrow = noDerefChainBorrow() and exists(ImplOrTraitItemNodeOption i, FunctionDeclaration f | TFunctionDeclaration(i, f) = this.getTarget() and - this.hasUnknownTypeAt(i.asSome(), f, posAdj.asNonAdjusted(), path) + this.hasUnknownTypeAt(i.asSome(), f, pos, path) ) } } @@ -3016,24 +2976,24 @@ private module FunctionCallMatching = MatchingWithEnvironment::check/2; + ContextTyping::CheckContextTyping::check/2; abstract private class TupleLikeConstructor extends Addressable { final TypeParameter getTypeParameter(TypeParameterPosition ppos) { @@ -3132,17 +3095,17 @@ abstract private class TupleLikeConstructor extends Addressable { } Type getDeclaredType(FunctionPosition pos, TypePath path) { - result = this.getParameterType(pos, path) + result = this.getParameterType(pos.asPosition(), path) or pos.isReturn() and result = this.getReturnType(path) or - pos.isSelf() and + pos.isTypeQualifier() and result = this.getReturnType(path) } - Type getParameterType(FunctionPosition pos, TypePath path) { - result = this.getTupleField(pos.asPosition()).getTypeRepr().(TypeMention).getTypeAt(path) + Type getParameterType(int pos, TypePath path) { + result = this.getTupleField(pos).getTypeRepr().(TypeMention).getTypeAt(path) } } @@ -3203,7 +3166,10 @@ private module TupleLikeConstructionMatchingInput implements MatchingInputSig { private module TupleLikeConstructionMatching = Matching; pragma[nomagic] -private Type inferTupleLikeConstructionTypePreCheck(AstNode n, FunctionPosition pos, TypePath path) { +private Type inferTupleLikeConstructionTypePreCheck( + AstNode n, FunctionPosition pos, boolean hasReceiver, TypePath path +) { + hasReceiver = false and exists(TupleLikeConstructionMatchingInput::Access a | n = a.getNodeAt(pos) | result = TupleLikeConstructionMatching::inferAccessType(a, pos, path) or @@ -3213,14 +3179,14 @@ private Type inferTupleLikeConstructionTypePreCheck(AstNode n, FunctionPosition } private predicate inferTupleLikeConstructionType = - ContextTyping::CheckContextTyping::check/2; + ContextTyping::CheckContextTyping::check/2; /** * A matching configuration for resolving types of operations like `a + b`. */ private module OperationMatchingInput implements MatchingInputSig { private import codeql.rust.elements.internal.OperationImpl::Impl as OperationImpl - import FunctionPositionAdjMatchingInput + import FunctionPositionMatchingInput class Declaration extends FunctionCallMatchingInput::Declaration { private Method getSelfOrImpl() { @@ -3230,14 +3196,14 @@ private module OperationMatchingInput implements MatchingInputSig { } pragma[nomagic] - private predicate borrowsAt(FunctionPositionAdj posAdj) { + private predicate borrowsAt(FunctionPosition pos) { exists(TraitItemNode t, string path, string method | this.getSelfOrImpl() = t.getAssocItem(method) and path = t.getCanonicalPath(_) and exists(int borrows | OperationImpl::isOverloaded(_, _, path, method, borrows) | - posAdj.asPosition() = 0 and borrows >= 1 + pos.asPosition() = 0 and borrows >= 1 or - posAdj.asPosition() = 1 and + pos.asPosition() = 1 and borrows >= 2 ) ) @@ -3246,13 +3212,13 @@ private module OperationMatchingInput implements MatchingInputSig { pragma[nomagic] private predicate derefsReturn() { this.getSelfOrImpl() = any(DerefTrait t).getDerefFunction() } - Type getDeclaredType(FunctionPositionAdj posAdj, TypePath path) { + Type getDeclaredType(FunctionPosition pos, TypePath path) { exists(TypePath path0 | - result = super.getDeclaredType(posAdj, path0) and + result = super.getDeclaredType(pos, path0) and if - this.borrowsAt(posAdj) + this.borrowsAt(pos) or - posAdj.isReturn() and this.derefsReturn() + pos.isReturn() and this.derefsReturn() then path0.isCons(getRefTypeParameter(_), path) else path0 = path ) @@ -3263,8 +3229,8 @@ private module OperationMatchingInput implements MatchingInputSig { Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { none() } pragma[nomagic] - Type getInferredType(FunctionPositionAdj posAdj, TypePath path) { - result = inferType(this.getNodeAt(posAdj), path) + Type getInferredType(FunctionPosition pos, TypePath path) { + result = inferType(this.getNodeAt(pos), path) } Declaration getTarget() { @@ -3278,16 +3244,18 @@ private module OperationMatchingInput implements MatchingInputSig { private module OperationMatching = Matching; pragma[nomagic] -private Type inferOperationTypePreCheck(AstNode n, FunctionPosition pos, TypePath path) { - exists(OperationMatchingInput::Access a, FunctionPositionAdj posAdj | - n = a.getNodeAt(posAdj) and - posAdj = pos.getFunctionCallAdjusted() and - result = OperationMatching::inferAccessType(a, posAdj, path) +private Type inferOperationTypePreCheck( + AstNode n, FunctionPosition pos, boolean hasReceiver, TypePath path +) { + exists(OperationMatchingInput::Access a | + n = a.getNodeAt(pos) and + result = OperationMatching::inferAccessType(a, pos, path) and + hasReceiver = true ) } private predicate inferOperationType = - ContextTyping::CheckContextTyping::check/2; + ContextTyping::CheckContextTyping::check/2; pragma[nomagic] private Type getFieldExprLookupType(FieldExpr fe, string name, DerefChain derefChain) { @@ -3764,7 +3732,7 @@ private module TupleStructPatMatchingInput implements MatchingInputSig { result = this.getField(apos.asPosition()) or result = this and - apos.isSelf() + apos.isReturn() } Type getInferredType(AccessPosition apos, TypePath path) { @@ -3772,7 +3740,7 @@ private module TupleStructPatMatchingInput implements MatchingInputSig { or // The struct/enum type is supplied explicitly as a type qualifier, e.g. // `let Option::::Some(x) = ...`. - apos.isSelf() and + apos.isTypeQualifier() and result = this.getPath().(TypeMention).getTypeAt(path) } From 7a6ab700915a4ca05175b244dc9d7bf773dc076d Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 13 Mar 2026 15:32:25 +0100 Subject: [PATCH 030/185] Rust: Add test for free function with context-based typing --- .../PathResolutionConsistency.expected | 2 +- .../test/library-tests/type-inference/main.rs | 7 + .../type-inference/type-inference.expected | 727 +++++++++--------- 3 files changed, 376 insertions(+), 360 deletions(-) diff --git a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected index a753b733ba3..2ac439e085b 100644 --- a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected @@ -1,4 +1,4 @@ multipleResolvedTargets | main.rs:2223:9:2223:31 | ... .my_add(...) | | main.rs:2225:9:2225:29 | ... .my_add(...) | -| main.rs:2733:13:2733:17 | x.f() | +| main.rs:2740:13:2740:17 | x.f() | diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index f342d3897f4..ad77bd9febd 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -2643,6 +2643,10 @@ mod context_typed { fn f(self) {} } + fn free_function() -> T { + Default::default() // $ target=default + } + pub fn f() { let x = None; // $ type=x:T.i32 let x: Option = x; @@ -2693,6 +2697,9 @@ mod context_typed { let s = Default::default(); // $ target=default type=s:S S::f(s); // $ target=f + + let z = free_function(); // $ target=free_function MISSING: type=z:i32 + x.push(z); // $ target=push } } 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 bd3b0490f18..6921fbde3de 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -3630,130 +3630,133 @@ inferCertainType | main.rs:2633:29:2633:29 | a | | {EXTERNAL LOCATION} | () | | main.rs:2643:14:2643:17 | SelfParam | | main.rs:2639:5:2640:13 | S | | main.rs:2643:20:2643:21 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2646:16:2696:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2648:13:2648:13 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:2648:13:2648:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2652:26:2652:28 | opt | | {EXTERNAL LOCATION} | Option | -| main.rs:2652:26:2652:28 | opt | T | main.rs:2652:23:2652:23 | T | -| main.rs:2652:42:2652:42 | x | | main.rs:2652:23:2652:23 | T | -| main.rs:2652:48:2652:49 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2655:9:2655:24 | pin_option(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2662:13:2662:13 | x | | main.rs:2657:9:2660:9 | MyEither | -| main.rs:2662:17:2662:39 | ...::A {...} | | main.rs:2657:9:2660:9 | MyEither | -| main.rs:2663:13:2663:13 | x | | main.rs:2657:9:2660:9 | MyEither | -| main.rs:2663:13:2663:13 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2663:13:2663:13 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2663:40:2663:40 | x | | main.rs:2657:9:2660:9 | MyEither | -| main.rs:2664:13:2664:13 | x | | main.rs:2657:9:2660:9 | MyEither | -| main.rs:2664:13:2664:13 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2664:17:2664:52 | ...::A {...} | | main.rs:2657:9:2660:9 | MyEither | -| main.rs:2664:17:2664:52 | ...::A {...} | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2666:13:2666:13 | x | | main.rs:2657:9:2660:9 | MyEither | -| main.rs:2666:13:2666:13 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2666:17:2668:9 | ...::B::<...> {...} | | main.rs:2657:9:2660:9 | MyEither | -| main.rs:2666:17:2668:9 | ...::B::<...> {...} | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2667:20:2667:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2670:29:2670:29 | e | | main.rs:2657:9:2660:9 | MyEither | -| main.rs:2670:29:2670:29 | e | T1 | main.rs:2670:26:2670:26 | T | -| main.rs:2670:29:2670:29 | e | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2670:53:2670:53 | x | | main.rs:2670:26:2670:26 | T | -| main.rs:2670:59:2670:60 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2673:13:2673:13 | x | | main.rs:2657:9:2660:9 | MyEither | -| main.rs:2673:17:2675:9 | ...::B {...} | | main.rs:2657:9:2660:9 | MyEither | -| main.rs:2674:20:2674:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2676:9:2676:27 | pin_my_either(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2676:23:2676:23 | x | | main.rs:2657:9:2660:9 | MyEither | -| main.rs:2679:13:2679:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:2679:13:2679:13 | x | E | {EXTERNAL LOCATION} | String | -| main.rs:2679:13:2679:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2683:29:2683:31 | res | | {EXTERNAL LOCATION} | Result | -| main.rs:2683:29:2683:31 | res | E | main.rs:2683:26:2683:26 | E | -| main.rs:2683:29:2683:31 | res | T | main.rs:2683:23:2683:23 | T | -| main.rs:2683:48:2683:48 | x | | main.rs:2683:26:2683:26 | E | -| main.rs:2683:54:2683:55 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2686:9:2686:28 | pin_result(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2686:23:2686:27 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:2688:17:2688:17 | x | | {EXTERNAL LOCATION} | Vec | -| main.rs:2688:17:2688:17 | x | A | {EXTERNAL LOCATION} | Global | -| main.rs:2688:21:2688:30 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2688:21:2688:30 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2689:9:2689:9 | x | | {EXTERNAL LOCATION} | Vec | -| main.rs:2689:9:2689:9 | x | A | {EXTERNAL LOCATION} | Global | -| main.rs:2692:9:2692:9 | x | | {EXTERNAL LOCATION} | Vec | -| main.rs:2692:9:2692:9 | x | A | {EXTERNAL LOCATION} | Global | -| main.rs:2695:9:2695:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2702:14:2702:17 | SelfParam | | main.rs:2700:5:2708:5 | Self [trait MyTrait] | -| main.rs:2705:14:2705:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2705:14:2705:18 | SelfParam | TRef | main.rs:2700:5:2708:5 | Self [trait MyTrait] | -| main.rs:2705:21:2705:25 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2705:21:2705:25 | other | TRef | main.rs:2700:5:2708:5 | Self [trait MyTrait] | -| main.rs:2705:44:2707:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:2705:44:2707:9 | { ... } | TRef | main.rs:2700:5:2708:5 | Self [trait MyTrait] | -| main.rs:2706:13:2706:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2706:13:2706:16 | self | TRef | main.rs:2700:5:2708:5 | Self [trait MyTrait] | -| main.rs:2712:14:2712:17 | SelfParam | | {EXTERNAL LOCATION} | i32 | -| main.rs:2712:28:2714:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2713:13:2713:16 | self | | {EXTERNAL LOCATION} | i32 | -| main.rs:2719:14:2719:17 | SelfParam | | {EXTERNAL LOCATION} | usize | -| main.rs:2719:28:2721:9 | { ... } | | {EXTERNAL LOCATION} | usize | -| main.rs:2720:13:2720:16 | self | | {EXTERNAL LOCATION} | usize | -| main.rs:2726:14:2726:17 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2726:14:2726:17 | SelfParam | TRef | main.rs:2724:10:2724:10 | T | -| main.rs:2726:28:2728:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:2726:28:2728:9 | { ... } | TRef | main.rs:2724:10:2724:10 | T | -| main.rs:2727:13:2727:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2727:13:2727:16 | self | TRef | main.rs:2724:10:2724:10 | T | -| main.rs:2731:25:2735:5 | { ... } | | {EXTERNAL LOCATION} | usize | -| main.rs:2737:12:2745:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2738:13:2738:13 | x | | {EXTERNAL LOCATION} | usize | -| main.rs:2739:13:2739:13 | y | | {EXTERNAL LOCATION} | & | -| main.rs:2739:17:2739:18 | &1 | | {EXTERNAL LOCATION} | & | -| main.rs:2740:17:2740:17 | x | | {EXTERNAL LOCATION} | usize | -| main.rs:2740:21:2740:21 | y | | {EXTERNAL LOCATION} | & | -| main.rs:2743:13:2743:13 | y | | {EXTERNAL LOCATION} | usize | -| main.rs:2744:23:2744:23 | y | | {EXTERNAL LOCATION} | usize | -| main.rs:2755:11:2790:1 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2756:5:2756:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2757:5:2757:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2758:5:2758:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2758:20:2758:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2758:41:2758:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2759:5:2759:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2760:5:2760:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2761:5:2761:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2762:5:2762:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2646:41:2648:5 | { ... } | | main.rs:2646:22:2646:31 | T | +| main.rs:2650:16:2703:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2652:13:2652:13 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2652:13:2652:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2656:26:2656:28 | opt | | {EXTERNAL LOCATION} | Option | +| main.rs:2656:26:2656:28 | opt | T | main.rs:2656:23:2656:23 | T | +| main.rs:2656:42:2656:42 | x | | main.rs:2656:23:2656:23 | T | +| main.rs:2656:48:2656:49 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2659:9:2659:24 | pin_option(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2666:13:2666:13 | x | | main.rs:2661:9:2664:9 | MyEither | +| main.rs:2666:17:2666:39 | ...::A {...} | | main.rs:2661:9:2664:9 | MyEither | +| main.rs:2667:13:2667:13 | x | | main.rs:2661:9:2664:9 | MyEither | +| main.rs:2667:13:2667:13 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2667:13:2667:13 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2667:40:2667:40 | x | | main.rs:2661:9:2664:9 | MyEither | +| main.rs:2668:13:2668:13 | x | | main.rs:2661:9:2664:9 | MyEither | +| main.rs:2668:13:2668:13 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2668:17:2668:52 | ...::A {...} | | main.rs:2661:9:2664:9 | MyEither | +| main.rs:2668:17:2668:52 | ...::A {...} | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2670:13:2670:13 | x | | main.rs:2661:9:2664:9 | MyEither | +| main.rs:2670:13:2670:13 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2670:17:2672:9 | ...::B::<...> {...} | | main.rs:2661:9:2664:9 | MyEither | +| main.rs:2670:17:2672:9 | ...::B::<...> {...} | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2671:20:2671:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2674:29:2674:29 | e | | main.rs:2661:9:2664:9 | MyEither | +| main.rs:2674:29:2674:29 | e | T1 | main.rs:2674:26:2674:26 | T | +| main.rs:2674:29:2674:29 | e | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2674:53:2674:53 | x | | main.rs:2674:26:2674:26 | T | +| main.rs:2674:59:2674:60 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2677:13:2677:13 | x | | main.rs:2661:9:2664:9 | MyEither | +| main.rs:2677:17:2679:9 | ...::B {...} | | main.rs:2661:9:2664:9 | MyEither | +| main.rs:2678:20:2678:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2680:9:2680:27 | pin_my_either(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2680:23:2680:23 | x | | main.rs:2661:9:2664:9 | MyEither | +| main.rs:2683:13:2683:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:2683:13:2683:13 | x | E | {EXTERNAL LOCATION} | String | +| main.rs:2683:13:2683:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2687:29:2687:31 | res | | {EXTERNAL LOCATION} | Result | +| main.rs:2687:29:2687:31 | res | E | main.rs:2687:26:2687:26 | E | +| main.rs:2687:29:2687:31 | res | T | main.rs:2687:23:2687:23 | T | +| main.rs:2687:48:2687:48 | x | | main.rs:2687:26:2687:26 | E | +| main.rs:2687:54:2687:55 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2690:9:2690:28 | pin_result(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2690:23:2690:27 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:2692:17:2692:17 | x | | {EXTERNAL LOCATION} | Vec | +| main.rs:2692:17:2692:17 | x | A | {EXTERNAL LOCATION} | Global | +| main.rs:2692:21:2692:30 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2692:21:2692:30 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2693:9:2693:9 | x | | {EXTERNAL LOCATION} | Vec | +| main.rs:2693:9:2693:9 | x | A | {EXTERNAL LOCATION} | Global | +| main.rs:2696:9:2696:9 | x | | {EXTERNAL LOCATION} | Vec | +| main.rs:2696:9:2696:9 | x | A | {EXTERNAL LOCATION} | Global | +| main.rs:2699:9:2699:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2702:9:2702:9 | x | | {EXTERNAL LOCATION} | Vec | +| main.rs:2702:9:2702:9 | x | A | {EXTERNAL LOCATION} | Global | +| main.rs:2709:14:2709:17 | SelfParam | | main.rs:2707:5:2715:5 | Self [trait MyTrait] | +| main.rs:2712:14:2712:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2712:14:2712:18 | SelfParam | TRef | main.rs:2707:5:2715:5 | Self [trait MyTrait] | +| main.rs:2712:21:2712:25 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2712:21:2712:25 | other | TRef | main.rs:2707:5:2715:5 | Self [trait MyTrait] | +| main.rs:2712:44:2714:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:2712:44:2714:9 | { ... } | TRef | main.rs:2707:5:2715:5 | Self [trait MyTrait] | +| main.rs:2713:13:2713:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2713:13:2713:16 | self | TRef | main.rs:2707:5:2715:5 | Self [trait MyTrait] | +| main.rs:2719:14:2719:17 | SelfParam | | {EXTERNAL LOCATION} | i32 | +| main.rs:2719:28:2721:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2720:13:2720:16 | self | | {EXTERNAL LOCATION} | i32 | +| main.rs:2726:14:2726:17 | SelfParam | | {EXTERNAL LOCATION} | usize | +| main.rs:2726:28:2728:9 | { ... } | | {EXTERNAL LOCATION} | usize | +| main.rs:2727:13:2727:16 | self | | {EXTERNAL LOCATION} | usize | +| main.rs:2733:14:2733:17 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2733:14:2733:17 | SelfParam | TRef | main.rs:2731:10:2731:10 | T | +| main.rs:2733:28:2735:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:2733:28:2735:9 | { ... } | TRef | main.rs:2731:10:2731:10 | T | +| main.rs:2734:13:2734:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2734:13:2734:16 | self | TRef | main.rs:2731:10:2731:10 | T | +| main.rs:2738:25:2742:5 | { ... } | | {EXTERNAL LOCATION} | usize | +| main.rs:2744:12:2752:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2745:13:2745:13 | x | | {EXTERNAL LOCATION} | usize | +| main.rs:2746:13:2746:13 | y | | {EXTERNAL LOCATION} | & | +| main.rs:2746:17:2746:18 | &1 | | {EXTERNAL LOCATION} | & | +| main.rs:2747:17:2747:17 | x | | {EXTERNAL LOCATION} | usize | +| main.rs:2747:21:2747:21 | y | | {EXTERNAL LOCATION} | & | +| main.rs:2750:13:2750:13 | y | | {EXTERNAL LOCATION} | usize | +| main.rs:2751:23:2751:23 | y | | {EXTERNAL LOCATION} | usize | +| main.rs:2762:11:2797:1 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2763:5:2763:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2764:5:2764:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2765:5:2765:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2766:5:2766:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2767:5:2767:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2768:5:2768:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2769:5:2769:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2770:5:2770:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2771:5:2771:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2772:5:2772:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2773:5:2773:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2774:5:2774:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:2774:5:2774:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () | -| main.rs:2775:5:2775:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2776:5:2776:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2777:5:2777:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2778:5:2778:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2779:5:2779:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2780:5:2780:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2781:5:2781:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2782:5:2782:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2783:5:2783:28 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2784:5:2784:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2785:5:2785:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2786:5:2786:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2787:5:2787:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2788:5:2788:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2788:5:2788:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2788:5:2788:20 | ...::f(...) | T | main.rs:2547:5:2549:5 | dyn MyTrait | -| main.rs:2788:5:2788:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | -| main.rs:2788:16:2788:19 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2789:5:2789:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2764:5:2764:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2765:5:2765:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2765:20:2765:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2765:41:2765:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2766:5:2766:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2767:5:2767:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2768:5:2768:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2769:5:2769:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2770:5:2770:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2771:5:2771:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2772:5:2772:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2773:5:2773:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2774:5:2774:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2775:5:2775:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2776:5:2776:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2777:5:2777:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2778:5:2778:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2779:5:2779:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2780:5:2780:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2781:5:2781:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2781:5:2781:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () | +| main.rs:2782:5:2782:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2783:5:2783:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2784:5:2784:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2785:5:2785:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2786:5:2786:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2787:5:2787:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2788:5:2788:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2789:5:2789:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2790:5:2790:28 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2791:5:2791:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2792:5:2792:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2793:5:2793:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2794:5:2794:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2795:5:2795:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2795:5:2795:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2795:5:2795:20 | ...::f(...) | T | main.rs:2547:5:2549:5 | dyn MyTrait | +| main.rs:2795:5:2795:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2795:16:2795:19 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2796:5:2796:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:4:19:4:23 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:4:19:4:23 | SelfParam | TRef | overloading.rs:2:5:11:5 | Self [trait FirstTrait] | | overloading.rs:4:34:6:9 | { ... } | | {EXTERNAL LOCATION} | bool | @@ -12051,249 +12054,255 @@ inferType | main.rs:2634:9:2634:9 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:2643:14:2643:17 | SelfParam | | main.rs:2639:5:2640:13 | S | | main.rs:2643:20:2643:21 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2646:16:2696:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2647:13:2647:13 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:2647:13:2647:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2647:17:2647:20 | None | | {EXTERNAL LOCATION} | Option | -| main.rs:2647:17:2647:20 | None | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2648:13:2648:13 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:2648:13:2648:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2648:30:2648:30 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:2648:30:2648:30 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2649:13:2649:13 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:2649:13:2649:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2649:17:2649:35 | ...::None | | {EXTERNAL LOCATION} | Option | -| main.rs:2649:17:2649:35 | ...::None | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2650:13:2650:13 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:2650:13:2650:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2650:17:2650:35 | ...::None::<...> | | {EXTERNAL LOCATION} | Option | -| main.rs:2650:17:2650:35 | ...::None::<...> | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2652:26:2652:28 | opt | | {EXTERNAL LOCATION} | Option | -| main.rs:2652:26:2652:28 | opt | T | main.rs:2652:23:2652:23 | T | -| main.rs:2652:42:2652:42 | x | | main.rs:2652:23:2652:23 | T | -| main.rs:2652:48:2652:49 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2646:41:2648:5 | { ... } | | main.rs:2646:22:2646:31 | T | +| main.rs:2647:9:2647:26 | ...::default(...) | | main.rs:2646:22:2646:31 | T | +| main.rs:2650:16:2703:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2651:13:2651:13 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2651:13:2651:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2651:17:2651:20 | None | | {EXTERNAL LOCATION} | Option | +| main.rs:2651:17:2651:20 | None | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2652:13:2652:13 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2652:13:2652:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2652:30:2652:30 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2652:30:2652:30 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2653:13:2653:13 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2653:13:2653:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2653:17:2653:35 | ...::None | | {EXTERNAL LOCATION} | Option | +| main.rs:2653:17:2653:35 | ...::None | T | {EXTERNAL LOCATION} | i32 | | main.rs:2654:13:2654:13 | x | | {EXTERNAL LOCATION} | Option | | main.rs:2654:13:2654:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2654:17:2654:20 | None | | {EXTERNAL LOCATION} | Option | -| main.rs:2654:17:2654:20 | None | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2655:9:2655:24 | pin_option(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2655:20:2655:20 | x | | {EXTERNAL LOCATION} | Option | -| main.rs:2655:20:2655:20 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2655:23:2655:23 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2662:13:2662:13 | x | | main.rs:2657:9:2660:9 | MyEither | -| main.rs:2662:13:2662:13 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2662:13:2662:13 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2662:17:2662:39 | ...::A {...} | | main.rs:2657:9:2660:9 | MyEither | -| main.rs:2662:17:2662:39 | ...::A {...} | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2662:17:2662:39 | ...::A {...} | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2662:37:2662:37 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2663:13:2663:13 | x | | main.rs:2657:9:2660:9 | MyEither | -| main.rs:2663:13:2663:13 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2663:13:2663:13 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2663:40:2663:40 | x | | main.rs:2657:9:2660:9 | MyEither | -| main.rs:2663:40:2663:40 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2663:40:2663:40 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2664:13:2664:13 | x | | main.rs:2657:9:2660:9 | MyEither | -| main.rs:2664:13:2664:13 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2664:13:2664:13 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2664:17:2664:52 | ...::A {...} | | main.rs:2657:9:2660:9 | MyEither | -| main.rs:2664:17:2664:52 | ...::A {...} | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2664:17:2664:52 | ...::A {...} | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2664:50:2664:50 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2666:13:2666:13 | x | | main.rs:2657:9:2660:9 | MyEither | +| main.rs:2654:17:2654:35 | ...::None::<...> | | {EXTERNAL LOCATION} | Option | +| main.rs:2654:17:2654:35 | ...::None::<...> | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2656:26:2656:28 | opt | | {EXTERNAL LOCATION} | Option | +| main.rs:2656:26:2656:28 | opt | T | main.rs:2656:23:2656:23 | T | +| main.rs:2656:42:2656:42 | x | | main.rs:2656:23:2656:23 | T | +| main.rs:2656:48:2656:49 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2658:13:2658:13 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2658:13:2658:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2658:17:2658:20 | None | | {EXTERNAL LOCATION} | Option | +| main.rs:2658:17:2658:20 | None | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2659:9:2659:24 | pin_option(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2659:20:2659:20 | x | | {EXTERNAL LOCATION} | Option | +| main.rs:2659:20:2659:20 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2659:23:2659:23 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2666:13:2666:13 | x | | main.rs:2661:9:2664:9 | MyEither | | main.rs:2666:13:2666:13 | x | T1 | {EXTERNAL LOCATION} | i32 | | main.rs:2666:13:2666:13 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2666:17:2668:9 | ...::B::<...> {...} | | main.rs:2657:9:2660:9 | MyEither | -| main.rs:2666:17:2668:9 | ...::B::<...> {...} | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2666:17:2668:9 | ...::B::<...> {...} | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2667:20:2667:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2670:29:2670:29 | e | | main.rs:2657:9:2660:9 | MyEither | -| main.rs:2670:29:2670:29 | e | T1 | main.rs:2670:26:2670:26 | T | -| main.rs:2670:29:2670:29 | e | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2670:53:2670:53 | x | | main.rs:2670:26:2670:26 | T | -| main.rs:2670:59:2670:60 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2673:13:2673:13 | x | | main.rs:2657:9:2660:9 | MyEither | -| main.rs:2673:13:2673:13 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2673:13:2673:13 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2673:17:2675:9 | ...::B {...} | | main.rs:2657:9:2660:9 | MyEither | -| main.rs:2673:17:2675:9 | ...::B {...} | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2673:17:2675:9 | ...::B {...} | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2674:20:2674:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2676:9:2676:27 | pin_my_either(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2676:23:2676:23 | x | | main.rs:2657:9:2660:9 | MyEither | -| main.rs:2676:23:2676:23 | x | T1 | {EXTERNAL LOCATION} | i32 | -| main.rs:2676:23:2676:23 | x | T2 | {EXTERNAL LOCATION} | String | -| main.rs:2676:26:2676:26 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2678:13:2678:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:2678:13:2678:13 | x | E | {EXTERNAL LOCATION} | String | -| main.rs:2678:13:2678:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2678:17:2678:29 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:2678:17:2678:29 | ...::Ok(...) | E | {EXTERNAL LOCATION} | String | -| main.rs:2678:17:2678:29 | ...::Ok(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2678:28:2678:28 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2679:13:2679:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:2679:13:2679:13 | x | E | {EXTERNAL LOCATION} | String | -| main.rs:2679:13:2679:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2679:38:2679:38 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:2679:38:2679:38 | x | E | {EXTERNAL LOCATION} | String | -| main.rs:2679:38:2679:38 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2680:13:2680:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:2680:13:2680:13 | x | E | {EXTERNAL LOCATION} | String | -| main.rs:2680:13:2680:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2680:17:2680:44 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:2680:17:2680:44 | ...::Ok(...) | E | {EXTERNAL LOCATION} | String | -| main.rs:2680:17:2680:44 | ...::Ok(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2680:43:2680:43 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2681:13:2681:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:2681:13:2681:13 | x | E | {EXTERNAL LOCATION} | String | -| main.rs:2681:13:2681:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2681:17:2681:44 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:2681:17:2681:44 | ...::Ok::<...>(...) | E | {EXTERNAL LOCATION} | String | -| main.rs:2681:17:2681:44 | ...::Ok::<...>(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2681:43:2681:43 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2683:29:2683:31 | res | | {EXTERNAL LOCATION} | Result | -| main.rs:2683:29:2683:31 | res | E | main.rs:2683:26:2683:26 | E | -| main.rs:2683:29:2683:31 | res | T | main.rs:2683:23:2683:23 | T | -| main.rs:2683:48:2683:48 | x | | main.rs:2683:26:2683:26 | E | -| main.rs:2683:54:2683:55 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2666:17:2666:39 | ...::A {...} | | main.rs:2661:9:2664:9 | MyEither | +| main.rs:2666:17:2666:39 | ...::A {...} | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2666:17:2666:39 | ...::A {...} | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2666:37:2666:37 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2667:13:2667:13 | x | | main.rs:2661:9:2664:9 | MyEither | +| main.rs:2667:13:2667:13 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2667:13:2667:13 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2667:40:2667:40 | x | | main.rs:2661:9:2664:9 | MyEither | +| main.rs:2667:40:2667:40 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2667:40:2667:40 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2668:13:2668:13 | x | | main.rs:2661:9:2664:9 | MyEither | +| main.rs:2668:13:2668:13 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2668:13:2668:13 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2668:17:2668:52 | ...::A {...} | | main.rs:2661:9:2664:9 | MyEither | +| main.rs:2668:17:2668:52 | ...::A {...} | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2668:17:2668:52 | ...::A {...} | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2668:50:2668:50 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2670:13:2670:13 | x | | main.rs:2661:9:2664:9 | MyEither | +| main.rs:2670:13:2670:13 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2670:13:2670:13 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2670:17:2672:9 | ...::B::<...> {...} | | main.rs:2661:9:2664:9 | MyEither | +| main.rs:2670:17:2672:9 | ...::B::<...> {...} | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2670:17:2672:9 | ...::B::<...> {...} | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2671:20:2671:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2674:29:2674:29 | e | | main.rs:2661:9:2664:9 | MyEither | +| main.rs:2674:29:2674:29 | e | T1 | main.rs:2674:26:2674:26 | T | +| main.rs:2674:29:2674:29 | e | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2674:53:2674:53 | x | | main.rs:2674:26:2674:26 | T | +| main.rs:2674:59:2674:60 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2677:13:2677:13 | x | | main.rs:2661:9:2664:9 | MyEither | +| main.rs:2677:13:2677:13 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2677:13:2677:13 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2677:17:2679:9 | ...::B {...} | | main.rs:2661:9:2664:9 | MyEither | +| main.rs:2677:17:2679:9 | ...::B {...} | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2677:17:2679:9 | ...::B {...} | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2678:20:2678:32 | ...::new(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2680:9:2680:27 | pin_my_either(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2680:23:2680:23 | x | | main.rs:2661:9:2664:9 | MyEither | +| main.rs:2680:23:2680:23 | x | T1 | {EXTERNAL LOCATION} | i32 | +| main.rs:2680:23:2680:23 | x | T2 | {EXTERNAL LOCATION} | String | +| main.rs:2680:26:2680:26 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2682:13:2682:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:2682:13:2682:13 | x | E | {EXTERNAL LOCATION} | String | +| main.rs:2682:13:2682:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2682:17:2682:29 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:2682:17:2682:29 | ...::Ok(...) | E | {EXTERNAL LOCATION} | String | +| main.rs:2682:17:2682:29 | ...::Ok(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2682:28:2682:28 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2683:13:2683:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:2683:13:2683:13 | x | E | {EXTERNAL LOCATION} | String | +| main.rs:2683:13:2683:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2683:38:2683:38 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:2683:38:2683:38 | x | E | {EXTERNAL LOCATION} | String | +| main.rs:2683:38:2683:38 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2684:13:2684:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:2684:13:2684:13 | x | E | {EXTERNAL LOCATION} | String | +| main.rs:2684:13:2684:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2684:17:2684:44 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:2684:17:2684:44 | ...::Ok(...) | E | {EXTERNAL LOCATION} | String | +| main.rs:2684:17:2684:44 | ...::Ok(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2684:43:2684:43 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:2685:13:2685:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:2685:13:2685:13 | x | E | {EXTERNAL LOCATION} | bool | +| main.rs:2685:13:2685:13 | x | E | {EXTERNAL LOCATION} | String | | main.rs:2685:13:2685:13 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2685:17:2685:29 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:2685:17:2685:29 | ...::Ok(...) | E | {EXTERNAL LOCATION} | bool | -| main.rs:2685:17:2685:29 | ...::Ok(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2685:28:2685:28 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2686:9:2686:28 | pin_result(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2686:20:2686:20 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:2686:20:2686:20 | x | E | {EXTERNAL LOCATION} | bool | -| main.rs:2686:20:2686:20 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2686:23:2686:27 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:2688:17:2688:17 | x | | {EXTERNAL LOCATION} | Vec | -| main.rs:2688:17:2688:17 | x | A | {EXTERNAL LOCATION} | Global | -| main.rs:2688:17:2688:17 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2688:21:2688:30 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2688:21:2688:30 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2688:21:2688:30 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2689:9:2689:9 | x | | {EXTERNAL LOCATION} | Vec | -| main.rs:2689:9:2689:9 | x | A | {EXTERNAL LOCATION} | Global | -| main.rs:2689:9:2689:9 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2689:9:2689:17 | x.push(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2689:16:2689:16 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2691:13:2691:13 | y | | {EXTERNAL LOCATION} | i32 | -| main.rs:2691:17:2691:34 | ...::default(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:2692:9:2692:9 | x | | {EXTERNAL LOCATION} | Vec | -| main.rs:2692:9:2692:9 | x | A | {EXTERNAL LOCATION} | Global | -| main.rs:2692:9:2692:9 | x | T | {EXTERNAL LOCATION} | i32 | -| main.rs:2692:9:2692:17 | x.push(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2692:16:2692:16 | y | | {EXTERNAL LOCATION} | i32 | -| main.rs:2694:13:2694:13 | s | | main.rs:2639:5:2640:13 | S | -| main.rs:2694:17:2694:34 | ...::default(...) | | main.rs:2639:5:2640:13 | S | -| main.rs:2695:9:2695:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2695:14:2695:14 | s | | main.rs:2639:5:2640:13 | S | -| main.rs:2702:14:2702:17 | SelfParam | | main.rs:2700:5:2708:5 | Self [trait MyTrait] | -| main.rs:2705:14:2705:18 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2705:14:2705:18 | SelfParam | TRef | main.rs:2700:5:2708:5 | Self [trait MyTrait] | -| main.rs:2705:21:2705:25 | other | | {EXTERNAL LOCATION} | & | -| main.rs:2705:21:2705:25 | other | TRef | main.rs:2700:5:2708:5 | Self [trait MyTrait] | -| main.rs:2705:44:2707:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:2705:44:2707:9 | { ... } | TRef | main.rs:2700:5:2708:5 | Self [trait MyTrait] | -| main.rs:2706:13:2706:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2706:13:2706:16 | self | TRef | main.rs:2700:5:2708:5 | Self [trait MyTrait] | -| main.rs:2706:13:2706:20 | self.f() | | {EXTERNAL LOCATION} | & | -| main.rs:2706:13:2706:20 | self.f() | TRef | main.rs:2700:5:2708:5 | Self [trait MyTrait] | -| main.rs:2712:14:2712:17 | SelfParam | | {EXTERNAL LOCATION} | i32 | -| main.rs:2712:28:2714:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2713:13:2713:16 | self | | {EXTERNAL LOCATION} | i32 | -| main.rs:2719:14:2719:17 | SelfParam | | {EXTERNAL LOCATION} | usize | -| main.rs:2719:28:2721:9 | { ... } | | {EXTERNAL LOCATION} | usize | -| main.rs:2720:13:2720:16 | self | | {EXTERNAL LOCATION} | usize | -| main.rs:2726:14:2726:17 | SelfParam | | {EXTERNAL LOCATION} | & | -| main.rs:2726:14:2726:17 | SelfParam | TRef | main.rs:2724:10:2724:10 | T | -| main.rs:2726:28:2728:9 | { ... } | | {EXTERNAL LOCATION} | & | -| main.rs:2726:28:2728:9 | { ... } | TRef | main.rs:2724:10:2724:10 | T | -| main.rs:2727:13:2727:16 | self | | {EXTERNAL LOCATION} | & | -| main.rs:2727:13:2727:16 | self | TRef | main.rs:2724:10:2724:10 | T | -| main.rs:2731:25:2735:5 | { ... } | | {EXTERNAL LOCATION} | usize | -| main.rs:2732:17:2732:17 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2732:17:2732:17 | x | | {EXTERNAL LOCATION} | usize | -| main.rs:2732:21:2732:21 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2732:21:2732:21 | 0 | | {EXTERNAL LOCATION} | usize | -| main.rs:2733:9:2733:9 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2733:9:2733:9 | x | | {EXTERNAL LOCATION} | usize | -| main.rs:2733:9:2733:17 | ... = ... | | {EXTERNAL LOCATION} | () | -| main.rs:2733:13:2733:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2733:13:2733:13 | x | | {EXTERNAL LOCATION} | usize | -| main.rs:2733:13:2733:17 | x.f() | | {EXTERNAL LOCATION} | i32 | -| main.rs:2733:13:2733:17 | x.f() | | {EXTERNAL LOCATION} | usize | -| main.rs:2734:9:2734:9 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2734:9:2734:9 | x | | {EXTERNAL LOCATION} | usize | -| main.rs:2737:12:2745:5 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2738:13:2738:13 | x | | {EXTERNAL LOCATION} | usize | -| main.rs:2738:24:2738:24 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2738:24:2738:24 | 0 | | {EXTERNAL LOCATION} | usize | -| main.rs:2739:13:2739:13 | y | | {EXTERNAL LOCATION} | & | -| main.rs:2739:13:2739:13 | y | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:2739:17:2739:18 | &1 | | {EXTERNAL LOCATION} | & | -| main.rs:2739:17:2739:18 | &1 | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:2739:18:2739:18 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2740:13:2740:13 | z | | {EXTERNAL LOCATION} | & | -| main.rs:2740:13:2740:13 | z | TRef | {EXTERNAL LOCATION} | usize | -| main.rs:2740:17:2740:17 | x | | {EXTERNAL LOCATION} | usize | -| main.rs:2740:17:2740:22 | x.g(...) | | {EXTERNAL LOCATION} | & | -| main.rs:2740:17:2740:22 | x.g(...) | TRef | {EXTERNAL LOCATION} | usize | -| main.rs:2740:21:2740:21 | y | | {EXTERNAL LOCATION} | & | -| main.rs:2740:21:2740:21 | y | TRef | {EXTERNAL LOCATION} | i32 | -| main.rs:2742:13:2742:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2742:17:2742:17 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2743:13:2743:13 | y | | {EXTERNAL LOCATION} | usize | -| main.rs:2743:24:2743:24 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2743:24:2743:24 | 1 | | {EXTERNAL LOCATION} | usize | -| main.rs:2744:13:2744:13 | z | | {EXTERNAL LOCATION} | i32 | -| main.rs:2744:17:2744:17 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:2744:17:2744:24 | x.max(...) | | {EXTERNAL LOCATION} | i32 | -| main.rs:2744:23:2744:23 | y | | {EXTERNAL LOCATION} | usize | -| main.rs:2755:11:2790:1 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2756:5:2756:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2757:5:2757:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2758:5:2758:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2758:20:2758:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2758:41:2758:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2759:5:2759:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2760:5:2760:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2761:5:2761:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2762:5:2762:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2685:17:2685:44 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:2685:17:2685:44 | ...::Ok::<...>(...) | E | {EXTERNAL LOCATION} | String | +| main.rs:2685:17:2685:44 | ...::Ok::<...>(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2685:43:2685:43 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2687:29:2687:31 | res | | {EXTERNAL LOCATION} | Result | +| main.rs:2687:29:2687:31 | res | E | main.rs:2687:26:2687:26 | E | +| main.rs:2687:29:2687:31 | res | T | main.rs:2687:23:2687:23 | T | +| main.rs:2687:48:2687:48 | x | | main.rs:2687:26:2687:26 | E | +| main.rs:2687:54:2687:55 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2689:13:2689:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:2689:13:2689:13 | x | E | {EXTERNAL LOCATION} | bool | +| main.rs:2689:13:2689:13 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2689:17:2689:29 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:2689:17:2689:29 | ...::Ok(...) | E | {EXTERNAL LOCATION} | bool | +| main.rs:2689:17:2689:29 | ...::Ok(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2689:28:2689:28 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2690:9:2690:28 | pin_result(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2690:20:2690:20 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:2690:20:2690:20 | x | E | {EXTERNAL LOCATION} | bool | +| main.rs:2690:20:2690:20 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2690:23:2690:27 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:2692:17:2692:17 | x | | {EXTERNAL LOCATION} | Vec | +| main.rs:2692:17:2692:17 | x | A | {EXTERNAL LOCATION} | Global | +| main.rs:2692:17:2692:17 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2692:21:2692:30 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:2692:21:2692:30 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2692:21:2692:30 | ...::new(...) | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2693:9:2693:9 | x | | {EXTERNAL LOCATION} | Vec | +| main.rs:2693:9:2693:9 | x | A | {EXTERNAL LOCATION} | Global | +| main.rs:2693:9:2693:9 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2693:9:2693:17 | x.push(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2693:16:2693:16 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2695:13:2695:13 | y | | {EXTERNAL LOCATION} | i32 | +| main.rs:2695:17:2695:34 | ...::default(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:2696:9:2696:9 | x | | {EXTERNAL LOCATION} | Vec | +| main.rs:2696:9:2696:9 | x | A | {EXTERNAL LOCATION} | Global | +| main.rs:2696:9:2696:9 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2696:9:2696:17 | x.push(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2696:16:2696:16 | y | | {EXTERNAL LOCATION} | i32 | +| main.rs:2698:13:2698:13 | s | | main.rs:2639:5:2640:13 | S | +| main.rs:2698:17:2698:34 | ...::default(...) | | main.rs:2639:5:2640:13 | S | +| main.rs:2699:9:2699:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2699:14:2699:14 | s | | main.rs:2639:5:2640:13 | S | +| main.rs:2702:9:2702:9 | x | | {EXTERNAL LOCATION} | Vec | +| main.rs:2702:9:2702:9 | x | A | {EXTERNAL LOCATION} | Global | +| main.rs:2702:9:2702:9 | x | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2702:9:2702:17 | x.push(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2709:14:2709:17 | SelfParam | | main.rs:2707:5:2715:5 | Self [trait MyTrait] | +| main.rs:2712:14:2712:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2712:14:2712:18 | SelfParam | TRef | main.rs:2707:5:2715:5 | Self [trait MyTrait] | +| main.rs:2712:21:2712:25 | other | | {EXTERNAL LOCATION} | & | +| main.rs:2712:21:2712:25 | other | TRef | main.rs:2707:5:2715:5 | Self [trait MyTrait] | +| main.rs:2712:44:2714:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:2712:44:2714:9 | { ... } | TRef | main.rs:2707:5:2715:5 | Self [trait MyTrait] | +| main.rs:2713:13:2713:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2713:13:2713:16 | self | TRef | main.rs:2707:5:2715:5 | Self [trait MyTrait] | +| main.rs:2713:13:2713:20 | self.f() | | {EXTERNAL LOCATION} | & | +| main.rs:2713:13:2713:20 | self.f() | TRef | main.rs:2707:5:2715:5 | Self [trait MyTrait] | +| main.rs:2719:14:2719:17 | SelfParam | | {EXTERNAL LOCATION} | i32 | +| main.rs:2719:28:2721:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:2720:13:2720:16 | self | | {EXTERNAL LOCATION} | i32 | +| main.rs:2726:14:2726:17 | SelfParam | | {EXTERNAL LOCATION} | usize | +| main.rs:2726:28:2728:9 | { ... } | | {EXTERNAL LOCATION} | usize | +| main.rs:2727:13:2727:16 | self | | {EXTERNAL LOCATION} | usize | +| main.rs:2733:14:2733:17 | SelfParam | | {EXTERNAL LOCATION} | & | +| main.rs:2733:14:2733:17 | SelfParam | TRef | main.rs:2731:10:2731:10 | T | +| main.rs:2733:28:2735:9 | { ... } | | {EXTERNAL LOCATION} | & | +| main.rs:2733:28:2735:9 | { ... } | TRef | main.rs:2731:10:2731:10 | T | +| main.rs:2734:13:2734:16 | self | | {EXTERNAL LOCATION} | & | +| main.rs:2734:13:2734:16 | self | TRef | main.rs:2731:10:2731:10 | T | +| main.rs:2738:25:2742:5 | { ... } | | {EXTERNAL LOCATION} | usize | +| main.rs:2739:17:2739:17 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2739:17:2739:17 | x | | {EXTERNAL LOCATION} | usize | +| main.rs:2739:21:2739:21 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2739:21:2739:21 | 0 | | {EXTERNAL LOCATION} | usize | +| main.rs:2740:9:2740:9 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2740:9:2740:9 | x | | {EXTERNAL LOCATION} | usize | +| main.rs:2740:9:2740:17 | ... = ... | | {EXTERNAL LOCATION} | () | +| main.rs:2740:13:2740:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2740:13:2740:13 | x | | {EXTERNAL LOCATION} | usize | +| main.rs:2740:13:2740:17 | x.f() | | {EXTERNAL LOCATION} | i32 | +| main.rs:2740:13:2740:17 | x.f() | | {EXTERNAL LOCATION} | usize | +| main.rs:2741:9:2741:9 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2741:9:2741:9 | x | | {EXTERNAL LOCATION} | usize | +| main.rs:2744:12:2752:5 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2745:13:2745:13 | x | | {EXTERNAL LOCATION} | usize | +| main.rs:2745:24:2745:24 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2745:24:2745:24 | 0 | | {EXTERNAL LOCATION} | usize | +| main.rs:2746:13:2746:13 | y | | {EXTERNAL LOCATION} | & | +| main.rs:2746:13:2746:13 | y | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:2746:17:2746:18 | &1 | | {EXTERNAL LOCATION} | & | +| main.rs:2746:17:2746:18 | &1 | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:2746:18:2746:18 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2747:13:2747:13 | z | | {EXTERNAL LOCATION} | & | +| main.rs:2747:13:2747:13 | z | TRef | {EXTERNAL LOCATION} | usize | +| main.rs:2747:17:2747:17 | x | | {EXTERNAL LOCATION} | usize | +| main.rs:2747:17:2747:22 | x.g(...) | | {EXTERNAL LOCATION} | & | +| main.rs:2747:17:2747:22 | x.g(...) | TRef | {EXTERNAL LOCATION} | usize | +| main.rs:2747:21:2747:21 | y | | {EXTERNAL LOCATION} | & | +| main.rs:2747:21:2747:21 | y | TRef | {EXTERNAL LOCATION} | i32 | +| main.rs:2749:13:2749:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2749:17:2749:17 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2750:13:2750:13 | y | | {EXTERNAL LOCATION} | usize | +| main.rs:2750:24:2750:24 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2750:24:2750:24 | 1 | | {EXTERNAL LOCATION} | usize | +| main.rs:2751:13:2751:13 | z | | {EXTERNAL LOCATION} | i32 | +| main.rs:2751:17:2751:17 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:2751:17:2751:24 | x.max(...) | | {EXTERNAL LOCATION} | i32 | +| main.rs:2751:23:2751:23 | y | | {EXTERNAL LOCATION} | usize | +| main.rs:2762:11:2797:1 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2763:5:2763:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2764:5:2764:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2765:5:2765:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2766:5:2766:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2767:5:2767:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2768:5:2768:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2769:5:2769:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2770:5:2770:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2771:5:2771:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2772:5:2772:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2773:5:2773:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2774:5:2774:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:2774:5:2774:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () | -| main.rs:2775:5:2775:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2776:5:2776:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2777:5:2777:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2778:5:2778:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2779:5:2779:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2780:5:2780:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2781:5:2781:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2782:5:2782:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2783:5:2783:28 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2784:5:2784:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2785:5:2785:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2786:5:2786:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2787:5:2787:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2788:5:2788:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2788:5:2788:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2788:5:2788:20 | ...::f(...) | T | main.rs:2547:5:2549:5 | dyn MyTrait | -| main.rs:2788:5:2788:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | -| main.rs:2788:16:2788:19 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2789:5:2789:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2764:5:2764:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2765:5:2765:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2765:20:2765:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2765:41:2765:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2766:5:2766:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2767:5:2767:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2768:5:2768:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2769:5:2769:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2770:5:2770:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2771:5:2771:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2772:5:2772:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2773:5:2773:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2774:5:2774:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2775:5:2775:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2776:5:2776:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2777:5:2777:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2778:5:2778:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2779:5:2779:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2780:5:2780:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2781:5:2781:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2781:5:2781:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () | +| main.rs:2782:5:2782:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2783:5:2783:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2784:5:2784:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2785:5:2785:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2786:5:2786:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2787:5:2787:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2788:5:2788:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2789:5:2789:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2790:5:2790:28 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2791:5:2791:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2792:5:2792:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2793:5:2793:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2794:5:2794:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2795:5:2795:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2795:5:2795:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2795:5:2795:20 | ...::f(...) | T | main.rs:2547:5:2549:5 | dyn MyTrait | +| main.rs:2795:5:2795:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2795:16:2795:19 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2796:5:2796:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:4:19:4:23 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:4:19:4:23 | SelfParam | TRef | overloading.rs:2:5:11:5 | Self [trait FirstTrait] | | overloading.rs:4:34:6:9 | { ... } | | {EXTERNAL LOCATION} | bool | From ca2838b361b87910512f480b85e515cbe2bffb47 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 13 Mar 2026 15:32:47 +0100 Subject: [PATCH 031/185] Address review comments --- .../elements/internal/InvocationExprImpl.qll | 3 + .../internal/typeinference/TypeInference.qll | 63 +++++++++++-------- .../test/library-tests/type-inference/main.rs | 2 +- .../type-inference/type-inference.expected | 3 + 4 files changed, 44 insertions(+), 27 deletions(-) diff --git a/rust/ql/lib/codeql/rust/elements/internal/InvocationExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/InvocationExprImpl.qll index 412a3b51ae8..685eee1e43a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/InvocationExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/InvocationExprImpl.qll @@ -6,6 +6,9 @@ module Impl { private newtype TArgumentPosition = TPositionalArgumentPosition(int i) { + // For the type `FunctionPosition` used by type inference, we work with function-call syntax + // adjusted positions, so a call like `x.m(a, b, c)` needs positions `0` through `3`; for this + // reason, there is no `- 1` after `max(...)` below. i in [0 .. max([any(ParamList l).getNumberOfParams(), any(ArgList l).getNumberOfArgs()])] } or TSelfArgumentPosition() or diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll index 2720f9b25f3..c194531a078 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll @@ -343,8 +343,8 @@ private class FunctionDeclaration extends Function { } } -private class AssocFunction extends FunctionDeclaration { - AssocFunction() { this.isAssoc(_) } +private class AssocFunctionDeclaration extends FunctionDeclaration { + AssocFunctionDeclaration() { this.isAssoc(_) } } pragma[nomagic] @@ -1114,10 +1114,10 @@ private Trait getCallExprTraitQualifier(CallExpr ce) { } pragma[nomagic] -private predicate nonAssocFunction(ItemNode i) { not i instanceof AssocFunction } +private predicate nonAssocFunction(ItemNode i) { not i instanceof AssocFunctionDeclaration } /** - * A call expression that can resolve to something that is not an associated + * A call expression that can only resolve to something that is not an associated * function, and hence does not need type inference for resolution. */ private class NonAssocCallExpr extends CallExpr { @@ -1201,9 +1201,7 @@ private module ContextTyping { abstract class ContextTypedCallCand extends AstNode { abstract Type getTypeArgument(TypeArgumentPosition apos, TypePath path); - private predicate hasTypeArgument(TypeArgumentPosition apos) { - exists(this.getTypeArgument(apos, _)) - } + predicate hasTypeArgument(TypeArgumentPosition apos) { exists(this.getTypeArgument(apos, _)) } /** * Holds if this call resolves to `target` inside `i`, and the return type @@ -2209,7 +2207,7 @@ private module AssocFunctionResolution { * in `derefChain` and `borrow`. */ pragma[nomagic] - AssocFunction resolveCallTarget( + AssocFunctionDeclaration resolveCallTarget( ImplOrTraitItemNode i, FunctionPosition selfPos, DerefChain derefChain, BorrowKind borrow ) { exists(AssocFunctionCallCand afcc | @@ -2288,7 +2286,9 @@ private module AssocFunctionResolution { exists(getCallExprPathQualifier(this)) and // even if a target cannot be resolved by path resolution, it may still // be possible to resolve a blanket implementation (so not `forex`) - forall(ItemNode i | i = CallExprImpl::getResolvedFunction(this) | i instanceof AssocFunction) + forall(ItemNode i | i = CallExprImpl::getResolvedFunction(this) | + i instanceof AssocFunctionDeclaration + ) } override predicate hasNameAndArity(string name, int arity) { @@ -2373,7 +2373,9 @@ private module AssocFunctionResolution { } pragma[nomagic] - private AssocFunction getAssocFunctionSuccessor(ImplOrTraitItemNode i, string name, int arity) { + private AssocFunctionDeclaration getAssocFunctionSuccessor( + ImplOrTraitItemNode i, string name, int arity + ) { result = i.getASuccessor(name) and arity = result.getNumberOfParamsInclSelf() } @@ -2488,7 +2490,7 @@ private module AssocFunctionResolution { } pragma[nomagic] - AssocFunction resolveCallTargetCand(ImplOrTraitItemNode i) { + AssocFunctionDeclaration resolveCallTargetCand(ImplOrTraitItemNode i) { exists(string name, int arity | this.selfArgIsInstantiationOf(i, name, arity) and result = getAssocFunctionSuccessor(i, name, arity) @@ -2497,7 +2499,7 @@ private module AssocFunctionResolution { /** Gets the associated function targeted by this call, if any. */ pragma[nomagic] - AssocFunction resolveCallTarget(ImplOrTraitItemNode i) { + AssocFunctionDeclaration resolveCallTarget(ImplOrTraitItemNode i) { result = this.resolveCallTargetCand(i) and not FunctionOverloading::functionResolutionDependsOnArgument(i, result, _, _) or @@ -2896,7 +2898,7 @@ private module FunctionCallMatchingInput implements MatchingWithEnvironmentInput result = this.getInferredNonSelfType(pos, path) } - private AssocFunction getTarget(ImplOrTraitItemNode i, string derefChainBorrow) { + private AssocFunctionDeclaration getTarget(ImplOrTraitItemNode i, string derefChainBorrow) { exists(DerefChain derefChain, BorrowKind borrow | derefChainBorrow = encodeDerefChainBorrow(derefChain, borrow) and result = super.resolveCallTarget(i, _, derefChain, borrow) // mutual recursion; resolving method calls requires resolving types and vice versa @@ -2904,10 +2906,7 @@ private module FunctionCallMatchingInput implements MatchingWithEnvironmentInput } override Declaration getTarget(string derefChainBorrow) { - exists(ImplOrTraitItemNodeOption i, AssocFunction f | - f = this.getTarget(i.asSome(), derefChainBorrow) and - result = TFunctionDeclaration(i, f) - ) + exists(ImplOrTraitItemNode i | result.isAssocFunction(i, this.getTarget(i, derefChainBorrow))) } pragma[nomagic] @@ -2926,7 +2925,9 @@ private module FunctionCallMatchingInput implements MatchingWithEnvironmentInput } } - private class NonAssocFunctionCallAccess extends Access instanceof NonAssocCallExpr { + private class NonAssocFunctionCallAccess extends Access instanceof NonAssocCallExpr, + CallExprImpl::CallExprCall + { pragma[nomagic] override Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { result = NonAssocCallExpr.super.getTypeArgument(apos, path) @@ -2949,11 +2950,9 @@ private module FunctionCallMatchingInput implements MatchingWithEnvironmentInput pragma[nomagic] private Declaration getTarget() { - exists(ImplOrTraitItemNodeOption i, FunctionDeclaration f | - f = super.resolveCallTargetViaPathResolution() and - f.isDirectlyFor(i) and - result = TFunctionDeclaration(i, f) - ) + result = + TFunctionDeclaration(ImplOrTraitItemNodeOption::none_(), + super.resolveCallTargetViaPathResolution()) } override Declaration getTarget(string derefChainBorrow) { @@ -2964,9 +2963,16 @@ private module FunctionCallMatchingInput implements MatchingWithEnvironmentInput pragma[nomagic] override predicate hasUnknownTypeAt(string derefChainBorrow, FunctionPosition pos, TypePath path) { derefChainBorrow = noDerefChainBorrow() and - exists(ImplOrTraitItemNodeOption i, FunctionDeclaration f | - TFunctionDeclaration(i, f) = this.getTarget() and - this.hasUnknownTypeAt(i.asSome(), f, pos, path) + exists(FunctionDeclaration f, TypeParameter tp | + f = super.resolveCallTargetViaPathResolution() and + pos.isReturn() and + tp = f.getReturnType(_, path) and + not tp = f.getParameterType(_, _, _) and + // check that no explicit type arguments have been supplied for `tp` + not exists(TypeArgumentPosition tapos | + this.hasTypeArgument(tapos) and + TTypeParamTypeParameter(tapos.asTypeParam()) = tp + ) ) } } @@ -3135,6 +3141,11 @@ private module TupleLikeConstructionMatchingInput implements MatchingInputSig { class Declaration = TupleLikeConstructor; class Access extends NonAssocCallExpr, ContextTyping::ContextTypedCallCand { + Access() { + this instanceof CallExprImpl::TupleStructExpr or + this instanceof CallExprImpl::TupleVariantExpr + } + override Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { result = NonAssocCallExpr.super.getTypeArgument(apos, path) } diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index ad77bd9febd..6c9f2c801d5 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -2698,7 +2698,7 @@ mod context_typed { let s = Default::default(); // $ target=default type=s:S S::f(s); // $ target=f - let z = free_function(); // $ target=free_function MISSING: type=z:i32 + let z = free_function(); // $ target=free_function type=z:i32 x.push(z); // $ target=push } } 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 6921fbde3de..feba4891a66 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -12195,10 +12195,13 @@ inferType | main.rs:2698:17:2698:34 | ...::default(...) | | main.rs:2639:5:2640:13 | S | | main.rs:2699:9:2699:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | | main.rs:2699:14:2699:14 | s | | main.rs:2639:5:2640:13 | S | +| main.rs:2701:13:2701:13 | z | | {EXTERNAL LOCATION} | i32 | +| main.rs:2701:17:2701:31 | free_function(...) | | {EXTERNAL LOCATION} | i32 | | main.rs:2702:9:2702:9 | x | | {EXTERNAL LOCATION} | Vec | | main.rs:2702:9:2702:9 | x | A | {EXTERNAL LOCATION} | Global | | main.rs:2702:9:2702:9 | x | T | {EXTERNAL LOCATION} | i32 | | main.rs:2702:9:2702:17 | x.push(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2702:16:2702:16 | z | | {EXTERNAL LOCATION} | i32 | | main.rs:2709:14:2709:17 | SelfParam | | main.rs:2707:5:2715:5 | Self [trait MyTrait] | | main.rs:2712:14:2712:18 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:2712:14:2712:18 | SelfParam | TRef | main.rs:2707:5:2715:5 | Self [trait MyTrait] | From 8c03136c252e22cc062b63f132d89235b3354633 Mon Sep 17 00:00:00 2001 From: Jeongsoo Lee Date: Fri, 13 Mar 2026 10:11:40 -0700 Subject: [PATCH 032/185] Revert "Expose the indirection index" This reverts commit 6c792e69b341de543d31598c63acbc8fa4cba429. --- .../semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll index d1eccf8c1cc..fe954c640d1 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll @@ -767,11 +767,10 @@ module Public { */ class UninitializedNode extends Node { LocalVariable v; - int indirectionIndex; UninitializedNode() { exists(SsaImpl::Definition def, SsaImpl::SourceVariable sv | - def.getIndirectionIndex() = indirectionIndex and + def.getIndirectionIndex() = 0 and def.getValue().asInstruction() instanceof UninitializedInstruction and SsaImpl::defToNode(this, def, sv) and v = sv.getBaseVariable().(SsaImpl::BaseIRVariable).getIRVariable().getAst() @@ -780,9 +779,6 @@ module Public { /** Gets the uninitialized local variable corresponding to this node. */ LocalVariable getLocalVariable() { result = v } - - /** Gets the level of indirection to get to this node. */ - int getIndirectionIndex() { result = indirectionIndex } } /** From d3066af2e2ca786bca7cc16c65613f07720c9ffc Mon Sep 17 00:00:00 2001 From: Jeongsoo Lee Date: Fri, 13 Mar 2026 11:39:57 -0700 Subject: [PATCH 033/185] Create `IndirectUninitializedNode` and add a bridge from it to `LocalVariable` This way the changes do not alter the meaning of `UninitializedNode`. In the meantime, the code still provides a specialized `Node` type `IndirectUninitializedNode` to access the nodes behind levels of indirection. --- .../ir/dataflow/internal/DataFlowNodes.qll | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll index fe954c640d1..6b201a7aa8b 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll @@ -617,6 +617,25 @@ module Public { */ LocalVariable asUninitialized() { result = this.(UninitializedNode).getLocalVariable() } + /** + * Gets the uninitialized local variable corresponding to this node behind + * the given levels of indirection, if any. + */ + LocalVariable asIndirectUninitialized(int indirectionIndex) { + exists(IndirectUninitializedNode indirectUninitializedNode | + this = indirectUninitializedNode and + indirectUninitializedNode.getIndirectionIndex() = indirectionIndex + | + result = indirectUninitializedNode.getLocalVariable() + ) + } + + /** + * Gets the uninitialized local variable corresponding to this node behind + * any levels of indirection, if any. + */ + LocalVariable asIndirectUninitialized() { result = this.asIndirectUninitialized(_) } + /** * Gets the positional parameter corresponding to the node that represents * the value of the parameter after `index` number of loads, if any. For @@ -781,6 +800,34 @@ module Public { LocalVariable getLocalVariable() { result = v } } + /** + * The value of an uninitialized local variable behind one or more levels of + * indirection, viewed as a node in a data flow graph. + * + * NOTE: For the direct value of the uninitialized local variable, see + * `UninitializedNode`. + */ + class IndirectUninitializedNode extends Node { + LocalVariable v; + int indirectionIndex; + + IndirectUninitializedNode() { + exists(SsaImpl::Definition def, SsaImpl::SourceVariable sv | + def.getIndirectionIndex() = indirectionIndex and + indirectionIndex > 0 and // With `indirectionIndex` = 0, this class becomes the same as `UninitializedNode`. + def.getValue().asInstruction() instanceof UninitializedInstruction and + SsaImpl::defToNode(this, def, sv) and + v = sv.getBaseVariable().(SsaImpl::BaseIRVariable).getIRVariable().getAst() + ) + } + + /** Gets the uninitialized local variable corresponding to this node. */ + LocalVariable getLocalVariable() { result = v } + + /** Gets the level of indirection to get to this node. */ + int getIndirectionIndex() { result = indirectionIndex } + } + /** * The value of a parameter at function entry, viewed as a node in a data * flow graph. This includes both explicit parameters such as `x` in `f(x)` From e70727524aa1d57d34211101d0b9bf9afe65c9c4 Mon Sep 17 00:00:00 2001 From: Taus Date: Mon, 16 Mar 2026 12:37:00 +0000 Subject: [PATCH 034/185] Python: Rename `prints` tag to `flow` The former was a remnant of copying the setup over from `ql/test/experimental/import-resolution/importflow.ql`. --- .../import-resolution-namespace-relative/pkg/helper.py | 2 +- .../experimental/import-resolution-namespace-relative/test.ql | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/python/ql/test/experimental/import-resolution-namespace-relative/pkg/helper.py b/python/ql/test/experimental/import-resolution-namespace-relative/pkg/helper.py index b9407161e08..760b239aa96 100644 --- a/python/ql/test/experimental/import-resolution-namespace-relative/pkg/helper.py +++ b/python/ql/test/experimental/import-resolution-namespace-relative/pkg/helper.py @@ -1,2 +1,2 @@ def process(value): - sink(value) #$ prints=source + sink(value) #$ flow=source diff --git a/python/ql/test/experimental/import-resolution-namespace-relative/test.ql b/python/ql/test/experimental/import-resolution-namespace-relative/test.ql index f826c02e423..4f5f09a527d 100644 --- a/python/ql/test/experimental/import-resolution-namespace-relative/test.ql +++ b/python/ql/test/experimental/import-resolution-namespace-relative/test.ql @@ -19,12 +19,12 @@ private module TestConfig implements DataFlow::ConfigSig { private module TestFlow = TaintTracking::Global; module FlowTest implements TestSig { - string getARelevantTag() { result = "prints" } + string getARelevantTag() { result = "flow" } predicate hasActualResult(Location location, string element, string tag, string value) { exists(DataFlow::Node sink | TestFlow::flow(_, sink) and - tag = "prints" and + tag = "flow" and location = sink.getLocation() and value = "source" and element = sink.toString() From 92718a98d0c9cf389f60cc7c79f08e90a80112db Mon Sep 17 00:00:00 2001 From: Taus Date: Mon, 16 Mar 2026 12:41:09 +0000 Subject: [PATCH 035/185] Python: Add test for package inside namespace package --- .../import-resolution-namespace-relative/pkg/helper.py | 3 +++ .../import-resolution-namespace-relative/pkg/sub/__init__.py | 0 .../import-resolution-namespace-relative/pkg/sub/caller2.py | 5 +++++ 3 files changed, 8 insertions(+) create mode 100644 python/ql/test/experimental/import-resolution-namespace-relative/pkg/sub/__init__.py create mode 100644 python/ql/test/experimental/import-resolution-namespace-relative/pkg/sub/caller2.py diff --git a/python/ql/test/experimental/import-resolution-namespace-relative/pkg/helper.py b/python/ql/test/experimental/import-resolution-namespace-relative/pkg/helper.py index 760b239aa96..f75e9957738 100644 --- a/python/ql/test/experimental/import-resolution-namespace-relative/pkg/helper.py +++ b/python/ql/test/experimental/import-resolution-namespace-relative/pkg/helper.py @@ -1,2 +1,5 @@ def process(value): sink(value) #$ flow=source + +def process2(value): + sink(value) #$ flow=source diff --git a/python/ql/test/experimental/import-resolution-namespace-relative/pkg/sub/__init__.py b/python/ql/test/experimental/import-resolution-namespace-relative/pkg/sub/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/ql/test/experimental/import-resolution-namespace-relative/pkg/sub/caller2.py b/python/ql/test/experimental/import-resolution-namespace-relative/pkg/sub/caller2.py new file mode 100644 index 00000000000..3afab28cd42 --- /dev/null +++ b/python/ql/test/experimental/import-resolution-namespace-relative/pkg/sub/caller2.py @@ -0,0 +1,5 @@ +from .. import helper + +def use_multi_level_relative(): + tainted = source() + helper.process2(tainted) From e3dbf5b022455c1c9832dc4eb153aabda071d245 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 16 Mar 2026 16:03:22 +0000 Subject: [PATCH 036/185] Post-release preparation for codeql-cli-2.25.0 --- actions/ql/lib/qlpack.yml | 2 +- actions/ql/src/qlpack.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- rust/ql/lib/qlpack.yml | 2 +- rust/ql/src/qlpack.yml | 2 +- shared/concepts/qlpack.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/quantum/qlpack.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/qlpack.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typeflow/qlpack.yml | 2 +- shared/typeinference/qlpack.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/xml/qlpack.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 41 files changed, 41 insertions(+), 41 deletions(-) diff --git a/actions/ql/lib/qlpack.yml b/actions/ql/lib/qlpack.yml index 9a23a378da6..a6806dc906f 100644 --- a/actions/ql/lib/qlpack.yml +++ b/actions/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-all -version: 0.4.30 +version: 0.4.31-dev library: true warnOnImplicitThis: true dependencies: diff --git a/actions/ql/src/qlpack.yml b/actions/ql/src/qlpack.yml index 823050fa00b..0c097847479 100644 --- a/actions/ql/src/qlpack.yml +++ b/actions/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-queries -version: 0.6.22 +version: 0.6.23-dev library: false warnOnImplicitThis: true groups: [actions, queries] diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 286288140c4..beb1e9234e8 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 8.0.1 +version: 8.0.2-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 5fb03d53434..1b32be0402f 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.5.13 +version: 1.5.14-dev groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index e2e83cd47e7..90919d238b8 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.61 +version: 1.7.62-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index ebbb19fa683..ee4e92178bf 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.61 +version: 1.7.62-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 3c914c68019..0153dbbfb30 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 5.4.9 +version: 5.4.10-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 314f157005e..807071e116b 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.6.4 +version: 1.6.5-dev groups: - csharp - queries diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index abdc2742c45..dfa143a5866 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.44 +version: 1.0.45-dev groups: - go - queries diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 2e3c31c5973..2bcd5042425 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 7.0.2 +version: 7.0.3-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 2d0bef9e155..a32eb17ebf7 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.5.8 +version: 1.5.9-dev groups: - go - queries diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index e45e13037e7..b9f061bcc3e 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 9.0.0 +version: 9.0.1-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 6d1aa235ed6..13700fa7199 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.10.9 +version: 1.10.10-dev groups: - java - queries diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 70d0ad7df76..c753467a0b8 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 2.6.24 +version: 2.6.25-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index d9fc2fd16d5..5d4952bd6a5 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 2.3.4 +version: 2.3.5-dev groups: - javascript - queries diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index dea7170bc37..5d2436f3e04 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.44 +version: 1.0.45-dev groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index 2400efca5a7..8d8597ea915 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 7.0.1 +version: 7.0.2-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index 7c1c1610d14..389b1dfb493 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.7.9 +version: 1.7.10-dev groups: - python - queries diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 9a0242be164..c642ddab974 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 5.1.12 +version: 5.1.13-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 3ba280ea378..6978ce40015 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.5.9 +version: 1.5.10-dev groups: - ruby - queries diff --git a/rust/ql/lib/qlpack.yml b/rust/ql/lib/qlpack.yml index bce0d1b8fa5..b7d2e253cfb 100644 --- a/rust/ql/lib/qlpack.yml +++ b/rust/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-all -version: 0.2.8 +version: 0.2.9-dev groups: rust extractor: rust dbscheme: rust.dbscheme diff --git a/rust/ql/src/qlpack.yml b/rust/ql/src/qlpack.yml index e3cb21b0a45..c36bcc3f951 100644 --- a/rust/ql/src/qlpack.yml +++ b/rust/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-queries -version: 0.1.29 +version: 0.1.30-dev groups: - rust - queries diff --git a/shared/concepts/qlpack.yml b/shared/concepts/qlpack.yml index fc4c0b767d5..c23e61f19fb 100644 --- a/shared/concepts/qlpack.yml +++ b/shared/concepts/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/concepts -version: 0.0.18 +version: 0.0.19-dev groups: shared library: true dependencies: diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 1376dbfe3cc..35b09b7dc63 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 2.0.28 +version: 2.0.29-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 09f2320911d..2dd531eda0a 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 2.1.0 +version: 2.1.1-dev groups: shared library: true dependencies: diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 370dcab571e..cade13e956c 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.44 +version: 1.0.45-dev groups: shared library: true dependencies: diff --git a/shared/quantum/qlpack.yml b/shared/quantum/qlpack.yml index 066a920be90..4e7f48d621d 100644 --- a/shared/quantum/qlpack.yml +++ b/shared/quantum/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/quantum -version: 0.0.22 +version: 0.0.23-dev groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index e3d15e3fb29..5c2fc87098b 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.44 +version: 1.0.45-dev groups: shared library: true dependencies: diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 0595120a7a8..26f585673ec 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.44 +version: 1.0.45-dev groups: shared library: true dependencies: diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 0e191175233..4cfd1100a80 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 2.0.20 +version: 2.0.21-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 34df8789554..9e47885b303 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.44 +version: 1.0.45-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 913f73c24fe..2313b64956a 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.44 +version: 1.0.45-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index bba635a4797..1cd9c4b5f7b 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.44 +version: 1.0.45-dev groups: shared library: true dependencies: diff --git a/shared/typeinference/qlpack.yml b/shared/typeinference/qlpack.yml index 278398e2487..533847824b1 100644 --- a/shared/typeinference/qlpack.yml +++ b/shared/typeinference/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeinference -version: 0.0.25 +version: 0.0.26-dev groups: shared library: true dependencies: diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index 3c3316da7fc..41a197cff1d 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 2.0.28 +version: 2.0.29-dev groups: shared library: true dependencies: diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 56557152de7..547c266fb94 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.44 +version: 1.0.45-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index b7e3b89b39e..1b3f89c4ef7 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 2.0.31 +version: 2.0.32-dev groups: shared library: true dependencies: null diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index 33bf92658f8..392bdb18282 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.44 +version: 1.0.45-dev groups: shared library: true dependencies: diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index ac65e0bcb80..b951c408c85 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.44 +version: 1.0.45-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index d2983f8bd94..3343e056833 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 6.3.0 +version: 6.3.1-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 39171058590..80a16a8099d 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.2.18 +version: 1.2.19-dev groups: - swift - queries From 3c4a386f3f115ff9a961d5538dc785262edd87d0 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Mon, 16 Mar 2026 16:08:35 +0000 Subject: [PATCH 037/185] C++: Clarify two cases in the test. --- .../Format/WrongTypeFormatArguments/Buildless/second.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/second.cpp b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/second.cpp index 34a7d24f132..c009b0513a9 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/second.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/second.cpp @@ -10,8 +10,8 @@ void test_size_t() { printf("%zd", s); // GOOD printf("%zi", s); // GOOD - printf("%zu", s); // GOOD [FALSE POSITIVE] - printf("%zx", s); // GOOD [FALSE POSITIVE] + printf("%zu", s); // GOOD (we generally permits signedness changes) [FALSE POSITIVE] + printf("%zx", s); // GOOD (we generally permits signedness changes) [FALSE POSITIVE] printf("%d", s); // BAD printf("%ld", s); // BAD printf("%lld", s); // BAD From eeb09ae3899711babbbe3192311bc7f03aad7fa4 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Mon, 16 Mar 2026 16:12:30 +0000 Subject: [PATCH 038/185] C++: Fix typo. --- .../Format/WrongTypeFormatArguments/Buildless/second.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/second.cpp b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/second.cpp index c009b0513a9..e6ff2a36e07 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/second.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/second.cpp @@ -10,8 +10,8 @@ void test_size_t() { printf("%zd", s); // GOOD printf("%zi", s); // GOOD - printf("%zu", s); // GOOD (we generally permits signedness changes) [FALSE POSITIVE] - printf("%zx", s); // GOOD (we generally permits signedness changes) [FALSE POSITIVE] + printf("%zu", s); // GOOD (we generally permit signedness changes) [FALSE POSITIVE] + printf("%zx", s); // GOOD (we generally permit signedness changes) [FALSE POSITIVE] printf("%d", s); // BAD printf("%ld", s); // BAD printf("%lld", s); // BAD From 2f7526d70bfd9498dda4868bb3b0311957bab13c Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Mon, 16 Mar 2026 16:38:29 +0000 Subject: [PATCH 039/185] C++: Clarify doc comment and make build-mode: nonereferences more consistent. --- cpp/ql/lib/semmle/code/cpp/Function.qll | 4 ++-- .../2026-03-11-integer-multiplication-cast-to-long.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/Function.qll b/cpp/ql/lib/semmle/code/cpp/Function.qll index b5ea5b3cbc7..4ed678f90eb 100644 --- a/cpp/ql/lib/semmle/code/cpp/Function.qll +++ b/cpp/ql/lib/semmle/code/cpp/Function.qll @@ -526,8 +526,8 @@ class Function extends Declaration, ControlFlowNode, AccessHolder, @function { } /** - * Holds if this function has ambiguous return type (this occurs sometimes in - * Build Mode None). + * Holds if this function has an ambiguous return type, meaning that zero or multiple return + * types for this function are present in the database (this can occur in `build-mode: none`). */ predicate hasAmbiguousReturnType() { count(this.getType()) != 1 diff --git a/cpp/ql/src/change-notes/2026-03-11-integer-multiplication-cast-to-long.md b/cpp/ql/src/change-notes/2026-03-11-integer-multiplication-cast-to-long.md index a0efd8a8785..4d4a66c0a22 100644 --- a/cpp/ql/src/change-notes/2026-03-11-integer-multiplication-cast-to-long.md +++ b/cpp/ql/src/change-notes/2026-03-11-integer-multiplication-cast-to-long.md @@ -1,4 +1,4 @@ --- category: minorAnalysis --- -* Fixed an issue with the "Multiplication result converted to larger type" (`cpp/integer-multiplication-cast-to-long`) query causing false positive results in Build Mode Node databases. +* Fixed an issue with the "Multiplication result converted to larger type" (`cpp/integer-multiplication-cast-to-long`) query causing false positive results in `build-mode: none` databases. From 8df4dfb585370d003261f646ead59e3d3f5cea1a Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Mon, 16 Mar 2026 16:40:27 +0000 Subject: [PATCH 040/185] C++: Autoformat. --- cpp/ql/lib/semmle/code/cpp/Function.qll | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/Function.qll b/cpp/ql/lib/semmle/code/cpp/Function.qll index 4ed678f90eb..8d93ac0f2a3 100644 --- a/cpp/ql/lib/semmle/code/cpp/Function.qll +++ b/cpp/ql/lib/semmle/code/cpp/Function.qll @@ -529,9 +529,7 @@ class Function extends Declaration, ControlFlowNode, AccessHolder, @function { * Holds if this function has an ambiguous return type, meaning that zero or multiple return * types for this function are present in the database (this can occur in `build-mode: none`). */ - predicate hasAmbiguousReturnType() { - count(this.getType()) != 1 - } + predicate hasAmbiguousReturnType() { count(this.getType()) != 1 } } pragma[noinline] From a57f803b37aee8e3dcdc64434b455db4cb14edf4 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Mon, 16 Mar 2026 16:48:54 +0000 Subject: [PATCH 041/185] C++: Address false positive results. --- .../Likely Bugs/Format/WrongTypeFormatArguments.ql | 2 ++ .../Buildless/WrongTypeFormatArguments.expected | 6 ------ .../WrongTypeFormatArguments/Buildless/second.cpp | 12 ++++++------ 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/cpp/ql/src/Likely Bugs/Format/WrongTypeFormatArguments.ql b/cpp/ql/src/Likely Bugs/Format/WrongTypeFormatArguments.ql index 33fe3a0b7a1..7f0a4833cb5 100644 --- a/cpp/ql/src/Likely Bugs/Format/WrongTypeFormatArguments.ql +++ b/cpp/ql/src/Likely Bugs/Format/WrongTypeFormatArguments.ql @@ -168,9 +168,11 @@ where formatOtherArgType(ffc, n, expected, arg, actual) and not actual.getUnspecifiedType().(IntegralType).getSize() = sizeof_IntType() ) and + // Exclude some cases where we're less confident the result is correct / clear / valuable not arg.isAffectedByMacro() and not arg.isFromUninstantiatedTemplate(_) and not actual.stripType() instanceof ErroneousType and + not arg.getType().stripType().(RoutineType).getReturnType() instanceof ErroneousType and not arg.(Call).mayBeFromImplicitlyDeclaredFunction() and // Make sure that the format function definition is consistent count(ffc.getTarget().getFormatParameterIndex()) = 1 diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/WrongTypeFormatArguments.expected b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/WrongTypeFormatArguments.expected index ff2db0dfcf0..8eefcc95a24 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/WrongTypeFormatArguments.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/WrongTypeFormatArguments.expected @@ -1,9 +1,3 @@ -| second.cpp:13:19:13:19 | s | This format specifier for type 'size_t' does not match the argument type '..(*)(..)'. | -| second.cpp:14:19:14:19 | s | This format specifier for type 'size_t' does not match the argument type '..(*)(..)'. | -| second.cpp:15:18:15:18 | s | This format specifier for type 'int' does not match the argument type '..(*)(..)'. | -| second.cpp:16:19:16:19 | s | This format specifier for type 'long' does not match the argument type '..(*)(..)'. | -| second.cpp:17:20:17:20 | s | This format specifier for type 'long long' does not match the argument type '..(*)(..)'. | -| second.cpp:18:18:18:18 | s | This format specifier for type 'unsigned int' does not match the argument type '..(*)(..)'. | | second.cpp:26:18:26:39 | ... - ... | This format specifier for type 'int' does not match the argument type 'long'. | | second.cpp:29:18:29:39 | ... - ... | This format specifier for type 'unsigned int' does not match the argument type 'long'. | | tests.c:7:18:7:18 | 1 | This format specifier for type 'char *' does not match the argument type 'int'. | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/second.cpp b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/second.cpp index e6ff2a36e07..9ebbc4dd6e0 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/second.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/second.cpp @@ -10,12 +10,12 @@ void test_size_t() { printf("%zd", s); // GOOD printf("%zi", s); // GOOD - printf("%zu", s); // GOOD (we generally permit signedness changes) [FALSE POSITIVE] - printf("%zx", s); // GOOD (we generally permit signedness changes) [FALSE POSITIVE] - printf("%d", s); // BAD - printf("%ld", s); // BAD - printf("%lld", s); // BAD - printf("%u", s); // BAD + printf("%zu", s); // GOOD (we generally permit signedness changes) + printf("%zx", s); // GOOD (we generally permit signedness changes) + printf("%d", s); // BAD [NOT DETECTED] + printf("%ld", s); // BAD [NOT DETECTED] + printf("%lld", s); // BAD [NOT DETECTED] + printf("%u", s); // BAD [NOT DETECTED] char buffer[1024]; From 9cb1c89a02952b8d0935ab2d4c30a9f7abf76bde Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Mon, 16 Mar 2026 19:11:27 +0000 Subject: [PATCH 042/185] C++: Change note. --- .../src/change-notes/2026-03-16-wrong-type-format-argument.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cpp/ql/src/change-notes/2026-03-16-wrong-type-format-argument.md diff --git a/cpp/ql/src/change-notes/2026-03-16-wrong-type-format-argument.md b/cpp/ql/src/change-notes/2026-03-16-wrong-type-format-argument.md new file mode 100644 index 00000000000..84aef7791fc --- /dev/null +++ b/cpp/ql/src/change-notes/2026-03-16-wrong-type-format-argument.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Fixed an issue with the "Wrong type of arguments to formatting function" (`cpp/wrong-type-format-argument`) query causing false positive results in `build-mode: none` databases. From 3f9ad144737a814b69766e1d218b073a06759eec Mon Sep 17 00:00:00 2001 From: Jeongsoo Lee Date: Mon, 16 Mar 2026 14:11:34 -0700 Subject: [PATCH 043/185] Factor out common code into an abstract private class --- .../ir/dataflow/internal/DataFlowNodes.qll | 37 +++++++------------ 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll index 6b201a7aa8b..51cc7430f62 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll @@ -780,16 +780,13 @@ module Public { final override Type getType() { result = this.getPreUpdateNode().getType() } } - /** - * The value of an uninitialized local variable, viewed as a node in a data - * flow graph. - */ - class UninitializedNode extends Node { + abstract private class AbstractUninitializedNode extends Node { LocalVariable v; + int indirectionIndex; - UninitializedNode() { + AbstractUninitializedNode() { exists(SsaImpl::Definition def, SsaImpl::SourceVariable sv | - def.getIndirectionIndex() = 0 and + def.getIndirectionIndex() = indirectionIndex and def.getValue().asInstruction() instanceof UninitializedInstruction and SsaImpl::defToNode(this, def, sv) and v = sv.getBaseVariable().(SsaImpl::BaseIRVariable).getIRVariable().getAst() @@ -800,6 +797,14 @@ module Public { LocalVariable getLocalVariable() { result = v } } + /** + * The value of an uninitialized local variable, viewed as a node in a data + * flow graph. + */ + class UninitializedNode extends AbstractUninitializedNode { + UninitializedNode() { indirectionIndex = 0 } + } + /** * The value of an uninitialized local variable behind one or more levels of * indirection, viewed as a node in a data flow graph. @@ -807,22 +812,8 @@ module Public { * NOTE: For the direct value of the uninitialized local variable, see * `UninitializedNode`. */ - class IndirectUninitializedNode extends Node { - LocalVariable v; - int indirectionIndex; - - IndirectUninitializedNode() { - exists(SsaImpl::Definition def, SsaImpl::SourceVariable sv | - def.getIndirectionIndex() = indirectionIndex and - indirectionIndex > 0 and // With `indirectionIndex` = 0, this class becomes the same as `UninitializedNode`. - def.getValue().asInstruction() instanceof UninitializedInstruction and - SsaImpl::defToNode(this, def, sv) and - v = sv.getBaseVariable().(SsaImpl::BaseIRVariable).getIRVariable().getAst() - ) - } - - /** Gets the uninitialized local variable corresponding to this node. */ - LocalVariable getLocalVariable() { result = v } + class IndirectUninitializedNode extends AbstractUninitializedNode { + IndirectUninitializedNode() { indirectionIndex > 0 } /** Gets the level of indirection to get to this node. */ int getIndirectionIndex() { result = indirectionIndex } From 1ac9e5a2a4e40edba2ce3fb07245f5455b03d460 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 17 Mar 2026 09:51:15 +0100 Subject: [PATCH 044/185] Rust: Elaborate QL doc on `FunctionPosition` class --- .../lib/codeql/rust/internal/typeinference/FunctionType.qll | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll index 37df796a7be..26627450add 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll @@ -15,6 +15,12 @@ private newtype TFunctionPosition = * Either `return` or a positional parameter index, where `self` is translated * to position `0` and subsequent positional parameters at index `i` are * translated to position `i + 1`. + * + * Function-call adjusted positions are needed when resolving calls of the + * form `Foo::f(x_1, ..., x_n)`, where we do not know up front whether `f` is a + * method or a non-method, and hence we need to be able to match `x_1` against + * both a potential `self` parameter and a potential first positional parameter + * (and `x_2, ... x_n` against all subsequent positional parameters). */ class FunctionPosition extends TFunctionPosition { int asPosition() { result = this.asArgumentPosition().asPosition() } From 3aaee9d981233098f1216ea10a7edd51878e5080 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 17 Mar 2026 12:01:05 +0000 Subject: [PATCH 045/185] Change @security-severity for rust/log-injection from 2.6 to 6.1 --- .../2026-03-13-adjust-xss-and-log-injection-severity.md | 1 + rust/ql/src/queries/security/CWE-117/LogInjection.ql | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/rust/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md b/rust/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md index 7c24d4147a5..8bfc5be1551 100644 --- a/rust/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md +++ b/rust/ql/src/change-notes/2026-03-13-adjust-xss-and-log-injection-severity.md @@ -1,4 +1,5 @@ --- category: queryMetadata --- +* The `@security-severity` metadata of `rust/log-injection` has been increased from 2.6 (low) to 6.1 (medium). * The `@security-severity` metadata of `rust/xss` has been increased from 6.1 (medium) to 7.8 (high). diff --git a/rust/ql/src/queries/security/CWE-117/LogInjection.ql b/rust/ql/src/queries/security/CWE-117/LogInjection.ql index 64d9c47c790..c00ac310ef6 100644 --- a/rust/ql/src/queries/security/CWE-117/LogInjection.ql +++ b/rust/ql/src/queries/security/CWE-117/LogInjection.ql @@ -4,7 +4,7 @@ * insertion of forged log entries by a malicious user. * @kind path-problem * @problem.severity error - * @security-severity 2.6 + * @security-severity 6.1 * @precision medium * @id rust/log-injection * @tags security From 19faf8f30bda96f32d7b2eb286b9c0d74ae75de6 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 17 Mar 2026 13:29:36 +0100 Subject: [PATCH 046/185] C#: Add ObjectInitMethod as enclosing callable for the instance initializers. --- csharp/ql/lib/semmle/code/csharp/Callable.qll | 27 +++++++++++++++ .../semmle/code/csharp/ExprOrStmtParent.qll | 2 ++ .../internal/ControlFlowGraphImpl.qll | 33 ++----------------- 3 files changed, 32 insertions(+), 30 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/Callable.qll b/csharp/ql/lib/semmle/code/csharp/Callable.qll index f8346cfe01e..611b578b859 100644 --- a/csharp/ql/lib/semmle/code/csharp/Callable.qll +++ b/csharp/ql/lib/semmle/code/csharp/Callable.qll @@ -336,6 +336,22 @@ class ExtensionTypeExtensionMethod extends ExtensionMethodImpl { ExtensionTypeExtensionMethod() { this.isInExtension() } } +/** + * A non-static member with an initializer, for example a field `int Field = 0`. + */ +private class InitializedInstanceMember extends Member { + private AssignExpr ae; + + InitializedInstanceMember() { + not this.isStatic() and + expr_parent_top_level(ae, _, this) and + not ae = getExpressionBody(_) + } + + /** Gets the initializer expression. */ + AssignExpr getInitializer() { result = ae } +} + /** * An object initializer method. * @@ -347,6 +363,17 @@ class ExtensionTypeExtensionMethod extends ExtensionMethodImpl { */ class ObjectInitMethod extends Method { ObjectInitMethod() { this.getName() = "" } + + /** + * Holds if this object initializer method performs the initialization + * of a member via assignment `init`. + */ + predicate initializes(AssignExpr init) { + exists(InitializedInstanceMember m | + this.getDeclaringType().getAMember() = m and + init = m.getInitializer() + ) + } } /** diff --git a/csharp/ql/lib/semmle/code/csharp/ExprOrStmtParent.qll b/csharp/ql/lib/semmle/code/csharp/ExprOrStmtParent.qll index aa834ef9103..5afacf608a8 100644 --- a/csharp/ql/lib/semmle/code/csharp/ExprOrStmtParent.qll +++ b/csharp/ql/lib/semmle/code/csharp/ExprOrStmtParent.qll @@ -214,6 +214,8 @@ private module Cached { parent*(enclosingStart(cfe), c.(Constructor).getInitializer()) or parent*(cfe, c.(Constructor).getObjectInitializerCall()) + or + parent*(cfe, any(AssignExpr init | c.(ObjectInitMethod).initializes(init))) } /** Holds if the enclosing statement of expression `e` is `s`. */ 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 1696869e591..0bdf1f795db 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll @@ -10,42 +10,15 @@ 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 + obinit.initializes(result) and result = rank[i + 1](AssignExpr ae0, Location l | - obinitInitializes(obinit, ae0) and + obinit.initializes(ae0) and l = ae0.getLocation() and getCompilation(l.getFile()) = comp | @@ -74,7 +47,7 @@ class CfgScope extends Element, @top_level_exprorstmt_parent { any(Callable c | c.(Constructor).hasInitializer() or - Initializers::obinitInitializes(c, _) + c.(ObjectInitMethod).initializes(_) or c.hasBody() ) From af63e636861038f59cceded11c38b5ffb46c35fa Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 17 Mar 2026 14:12:18 +0100 Subject: [PATCH 047/185] C#: Accept test changes. --- csharp/ql/test/library-tests/dispatch/CallGraph.expected | 1 + .../structuralcomparison/structuralComparison.expected | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/csharp/ql/test/library-tests/dispatch/CallGraph.expected b/csharp/ql/test/library-tests/dispatch/CallGraph.expected index 31e2a99ae24..e7ebca868ba 100644 --- a/csharp/ql/test/library-tests/dispatch/CallGraph.expected +++ b/csharp/ql/test/library-tests/dispatch/CallGraph.expected @@ -24,6 +24,7 @@ | ExactCallable.cs:15:25:15:35 | Run`2 | ExactCallable.cs:172:21:172:33 | MethodWithOut | | ExactCallable.cs:15:25:15:35 | Run`2 | ExactCallable.cs:177:21:177:34 | MethodWithOut2 | | ExactCallable.cs:182:21:182:22 | M1 | ExactCallable.cs:187:21:187:22 | M2 | +| TypeFlow.cs:3:7:3:14 | | TypeFlow.cs:22:20:22:22 | set_Prop | | TypeFlow.cs:5:5:5:12 | TypeFlow | TypeFlow.cs:24:10:24:12 | Run | | TypeFlow.cs:24:10:24:12 | Run | TypeFlow.cs:12:29:12:34 | Method | | TypeFlow.cs:24:10:24:12 | Run | TypeFlow.cs:17:30:17:35 | Method | diff --git a/csharp/ql/test/library-tests/structuralcomparison/structuralComparison.expected b/csharp/ql/test/library-tests/structuralcomparison/structuralComparison.expected index 0f131d8c25c..d9b6636469a 100644 --- a/csharp/ql/test/library-tests/structuralcomparison/structuralComparison.expected +++ b/csharp/ql/test/library-tests/structuralcomparison/structuralComparison.expected @@ -56,11 +56,11 @@ gvn | 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)) | +| StructuralComparison.cs:5:26:5:26 | this access | (kind:Expr(12),false,Class) | | StructuralComparison.cs:5:26:5:30 | ... = ... | ((kind:Expr(16),true,x) :: (0 :: (kind:Expr(63)))) | | StructuralComparison.cs:5:30:5:30 | 0 | 0 | | StructuralComparison.cs:6:26:6:26 | access to field y | (kind:Expr(16),true,y) | -| StructuralComparison.cs:6:26:6:26 | this access | (kind:Expr(12)) | +| StructuralComparison.cs:6:26:6:26 | this access | (kind:Expr(12),false,Class) | | StructuralComparison.cs:6:26:6:30 | ... = ... | ((kind:Expr(16),true,y) :: (1 :: (kind:Expr(63)))) | | StructuralComparison.cs:6:30:6:30 | 1 | 1 | | StructuralComparison.cs:8:24:8:24 | 0 | 0 | From ff48ac5434e334cb724295e626d4c998c4043fc1 Mon Sep 17 00:00:00 2001 From: MarkLee131 Date: Tue, 17 Mar 2026 22:45:38 +0800 Subject: [PATCH 048/185] C++: exclude printf implementation internals from format string sinks --- .../CWE/CWE-134/UncontrolledFormatString.ql | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/cpp/ql/src/Security/CWE/CWE-134/UncontrolledFormatString.ql b/cpp/ql/src/Security/CWE/CWE-134/UncontrolledFormatString.ql index 37e3fa0c49f..4c0271ef96e 100644 --- a/cpp/ql/src/Security/CWE/CWE-134/UncontrolledFormatString.ql +++ b/cpp/ql/src/Security/CWE/CWE-134/UncontrolledFormatString.ql @@ -23,13 +23,32 @@ import Flow::PathGraph predicate isSource(FlowSource source, string sourceType) { sourceType = source.getSourceType() } +/** + * Holds if `f` is a printf-like function or a (possibly nested) wrapper + * that forwards a format-string parameter to one. + * + * Functions that *implement* printf-like behaviour (e.g. a custom + * `vsnprintf` variant) internally parse the caller-supplied format string + * and build small, bounded, local format strings such as `"%d"` or `"%ld"` + * for inner `sprintf` calls. Taint that reaches those inner calls via the + * parsed format specifier is not exploitable, so sinks inside such + * functions should be excluded. + */ +private predicate isPrintfImplementation(Function f) { + f instanceof PrintfLikeFunction + or + exists(PrintfLikeFunction printf | printf.wrapperFunction(f, _, _)) +} + module Config implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node node) { isSource(node, _) } predicate isSink(DataFlow::Node node) { exists(PrintfLikeFunction printf | printf.outermostWrapperFunctionCall([node.asExpr(), node.asIndirectExpr()], _) - ) + ) and + not isPrintfImplementation(node.asExpr().getEnclosingFunction()) and + not isPrintfImplementation(node.asIndirectExpr().getEnclosingFunction()) } private predicate isArithmeticNonCharType(ArithmeticType type) { From 97670b36743f35e105dba31e04cfbe7d9efe2404 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Tue, 17 Mar 2026 16:32:04 +0100 Subject: [PATCH 049/185] Rust: Unify handling of struct and tuple constructors --- .../rust/elements/internal/StructExprImpl.qll | 5 + .../rust/elements/internal/StructImpl.qll | 6 + .../rust/elements/internal/StructPatImpl.qll | 7 + .../rust/elements/internal/VariantImpl.qll | 6 + .../internal/typeinference/TypeInference.qll | 427 ++++++------------ 5 files changed, 154 insertions(+), 297 deletions(-) diff --git a/rust/ql/lib/codeql/rust/elements/internal/StructExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/StructExprImpl.qll index d7704894c49..897196b78cb 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/StructExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/StructExprImpl.qll @@ -50,5 +50,10 @@ module Impl { or result = this.getVariant().getStructField(name) } + + /** Gets the `i`th struct field of the instantiated struct or variant. */ + StructField getNthStructField(int i) { + result = [this.getStruct().getNthStructField(i), this.getVariant().getNthStructField(i)] + } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/StructImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/StructImpl.qll index cb4121b7224..23fa1e76d9a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/StructImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/StructImpl.qll @@ -35,6 +35,12 @@ module Impl { /** Gets a record field, if any. */ StructField getAStructField() { result = this.getStructField(_) } + /** Gets the `i`th struct field, if any. */ + pragma[nomagic] + StructField getNthStructField(int i) { + result = this.getFieldList().(StructFieldList).getField(i) + } + /** Gets the `i`th tuple field, if any. */ pragma[nomagic] TupleField getTupleField(int i) { result = this.getFieldList().(TupleFieldList).getField(i) } diff --git a/rust/ql/lib/codeql/rust/elements/internal/StructPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/StructPatImpl.qll index 28afc2a5b0d..e649d2a5778 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/StructPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/StructPatImpl.qll @@ -42,6 +42,13 @@ module Impl { ) } + /** Gets the `i`th struct field of the instantiated struct or variant. */ + StructField getNthStructField(int i) { + exists(PathResolution::ItemNode item | item = this.getResolvedPath(_) | + result = [item.(Struct).getNthStructField(i), item.(Variant).getNthStructField(i)] + ) + } + /** Gets the struct pattern for the field `name`. */ pragma[nomagic] StructPatField getPatField(string name) { diff --git a/rust/ql/lib/codeql/rust/elements/internal/VariantImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/VariantImpl.qll index ed8b93f6c1d..58b061049bd 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/VariantImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/VariantImpl.qll @@ -32,6 +32,12 @@ module Impl { result.getName().getText() = name } + /** Gets the `i`th struct field, if any. */ + pragma[nomagic] + StructField getNthStructField(int i) { + result = this.getFieldList().(StructFieldList).getField(i) + } + /** Gets the `i`th tuple field, if any. */ pragma[nomagic] TupleField getTupleField(int i) { result = this.getFieldList().(TupleFieldList).getField(i) } diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll index c194531a078..a4b338d7c69 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll @@ -872,188 +872,6 @@ private Type inferTypeEquality(AstNode n, TypePath path) { ) } -/** - * A matching configuration for resolving types of struct expressions - * like `Foo { bar = baz }`. - * - * This also includes nullary struct expressions like `None`. - */ -private module StructExprMatchingInput implements MatchingInputSig { - private newtype TPos = - TFieldPos(string name) { exists(any(Declaration decl).getField(name)) } or - TStructPos() - - class DeclarationPosition extends TPos { - string asFieldPos() { this = TFieldPos(result) } - - predicate isStructPos() { this = TStructPos() } - - string toString() { - result = this.asFieldPos() - or - this.isStructPos() and - result = "(struct)" - } - } - - abstract class Declaration extends AstNode { - final TypeParameter getTypeParameter(TypeParameterPosition ppos) { - typeParamMatchPosition(this.getTypeItem().getGenericParamList().getATypeParam(), result, ppos) - } - - abstract StructField getField(string name); - - abstract TypeItem getTypeItem(); - - Type getDeclaredType(DeclarationPosition dpos, TypePath path) { - // type of a field - exists(TypeMention tp | - tp = this.getField(dpos.asFieldPos()).getTypeRepr() and - result = tp.getTypeAt(path) - ) - or - // type parameter of the struct itself - dpos.isStructPos() and - result = this.getTypeParameter(_) and - path = TypePath::singleton(result) - or - // type of the struct or enum itself - dpos.isStructPos() and - path.isEmpty() and - result = TDataType(this.getTypeItem()) - } - } - - private class StructDecl extends Declaration, Struct { - StructDecl() { this.isStruct() or this.isUnit() } - - override StructField getField(string name) { result = this.getStructField(name) } - - override TypeItem getTypeItem() { result = this } - } - - private class StructVariantDecl extends Declaration, Variant { - StructVariantDecl() { this.isStruct() or this.isUnit() } - - override StructField getField(string name) { result = this.getStructField(name) } - - override TypeItem getTypeItem() { result = this.getEnum() } - } - - class AccessPosition = DeclarationPosition; - - abstract class Access extends AstNode { - pragma[nomagic] - abstract AstNode getNodeAt(AccessPosition apos); - - pragma[nomagic] - Type getInferredType(AccessPosition apos, TypePath path) { - result = inferType(this.getNodeAt(apos), path) - } - - pragma[nomagic] - abstract Path getStructPath(); - - pragma[nomagic] - Declaration getTarget() { result = resolvePath(this.getStructPath()) } - - pragma[nomagic] - Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { - // Handle constructions that use `Self {...}` syntax - exists(TypeMention tm, TypePath path0 | - tm = this.getStructPath() and - result = tm.getTypeAt(path0) and - path0.isCons(TTypeParamTypeParameter(apos.asTypeParam()), path) - ) - } - - /** - * Holds if the return type of this struct expression at `path` may have to - * be inferred from the context. - */ - pragma[nomagic] - predicate hasUnknownTypeAt(DeclarationPosition pos, TypePath path) { - exists(Declaration d, TypeParameter tp | - d = this.getTarget() and - pos.isStructPos() and - tp = d.getDeclaredType(pos, path) and - not exists(DeclarationPosition fieldPos | - not fieldPos.isStructPos() and - tp = d.getDeclaredType(fieldPos, _) - ) and - // check that no explicit type arguments have been supplied for `tp` - not exists(TypeArgumentPosition tapos | - exists(this.getTypeArgument(tapos, _)) and - TTypeParamTypeParameter(tapos.asTypeParam()) = tp - ) - ) - } - } - - private class StructExprAccess extends Access, StructExpr { - override Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { - result = super.getTypeArgument(apos, path) - or - exists(TypePath suffix | - suffix.isCons(TTypeParamTypeParameter(apos.asTypeParam()), path) and - result = CertainTypeInference::inferCertainType(this, suffix) - ) - } - - override AstNode getNodeAt(AccessPosition apos) { - result = this.getFieldExpr(apos.asFieldPos()).getExpr() - or - result = this and - apos.isStructPos() - } - - override Path getStructPath() { result = this.getPath() } - } - - /** - * A potential nullary struct/variant construction such as `None`. - */ - private class PathExprAccess extends Access, PathExpr { - PathExprAccess() { not exists(CallExpr ce | this = ce.getFunction()) } - - override AstNode getNodeAt(AccessPosition apos) { - result = this and - apos.isStructPos() - } - - override Path getStructPath() { result = this.getPath() } - } - - predicate accessDeclarationPositionMatch(AccessPosition apos, DeclarationPosition dpos) { - apos = dpos - } -} - -private module StructExprMatching = Matching; - -pragma[nomagic] -private Type inferStructExprType0( - AstNode n, FunctionPosition pos, boolean hasReceiver, TypePath path -) { - exists(StructExprMatchingInput::Access a, StructExprMatchingInput::AccessPosition apos | - n = a.getNodeAt(apos) and - hasReceiver = false and - if apos.isStructPos() then pos.isReturn() else pos.asPosition() = 0 // the actual position doesn't matter, as long as it is positional - | - result = StructExprMatching::inferAccessType(a, apos, path) - or - a.hasUnknownTypeAt(apos, path) and - result = TUnknownType() - ) -} - -/** - * Gets the type of `n` at `path`, where `n` is either a struct expression or - * a field expression of a struct expression. - */ -private predicate inferStructExprType = - ContextTyping::CheckContextTyping::check/2; - pragma[nomagic] private TupleType inferTupleRootType(AstNode n) { // `typeEquality` handles the non-root cases @@ -3083,14 +2901,14 @@ private Type inferFunctionCallTypePreCheck( private predicate inferFunctionCallType = ContextTyping::CheckContextTyping::check/2; -abstract private class TupleLikeConstructor extends Addressable { +abstract private class Constructor extends Addressable { final TypeParameter getTypeParameter(TypeParameterPosition ppos) { typeParamMatchPosition(this.getTypeItem().getGenericParamList().getATypeParam(), result, ppos) } abstract TypeItem getTypeItem(); - abstract TupleField getTupleField(int i); + abstract TypeRepr getParameterTypeRepr(int pos); Type getReturnType(TypePath path) { result = TDataType(this.getTypeItem()) and @@ -3105,65 +2923,59 @@ abstract private class TupleLikeConstructor extends Addressable { or pos.isReturn() and result = this.getReturnType(path) - or - pos.isTypeQualifier() and - result = this.getReturnType(path) } Type getParameterType(int pos, TypePath path) { - result = this.getTupleField(pos).getTypeRepr().(TypeMention).getTypeAt(path) + result = this.getParameterTypeRepr(pos).(TypeMention).getTypeAt(path) } } -private class TupleLikeStruct extends TupleLikeConstructor instanceof Struct { - TupleLikeStruct() { this.isTuple() } - +private class StructConstructor extends Constructor instanceof Struct { override TypeItem getTypeItem() { result = this } - override TupleField getTupleField(int i) { result = Struct.super.getTupleField(i) } + override TypeRepr getParameterTypeRepr(int i) { + result = [super.getTupleField(i).getTypeRepr(), super.getNthStructField(i).getTypeRepr()] + } } -private class TupleLikeVariant extends TupleLikeConstructor instanceof Variant { - TupleLikeVariant() { this.isTuple() } - +private class VariantConstructor extends Constructor instanceof Variant { override TypeItem getTypeItem() { result = super.getEnum() } - override TupleField getTupleField(int i) { result = Variant.super.getTupleField(i) } + override TypeRepr getParameterTypeRepr(int i) { + result = [super.getTupleField(i).getTypeRepr(), super.getNthStructField(i).getTypeRepr()] + } } /** - * A matching configuration for resolving types of tuple-like variants and tuple - * structs such as `Result::Ok(42)`. + * A matching configuration for resolving types of constructors of enums and + * structs, such as `Result::Ok(42)`, `Foo { bar = 1 }` and `None`. */ -private module TupleLikeConstructionMatchingInput implements MatchingInputSig { +private module ConstructorMatchingInput implements MatchingInputSig { import FunctionPositionMatchingInput - class Declaration = TupleLikeConstructor; + class Declaration = Constructor; - class Access extends NonAssocCallExpr, ContextTyping::ContextTypedCallCand { - Access() { - this instanceof CallExprImpl::TupleStructExpr or - this instanceof CallExprImpl::TupleVariantExpr - } + abstract class Access extends AstNode { + abstract Type getInferredType(FunctionPosition pos, TypePath path); - override Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { - result = NonAssocCallExpr.super.getTypeArgument(apos, path) - } + abstract Declaration getTarget(); - Declaration getTarget() { result = this.resolveCallTargetViaPathResolution() } + abstract AstNode getNodeAt(AccessPosition apos); + + abstract Type getTypeArgument(TypeArgumentPosition apos, TypePath path); /** - * Holds if the return type of this tuple-like construction at `path` may have to be inferred - * from the context, for example in `Result::Ok(42)` the error type has to be inferred from the - * context. + * Holds if the return type of this constructor expression at `path` may + * have to be inferred from the context. For example in `Result::Ok(42)` the + * error type has to be inferred from the context. */ pragma[nomagic] predicate hasUnknownTypeAt(FunctionPosition pos, TypePath path) { - exists(TupleLikeConstructor tc, TypeParameter tp | - tc = this.getTarget() and + exists(Declaration d, TypeParameter tp | + d = this.getTarget() and pos.isReturn() and - tp = tc.getReturnType(path) and - not tp = tc.getParameterType(_, _) and + tp = d.getDeclaredType(pos, path) and + not exists(FunctionPosition pos2 | not pos2.isReturn() and tp = d.getDeclaredType(pos2, _)) and // check that no explicit type arguments have been supplied for `tp` not exists(TypeArgumentPosition tapos | exists(this.getTypeArgument(tapos, _)) and @@ -3172,25 +2984,93 @@ private module TupleLikeConstructionMatchingInput implements MatchingInputSig { ) } } + + private class NonAssocCallAccess extends Access, NonAssocCallExpr, + ContextTyping::ContextTypedCallCand + { + NonAssocCallAccess() { + this instanceof CallExprImpl::TupleStructExpr or + this instanceof CallExprImpl::TupleVariantExpr + } + + override Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { + result = NonAssocCallExpr.super.getTypeArgument(apos, path) + } + + override AstNode getNodeAt(AccessPosition apos) { + result = NonAssocCallExpr.super.getNodeAt(apos) + } + + override Type getInferredType(FunctionPosition pos, TypePath path) { + result = NonAssocCallExpr.super.getInferredType(pos, path) + } + + override Declaration getTarget() { result = this.resolveCallTargetViaPathResolution() } + } + + abstract private class StructAccess extends Access instanceof PathAstNode { + pragma[nomagic] + override Type getInferredType(AccessPosition apos, TypePath path) { + result = inferType(this.getNodeAt(apos), path) + } + + pragma[nomagic] + override Declaration getTarget() { result = resolvePath(super.getPath()) } + + pragma[nomagic] + override Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { + // Handle constructions that use `Self {...}` syntax + exists(TypeMention tm, TypePath path0 | + tm = super.getPath() and + result = tm.getTypeAt(path0) and + path0.isCons(TTypeParamTypeParameter(apos.asTypeParam()), path) + ) + } + } + + private class StructExprAccess extends StructAccess, StructExpr { + override Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { + result = super.getTypeArgument(apos, path) + or + exists(TypePath suffix | + suffix.isCons(TTypeParamTypeParameter(apos.asTypeParam()), path) and + result = CertainTypeInference::inferCertainType(this, suffix) + ) + } + + override AstNode getNodeAt(AccessPosition apos) { + result = + this.getFieldExpr(this.getNthStructField(apos.asPosition()).getName().getText()).getExpr() + or + result = this and apos.isReturn() + } + } + + /** A potential nullary struct/variant construction such as `None`. */ + private class PathExprAccess extends StructAccess, PathExpr { + PathExprAccess() { not exists(CallExpr ce | this = ce.getFunction()) } + + override AstNode getNodeAt(AccessPosition apos) { result = this and apos.isReturn() } + } } -private module TupleLikeConstructionMatching = Matching; +private module ConstructorMatching = Matching; pragma[nomagic] -private Type inferTupleLikeConstructionTypePreCheck( +private Type inferConstructorTypePreCheck( AstNode n, FunctionPosition pos, boolean hasReceiver, TypePath path ) { hasReceiver = false and - exists(TupleLikeConstructionMatchingInput::Access a | n = a.getNodeAt(pos) | - result = TupleLikeConstructionMatching::inferAccessType(a, pos, path) + exists(ConstructorMatchingInput::Access a | n = a.getNodeAt(pos) | + result = ConstructorMatching::inferAccessType(a, pos, path) or a.hasUnknownTypeAt(pos, path) and result = TUnknownType() ) } -private predicate inferTupleLikeConstructionType = - ContextTyping::CheckContextTyping::check/2; +private predicate inferConstructorType = + ContextTyping::CheckContextTyping::check/2; /** * A matching configuration for resolving types of operations like `a + b`. @@ -3676,71 +3556,27 @@ private Type inferDereferencedExprPtrType(AstNode n, TypePath path) { } /** - * A matching configuration for resolving types of struct patterns - * like `let Foo { bar } = ...`. + * A matching configuration for resolving types of constructor patterns like + * `let Foo { bar } = ...` or `let Some(x) = ...`. */ -private module StructPatMatchingInput implements MatchingInputSig { - class DeclarationPosition = StructExprMatchingInput::DeclarationPosition; - - class Declaration = StructExprMatchingInput::Declaration; - - class AccessPosition = DeclarationPosition; - - class Access extends StructPat { - Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { none() } - - AstNode getNodeAt(AccessPosition apos) { - result = this.getPatField(apos.asFieldPos()).getPat() - or - result = this and - apos.isStructPos() - } - - Type getInferredType(AccessPosition apos, TypePath path) { - result = inferType(this.getNodeAt(apos), path) - or - // The struct/enum type is supplied explicitly as a type qualifier, e.g. - // `let Foo::Variant { ... } = ...`. - apos.isStructPos() and - result = this.getPath().(TypeMention).getTypeAt(path) - } - - Declaration getTarget() { result = resolvePath(this.getPath()) } - } - - predicate accessDeclarationPositionMatch(AccessPosition apos, DeclarationPosition dpos) { - apos = dpos - } -} - -private module StructPatMatching = Matching; - -/** - * Gets the type of `n` at `path`, where `n` is either a struct pattern or - * a field pattern of a struct pattern. - */ -pragma[nomagic] -private Type inferStructPatType(AstNode n, TypePath path) { - exists(StructPatMatchingInput::Access a, StructPatMatchingInput::AccessPosition apos | - n = a.getNodeAt(apos) and - result = StructPatMatching::inferAccessType(a, apos, path) - ) -} - -/** - * A matching configuration for resolving types of tuple struct patterns - * like `let Some(x) = ...`. - */ -private module TupleStructPatMatchingInput implements MatchingInputSig { +private module ConstructorPatMatchingInput implements MatchingInputSig { import FunctionPositionMatchingInput - class Declaration = TupleLikeConstructor; + class Declaration = ConstructorMatchingInput::Declaration; + + class Access extends Pat instanceof PathAstNode { + Access() { this instanceof TupleStructPat or this instanceof StructPat } - class Access extends TupleStructPat { Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { none() } AstNode getNodeAt(AccessPosition apos) { - result = this.getField(apos.asPosition()) + this = + any(StructPat sp | + result = + sp.getPatField(sp.getNthStructField(apos.asPosition()).getName().getText()).getPat() + ) + or + result = this.(TupleStructPat).getField(apos.asPosition()) or result = this and apos.isReturn() @@ -3750,26 +3586,27 @@ private module TupleStructPatMatchingInput implements MatchingInputSig { result = inferType(this.getNodeAt(apos), path) or // The struct/enum type is supplied explicitly as a type qualifier, e.g. + // `let Foo::Variant { ... } = ...` or // `let Option::::Some(x) = ...`. - apos.isTypeQualifier() and - result = this.getPath().(TypeMention).getTypeAt(path) + apos.isReturn() and + result = super.getPath().(TypeMention).getTypeAt(path) } - Declaration getTarget() { result = resolvePath(this.getPath()) } + Declaration getTarget() { result = resolvePath(super.getPath()) } } } -private module TupleStructPatMatching = Matching; +private module ConstructorPatMatching = Matching; /** - * Gets the type of `n` at `path`, where `n` is either a tuple struct pattern or - * a positional pattern of a tuple struct pattern. + * Gets the type of `n` at `path`, where `n` is a pattern for a constructor, + * either a struct pattern or a tuple-struct pattern. */ pragma[nomagic] -private Type inferTupleStructPatType(AstNode n, TypePath path) { - exists(TupleStructPatMatchingInput::Access a, TupleStructPatMatchingInput::AccessPosition apos | +private Type inferConstructorPatType(AstNode n, TypePath path) { + exists(ConstructorPatMatchingInput::Access a, FunctionPosition apos | n = a.getNodeAt(apos) and - result = TupleStructPatMatching::inferAccessType(a, apos, path) + result = ConstructorPatMatching::inferAccessType(a, apos, path) ) } @@ -4080,11 +3917,9 @@ private module Cached { or result = inferTypeEquality(n, path) or - result = inferStructExprType(n, path) - or result = inferFunctionCallType(n, path) or - result = inferTupleLikeConstructionType(n, path) + result = inferConstructorType(n, path) or result = inferOperationType(n, path) or @@ -4106,9 +3941,7 @@ private module Cached { or result = inferClosureExprType(n, path) or - result = inferStructPatType(n, path) - or - result = inferTupleStructPatType(n, path) + result = inferConstructorPatType(n, path) ) } } @@ -4157,9 +3990,9 @@ private module Debug { t = inferFunctionCallType(n, path) } - predicate debugInferTupleLikeConstructionType(AstNode n, TypePath path, Type t) { + predicate debugInferConstructorType(AstNode n, TypePath path, Type t) { n = getRelevantLocatable() and - t = inferTupleLikeConstructionType(n, path) + t = inferConstructorType(n, path) } predicate debugTypeMention(TypeMention tm, TypePath path, Type type) { From d180900ab4d01a0d00dab29e7e9dea0a1ebbad94 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Tue, 17 Mar 2026 19:01:22 +0100 Subject: [PATCH 050/185] Rust: Minor improvements to documentation comments Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .../lib/codeql/rust/internal/typeinference/TypeInference.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll index a4b338d7c69..41af0ec31f7 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll @@ -2948,7 +2948,7 @@ private class VariantConstructor extends Constructor instanceof Variant { /** * A matching configuration for resolving types of constructors of enums and - * structs, such as `Result::Ok(42)`, `Foo { bar = 1 }` and `None`. + * structs, such as `Result::Ok(42)`, `Foo { bar: 1 }` and `None`. */ private module ConstructorMatchingInput implements MatchingInputSig { import FunctionPositionMatchingInput @@ -3586,7 +3586,7 @@ private module ConstructorPatMatchingInput implements MatchingInputSig { result = inferType(this.getNodeAt(apos), path) or // The struct/enum type is supplied explicitly as a type qualifier, e.g. - // `let Foo::Variant { ... } = ...` or + // `let Foo::::Variant { ... } = ...` or // `let Option::::Some(x) = ...`. apos.isReturn() and result = super.getPath().(TypeMention).getTypeAt(path) From 34f405f4651d4a7176a65ad997c0632df66ff233 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 18 Mar 2026 13:10:00 +0000 Subject: [PATCH 051/185] C++: Update test annotations. --- .../WrongTypeFormatArguments/Buildless/second.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/second.cpp b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/second.cpp index 9ebbc4dd6e0..0345e8352be 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/second.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/WrongTypeFormatArguments/Buildless/second.cpp @@ -13,8 +13,8 @@ void test_size_t() { printf("%zu", s); // GOOD (we generally permit signedness changes) printf("%zx", s); // GOOD (we generally permit signedness changes) printf("%d", s); // BAD [NOT DETECTED] - printf("%ld", s); // BAD [NOT DETECTED] - printf("%lld", s); // BAD [NOT DETECTED] + printf("%ld", s); // DUBIOUS [NOT DETECTED] + printf("%lld", s); // DUBIOUS [NOT DETECTED] printf("%u", s); // BAD [NOT DETECTED] char buffer[1024]; @@ -24,7 +24,9 @@ void test_size_t() { printf("%zu", &buffer[1023] - buffer); // GOOD printf("%zx", &buffer[1023] - buffer); // GOOD printf("%d", &buffer[1023] - buffer); // BAD - printf("%ld", &buffer[1023] - buffer); // BAD [NOT DETECTED] - printf("%lld", &buffer[1023] - buffer); // BAD [NOT DETECTED] + printf("%ld", &buffer[1023] - buffer); // DUBIOUS [NOT DETECTED] + printf("%lld", &buffer[1023] - buffer); // DUBIOUS [NOT DETECTED] printf("%u", &buffer[1023] - buffer); // BAD + // (for the `%ld` and `%lld` cases, the signedness and type sizes match, `%zd` would be most correct + // and robust but the developer may know enough to make this safe) } From 6efd844180536df09573491df1cd63cf4c176c9a Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Wed, 18 Mar 2026 14:04:49 +0100 Subject: [PATCH 052/185] Rust: Rename into "construction" and "deconstruction" --- .../internal/typeinference/TypeInference.qll | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll index 41af0ec31f7..e88a69e910f 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll @@ -2947,10 +2947,10 @@ private class VariantConstructor extends Constructor instanceof Variant { } /** - * A matching configuration for resolving types of constructors of enums and + * A matching configuration for resolving types of constructions of enums and * structs, such as `Result::Ok(42)`, `Foo { bar: 1 }` and `None`. */ -private module ConstructorMatchingInput implements MatchingInputSig { +private module ConstructionMatchingInput implements MatchingInputSig { import FunctionPositionMatchingInput class Declaration = Constructor; @@ -2965,7 +2965,7 @@ private module ConstructorMatchingInput implements MatchingInputSig { abstract Type getTypeArgument(TypeArgumentPosition apos, TypePath path); /** - * Holds if the return type of this constructor expression at `path` may + * Holds if the return type of this construction expression at `path` may * have to be inferred from the context. For example in `Result::Ok(42)` the * error type has to be inferred from the context. */ @@ -3054,23 +3054,23 @@ private module ConstructorMatchingInput implements MatchingInputSig { } } -private module ConstructorMatching = Matching; +private module ConstructionMatching = Matching; pragma[nomagic] -private Type inferConstructorTypePreCheck( +private Type inferConstructionTypePreCheck( AstNode n, FunctionPosition pos, boolean hasReceiver, TypePath path ) { hasReceiver = false and - exists(ConstructorMatchingInput::Access a | n = a.getNodeAt(pos) | - result = ConstructorMatching::inferAccessType(a, pos, path) + exists(ConstructionMatchingInput::Access a | n = a.getNodeAt(pos) | + result = ConstructionMatching::inferAccessType(a, pos, path) or a.hasUnknownTypeAt(pos, path) and result = TUnknownType() ) } -private predicate inferConstructorType = - ContextTyping::CheckContextTyping::check/2; +private predicate inferConstructionType = + ContextTyping::CheckContextTyping::check/2; /** * A matching configuration for resolving types of operations like `a + b`. @@ -3556,13 +3556,13 @@ private Type inferDereferencedExprPtrType(AstNode n, TypePath path) { } /** - * A matching configuration for resolving types of constructor patterns like + * A matching configuration for resolving types of deconstruction patterns like * `let Foo { bar } = ...` or `let Some(x) = ...`. */ -private module ConstructorPatMatchingInput implements MatchingInputSig { +private module DeconstructionPatMatchingInput implements MatchingInputSig { import FunctionPositionMatchingInput - class Declaration = ConstructorMatchingInput::Declaration; + class Declaration = ConstructionMatchingInput::Declaration; class Access extends Pat instanceof PathAstNode { Access() { this instanceof TupleStructPat or this instanceof StructPat } @@ -3596,17 +3596,17 @@ private module ConstructorPatMatchingInput implements MatchingInputSig { } } -private module ConstructorPatMatching = Matching; +private module DeconstructionPatMatching = Matching; /** * Gets the type of `n` at `path`, where `n` is a pattern for a constructor, * either a struct pattern or a tuple-struct pattern. */ pragma[nomagic] -private Type inferConstructorPatType(AstNode n, TypePath path) { - exists(ConstructorPatMatchingInput::Access a, FunctionPosition apos | +private Type inferDeconstructionPatType(AstNode n, TypePath path) { + exists(DeconstructionPatMatchingInput::Access a, FunctionPosition apos | n = a.getNodeAt(apos) and - result = ConstructorPatMatching::inferAccessType(a, apos, path) + result = DeconstructionPatMatching::inferAccessType(a, apos, path) ) } @@ -3919,7 +3919,7 @@ private module Cached { or result = inferFunctionCallType(n, path) or - result = inferConstructorType(n, path) + result = inferConstructionType(n, path) or result = inferOperationType(n, path) or @@ -3941,7 +3941,7 @@ private module Cached { or result = inferClosureExprType(n, path) or - result = inferConstructorPatType(n, path) + result = inferDeconstructionPatType(n, path) ) } } @@ -3990,9 +3990,9 @@ private module Debug { t = inferFunctionCallType(n, path) } - predicate debugInferConstructorType(AstNode n, TypePath path, Type t) { + predicate debugInferConstructionType(AstNode n, TypePath path, Type t) { n = getRelevantLocatable() and - t = inferConstructorType(n, path) + t = inferConstructionType(n, path) } predicate debugTypeMention(TypeMention tm, TypePath path, Type type) { From b8222167d2a74f55fd3466d15136d6269b62d9dc Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Wed, 18 Mar 2026 15:02:54 +0100 Subject: [PATCH 053/185] Rust: Ensure that `TPositionalArgumentPosition` is large enough for struct expressions --- .../codeql/rust/elements/internal/InvocationExprImpl.qll | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/rust/ql/lib/codeql/rust/elements/internal/InvocationExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/InvocationExprImpl.qll index 685eee1e43a..9fad85e756f 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/InvocationExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/InvocationExprImpl.qll @@ -9,7 +9,12 @@ module Impl { // For the type `FunctionPosition` used by type inference, we work with function-call syntax // adjusted positions, so a call like `x.m(a, b, c)` needs positions `0` through `3`; for this // reason, there is no `- 1` after `max(...)` below. - i in [0 .. max([any(ParamList l).getNumberOfParams(), any(ArgList l).getNumberOfArgs()])] + i in [0 .. max([ + any(ParamList l).getNumberOfParams(), + any(ArgList l).getNumberOfArgs(), + any(StructFieldList l).getNumberOfFields() // Positions are used for struct expressions in type inference + ] + )] } or TSelfArgumentPosition() or TTypeQualifierArgumentPosition() From f2a0724620371ebeb2043090f1cf0da256df2a8a Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Wed, 18 Mar 2026 15:05:33 +0100 Subject: [PATCH 054/185] Rust: Use `getReturnType` --- .../ql/lib/codeql/rust/internal/typeinference/TypeInference.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll index e88a69e910f..da150a3ef39 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll @@ -2974,7 +2974,7 @@ private module ConstructionMatchingInput implements MatchingInputSig { exists(Declaration d, TypeParameter tp | d = this.getTarget() and pos.isReturn() and - tp = d.getDeclaredType(pos, path) and + tp = d.getReturnType(path) and not exists(FunctionPosition pos2 | not pos2.isReturn() and tp = d.getDeclaredType(pos2, _)) and // check that no explicit type arguments have been supplied for `tp` not exists(TypeArgumentPosition tapos | From 082dc6162099e075b2bc13cb5d91f26b881177a1 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 12 Mar 2026 10:39:22 +0100 Subject: [PATCH 055/185] Rust: Add type inference test --- .../type-inference/overloading.rs | 72 +++++++++ .../type-inference/type-inference.expected | 146 ++++++++++++++++++ 2 files changed, 218 insertions(+) diff --git a/rust/ql/test/library-tests/type-inference/overloading.rs b/rust/ql/test/library-tests/type-inference/overloading.rs index 94b5a8b69e4..e0f3dbf6954 100644 --- a/rust/ql/test/library-tests/type-inference/overloading.rs +++ b/rust/ql/test/library-tests/type-inference/overloading.rs @@ -449,3 +449,75 @@ mod inherent_before_trait { } } } + +mod trait_bound_impl_overlap { + trait MyTrait { + fn f(&self) -> T; + } + + trait MyTrait2 { + type Output; + + fn f(&self, x: T) -> Self::Output; + } + + struct S(T); + + impl MyTrait for S { + fn f(&self) -> i32 { + 0 + } + } + + impl MyTrait for S { + fn f(&self) -> i64 { + 0 + } + } + + impl MyTrait2> for S { + type Output = i32; + + fn f(&self, x: S) -> Self::Output { + 0 + } + } + + impl MyTrait2> for S { + type Output = >>::Output; + + fn f(&self, x: S) -> Self::Output { + 0 + } + } + + impl MyTrait2> for S { + type Output = i64; + + fn f(&self, x: S) -> Self::Output { + 0 + } + } + + fn call_f>(x: T2) -> T1 { + x.f() // $ target=f + } + + fn call_f2>(x: T1, y: T2) -> T2::Output { + y.f(x) // $ target=f + } + + fn test() { + let x = S(0); + let y = call_f(x); // $ target=call_f type=y:i32 $ SPURIOUS: type=y:i64 + let z: i32 = y; + + let x = S(0); + let y = call_f::(x); // $ target=call_f type=y:i32 + + let x = S(0); + let y = call_f2(S(0i32), x); // $ target=call_f2 type=y:i32 $ SPURIOUS: type=y:i64 + let x = S(0); + let y = call_f2(S(0i64), x); // $ target=call_f2 type=y:i64 $ SPURIOUS: type=y:i32 + } +} diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index feba4891a66..b71bcf64392 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -4079,6 +4079,51 @@ inferCertainType | overloading.rs:448:13:448:16 | self | | {EXTERNAL LOCATION} | & | | overloading.rs:448:13:448:16 | self | TRef | overloading.rs:405:5:405:19 | S | | overloading.rs:448:13:448:16 | self | TRef.T | {EXTERNAL LOCATION} | i64 | +| overloading.rs:455:14:455:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| overloading.rs:455:14:455:18 | SelfParam | TRef | overloading.rs:454:5:456:5 | Self [trait MyTrait] | +| overloading.rs:461:14:461:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| overloading.rs:461:14:461:18 | SelfParam | TRef | overloading.rs:458:5:462:5 | Self [trait MyTrait2] | +| overloading.rs:461:21:461:21 | x | | overloading.rs:458:20:458:27 | T | +| overloading.rs:467:14:467:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| overloading.rs:467:14:467:18 | SelfParam | TRef | overloading.rs:464:5:464:19 | S | +| overloading.rs:467:14:467:18 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:467:28:469:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| overloading.rs:473:14:473:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| overloading.rs:473:14:473:18 | SelfParam | TRef | overloading.rs:464:5:464:19 | S | +| overloading.rs:473:14:473:18 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:473:28:475:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| overloading.rs:481:14:481:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| overloading.rs:481:14:481:18 | SelfParam | TRef | overloading.rs:464:5:464:19 | S | +| overloading.rs:481:14:481:18 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:481:21:481:21 | x | | overloading.rs:464:5:464:19 | S | +| overloading.rs:481:21:481:21 | x | T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:481:48:483:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| overloading.rs:489:14:489:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| overloading.rs:489:14:489:18 | SelfParam | TRef | overloading.rs:464:5:464:19 | S | +| overloading.rs:489:14:489:18 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:489:21:489:21 | x | | overloading.rs:464:5:464:19 | S | +| overloading.rs:489:21:489:21 | x | T | {EXTERNAL LOCATION} | i64 | +| overloading.rs:489:48:491:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| overloading.rs:497:14:497:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| overloading.rs:497:14:497:18 | SelfParam | TRef | overloading.rs:464:5:464:19 | S | +| overloading.rs:497:14:497:18 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:497:21:497:21 | x | | overloading.rs:464:5:464:19 | S | +| overloading.rs:497:21:497:21 | x | T | {EXTERNAL LOCATION} | bool | +| overloading.rs:497:49:499:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| overloading.rs:502:36:502:36 | x | | overloading.rs:502:19:502:33 | T2 | +| overloading.rs:502:49:504:5 | { ... } | | overloading.rs:502:15:502:16 | T1 | +| overloading.rs:503:9:503:9 | x | | overloading.rs:502:19:502:33 | T2 | +| overloading.rs:506:38:506:38 | x | | overloading.rs:506:16:506:17 | T1 | +| overloading.rs:506:45:506:45 | y | | overloading.rs:506:20:506:35 | T2 | +| overloading.rs:506:66:508:5 | { ... } | | overloading.rs:506:20:506:35 | T2::Output[MyTrait2] | +| overloading.rs:507:9:507:9 | y | | overloading.rs:506:20:506:35 | T2 | +| overloading.rs:507:13:507:13 | x | | overloading.rs:506:16:506:17 | T1 | +| overloading.rs:510:15:522:5 | { ... } | | {EXTERNAL LOCATION} | () | +| overloading.rs:513:13:513:13 | z | | {EXTERNAL LOCATION} | i32 | +| overloading.rs:516:13:516:13 | y | | {EXTERNAL LOCATION} | i32 | +| overloading.rs:516:17:516:35 | call_f::<...>(...) | | {EXTERNAL LOCATION} | i32 | +| overloading.rs:519:27:519:30 | 0i32 | | {EXTERNAL LOCATION} | i32 | +| overloading.rs:521:27:521:30 | 0i64 | | {EXTERNAL LOCATION} | i64 | | 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} | () | @@ -12830,6 +12875,107 @@ inferType | overloading.rs:448:13:448:16 | self | TRef | overloading.rs:405:5:405:19 | S | | overloading.rs:448:13:448:16 | self | TRef.T | {EXTERNAL LOCATION} | i64 | | overloading.rs:448:13:448:22 | self.bar() | | {EXTERNAL LOCATION} | () | +| overloading.rs:455:14:455:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| overloading.rs:455:14:455:18 | SelfParam | TRef | overloading.rs:454:5:456:5 | Self [trait MyTrait] | +| overloading.rs:461:14:461:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| overloading.rs:461:14:461:18 | SelfParam | TRef | overloading.rs:458:5:462:5 | Self [trait MyTrait2] | +| overloading.rs:461:21:461:21 | x | | overloading.rs:458:20:458:27 | T | +| overloading.rs:467:14:467:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| overloading.rs:467:14:467:18 | SelfParam | TRef | overloading.rs:464:5:464:19 | S | +| overloading.rs:467:14:467:18 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:467:28:469:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| overloading.rs:468:13:468:13 | 0 | | {EXTERNAL LOCATION} | i32 | +| overloading.rs:473:14:473:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| overloading.rs:473:14:473:18 | SelfParam | TRef | overloading.rs:464:5:464:19 | S | +| overloading.rs:473:14:473:18 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:473:28:475:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| overloading.rs:474:13:474:13 | 0 | | {EXTERNAL LOCATION} | i32 | +| overloading.rs:474:13:474:13 | 0 | | {EXTERNAL LOCATION} | i64 | +| overloading.rs:481:14:481:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| overloading.rs:481:14:481:18 | SelfParam | TRef | overloading.rs:464:5:464:19 | S | +| overloading.rs:481:14:481:18 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:481:21:481:21 | x | | overloading.rs:464:5:464:19 | S | +| overloading.rs:481:21:481:21 | x | T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:481:48:483:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| overloading.rs:482:13:482:13 | 0 | | {EXTERNAL LOCATION} | i32 | +| overloading.rs:489:14:489:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| overloading.rs:489:14:489:18 | SelfParam | TRef | overloading.rs:464:5:464:19 | S | +| overloading.rs:489:14:489:18 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:489:21:489:21 | x | | overloading.rs:464:5:464:19 | S | +| overloading.rs:489:21:489:21 | x | T | {EXTERNAL LOCATION} | i64 | +| overloading.rs:489:48:491:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| overloading.rs:490:13:490:13 | 0 | | {EXTERNAL LOCATION} | i32 | +| overloading.rs:490:13:490:13 | 0 | | {EXTERNAL LOCATION} | i64 | +| overloading.rs:497:14:497:18 | SelfParam | | {EXTERNAL LOCATION} | & | +| overloading.rs:497:14:497:18 | SelfParam | TRef | overloading.rs:464:5:464:19 | S | +| overloading.rs:497:14:497:18 | SelfParam | TRef.T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:497:21:497:21 | x | | overloading.rs:464:5:464:19 | S | +| overloading.rs:497:21:497:21 | x | T | {EXTERNAL LOCATION} | bool | +| overloading.rs:497:49:499:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| overloading.rs:498:13:498:13 | 0 | | {EXTERNAL LOCATION} | i32 | +| overloading.rs:498:13:498:13 | 0 | | {EXTERNAL LOCATION} | i64 | +| overloading.rs:502:36:502:36 | x | | overloading.rs:502:19:502:33 | T2 | +| overloading.rs:502:49:504:5 | { ... } | | overloading.rs:502:15:502:16 | T1 | +| overloading.rs:503:9:503:9 | x | | overloading.rs:502:19:502:33 | T2 | +| overloading.rs:503:9:503:13 | x.f() | | overloading.rs:502:15:502:16 | T1 | +| overloading.rs:506:38:506:38 | x | | overloading.rs:506:16:506:17 | T1 | +| overloading.rs:506:45:506:45 | y | | overloading.rs:506:20:506:35 | T2 | +| overloading.rs:506:66:508:5 | { ... } | | overloading.rs:506:20:506:35 | T2::Output[MyTrait2] | +| overloading.rs:507:9:507:9 | y | | overloading.rs:506:20:506:35 | T2 | +| overloading.rs:507:9:507:14 | y.f(...) | | overloading.rs:506:20:506:35 | T2::Output[MyTrait2] | +| overloading.rs:507:13:507:13 | x | | overloading.rs:506:16:506:17 | T1 | +| overloading.rs:510:15:522:5 | { ... } | | {EXTERNAL LOCATION} | () | +| overloading.rs:511:13:511:13 | x | | overloading.rs:464:5:464:19 | S | +| overloading.rs:511:13:511:13 | x | T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:511:17:511:20 | S(...) | | overloading.rs:464:5:464:19 | S | +| overloading.rs:511:17:511:20 | S(...) | T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:511:19:511:19 | 0 | | {EXTERNAL LOCATION} | i32 | +| overloading.rs:512:13:512:13 | y | | {EXTERNAL LOCATION} | i32 | +| overloading.rs:512:13:512:13 | y | | {EXTERNAL LOCATION} | i64 | +| overloading.rs:512:17:512:25 | call_f(...) | | {EXTERNAL LOCATION} | i32 | +| overloading.rs:512:17:512:25 | call_f(...) | | {EXTERNAL LOCATION} | i64 | +| overloading.rs:512:24:512:24 | x | | overloading.rs:464:5:464:19 | S | +| overloading.rs:512:24:512:24 | x | T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:513:13:513:13 | z | | {EXTERNAL LOCATION} | i32 | +| overloading.rs:513:22:513:22 | y | | {EXTERNAL LOCATION} | i32 | +| overloading.rs:513:22:513:22 | y | | {EXTERNAL LOCATION} | i64 | +| overloading.rs:515:13:515:13 | x | | overloading.rs:464:5:464:19 | S | +| overloading.rs:515:13:515:13 | x | T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:515:17:515:20 | S(...) | | overloading.rs:464:5:464:19 | S | +| overloading.rs:515:17:515:20 | S(...) | T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:515:19:515:19 | 0 | | {EXTERNAL LOCATION} | i32 | +| overloading.rs:516:13:516:13 | y | | {EXTERNAL LOCATION} | i32 | +| overloading.rs:516:17:516:35 | call_f::<...>(...) | | {EXTERNAL LOCATION} | i32 | +| overloading.rs:516:34:516:34 | x | | overloading.rs:464:5:464:19 | S | +| overloading.rs:516:34:516:34 | x | T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:518:13:518:13 | x | | overloading.rs:464:5:464:19 | S | +| overloading.rs:518:13:518:13 | x | T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:518:17:518:20 | S(...) | | overloading.rs:464:5:464:19 | S | +| overloading.rs:518:17:518:20 | S(...) | T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:518:19:518:19 | 0 | | {EXTERNAL LOCATION} | i32 | +| overloading.rs:519:13:519:13 | y | | {EXTERNAL LOCATION} | i32 | +| overloading.rs:519:13:519:13 | y | | {EXTERNAL LOCATION} | i64 | +| overloading.rs:519:17:519:35 | call_f2(...) | | {EXTERNAL LOCATION} | i32 | +| overloading.rs:519:17:519:35 | call_f2(...) | | {EXTERNAL LOCATION} | i64 | +| overloading.rs:519:25:519:31 | S(...) | | overloading.rs:464:5:464:19 | S | +| overloading.rs:519:25:519:31 | S(...) | T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:519:27:519:30 | 0i32 | | {EXTERNAL LOCATION} | i32 | +| overloading.rs:519:34:519:34 | x | | overloading.rs:464:5:464:19 | S | +| overloading.rs:519:34:519:34 | x | T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:520:13:520:13 | x | | overloading.rs:464:5:464:19 | S | +| overloading.rs:520:13:520:13 | x | T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:520:17:520:20 | S(...) | | overloading.rs:464:5:464:19 | S | +| overloading.rs:520:17:520:20 | S(...) | T | {EXTERNAL LOCATION} | i32 | +| overloading.rs:520:19:520:19 | 0 | | {EXTERNAL LOCATION} | i32 | +| overloading.rs:521:13:521:13 | y | | {EXTERNAL LOCATION} | i32 | +| overloading.rs:521:13:521:13 | y | | {EXTERNAL LOCATION} | i64 | +| overloading.rs:521:17:521:35 | call_f2(...) | | {EXTERNAL LOCATION} | i32 | +| overloading.rs:521:17:521:35 | call_f2(...) | | {EXTERNAL LOCATION} | i64 | +| overloading.rs:521:25:521:31 | S(...) | | overloading.rs:464:5:464:19 | S | +| overloading.rs:521:25:521:31 | S(...) | T | {EXTERNAL LOCATION} | i64 | +| overloading.rs:521:27:521:30 | 0i64 | | {EXTERNAL LOCATION} | i64 | +| overloading.rs:521:34:521:34 | x | | overloading.rs:464:5:464:19 | S | +| overloading.rs:521:34:521:34 | x | T | {EXTERNAL LOCATION} | i32 | | 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 | From 06f0c1189ff0f700c6b1ed9f6599ab830b4b9734 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 17 Mar 2026 15:41:41 +0100 Subject: [PATCH 056/185] Shared: Generalize `SatisfiesConstraint` module --- .../typeinference/BlanketImplementation.qll | 4 +- .../internal/typeinference/TypeInference.qll | 31 ++- .../internal/typeinference/TypeMention.qll | 4 +- .../typeinference/internal/TypeInference.qll | 184 +++++++++++------- 4 files changed, 129 insertions(+), 94 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/BlanketImplementation.qll b/rust/ql/lib/codeql/rust/internal/typeinference/BlanketImplementation.qll index db1402280d4..97dbf2d8f3a 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/BlanketImplementation.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/BlanketImplementation.qll @@ -103,7 +103,7 @@ module SatisfiesBlanketConstraint< } private module SatisfiesBlanketConstraintInput implements - SatisfiesConstraintInputSig + SatisfiesTypeInputSig { pragma[nomagic] additional predicate relevantConstraint( @@ -123,7 +123,7 @@ module SatisfiesBlanketConstraint< } private module SatisfiesBlanketConstraint = - SatisfiesConstraint; + SatisfiesType; /** * Holds if the argument type `at` satisfies the first non-trivial blanket diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll index da150a3ef39..504d8979c52 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll @@ -2362,8 +2362,7 @@ private module AssocFunctionResolution { Location getLocation() { result = afc.getLocation() } } - private module CallSatisfiesDerefConstraintInput implements - SatisfiesConstraintInputSig + private module CallSatisfiesDerefConstraintInput implements SatisfiesTypeInputSig { pragma[nomagic] predicate relevantConstraint(CallDerefCand mc, Type constraint) { @@ -2373,7 +2372,7 @@ private module AssocFunctionResolution { } private module CallSatisfiesDerefConstraint = - SatisfiesConstraint; + SatisfiesType; pragma[nomagic] private AssociatedTypeTypeParameter getDerefTargetTypeParameter() { @@ -3466,7 +3465,7 @@ final private class AwaitTarget extends Expr { Type getTypeAt(TypePath path) { result = inferType(this, path) } } -private module AwaitSatisfiesConstraintInput implements SatisfiesConstraintInputSig { +private module AwaitSatisfiesTypeInput implements SatisfiesTypeInputSig { pragma[nomagic] predicate relevantConstraint(AwaitTarget term, Type constraint) { exists(term) and @@ -3474,13 +3473,12 @@ private module AwaitSatisfiesConstraintInput implements SatisfiesConstraintInput } } -private module AwaitSatisfiesConstraint = - SatisfiesConstraint; +private module AwaitSatisfiesType = SatisfiesType; pragma[nomagic] private Type inferAwaitExprType(AstNode n, TypePath path) { exists(TypePath exprPath | - AwaitSatisfiesConstraint::satisfiesConstraintType(n.(AwaitExpr).getExpr(), _, exprPath, result) and + AwaitSatisfiesType::satisfiesConstraintType(n.(AwaitExpr).getExpr(), _, exprPath, result) and exprPath.isCons(getFutureOutputTypeParameter(), path) ) } @@ -3616,9 +3614,7 @@ final private class ForIterableExpr extends Expr { Type getTypeAt(TypePath path) { result = inferType(this, path) } } -private module ForIterableSatisfiesConstraintInput implements - SatisfiesConstraintInputSig -{ +private module ForIterableSatisfiesTypeInput implements SatisfiesTypeInputSig { predicate relevantConstraint(ForIterableExpr term, Type constraint) { exists(term) and exists(Trait t | t = constraint.(TraitType).getTrait() | @@ -3639,15 +3635,15 @@ private AssociatedTypeTypeParameter getIntoIteratorItemTypeParameter() { result = getAssociatedTypeTypeParameter(any(IntoIteratorTrait t).getItemType()) } -private module ForIterableSatisfiesConstraint = - SatisfiesConstraint; +private module ForIterableSatisfiesType = + SatisfiesType; pragma[nomagic] private Type inferForLoopExprType(AstNode n, TypePath path) { // type of iterable -> type of pattern (loop variable) exists(ForExpr fe, TypePath exprPath, AssociatedTypeTypeParameter tp | n = fe.getPat() and - ForIterableSatisfiesConstraint::satisfiesConstraintType(fe.getIterable(), _, exprPath, result) and + ForIterableSatisfiesType::satisfiesConstraintType(fe.getIterable(), _, exprPath, result) and exprPath.isCons(tp, path) | tp = getIntoIteratorItemTypeParameter() @@ -3673,8 +3669,7 @@ final private class InvokedClosureExpr extends Expr { CallExpr getCall() { result = call } } -private module InvokedClosureSatisfiesConstraintInput implements - SatisfiesConstraintInputSig +private module InvokedClosureSatisfiesTypeInput implements SatisfiesTypeInputSig { predicate relevantConstraint(InvokedClosureExpr term, Type constraint) { exists(term) and @@ -3682,12 +3677,12 @@ private module InvokedClosureSatisfiesConstraintInput implements } } -private module InvokedClosureSatisfiesConstraint = - SatisfiesConstraint; +private module InvokedClosureSatisfiesType = + SatisfiesType; /** Gets the type of `ce` when viewed as an implementation of `FnOnce`. */ private Type invokedClosureFnTypeAt(InvokedClosureExpr ce, TypePath path) { - InvokedClosureSatisfiesConstraint::satisfiesConstraintType(ce, _, path, result) + InvokedClosureSatisfiesType::satisfiesConstraintType(ce, _, path, result) } /** diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeMention.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeMention.qll index dcb3fc0b0f4..d9a00f33940 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/TypeMention.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeMention.qll @@ -730,14 +730,14 @@ private predicate pathConcreteTypeAssocType( ) } -private module PathSatisfiesConstraintInput implements SatisfiesConstraintInputSig { +private module PathSatisfiesConstraintInput implements SatisfiesTypeInputSig { predicate relevantConstraint(PreTypeMention tm, Type constraint) { pathConcreteTypeAssocType(_, tm, constraint.(TraitType).getTrait(), _, _) } } private module PathSatisfiesConstraint = - SatisfiesConstraint; + SatisfiesType; /** * Gets the type of `path` at `typePath` when `path` accesses an associated type diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index c33c49e7a16..d42aef05a40 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -820,38 +820,43 @@ module Make1 Input1> { private import BaseTypes - signature module SatisfiesConstraintInputSig { + /** Provides the input to `SatisfiesConstraint`. */ + signature module SatisfiesConstraintInputSig { /** Holds if it is relevant to know if `term` satisfies `constraint`. */ - predicate relevantConstraint(HasTypeTree term, Type constraint); + predicate relevantConstraint(Term term, Constraint constraint); } module SatisfiesConstraint< - HasTypeTreeSig HasTypeTree, SatisfiesConstraintInputSig Input> + HasTypeTreeSig Term, HasTypeTreeSig Constraint, + SatisfiesConstraintInputSig Input> { private import Input pragma[nomagic] - private Type getTypeAt(HasTypeTree term, TypePath path) { + private Type getTypeAt(Term term, TypePath path) { relevantConstraint(term, _) and result = term.getTypeAt(path) } /** Holds if the type tree has the type `type` and should satisfy `constraint`. */ pragma[nomagic] - private predicate hasTypeConstraint(HasTypeTree term, Type type, Type constraint) { + private predicate hasTypeConstraint( + Term term, Type type, Constraint constraint, Type constraintRoot + ) { type = getTypeAt(term, TypePath::nil()) and - relevantConstraint(term, constraint) + relevantConstraint(term, constraint) and + constraintRoot = constraint.getTypeAt(TypePath::nil()) } - private module IsInstantiationOfInput implements - IsInstantiationOfInputSig + private module TermIsInstantiationOfConditionInput implements + IsInstantiationOfInputSig { - predicate potentialInstantiationOf(HasTypeTree tt, TypeAbstraction abs, TypeMention cond) { - exists(Type constraint, Type type | - hasTypeConstraint(tt, type, constraint) and - rootTypesSatisfaction(type, constraint, abs, cond, _) and + predicate potentialInstantiationOf(Term term, TypeAbstraction abs, TypeMention cond) { + exists(Constraint constraint, Type type, Type constraintRoot | + hasTypeConstraint(term, type, constraint, constraintRoot) and + rootTypesSatisfaction(type, constraintRoot, abs, cond, _) and // We only need to check instantiations where there are multiple candidates. - multipleConstraintImplementations(type, constraint) + multipleConstraintImplementations(type, constraintRoot) ) } @@ -860,18 +865,18 @@ module Make1 Input1> { } } - private module SatisfiesConstraintIsInstantiationOf = - IsInstantiationOf; + private module TermIsInstantiationOfCondition = + IsInstantiationOf; /** - * Holds if `tt` satisfies `constraint` through `abs`, `sub`, and `constraintMention`. + * Holds if `term` satisfies `constraint` through `abs`, `sub`, and `constraintMention`. */ pragma[nomagic] private predicate hasConstraintMention( - HasTypeTree tt, TypeAbstraction abs, TypeMention condition, Type constraint, - TypeMention constraintMention + Term term, TypeAbstraction abs, TypeMention condition, Constraint constraint, + Type constraintRoot, TypeMention constraintMention ) { - exists(Type type | hasTypeConstraint(tt, type, constraint) | + exists(Type type | hasTypeConstraint(term, type, constraint, constraintRoot) | // TODO: Handle universal conditions properly, which means checking type parameter constraints // Also remember to update logic in `hasNotConstraintMention` // @@ -880,35 +885,37 @@ module Make1 Input1> { // getTypeMentionRoot(condition) = abs.getATypeParameter() and // constraint = getTypeMentionRoot(constraintMention) // or - countConstraintImplementations(type, constraint) > 0 and - rootTypesSatisfaction(type, constraint, abs, condition, constraintMention) and + countConstraintImplementations(type, constraintRoot) > 0 and + rootTypesSatisfaction(type, constraintRoot, abs, condition, constraintMention) and // When there are multiple ways the type could implement the // constraint we need to find the right implementation, which is the // one where the type instantiates the precondition. - if multipleConstraintImplementations(type, constraint) - then SatisfiesConstraintIsInstantiationOf::isInstantiationOf(tt, abs, condition) + if multipleConstraintImplementations(type, constraintRoot) + then TermIsInstantiationOfCondition::isInstantiationOf(term, abs, condition) else any() ) } pragma[nomagic] private predicate isNotInstantiationOf( - HasTypeTree tt, TypeAbstraction abs, TypeMention condition, Type root + Term term, TypeAbstraction abs, TypeMention condition, Type root ) { exists(TypePath path | - SatisfiesConstraintIsInstantiationOf::isNotInstantiationOf(tt, abs, condition, path) and + TermIsInstantiationOfCondition::isNotInstantiationOf(term, abs, condition, path) and path.isCons(root.getATypeParameter(), _) ) } /** - * Holds if `tt` does not satisfy `constraint`. + * Holds if `term` does not satisfy `constraint`. * - * This predicate is an approximation of `not hasConstraintMention(tt, constraint)`. + * This predicate is an approximation of `not hasConstraintMention(term, constraint)`. */ pragma[nomagic] - private predicate hasNotConstraintMention(HasTypeTree tt, Type constraint) { - exists(Type type | hasTypeConstraint(tt, type, constraint) | + private predicate hasNotConstraintMention( + Term term, Constraint constraint, Type constraintRoot + ) { + exists(Type type | hasTypeConstraint(term, type, constraint, constraintRoot) | // TODO: Handle universal conditions properly, which means taking type parameter constraints into account // ( // exists(countConstraintImplementations(type, constraint)) @@ -921,15 +928,15 @@ module Make1 Input1> { // ) // ) and ( - countConstraintImplementations(type, constraint) = 0 + countConstraintImplementations(type, constraintRoot) = 0 or - not rootTypesSatisfaction(type, constraint, _, _, _) + not rootTypesSatisfaction(type, constraintRoot, _, _, _) or - multipleConstraintImplementations(type, constraint) and + multipleConstraintImplementations(type, constraintRoot) and forex(TypeAbstraction abs, TypeMention condition | - rootTypesSatisfaction(type, constraint, abs, condition, _) + rootTypesSatisfaction(type, constraintRoot, abs, condition, _) | - isNotInstantiationOf(tt, abs, condition, type) + isNotInstantiationOf(term, abs, condition, type) ) ) ) @@ -937,21 +944,22 @@ module Make1 Input1> { pragma[nomagic] private predicate satisfiesConstraintTypeMention0( - HasTypeTree tt, Type constraint, TypeAbstraction abs, TypeMention sub, TypePath path, Type t + Term term, Constraint constraint, TypeAbstraction abs, TypeMention sub, TypePath path, + Type t ) { - exists(TypeMention constraintMention | - hasConstraintMention(tt, abs, sub, constraint, constraintMention) and + exists(Type constraintRoot, TypeMention constraintMention | + hasConstraintMention(term, abs, sub, constraint, constraintRoot, constraintMention) and conditionSatisfiesConstraintTypeAt(abs, sub, constraintMention, path, t) ) } pragma[inline] private predicate satisfiesConstraintTypeMentionInline( - HasTypeTree tt, TypeAbstraction abs, Type constraint, TypePath path, + Term term, Constraint constraint, TypeAbstraction abs, TypePath path, TypePath pathToTypeParamInSub ) { exists(TypeMention sub, TypeParameter tp | - satisfiesConstraintTypeMention0(tt, constraint, abs, sub, path, tp) and + satisfiesConstraintTypeMention0(term, constraint, abs, sub, path, tp) and tp = abs.getATypeParameter() and sub.getTypeAt(pathToTypeParamInSub) = tp ) @@ -959,91 +967,125 @@ module Make1 Input1> { pragma[nomagic] private predicate satisfiesConstraintTypeMention( - HasTypeTree tt, Type constraint, TypePath path, TypePath pathToTypeParamInSub + Term term, Constraint constraint, TypePath path, TypePath pathToTypeParamInSub ) { - satisfiesConstraintTypeMentionInline(tt, _, constraint, path, pathToTypeParamInSub) + satisfiesConstraintTypeMentionInline(term, constraint, _, path, pathToTypeParamInSub) } pragma[nomagic] private predicate satisfiesConstraintTypeMentionThrough( - HasTypeTree tt, TypeAbstraction abs, Type constraint, TypePath path, + Term term, Constraint constraint, TypeAbstraction abs, TypePath path, TypePath pathToTypeParamInSub ) { - satisfiesConstraintTypeMentionInline(tt, abs, constraint, path, pathToTypeParamInSub) + satisfiesConstraintTypeMentionInline(term, constraint, abs, path, pathToTypeParamInSub) } pragma[inline] private predicate satisfiesConstraintTypeNonTypeParamInline( - HasTypeTree tt, TypeAbstraction abs, Type constraint, TypePath path, Type t + Term term, TypeAbstraction abs, Constraint constraint, TypePath path, Type t ) { - satisfiesConstraintTypeMention0(tt, constraint, abs, _, path, t) and + satisfiesConstraintTypeMention0(term, constraint, abs, _, path, t) and not t = abs.getATypeParameter() } pragma[nomagic] - private predicate hasTypeConstraint(HasTypeTree term, Type constraint) { - hasTypeConstraint(term, constraint, constraint) + private predicate hasTypeConstraint(Term term, Constraint constraint) { + exists(Type constraintRoot | + hasTypeConstraint(term, constraintRoot, constraint, constraintRoot) + ) } /** - * Holds if the type tree at `tt` satisfies the constraint `constraint` + * Holds if the type tree at `term` satisfies the constraint `constraint` * with the type `t` at `path`. */ pragma[nomagic] - predicate satisfiesConstraintType(HasTypeTree tt, Type constraint, TypePath path, Type t) { - satisfiesConstraintTypeNonTypeParamInline(tt, _, constraint, path, t) + predicate satisfiesConstraintType(Term term, Constraint constraint, TypePath path, Type t) { + satisfiesConstraintTypeNonTypeParamInline(term, _, constraint, path, t) or exists(TypePath prefix0, TypePath pathToTypeParamInSub, TypePath suffix | - satisfiesConstraintTypeMention(tt, constraint, prefix0, pathToTypeParamInSub) and - getTypeAt(tt, pathToTypeParamInSub.appendInverse(suffix)) = t and + satisfiesConstraintTypeMention(term, constraint, prefix0, pathToTypeParamInSub) and + getTypeAt(term, pathToTypeParamInSub.appendInverse(suffix)) = t and path = prefix0.append(suffix) ) or - hasTypeConstraint(tt, constraint) and - t = getTypeAt(tt, path) + hasTypeConstraint(term, constraint) and + t = getTypeAt(term, path) } /** - * Holds if the type tree at `tt` satisfies the constraint `constraint` + * Holds if the type tree at `term` satisfies the constraint `constraint` * through `abs` with the type `t` at `path`. */ pragma[nomagic] predicate satisfiesConstraintTypeThrough( - HasTypeTree tt, TypeAbstraction abs, Type constraint, TypePath path, Type t + Term term, TypeAbstraction abs, Constraint constraint, TypePath path, Type t ) { - satisfiesConstraintTypeNonTypeParamInline(tt, abs, constraint, path, t) + satisfiesConstraintTypeNonTypeParamInline(term, abs, constraint, path, t) or exists(TypePath prefix0, TypePath pathToTypeParamInSub, TypePath suffix | - satisfiesConstraintTypeMentionThrough(tt, abs, constraint, prefix0, pathToTypeParamInSub) and - getTypeAt(tt, pathToTypeParamInSub.appendInverse(suffix)) = t and + satisfiesConstraintTypeMentionThrough(term, constraint, abs, prefix0, pathToTypeParamInSub) and + getTypeAt(term, pathToTypeParamInSub.appendInverse(suffix)) = t and path = prefix0.append(suffix) ) } /** - * Holds if the type tree at `tt` does _not_ satisfy the constraint `constraint`. + * Holds if the type tree at `term` does _not_ satisfy the constraint `constraint`. * - * This is an approximation of `not satisfiesConstraintType(tt, constraint, _, _)`, + * This is an approximation of `not satisfiesConstraintType(term, constraint, _, _)`, * but defined without a negative occurrence of `satisfiesConstraintType`. * * Due to the approximation, both `satisfiesConstraintType` and `dissatisfiesConstraint` - * can hold for the same values. For example, if `tt` has two different types `t1` + * can hold for the same values. For example, if `term` has two different types `t1` * and `t2`, and `t1` satisfies `constraint` while `t2` does not, then both * `satisfiesConstraintType` and `dissatisfiesConstraint` will hold. * - * Dually, if `tt` does not have a type, then neither `satisfiesConstraintType` nor + * Dually, if `term` does not have a type, then neither `satisfiesConstraintType` nor * `dissatisfiesConstraint` will hold. */ pragma[nomagic] - predicate dissatisfiesConstraint(HasTypeTree tt, Type constraint) { - hasNotConstraintMention(tt, constraint) and - exists(Type t | - hasTypeConstraint(tt, t, constraint) and - t != constraint + predicate dissatisfiesConstraint(Term term, Constraint constraint) { + hasNotConstraintMention(term, constraint, _) and + exists(Type t, Type constraintRoot | + hasTypeConstraint(term, t, constraint, constraintRoot) and // todo + t != constraintRoot ) } } + /** Provides the input to `SatisfiesType`. */ + signature module SatisfiesTypeInputSig { + /** Holds if it is relevant to know if `term` satisfies `type`. */ + predicate relevantConstraint(Term term, Type type); + } + + /** + * A helper module wrapping `SatisfiesConstraint` where the constraint is simply a type. + */ + module SatisfiesType Input> { + private import Input + + final private class TypeFinal = Type; + + private class TypeAsTypeTree extends TypeFinal { + Type getTypeAt(TypePath path) { + result = this and + path.isEmpty() + } + } + + private module SatisfiesConstraintInput implements + SatisfiesConstraintInputSig + { + predicate relevantConstraint(Term term, TypeAsTypeTree constraint) { + Input::relevantConstraint(term, constraint) + } + } + + import SatisfiesConstraint + } + /** Provides the input to `MatchingWithEnvironment`. */ signature module MatchingWithEnvironmentInputSig { /** @@ -1305,9 +1347,7 @@ module Make1 Input1> { Location getLocation() { result = a.getLocation() } } - private module SatisfiesConstraintInput implements - SatisfiesConstraintInputSig - { + private module SatisfiesConstraintInput implements SatisfiesTypeInputSig { predicate relevantConstraint(RelevantAccess at, Type constraint) { constraint = at.getConstraint(_) } @@ -1319,7 +1359,7 @@ module Make1 Input1> { ) { exists(RelevantAccess ra | ra = MkRelevantAccess(a, apos, e, prefix) and - SatisfiesConstraint::satisfiesConstraintType(ra, + SatisfiesType::satisfiesConstraintType(ra, constraint, path, t) and constraint = ra.getConstraint(target) ) From e8e46accc002bc6498f50d02e5b3c16457901a6e Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 17 Mar 2026 19:59:59 +0100 Subject: [PATCH 057/185] Rust: Refine `AssociatedTypeTypeParameter.toString` --- .../codeql/rust/internal/typeinference/Type.qll | 12 +++++++++--- .../type-inference/type-inference.expected | 16 ++++++++-------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/Type.qll b/rust/ql/lib/codeql/rust/internal/typeinference/Type.qll index 05b6557522a..9ae79f2d58c 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/Type.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/Type.qll @@ -439,11 +439,11 @@ class TypeParamTypeParameter extends TypeParameter, TTypeParamTypeParameter { */ class AssociatedTypeTypeParameter extends TypeParameter, TAssociatedTypeTypeParameter { private Trait trait; - private TypeAlias typeAlias; + private AssocType typeAlias; AssociatedTypeTypeParameter() { this = TAssociatedTypeTypeParameter(trait, typeAlias) } - TypeAlias getTypeAlias() { result = typeAlias } + AssocType getTypeAlias() { result = typeAlias } /** Gets the trait that contains this associated type declaration. */ TraitItemNode getTrait() { result = trait } @@ -457,7 +457,13 @@ class AssociatedTypeTypeParameter extends TypeParameter, TAssociatedTypeTypePara override ItemNode getDeclaringItem() { result = trait } override string toString() { - result = typeAlias.getName().getText() + "[" + trait.getName().toString() + "]" + exists(string fromString, TraitItemNode trait2 | + result = typeAlias.getName().getText() + "[" + trait.getName() + fromString + "]" and + trait2 = typeAlias.getTrait() and + if trait = trait2 + then fromString = "" + else fromString = " (inherited from " + trait2.getName() + ")" + ) } override Location getLocation() { result = typeAlias.getLocation() } 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 b71bcf64392..54b338bd5c4 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -209,15 +209,15 @@ inferCertainType | associated_types.rs:454:24:454:28 | SelfParam | TRef | associated_types.rs:452:5:455:5 | Self [trait Subtrait] | | associated_types.rs:463:23:463:27 | SelfParam | | {EXTERNAL LOCATION} | & | | associated_types.rs:463:23:463:27 | SelfParam | TRef | associated_types.rs:457:5:467:5 | Self [trait Subtrait2] | -| associated_types.rs:463:30:463:31 | c1 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | -| associated_types.rs:463:48:463:49 | c2 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | +| associated_types.rs:463:30:463:31 | c1 | | associated_types.rs:20:5:20:16 | Output[Subtrait2 (inherited from GetSet)] | +| associated_types.rs:463:48:463:49 | c2 | | associated_types.rs:20:5:20:16 | Output[Subtrait2 (inherited from GetSet)] | | associated_types.rs:463:66:466:9 | { ... } | | {EXTERNAL LOCATION} | () | | associated_types.rs:464:13:464:16 | self | | {EXTERNAL LOCATION} | & | | associated_types.rs:464:13:464:16 | self | TRef | associated_types.rs:457:5:467:5 | Self [trait Subtrait2] | -| associated_types.rs:464:22:464:23 | c1 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | +| associated_types.rs:464:22:464:23 | c1 | | associated_types.rs:20:5:20:16 | Output[Subtrait2 (inherited from GetSet)] | | associated_types.rs:465:13:465:16 | self | | {EXTERNAL LOCATION} | & | | associated_types.rs:465:13:465:16 | self | TRef | associated_types.rs:457:5:467:5 | Self [trait Subtrait2] | -| associated_types.rs:465:22:465:23 | c2 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | +| associated_types.rs:465:22:465:23 | c2 | | associated_types.rs:20:5:20:16 | Output[Subtrait2 (inherited from GetSet)] | | associated_types.rs:474:16:474:20 | SelfParam | | {EXTERNAL LOCATION} | & | | associated_types.rs:474:16:474:20 | SelfParam | TRef | associated_types.rs:469:5:469:24 | MyType | | associated_types.rs:474:16:474:20 | SelfParam | TRef.T | associated_types.rs:471:10:471:16 | T | @@ -5441,17 +5441,17 @@ inferType | associated_types.rs:454:24:454:28 | SelfParam | TRef | associated_types.rs:452:5:455:5 | Self [trait Subtrait] | | associated_types.rs:463:23:463:27 | SelfParam | | {EXTERNAL LOCATION} | & | | associated_types.rs:463:23:463:27 | SelfParam | TRef | associated_types.rs:457:5:467:5 | Self [trait Subtrait2] | -| associated_types.rs:463:30:463:31 | c1 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | -| associated_types.rs:463:48:463:49 | c2 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | +| associated_types.rs:463:30:463:31 | c1 | | associated_types.rs:20:5:20:16 | Output[Subtrait2 (inherited from GetSet)] | +| associated_types.rs:463:48:463:49 | c2 | | associated_types.rs:20:5:20:16 | Output[Subtrait2 (inherited from GetSet)] | | associated_types.rs:463:66:466:9 | { ... } | | {EXTERNAL LOCATION} | () | | associated_types.rs:464:13:464:16 | self | | {EXTERNAL LOCATION} | & | | associated_types.rs:464:13:464:16 | self | TRef | associated_types.rs:457:5:467:5 | Self [trait Subtrait2] | | associated_types.rs:464:13:464:24 | self.set(...) | | {EXTERNAL LOCATION} | () | -| associated_types.rs:464:22:464:23 | c1 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | +| associated_types.rs:464:22:464:23 | c1 | | associated_types.rs:20:5:20:16 | Output[Subtrait2 (inherited from GetSet)] | | associated_types.rs:465:13:465:16 | self | | {EXTERNAL LOCATION} | & | | associated_types.rs:465:13:465:16 | self | TRef | associated_types.rs:457:5:467:5 | Self [trait Subtrait2] | | associated_types.rs:465:13:465:24 | self.set(...) | | {EXTERNAL LOCATION} | () | -| associated_types.rs:465:22:465:23 | c2 | | associated_types.rs:20:5:20:16 | Output[Subtrait2] | +| associated_types.rs:465:22:465:23 | c2 | | associated_types.rs:20:5:20:16 | Output[Subtrait2 (inherited from GetSet)] | | associated_types.rs:474:16:474:20 | SelfParam | | {EXTERNAL LOCATION} | & | | associated_types.rs:474:16:474:20 | SelfParam | TRef | associated_types.rs:469:5:469:24 | MyType | | associated_types.rs:474:16:474:20 | SelfParam | TRef.T | associated_types.rs:471:10:471:16 | T | From 98d8cd1d6d59bd56b748b99a72febb6344bee0ac Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 17 Mar 2026 20:01:38 +0100 Subject: [PATCH 058/185] Rust: Make `getATypeParameterConstraint` return a `TypeMention` again --- .../internal/typeinference/TypeInference.qll | 22 +++++++------- .../typeinference/internal/TypeInference.qll | 30 +++++++++++-------- 2 files changed, 27 insertions(+), 25 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll index 504d8979c52..3229b3ee0bb 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll @@ -127,17 +127,15 @@ private module Input implements InputSig1, InputSig2 { PreTypeMention getABaseTypeMention(Type t) { none() } - Type getATypeParameterConstraint(TypeParameter tp, TypePath path) { - exists(TypeMention tm | result = tm.getTypeAt(path) | - tm = tp.(TypeParamTypeParameter).getTypeParam().getATypeBound().getTypeRepr() or - tm = tp.(SelfTypeParameter).getTrait() or - tm = - tp.(ImplTraitTypeTypeParameter) - .getImplTraitTypeRepr() - .getTypeBoundList() - .getABound() - .getTypeRepr() - ) + PreTypeMention getATypeParameterConstraint(TypeParameter tp) { + result = tp.(TypeParamTypeParameter).getTypeParam().getATypeBound().getTypeRepr() or + result = tp.(SelfTypeParameter).getTrait() or + result = + tp.(ImplTraitTypeTypeParameter) + .getImplTraitTypeRepr() + .getTypeBoundList() + .getABound() + .getTypeRepr() } /** @@ -988,7 +986,7 @@ private module ContextTyping { or exists(TypeParameter mid | assocFunctionMentionsTypeParameterAtNonRetPos(i, f, mid) and - tp = getATypeParameterConstraint(mid, _) + tp = getATypeParameterConstraint(mid).getTypeAt(_) ) } diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index d42aef05a40..cbc1f608813 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -336,7 +336,7 @@ module Make1 Input1> { * ``` * the type parameter `T` has the constraint `IComparable`. */ - Type getATypeParameterConstraint(TypeParameter tp, TypePath path); + TypeMention getATypeParameterConstraint(TypeParameter tp); /** * Holds if @@ -1308,7 +1308,7 @@ module Make1 Input1> { private module AccessConstraint { predicate relevantAccessConstraint( Access a, AccessEnvironment e, Declaration target, AccessPosition apos, TypePath path, - Type constraint + TypeMention constraint ) { target = a.getTarget(e) and typeParameterConstraintHasTypeParameter(target, apos, path, constraint, _, _) @@ -1336,7 +1336,7 @@ module Make1 Input1> { } /** Gets the constraint that this relevant access should satisfy. */ - Type getConstraint(Declaration target) { + TypeMention getConstraint(Declaration target) { relevantAccessConstraint(a, e, target, apos, path, result) } @@ -1347,20 +1347,24 @@ module Make1 Input1> { Location getLocation() { result = a.getLocation() } } - private module SatisfiesConstraintInput implements SatisfiesTypeInputSig { - predicate relevantConstraint(RelevantAccess at, Type constraint) { + private module SatisfiesTypeParameterConstraintInput implements + SatisfiesConstraintInputSig + { + predicate relevantConstraint(RelevantAccess at, TypeMention constraint) { constraint = at.getConstraint(_) } } + private module SatisfiesTypeParameterConstraint = + SatisfiesConstraint; + predicate satisfiesConstraintType( Access a, AccessEnvironment e, Declaration target, AccessPosition apos, TypePath prefix, - Type constraint, TypePath path, Type t + TypeMention constraint, TypePath path, Type t ) { exists(RelevantAccess ra | ra = MkRelevantAccess(a, apos, e, prefix) and - SatisfiesType::satisfiesConstraintType(ra, - constraint, path, t) and + SatisfiesTypeParameterConstraint::satisfiesConstraintType(ra, constraint, path, t) and constraint = ra.getConstraint(target) ) } @@ -1469,17 +1473,17 @@ module Make1 Input1> { */ pragma[nomagic] private predicate typeParameterConstraintHasTypeParameter( - Declaration target, AccessPosition apos, TypePath pathToConstrained, Type constraint, + Declaration target, AccessPosition apos, TypePath pathToConstrained, TypeMention constraint, TypePath pathToTp, TypeParameter tp ) { exists(DeclarationPosition dpos, TypeParameter constrainedTp | accessDeclarationPositionMatch(apos, dpos) and constrainedTp = target.getTypeParameter(_) and + constraint = getATypeParameterConstraint(constrainedTp) and tp = target.getTypeParameter(_) and - tp = getATypeParameterConstraint(constrainedTp, pathToTp) and + tp = constraint.getTypeAt(pathToTp) and constrainedTp != tp and - constrainedTp = target.getDeclaredType(dpos, pathToConstrained) and - constraint = getATypeParameterConstraint(constrainedTp, TypePath::nil()) + constrainedTp = target.getDeclaredType(dpos, pathToConstrained) ) } @@ -1488,7 +1492,7 @@ module Make1 Input1> { Access a, AccessEnvironment e, Declaration target, TypePath path, Type t, TypeParameter tp ) { not exists(getTypeArgument(a, target, tp, _)) and - exists(Type constraint, AccessPosition apos, TypePath pathToTp, TypePath pathToTp2 | + exists(TypeMention constraint, AccessPosition apos, TypePath pathToTp, TypePath pathToTp2 | typeParameterConstraintHasTypeParameter(target, apos, pathToTp2, constraint, pathToTp, tp) and AccessConstraint::satisfiesConstraintType(a, e, target, apos, pathToTp2, constraint, pathToTp.appendInverse(path), t) From 2ff5c2c234a4cc54a9fa455f366ded9b41c647bf Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 18 Mar 2026 20:42:57 +0100 Subject: [PATCH 059/185] Rust: Fix two bad joins Before ``` Evaluated relational algebra for predicate TypeInference::DeconstructionPatMatchingInput::Access.getNodeAt/1#dispred#cc149bc2@88f6f09n with tuple counts: 142521 ~1% {3} r1 = JOIN num#FunctionType::TReturnFunctionPosition#a15fd6be WITH TypeInference::DeconstructionPatMatchingInput::Access#a2676dcb CARTESIAN PRODUCT OUTPUT Rhs.0, Lhs.0, Rhs.0 131938 ~0% {3} r2 = JOIN `TupleStructPat::Generated::TupleStructPat.getField/1#dispred#ac9c1af6` WITH TypeInference::DeconstructionPatMatchingInput::Access#a2676dcb ON FIRST 1 OUTPUT Lhs.1, Lhs.0, Lhs.2 131938 ~6% {3} | JOIN WITH `FunctionType::FunctionPosition.asPosition/0#dispred#efcc0611_10#join_rhs` ON FIRST 1 OUTPUT Lhs.1, Rhs.1, Lhs.2 3071346 ~0% {2} r3 = SCAN `Name::Generated::Name.getText/0#dispred#107a5a39` OUTPUT In.1, In.0 103064442 ~2% {3} | JOIN WITH `StructPat::StructPat.getPatField/1#5e21ea0e_102#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Rhs.2 103064442 ~3% {3} | JOIN WITH TypeInference::DeconstructionPatMatchingInput::Access#a2676dcb ON FIRST 1 OUTPUT Lhs.2, Lhs.1, Lhs.0 103064438 ~1% {3} | JOIN WITH `StructPatField::Generated::StructPatField.getPat/0#dispred#1aadfeff` ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Rhs.1 20514858 ~2% {3} | JOIN WITH `StructField::Generated::StructField.getName/0#dispred#e0248569_10#join_rhs` ON FIRST 1 OUTPUT Lhs.1, Rhs.1, Lhs.2 59554 ~1% {3} | JOIN WITH `StructPat::StructPat.getNthStructField/1#dispred#de537654_021#join_rhs` ON FIRST 2 OUTPUT Rhs.2, Lhs.0, Lhs.2 59542 ~0% {3} | JOIN WITH `FunctionType::FunctionPosition.asPosition/0#dispred#efcc0611_10#join_rhs` ON FIRST 1 OUTPUT Lhs.1, Rhs.1, Lhs.2 334001 ~0% {3} r4 = r1 UNION r2 UNION r3 return r4 Evaluated relational algebra for predicate TypeInference::ConstructionMatchingInput::Access.getNodeAt/1#dispred#acd835e6@bfb1f1e1 with tuple counts: 1395153 ~3% {3} r1 = JOIN TypeInference::ConstructionMatchingInput::PathExprAccess#b7a80c43 WITH num#FunctionType::TReturnFunctionPosition#a15fd6be CARTESIAN PRODUCT OUTPUT Lhs.0, Rhs.0, Lhs.0 34290 ~3% {3} r2 = JOIN StructExpr::Generated::StructExpr#d0a89c56 WITH num#FunctionType::TReturnFunctionPosition#a15fd6be CARTESIAN PRODUCT OUTPUT Lhs.0, Rhs.0, Lhs.0 3071346 ~0% {2} r3 = SCAN `Name::Generated::Name.getText/0#dispred#107a5a39` OUTPUT In.1, In.0 145365745 ~0% {3} | JOIN WITH `StructExpr::StructExpr.getFieldExpr/1#cd55566d_102#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Rhs.2 145365745 ~1% {3} | JOIN WITH StructExpr::Generated::StructExpr#d0a89c56 ON FIRST 1 OUTPUT Lhs.1, Lhs.0, Lhs.2 33371514 ~0% {3} | JOIN WITH `StructField::Generated::StructField.getName/0#dispred#e0248569_10#join_rhs` ON FIRST 1 OUTPUT Lhs.1, Rhs.1, Lhs.2 108831 ~0% {3} | JOIN WITH `StructExpr::StructExpr.getNthStructField/1#dispred#89ad7e20_021#join_rhs` ON FIRST 2 OUTPUT Rhs.2, Lhs.0, Lhs.2 108751 ~0% {3} | JOIN WITH `FunctionType::FunctionPosition.asPosition/0#dispred#efcc0611_10#join_rhs` ON FIRST 1 OUTPUT Lhs.2, Lhs.1, Rhs.1 108751 ~4% {3} | JOIN WITH `StructExprField::Generated::StructExprField.getExpr/0#dispred#956e6ba1` ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Rhs.1 1748398 ~4% {3} r4 = `TypeInference::ConstructionMatchingInput::NonAssocCallAccess.getNodeAt/1#dispred#ef232b1f` UNION r1 UNION r2 UNION r3 return r4 ``` After ``` Evaluated relational algebra for predicate TypeInference::DeconstructionPatMatchingInput::Access.getNodeAt/1#dispred#cc149bc2@2ea6ebjs with tuple counts: 142521 ~1% {3} r1 = JOIN num#FunctionType::TReturnFunctionPosition#a15fd6be WITH TypeInference::DeconstructionPatMatchingInput::Access#a2676dcb CARTESIAN PRODUCT OUTPUT Rhs.0, Lhs.0, Rhs.0 131938 ~0% {3} r2 = JOIN `TupleStructPat::Generated::TupleStructPat.getField/1#dispred#ac9c1af6` WITH TypeInference::DeconstructionPatMatchingInput::Access#a2676dcb ON FIRST 1 OUTPUT Lhs.1, Lhs.0, Lhs.2 131938 ~6% {3} | JOIN WITH `FunctionType::FunctionPosition.asPosition/0#dispred#efcc0611_10#join_rhs` ON FIRST 1 OUTPUT Lhs.1, Rhs.1, Lhs.2 166829 ~3% {3} r3 = JOIN `_Name::Generated::Name.getText/0#dispred#107a5a39_StructField::Generated::StructField.getName/0#disp__#shared` WITH `StructPat::StructPat.getNthStructField/1#dispred#de537654_201#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Rhs.2 166817 ~2% {3} | JOIN WITH TypeInference::DeconstructionPatMatchingInput::Access#a2676dcb ON FIRST 1 OUTPUT Lhs.2, Lhs.1, Lhs.0 166817 ~0% {3} | JOIN WITH `FunctionType::FunctionPosition.asPosition/0#dispred#efcc0611_10#join_rhs` ON FIRST 1 OUTPUT Lhs.2, Lhs.1, Rhs.1 59542 ~0% {3} | JOIN WITH `StructPat::StructPat.getPatField/1#5e21ea0e` ON FIRST 2 OUTPUT Rhs.2, Lhs.0, Lhs.2 59542 ~0% {3} | JOIN WITH `StructPatField::Generated::StructPatField.getPat/0#dispred#1aadfeff` ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Rhs.1 334001 ~0% {3} r4 = r1 UNION r2 UNION r3 return r4 Evaluated relational algebra for predicate TypeInference::ConstructionMatchingInput::Access.getNodeAt/1#dispred#acd835e6@c7f267fp with tuple counts: 1395153 ~3% {3} r1 = JOIN TypeInference::ConstructionMatchingInput::PathExprAccess#b7a80c43 WITH num#FunctionType::TReturnFunctionPosition#a15fd6be CARTESIAN PRODUCT OUTPUT Lhs.0, Rhs.0, Lhs.0 34290 ~3% {3} r2 = JOIN StructExpr::Generated::StructExpr#d0a89c56 WITH num#FunctionType::TReturnFunctionPosition#a15fd6be CARTESIAN PRODUCT OUTPUT Lhs.0, Rhs.0, Lhs.0 159331 ~0% {3} r3 = JOIN `_Name::Generated::Name.getText/0#dispred#107a5a39_StructField::Generated::StructField.getName/0#disp__#shared` WITH `StructExpr::StructExpr.getNthStructField/1#dispred#89ad7e20_201#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Rhs.2 159231 ~3% {3} | JOIN WITH StructExpr::Generated::StructExpr#d0a89c56 ON FIRST 1 OUTPUT Lhs.2, Lhs.1, Lhs.0 159231 ~3% {3} | JOIN WITH `FunctionType::FunctionPosition.asPosition/0#dispred#efcc0611_10#join_rhs` ON FIRST 1 OUTPUT Lhs.2, Lhs.1, Rhs.1 108731 ~0% {3} | JOIN WITH `StructExpr::StructExpr.getFieldExpr/1#cd55566d` ON FIRST 2 OUTPUT Rhs.2, Lhs.0, Lhs.2 108731 ~4% {3} | JOIN WITH `StructExprField::Generated::StructExprField.getExpr/0#dispred#956e6ba1` ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Rhs.1 1748378 ~4% {3} r4 = `TypeInference::ConstructionMatchingInput::NonAssocCallAccess.getNodeAt/1#dispred#ef232b1f` UNION r1 UNION r2 UNION r3 return r4 ``` --- .../codeql/rust/internal/typeinference/TypeInference.qll | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll index da150a3ef39..55d449fb75c 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll @@ -3040,7 +3040,9 @@ private module ConstructionMatchingInput implements MatchingInputSig { override AstNode getNodeAt(AccessPosition apos) { result = - this.getFieldExpr(this.getNthStructField(apos.asPosition()).getName().getText()).getExpr() + this.getFieldExpr(pragma[only_bind_into](this.getNthStructField(apos.asPosition()) + .getName() + .getText())).getExpr() or result = this and apos.isReturn() } @@ -3573,7 +3575,9 @@ private module DeconstructionPatMatchingInput implements MatchingInputSig { this = any(StructPat sp | result = - sp.getPatField(sp.getNthStructField(apos.asPosition()).getName().getText()).getPat() + sp.getPatField(pragma[only_bind_into](sp.getNthStructField(apos.asPosition()) + .getName() + .getText())).getPat() ) or result = this.(TupleStructPat).getField(apos.asPosition()) From 2c76e6e63740dd4cd1307141819fb25efd8c31c9 Mon Sep 17 00:00:00 2001 From: Kaixuan Li Date: Thu, 19 Mar 2026 14:35:45 +0800 Subject: [PATCH 060/185] use American spellings in documentation Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- cpp/ql/src/Security/CWE/CWE-134/UncontrolledFormatString.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/src/Security/CWE/CWE-134/UncontrolledFormatString.ql b/cpp/ql/src/Security/CWE/CWE-134/UncontrolledFormatString.ql index 4c0271ef96e..c3e94c989bd 100644 --- a/cpp/ql/src/Security/CWE/CWE-134/UncontrolledFormatString.ql +++ b/cpp/ql/src/Security/CWE/CWE-134/UncontrolledFormatString.ql @@ -27,7 +27,7 @@ predicate isSource(FlowSource source, string sourceType) { sourceType = source.g * Holds if `f` is a printf-like function or a (possibly nested) wrapper * that forwards a format-string parameter to one. * - * Functions that *implement* printf-like behaviour (e.g. a custom + * Functions that *implement* printf-like behavior (e.g. a custom * `vsnprintf` variant) internally parse the caller-supplied format string * and build small, bounded, local format strings such as `"%d"` or `"%ld"` * for inner `sprintf` calls. Taint that reaches those inner calls via the From c155394f25b11de265224cbc462cbf518739c383 Mon Sep 17 00:00:00 2001 From: Kaixuan Li Date: Thu, 19 Mar 2026 14:36:28 +0800 Subject: [PATCH 061/185] the [] syntax directly Co-authored-by: Geoffrey White <40627776+geoffw0@users.noreply.github.com> --- cpp/ql/src/Security/CWE/CWE-134/UncontrolledFormatString.ql | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cpp/ql/src/Security/CWE/CWE-134/UncontrolledFormatString.ql b/cpp/ql/src/Security/CWE/CWE-134/UncontrolledFormatString.ql index c3e94c989bd..bf6f014672f 100644 --- a/cpp/ql/src/Security/CWE/CWE-134/UncontrolledFormatString.ql +++ b/cpp/ql/src/Security/CWE/CWE-134/UncontrolledFormatString.ql @@ -47,8 +47,7 @@ module Config implements DataFlow::ConfigSig { exists(PrintfLikeFunction printf | printf.outermostWrapperFunctionCall([node.asExpr(), node.asIndirectExpr()], _) ) and - not isPrintfImplementation(node.asExpr().getEnclosingFunction()) and - not isPrintfImplementation(node.asIndirectExpr().getEnclosingFunction()) + not isPrintfImplementation([node.asExpr(), node.asIndirectExpr()].getEnclosingFunction()) } private predicate isArithmeticNonCharType(ArithmeticType type) { From b9ad36c11de4689f22b76892167bb9923b9a379b Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 19 Mar 2026 09:15:12 +0100 Subject: [PATCH 062/185] Depdendabot: ignore modules in the our bazel registry These come from the upstream registry and should just be left alone. --- .github/dependabot.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 60b21a86163..30cb9833a6a 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -45,3 +45,5 @@ updates: directory: "/" schedule: interval: weekly + exclude-paths: + - "misc/bazel/registry/**" From 8d6aceb00899c229c715659a5faafc057b3c1b85 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 19 Mar 2026 10:10:24 +0100 Subject: [PATCH 063/185] CI: Remove `compile-queries.yml` Has been superseded by an internal check. --- .github/workflows/compile-queries.yml | 78 --------------------------- 1 file changed, 78 deletions(-) delete mode 100644 .github/workflows/compile-queries.yml diff --git a/.github/workflows/compile-queries.yml b/.github/workflows/compile-queries.yml deleted file mode 100644 index c8f6301bb53..00000000000 --- a/.github/workflows/compile-queries.yml +++ /dev/null @@ -1,78 +0,0 @@ -name: "Compile all queries using the latest stable CodeQL CLI" - -on: - push: - branches: # makes sure the cache gets populated - running on the branches people tend to merge into. - - main - - "rc/*" - - "codeql-cli-*" - pull_request: - paths: - - '**.ql' - - '**.qll' - - '**/qlpack.yml' - - '**.dbscheme' - -permissions: - contents: read - -jobs: - detect-changes: - if: github.repository_owner == 'github' - runs-on: ubuntu-latest - outputs: - languages: ${{ steps.detect.outputs.languages }} - steps: - - uses: actions/checkout@v5 - - name: Detect changed languages - id: detect - run: | - if [[ "${{ github.event_name }}" == "pull_request" ]]; then - # For PRs, detect which languages have changes - changed_files=$(gh pr view ${{ github.event.pull_request.number }} --json files --jq '.files.[].path') - languages=() - for lang in actions cpp csharp go java javascript python ql ruby rust swift; do - if echo "$changed_files" | grep -qE "^($lang/|shared/)" ; then - languages+=("$lang") - fi - done - echo "languages=$(jq -c -n '$ARGS.positional' --args "${languages[@]}")" >> $GITHUB_OUTPUT - else - # For pushes to main/rc branches, run all languages - echo 'languages=["actions","cpp","csharp","go","java","javascript","python","ql","ruby","rust","swift"]' >> $GITHUB_OUTPUT - fi - env: - GH_TOKEN: ${{ github.token }} - - compile-queries: - needs: detect-changes - if: github.repository_owner == 'github' && needs.detect-changes.outputs.languages != '[]' - runs-on: ubuntu-latest-xl - strategy: - fail-fast: false - matrix: - language: ${{ fromJson(needs.detect-changes.outputs.languages) }} - - steps: - - uses: actions/checkout@v5 - - name: Setup CodeQL - uses: ./.github/actions/fetch-codeql - with: - channel: 'release' - - name: Cache compilation cache - id: query-cache - uses: ./.github/actions/cache-query-compilation - with: - key: ${{ matrix.language }}-queries - - name: check formatting - run: find shared ${{ matrix.language }}/ql -type f \( -name "*.qll" -o -name "*.ql" \) -print0 | xargs -0 -n 3000 -P 10 codeql query format -q --check-only - - name: compile queries - check-only - # run with --check-only if running in a PR (github.sha != main) - if : ${{ github.event_name == 'pull_request' }} - shell: bash - run: codeql query compile -q -j0 ${{ matrix.language }}/ql/{src,examples} --keep-going --warnings=error --check-only --compilation-cache "${{ steps.query-cache.outputs.cache-dir }}" --compilation-cache-size=500 --ram=56000 - - name: compile queries - full - # do full compile if running on main - this populates the cache - if : ${{ github.event_name != 'pull_request' }} - shell: bash - run: codeql query compile -q -j0 ${{ matrix.language }}/ql/{src,examples} --keep-going --warnings=error --compilation-cache "${{ steps.query-cache.outputs.cache-dir }}" --compilation-cache-size=500 --ram=56000 From e0b06c8e72a24ff9df621990279050ded5236fe0 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 19 Mar 2026 10:15:36 +0100 Subject: [PATCH 064/185] CI: Remove Ruby checks Have been superseded by an internal checks. --- .github/workflows/ruby-build.yml | 236 --------------------- .github/workflows/ruby-dataset-measure.yml | 75 ------- .github/workflows/ruby-qltest-rtjo.yml | 40 ---- .github/workflows/ruby-qltest.yml | 73 ------- 4 files changed, 424 deletions(-) delete mode 100644 .github/workflows/ruby-build.yml delete mode 100644 .github/workflows/ruby-dataset-measure.yml delete mode 100644 .github/workflows/ruby-qltest-rtjo.yml delete mode 100644 .github/workflows/ruby-qltest.yml diff --git a/.github/workflows/ruby-build.yml b/.github/workflows/ruby-build.yml deleted file mode 100644 index 39aadef0913..00000000000 --- a/.github/workflows/ruby-build.yml +++ /dev/null @@ -1,236 +0,0 @@ -name: "Ruby: Build" - -on: - push: - paths: - - "ruby/**" - - .github/workflows/ruby-build.yml - - .github/actions/fetch-codeql/action.yml - - codeql-workspace.yml - - "shared/tree-sitter-extractor/**" - branches: - - main - - "rc/*" - pull_request: - paths: - - "ruby/**" - - .github/workflows/ruby-build.yml - - .github/actions/fetch-codeql/action.yml - - codeql-workspace.yml - - "shared/tree-sitter-extractor/**" - branches: - - main - - "rc/*" - workflow_dispatch: - inputs: - tag: - description: "Version tag to create" - required: false - -env: - CARGO_TERM_COLOR: always - -defaults: - run: - working-directory: ruby - -permissions: - contents: read - -jobs: - build: - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest, macos-latest, windows-latest] - - runs-on: ${{ matrix.os }} - - steps: - - uses: actions/checkout@v5 - - name: Install GNU tar - if: runner.os == 'macOS' - run: | - brew install gnu-tar - echo "/usr/local/opt/gnu-tar/libexec/gnubin" >> $GITHUB_PATH - - name: Prepare Windows - if: runner.os == 'Windows' - shell: powershell - run: | - git config --global core.longpaths true - - uses: ./.github/actions/os-version - id: os_version - - name: Cache entire extractor - uses: actions/cache@v3 - id: cache-extractor - with: - path: | - target/release/codeql-extractor-ruby - target/release/codeql-extractor-ruby.exe - ruby/extractor/ql/lib/codeql/ruby/ast/internal/TreeSitter.qll - key: ${{ runner.os }}-${{ steps.os_version.outputs.version }}-ruby-extractor-${{ hashFiles('ruby/extractor/rust-toolchain.toml', 'ruby/extractor/Cargo.lock') }}-${{ hashFiles('shared/tree-sitter-extractor') }}-${{ hashFiles('ruby/extractor/**/*.rs') }} - - uses: actions/cache@v3 - if: steps.cache-extractor.outputs.cache-hit != 'true' - with: - path: | - ~/.cargo/registry - ~/.cargo/git - target - key: ${{ runner.os }}-${{ steps.os_version.outputs.version }}-ruby-rust-cargo-${{ hashFiles('ruby/extractor/rust-toolchain.toml', 'ruby/extractor/**/Cargo.lock') }} - - name: Check formatting - if: steps.cache-extractor.outputs.cache-hit != 'true' - run: cd extractor && cargo fmt -- --check - - name: Build - if: steps.cache-extractor.outputs.cache-hit != 'true' - run: cd extractor && cargo build --verbose - - name: Run tests - if: steps.cache-extractor.outputs.cache-hit != 'true' - run: cd extractor && cargo test --verbose - - name: Release build - if: steps.cache-extractor.outputs.cache-hit != 'true' - run: cd extractor && cargo build --release - - name: Generate dbscheme - if: ${{ matrix.os == 'ubuntu-latest' && steps.cache-extractor.outputs.cache-hit != 'true'}} - run: ../target/release/codeql-extractor-ruby generate --dbscheme ql/lib/ruby.dbscheme --library ql/lib/codeql/ruby/ast/internal/TreeSitter.qll - - uses: actions/upload-artifact@v4 - if: ${{ matrix.os == 'ubuntu-latest' }} - with: - name: ruby.dbscheme - path: ruby/ql/lib/ruby.dbscheme - - uses: actions/upload-artifact@v4 - if: ${{ matrix.os == 'ubuntu-latest' }} - with: - name: TreeSitter.qll - path: ruby/ql/lib/codeql/ruby/ast/internal/TreeSitter.qll - - uses: actions/upload-artifact@v4 - with: - name: extractor-${{ matrix.os }} - path: | - target/release/codeql-extractor-ruby - target/release/codeql-extractor-ruby.exe - retention-days: 1 - compile-queries: - if: github.repository_owner == 'github' - runs-on: ubuntu-latest-xl - steps: - - uses: actions/checkout@v5 - - name: Fetch CodeQL - uses: ./.github/actions/fetch-codeql - - name: Cache compilation cache - id: query-cache - uses: ./.github/actions/cache-query-compilation - with: - key: ruby-build - - name: Build Query Pack - run: | - PACKS=${{ runner.temp }}/query-packs - rm -rf $PACKS - codeql pack create ../misc/suite-helpers --output "$PACKS" - codeql pack create ../shared/regex --output "$PACKS" - codeql pack create ../shared/ssa --output "$PACKS" - codeql pack create ../shared/tutorial --output "$PACKS" - codeql pack create ql/lib --output "$PACKS" - codeql pack create -j0 ql/src --output "$PACKS" --compilation-cache "${{ steps.query-cache.outputs.cache-dir }}" - PACK_FOLDER=$(readlink -f "$PACKS"/codeql/ruby-queries/*) - codeql generate query-help --format=sarifv2.1.0 --output="${PACK_FOLDER}/rules.sarif" ql/src - (cd ql/src; find queries \( -name '*.qhelp' -o -name '*.rb' -o -name '*.erb' \) -exec bash -c 'mkdir -p "'"${PACK_FOLDER}"'/$(dirname "{}")"' \; -exec cp "{}" "${PACK_FOLDER}/{}" \;) - - uses: actions/upload-artifact@v4 - with: - name: codeql-ruby-queries - path: | - ${{ runner.temp }}/query-packs/* - retention-days: 1 - include-hidden-files: true - - package: - runs-on: ubuntu-latest - needs: [build, compile-queries] - steps: - - uses: actions/checkout@v5 - - uses: actions/download-artifact@v4 - with: - name: ruby.dbscheme - path: ruby/ruby - - uses: actions/download-artifact@v4 - with: - name: extractor-ubuntu-latest - path: ruby/linux64 - - uses: actions/download-artifact@v4 - with: - name: extractor-windows-latest - path: ruby/win64 - - uses: actions/download-artifact@v4 - with: - name: extractor-macos-latest - path: ruby/osx64 - - run: | - mkdir -p ruby - cp -r codeql-extractor.yml tools ql/lib/ruby.dbscheme.stats ruby/ - mkdir -p ruby/tools/{linux64,osx64,win64} - cp linux64/codeql-extractor-ruby ruby/tools/linux64/extractor - cp osx64/codeql-extractor-ruby ruby/tools/osx64/extractor - cp win64/codeql-extractor-ruby.exe ruby/tools/win64/extractor.exe - chmod +x ruby/tools/{linux64,osx64}/extractor - zip -rq codeql-ruby.zip ruby - - uses: actions/upload-artifact@v4 - with: - name: codeql-ruby-pack - path: ruby/codeql-ruby.zip - retention-days: 1 - include-hidden-files: true - - uses: actions/download-artifact@v4 - with: - name: codeql-ruby-queries - path: ruby/qlpacks - - run: | - echo '{ - "provide": [ - "ruby/codeql-extractor.yml", - "qlpacks/*/*/*/qlpack.yml" - ] - }' > .codeqlmanifest.json - zip -rq codeql-ruby-bundle.zip .codeqlmanifest.json ruby qlpacks - - uses: actions/upload-artifact@v4 - with: - name: codeql-ruby-bundle - path: ruby/codeql-ruby-bundle.zip - retention-days: 1 - include-hidden-files: true - - test: - defaults: - run: - working-directory: ${{ github.workspace }} - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest, macos-latest, windows-latest] - - runs-on: ${{ matrix.os }} - needs: [package] - steps: - - uses: actions/checkout@v5 - - name: Fetch CodeQL - uses: ./.github/actions/fetch-codeql - - - name: Download Ruby bundle - uses: actions/download-artifact@v4 - with: - name: codeql-ruby-bundle - path: ${{ runner.temp }} - - name: Unzip Ruby bundle - shell: bash - run: unzip -q -d "${{ runner.temp }}/ruby-bundle" "${{ runner.temp }}/codeql-ruby-bundle.zip" - - - name: Run QL test - shell: bash - run: | - codeql test run --search-path "${{ runner.temp }}/ruby-bundle" --additional-packs "${{ runner.temp }}/ruby-bundle" ruby/ql/test/library-tests/ast/constants/ - - name: Create database - shell: bash - run: | - codeql database create --search-path "${{ runner.temp }}/ruby-bundle" --language ruby --source-root ruby/ql/test/library-tests/ast/constants/ ../database - - name: Analyze database - shell: bash - run: | - codeql database analyze --search-path "${{ runner.temp }}/ruby-bundle" --format=sarifv2.1.0 --output=out.sarif ../database ruby-code-scanning.qls diff --git a/.github/workflows/ruby-dataset-measure.yml b/.github/workflows/ruby-dataset-measure.yml deleted file mode 100644 index a88b23bf3a1..00000000000 --- a/.github/workflows/ruby-dataset-measure.yml +++ /dev/null @@ -1,75 +0,0 @@ -name: "Ruby: Collect database stats" - -on: - push: - branches: - - main - - "rc/*" - paths: - - ruby/ql/lib/ruby.dbscheme - - .github/workflows/ruby-dataset-measure.yml - pull_request: - branches: - - main - - "rc/*" - paths: - - ruby/ql/lib/ruby.dbscheme - - .github/workflows/ruby-dataset-measure.yml - workflow_dispatch: - -permissions: - contents: read - -jobs: - measure: - env: - CODEQL_THREADS: 4 # TODO: remove this once it's set by the CLI - strategy: - fail-fast: false - matrix: - repo: [rails/rails, discourse/discourse, spree/spree, ruby/ruby] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v5 - - - uses: ./.github/actions/fetch-codeql - - - uses: ./ruby/actions/create-extractor-pack - - - name: Checkout ${{ matrix.repo }} - uses: actions/checkout@v5 - with: - repository: ${{ matrix.repo }} - path: ${{ github.workspace }}/repo - - name: Create database - run: | - codeql database create \ - --search-path "${{ github.workspace }}" \ - --threads 4 \ - --language ruby --source-root "${{ github.workspace }}/repo" \ - "${{ runner.temp }}/database" - - name: Measure database - run: | - mkdir -p "stats/${{ matrix.repo }}" - codeql dataset measure --threads 4 --output "stats/${{ matrix.repo }}/stats.xml" "${{ runner.temp }}/database/db-ruby" - - uses: actions/upload-artifact@v4 - with: - name: measurements-${{ hashFiles('stats/**') }} - path: stats - retention-days: 1 - - merge: - runs-on: ubuntu-latest - needs: measure - steps: - - uses: actions/checkout@v5 - - uses: actions/download-artifact@v4 - with: - path: stats - - run: | - python -m pip install --user lxml - find stats -name 'stats.xml' | sort | xargs python ruby/scripts/merge_stats.py --output ruby/ql/lib/ruby.dbscheme.stats --normalise ruby_tokeninfo - - uses: actions/upload-artifact@v4 - with: - name: ruby.dbscheme.stats - path: ruby/ql/lib/ruby.dbscheme.stats diff --git a/.github/workflows/ruby-qltest-rtjo.yml b/.github/workflows/ruby-qltest-rtjo.yml deleted file mode 100644 index 1d57c465538..00000000000 --- a/.github/workflows/ruby-qltest-rtjo.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: "Ruby: Run RTJO Language Tests" - -on: - pull_request: - types: - - opened - - synchronize - - reopened - - labeled - -env: - CARGO_TERM_COLOR: always - -defaults: - run: - working-directory: ruby - -permissions: - contents: read - -jobs: - qltest-rtjo: - if: "github.repository_owner == 'github' && github.event.label.name == 'Run: RTJO Language Tests'" - runs-on: ubuntu-latest-xl - strategy: - fail-fast: false - steps: - - uses: actions/checkout@v5 - - uses: ./.github/actions/fetch-codeql - - uses: ./ruby/actions/create-extractor-pack - - name: Cache compilation cache - id: query-cache - uses: ./.github/actions/cache-query-compilation - with: - key: ruby-qltest - - name: Run QL tests - run: | - codeql test run --dynamic-join-order-mode=all --threads=0 --ram 50000 --search-path "${{ github.workspace }}" --check-databases --check-diff-informed --check-undefined-labels --check-unused-labels --check-repeated-labels --check-redefined-labels --check-use-before-definition --consistency-queries ql/consistency-queries ql/test --compilation-cache "${{ steps.query-cache.outputs.cache-dir }}" - env: - GITHUB_TOKEN: ${{ github.token }} diff --git a/.github/workflows/ruby-qltest.yml b/.github/workflows/ruby-qltest.yml deleted file mode 100644 index e178a5dfb6e..00000000000 --- a/.github/workflows/ruby-qltest.yml +++ /dev/null @@ -1,73 +0,0 @@ -name: "Ruby: Run QL Tests" - -on: - push: - paths: - - "ruby/**" - - "shared/**" - - .github/workflows/ruby-build.yml - - .github/actions/fetch-codeql/action.yml - - codeql-workspace.yml - branches: - - main - - "rc/*" - pull_request: - paths: - - "ruby/**" - - "shared/**" - - .github/workflows/ruby-qltest.yml - - .github/actions/fetch-codeql/action.yml - - codeql-workspace.yml - branches: - - main - - "rc/*" - -env: - CARGO_TERM_COLOR: always - -defaults: - run: - working-directory: ruby - -permissions: - contents: read - -jobs: - qlupgrade: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v5 - - uses: ./.github/actions/fetch-codeql - - name: Check DB upgrade scripts - run: | - echo >empty.trap - codeql dataset import -S ql/lib/upgrades/initial/ruby.dbscheme testdb empty.trap - codeql dataset upgrade testdb --additional-packs ql/lib - diff -q testdb/ruby.dbscheme ql/lib/ruby.dbscheme - - name: Check DB downgrade scripts - run: | - echo >empty.trap - rm -rf testdb; codeql dataset import -S ql/lib/ruby.dbscheme testdb empty.trap - codeql resolve upgrades --format=lines --allow-downgrades --additional-packs downgrades \ - --dbscheme=ql/lib/ruby.dbscheme --target-dbscheme=downgrades/initial/ruby.dbscheme | - xargs codeql execute upgrades testdb - diff -q testdb/ruby.dbscheme downgrades/initial/ruby.dbscheme - qltest: - if: github.repository_owner == 'github' - runs-on: ubuntu-latest-xl - strategy: - fail-fast: false - steps: - - uses: actions/checkout@v5 - - uses: ./.github/actions/fetch-codeql - - uses: ./ruby/actions/create-extractor-pack - - name: Cache compilation cache - id: query-cache - uses: ./.github/actions/cache-query-compilation - with: - key: ruby-qltest - - name: Run QL tests - run: | - codeql test run --threads=0 --ram 50000 --search-path "${{ github.workspace }}" --check-databases --check-diff-informed --check-undefined-labels --check-unused-labels --check-repeated-labels --check-redefined-labels --check-use-before-definition --consistency-queries ql/consistency-queries ql/test --compilation-cache "${{ steps.query-cache.outputs.cache-dir }}" - env: - GITHUB_TOKEN: ${{ github.token }} From 750f1ae8e9b34ec6475daea1cd010dc5a684d391 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 19 Mar 2026 10:18:42 +0100 Subject: [PATCH 065/185] Ruby: Use empty DB stats --- ruby/ql/lib/ruby.dbscheme.stats | 21832 +----------------------------- 1 file changed, 2 insertions(+), 21830 deletions(-) diff --git a/ruby/ql/lib/ruby.dbscheme.stats b/ruby/ql/lib/ruby.dbscheme.stats index 468bd72c780..9995467e33e 100644 --- a/ruby/ql/lib/ruby.dbscheme.stats +++ b/ruby/ql/lib/ruby.dbscheme.stats @@ -1,21832 +1,4 @@ - - @diagnostic_debug - 0 - - - @diagnostic_error - 0 - - - @diagnostic_info - 0 - - - @diagnostic_warning - 188 - - - @erb_comment_directive - 26 - - - @erb_directive - 1108 - - - @erb_graphql_directive - 0 - - - @erb_output_directive - 3270 - - - @erb_reserved_word - 8756 - - - @erb_template - 1508 - - - @erb_token_code - 4378 - - - @erb_token_comment - 26 - - - @erb_token_content - 4555 - - - @file - 18724 - - - @folder - 5165 - - - @location_default - 9223392 - - - @ruby_alias - 1289 - - - @ruby_alternative_pattern - 9 - - - @ruby_argument_list - 706474 - - - @ruby_array - 249320 - - - @ruby_array_pattern - 179 - - - @ruby_as_pattern - 156 - - - @ruby_assignment - 141202 - - - @ruby_bare_string - 13136 - - - @ruby_bare_symbol - 8435 - - - @ruby_begin - 2610 - - - @ruby_begin_block - 10 - - - @ruby_binary_ampersand - 630 - - - @ruby_binary_ampersandampersand - 8142 - - - @ruby_binary_and - 1189 - - - @ruby_binary_bangequal - 1434 - - - @ruby_binary_bangtilde - 176 - - - @ruby_binary_caret - 153 - - - @ruby_binary_equalequal - 33761 - - - @ruby_binary_equalequalequal - 689 - - - @ruby_binary_equaltilde - 1823 - - - @ruby_binary_langle - 1101 - - - @ruby_binary_langleequal - 431 - - - @ruby_binary_langleequalrangle - 764 - - - @ruby_binary_langlelangle - 10779 - - - @ruby_binary_minus - 2747 - - - @ruby_binary_or - 647 - - - @ruby_binary_percent - 986 - - - @ruby_binary_pipe - 1058 - - - @ruby_binary_pipepipe - 7336 - - - @ruby_binary_plus - 6593 - - - @ruby_binary_rangle - 2114 - - - @ruby_binary_rangleequal - 597 - - - @ruby_binary_ranglerangle - 259 - - - @ruby_binary_slash - 1169 - - - @ruby_binary_star - 3490 - - - @ruby_binary_starstar - 1227 - - - @ruby_block - 104143 - - - @ruby_block_argument - 6547 - - - @ruby_block_body - 103820 - - - @ruby_block_parameter - 2543 - - - @ruby_block_parameters - 25884 - - - @ruby_body_statement - 213896 - - - @ruby_break - 3414 - - - @ruby_call - 1027501 - - - @ruby_case__ - 1319 - - - @ruby_case_match - 232 - - - @ruby_chained_string - 884 - - - @ruby_class - 17441 - - - @ruby_complex - 72 - - - @ruby_conditional - 2896 - - - @ruby_delimited_symbol - 1247 - - - @ruby_destructured_left_assignment - 108 - - - @ruby_destructured_parameter - 208 - - - @ruby_do - 1675 - - - @ruby_do_block - 145534 - - - @ruby_element_reference - 82606 - - - @ruby_else - 7681 - - - @ruby_elsif - 1583 - - - @ruby_end_block - 13 - - - @ruby_ensure - 4106 - - - @ruby_exception_variable - 935 - - - @ruby_exceptions - 1904 - - - @ruby_expression_reference_pattern - 3 - - - @ruby_find_pattern - 18 - - - @ruby_for - 136 - - - @ruby_hash - 41915 - - - @ruby_hash_pattern - 73 - - - @ruby_hash_splat_argument - 1989 - - - @ruby_hash_splat_parameter - 1574 - - - @ruby_heredoc_body - 6934 - - - @ruby_if - 16164 - - - @ruby_if_guard - 9 - - - @ruby_if_modifier - 14541 - - - @ruby_in - 136 - - - @ruby_in_clause - 381 - - - @ruby_interpolation - 38493 - - - @ruby_keyword_parameter - 4763 - - - @ruby_keyword_pattern - 77 - - - @ruby_lambda - 8187 - - - @ruby_lambda_parameters - 1811 - - - @ruby_left_assignment_list - 3100 - - - @ruby_match_pattern - 31 - - - @ruby_method - 103532 - - - @ruby_method_parameters - 31208 - - - @ruby_module - 22962 - - - @ruby_next - 2020 - - - @ruby_operator_assignment_ampersandampersandequal - 118 - - - @ruby_operator_assignment_ampersandequal - 17 - - - @ruby_operator_assignment_caretequal - 6 - - - @ruby_operator_assignment_langlelangleequal - 19 - - - @ruby_operator_assignment_minusequal - 305 - - - @ruby_operator_assignment_percentequal - 26 - - - @ruby_operator_assignment_pipeequal - 164 - - - @ruby_operator_assignment_pipepipeequal - 4272 - - - @ruby_operator_assignment_plusequal - 1732 - - - @ruby_operator_assignment_ranglerangleequal - 11 - - - @ruby_operator_assignment_slashequal - 13 - - - @ruby_operator_assignment_starequal - 42 - - - @ruby_operator_assignment_starstarequal - 6 - - - @ruby_optional_parameter - 6556 - - - @ruby_pair - 254198 - - - @ruby_parenthesized_pattern - 8 - - - @ruby_parenthesized_statements - 11296 - - - @ruby_pattern - 4745 - - - @ruby_program - 18697 - - - @ruby_range_dotdot - 3690 - - - @ruby_range_dotdotdot - 1376 - - - @ruby_rational - 166 - - - @ruby_redo - 34 - - - @ruby_regex - 13680 - - - @ruby_rescue - 2299 - - - @ruby_rescue_modifier - 458 - - - @ruby_reserved_word - 3894800 - - - @ruby_rest_assignment - 414 - - - @ruby_retry - 58 - - - @ruby_return - 7979 - - - @ruby_right_assignment_list - 1280 - - - @ruby_scope_resolution - 87113 - - - @ruby_setter - 656 - - - @ruby_singleton_class - 677 - - - @ruby_singleton_method - 6325 - - - @ruby_splat_argument - 3606 - - - @ruby_splat_parameter - 3014 - - - @ruby_string__ - 490602 - - - @ruby_string_array - 4287 - - - @ruby_subshell - 359 - - - @ruby_superclass - 13806 - - - @ruby_symbol_array - 2240 - - - @ruby_test_pattern - 5 - - - @ruby_then - 22229 - - - @ruby_token_character - 440 - - - @ruby_token_class_variable - 887 - - - @ruby_token_comment - 194426 - - - @ruby_token_constant - 302373 - - - @ruby_token_empty_statement - 58 - - - @ruby_token_encoding - 1 - - - @ruby_token_escape_sequence - 80835 - - - @ruby_token_false - 17355 - - - @ruby_token_file - 1 - - - @ruby_token_float - 8689 - - - @ruby_token_forward_argument - 194 - - - @ruby_token_forward_parameter - 287 - - - @ruby_token_global_variable - 7165 - - - @ruby_token_hash_key_symbol - 246826 - - - @ruby_token_hash_splat_nil - 14 - - - @ruby_token_heredoc_beginning - 6933 - - - @ruby_token_heredoc_content - 12986 - - - @ruby_token_heredoc_end - 6934 - - - @ruby_token_identifier - 1590836 - - - @ruby_token_instance_variable - 89852 - - - @ruby_token_integer - 310358 - - - @ruby_token_line - 1 - - - @ruby_token_nil - 19333 - - - @ruby_token_operator - 878 - - - @ruby_token_self - 14094 - - - @ruby_token_simple_symbol - 267609 - - - @ruby_token_string_content - 510164 - - - @ruby_token_super - 5329 - - - @ruby_token_true - 25065 - - - @ruby_token_uninterpreted - 11 - - - @ruby_unary_bang - 5909 - - - @ruby_unary_definedquestion - 1369 - - - @ruby_unary_minus - 9830 - - - @ruby_unary_not - 172 - - - @ruby_unary_plus - 1394 - - - @ruby_unary_tilde - 97 - - - @ruby_undef - 182 - - - @ruby_unless - 2723 - - - @ruby_unless_guard - 4 - - - @ruby_unless_modifier - 3416 - - - @ruby_until - 126 - - - @ruby_until_modifier - 238 - - - @ruby_variable_reference_pattern - 5 - - - @ruby_when - 3882 - - - @ruby_while - 1413 - - - @ruby_while_modifier - 198 - - - @ruby_yield - 2450 - - - @yaml_alias_node - 0 - - - @yaml_error - 0 - - - @yaml_mapping_node - 0 - - - @yaml_scalar_node - 0 - - - @yaml_sequence_node - 0 - - - - containerparent - 23863 - - - parent - 5165 - - - child - 23863 - - - - - parent - child - - - 12 - - - 1 - 2 - 2394 - - - 2 - 3 - 968 - - - 3 - 4 - 417 - - - 4 - 5 - 295 - - - 5 - 7 - 443 - - - 7 - 14 - 403 - - - 14 - 126 - 242 - - - - - - - child - parent - - - 12 - - - 1 - 2 - 23863 - - - - - - - - - diagnostics - 188 - - - id - 188 - - - severity - 13 - - - error_tag - 13 - - - error_message - 53 - - - full_error_message - 161 - - - location - 174 - - - - - id - severity - - - 12 - - - 1 - 2 - 188 - - - - - - - id - error_tag - - - 12 - - - 1 - 2 - 188 - - - - - - - id - error_message - - - 12 - - - 1 - 2 - 188 - - - - - - - id - full_error_message - - - 12 - - - 1 - 2 - 188 - - - - - - - id - location - - - 12 - - - 1 - 2 - 188 - - - - - - - severity - id - - - 12 - - - 14 - 15 - 13 - - - - - - - severity - error_tag - - - 12 - - - 1 - 2 - 13 - - - - - - - severity - error_message - - - 12 - - - 4 - 5 - 13 - - - - - - - severity - full_error_message - - - 12 - - - 12 - 13 - 13 - - - - - - - severity - location - - - 12 - - - 13 - 14 - 13 - - - - - - - error_tag - id - - - 12 - - - 14 - 15 - 13 - - - - - - - error_tag - severity - - - 12 - - - 1 - 2 - 13 - - - - - - - error_tag - error_message - - - 12 - - - 4 - 5 - 13 - - - - - - - error_tag - full_error_message - - - 12 - - - 12 - 13 - 13 - - - - - - - error_tag - location - - - 12 - - - 13 - 14 - 13 - - - - - - - error_message - id - - - 12 - - - 1 - 2 - 26 - - - 2 - 3 - 13 - - - 10 - 11 - 13 - - - - - - - error_message - severity - - - 12 - - - 1 - 2 - 53 - - - - - - - error_message - error_tag - - - 12 - - - 1 - 2 - 53 - - - - - - - error_message - full_error_message - - - 12 - - - 1 - 2 - 26 - - - 2 - 3 - 13 - - - 8 - 9 - 13 - - - - - - - error_message - location - - - 12 - - - 1 - 2 - 26 - - - 2 - 3 - 13 - - - 10 - 11 - 13 - - - - - - - full_error_message - id - - - 12 - - - 1 - 2 - 134 - - - 2 - 3 - 26 - - - - - - - full_error_message - severity - - - 12 - - - 1 - 2 - 161 - - - - - - - full_error_message - error_tag - - - 12 - - - 1 - 2 - 161 - - - - - - - full_error_message - error_message - - - 12 - - - 1 - 2 - 161 - - - - - - - full_error_message - location - - - 12 - - - 1 - 2 - 134 - - - 2 - 3 - 26 - - - - - - - location - id - - - 12 - - - 1 - 2 - 161 - - - 2 - 3 - 13 - - - - - - - location - severity - - - 12 - - - 1 - 2 - 174 - - - - - - - location - error_tag - - - 12 - - - 1 - 2 - 174 - - - - - - - location - error_message - - - 12 - - - 1 - 2 - 161 - - - 2 - 3 - 13 - - - - - - - location - full_error_message - - - 12 - - - 1 - 2 - 161 - - - 2 - 3 - 13 - - - - - - - - - erb_ast_node_location - 22409 - - - node - 22409 - - - loc - 22407 - - - - - node - loc - - - 12 - - - 1 - 2 - 22409 - - - - - - - loc - node - - - 12 - - - 1 - 2 - 22404 - - - 2 - 3 - 2 - - - - - - - - - erb_ast_node_parent - 22069 - - - node - 22069 - - - parent - 4718 - - - parent_index - 564 - - - - - node - parent - - - 12 - - - 1 - 2 - 22069 - - - - - - - node - parent_index - - - 12 - - - 1 - 2 - 22069 - - - - - - - parent - node - - - 12 - - - 1 - 3 - 9 - - - 3 - 4 - 4494 - - - 4 - 240 - 215 - - - - - - - parent - parent_index - - - 12 - - - 1 - 3 - 9 - - - 3 - 4 - 4494 - - - 4 - 240 - 215 - - - - - - - parent_index - node - - - 12 - - - 1 - 2 - 25 - - - 2 - 3 - 33 - - - 3 - 4 - 33 - - - 4 - 5 - 122 - - - 5 - 6 - 96 - - - 6 - 8 - 40 - - - 8 - 13 - 42 - - - 13 - 20 - 44 - - - 21 - 31 - 42 - - - 35 - 55 - 44 - - - 55 - 1998 - 37 - - - - - - - parent_index - parent - - - 12 - - - 1 - 2 - 25 - - - 2 - 3 - 33 - - - 3 - 4 - 33 - - - 4 - 5 - 122 - - - 5 - 6 - 96 - - - 6 - 8 - 40 - - - 8 - 13 - 42 - - - 13 - 20 - 44 - - - 21 - 31 - 42 - - - 35 - 55 - 44 - - - 55 - 1998 - 37 - - - - - - - - - erb_comment_directive_child - 26 - - - erb_comment_directive - 26 - - - child - 26 - - - - - erb_comment_directive - child - - - 12 - - - 1 - 2 - 26 - - - - - - - child - erb_comment_directive - - - 12 - - - 1 - 2 - 26 - - - - - - - - - erb_comment_directive_def - 26 - - - id - 26 - - - - - - erb_directive_child - 1108 - - - erb_directive - 1108 - - - child - 1108 - - - - - erb_directive - child - - - 12 - - - 1 - 2 - 1108 - - - - - - - child - erb_directive - - - 12 - - - 1 - 2 - 1108 - - - - - - - - - erb_directive_def - 1108 - - - id - 1108 - - - - - - erb_graphql_directive_child - 0 - - - erb_graphql_directive - 0 - - - child - 0 - - - - - erb_graphql_directive - child - - - 12 - - - 1 - 2 - 2 - - - - - - - child - erb_graphql_directive - - - 12 - - - 1 - 2 - 2 - - - - - - - - - erb_graphql_directive_def - 0 - - - id - 0 - - - - - - erb_output_directive_child - 3270 - - - erb_output_directive - 3270 - - - child - 3270 - - - - - erb_output_directive - child - - - 12 - - - 1 - 2 - 3270 - - - - - - - child - erb_output_directive - - - 12 - - - 1 - 2 - 3270 - - - - - - - - - erb_output_directive_def - 3270 - - - id - 3270 - - - - - - erb_template_child - 8934 - - - erb_template - 340 - - - index - 564 - - - child - 8934 - - - - - erb_template - index - - - 12 - - - 1 - 3 - 9 - - - 3 - 4 - 115 - - - 4 - 7 - 21 - - - 7 - 10 - 25 - - - 10 - 14 - 28 - - - 14 - 24 - 25 - - - 24 - 33 - 25 - - - 33 - 44 - 25 - - - 45 - 64 - 25 - - - 67 - 149 - 25 - - - 200 - 240 - 9 - - - - - - - erb_template - child - - - 12 - - - 1 - 3 - 9 - - - 3 - 4 - 115 - - - 4 - 7 - 21 - - - 7 - 10 - 25 - - - 10 - 14 - 28 - - - 14 - 24 - 25 - - - 24 - 33 - 25 - - - 33 - 44 - 25 - - - 45 - 64 - 25 - - - 67 - 149 - 25 - - - 200 - 240 - 9 - - - - - - - index - erb_template - - - 12 - - - 1 - 2 - 25 - - - 2 - 3 - 33 - - - 3 - 4 - 33 - - - 4 - 5 - 122 - - - 5 - 6 - 96 - - - 6 - 8 - 40 - - - 8 - 13 - 42 - - - 13 - 20 - 44 - - - 21 - 31 - 42 - - - 35 - 55 - 44 - - - 55 - 145 - 37 - - - - - - - index - child - - - 12 - - - 1 - 2 - 25 - - - 2 - 3 - 33 - - - 3 - 4 - 33 - - - 4 - 5 - 122 - - - 5 - 6 - 96 - - - 6 - 8 - 40 - - - 8 - 13 - 42 - - - 13 - 20 - 44 - - - 21 - 31 - 42 - - - 35 - 55 - 44 - - - 55 - 145 - 37 - - - - - - - child - erb_template - - - 12 - - - 1 - 2 - 8934 - - - - - - - child - index - - - 12 - - - 1 - 2 - 8934 - - - - - - - - - erb_template_def - 1508 - - - id - 1508 - - - - - - erb_tokeninfo - 17690 - - - id - 17690 - - - kind - 7 - - - value - 4822 - - - - - id - kind - - - 12 - - - 1 - 2 - 17690 - - - - - - - id - value - - - 12 - - - 1 - 2 - 17690 - - - - - - - kind - id - - - 12 - - - 1853 - 1854 - 2 - - - 1928 - 1929 - 2 - - - 3706 - 3707 - 2 - - - - - - - kind - value - - - 12 - - - 5 - 6 - 2 - - - 984 - 985 - 2 - - - 1052 - 1053 - 2 - - - - - - - value - id - - - 12 - - - 1 - 2 - 3879 - - - 2 - 3 - 600 - - - 3 - 1786 - 342 - - - - - - - value - kind - - - 12 - - - 1 - 2 - 4822 - - - - - - - - - files - 18724 - - - id - 18724 - - - name - 18724 - - - - - id - name - - - 12 - - - 1 - 2 - 18724 - - - - - - - name - id - - - 12 - - - 1 - 2 - 18724 - - - - - - - - - folders - 5165 - - - id - 5165 - - - name - 5165 - - - - - id - name - - - 12 - - - 1 - 2 - 5165 - - - - - - - name - id - - - 12 - - - 1 - 2 - 5165 - - - - - - - - - locations_default - 9223392 - - - id - 9223392 - - - file - 18724 - - - beginLine - 31826 - - - beginColumn - 5300 - - - endLine - 31826 - - - endColumn - 5407 - - - - - id - file - - - 12 - - - 1 - 2 - 9223392 - - - - - - - id - beginLine - - - 12 - - - 1 - 2 - 9223392 - - - - - - - id - beginColumn - - - 12 - - - 1 - 2 - 9223392 - - - - - - - id - endLine - - - 12 - - - 1 - 2 - 9223392 - - - - - - - id - endColumn - - - 12 - - - 1 - 2 - 9223392 - - - - - - - file - id - - - 12 - - - 1 - 32 - 1479 - - - 32 - 47 - 1412 - - - 47 - 71 - 1452 - - - 71 - 94 - 1439 - - - 94 - 119 - 1412 - - - 119 - 161 - 1412 - - - 161 - 209 - 1466 - - - 209 - 260 - 1439 - - - 260 - 333 - 1412 - - - 336 - 445 - 1425 - - - 445 - 679 - 1412 - - - 684 - 1221 - 1412 - - - 1228 - 5812 - 1412 - - - 7145 - 22841 - 134 - - - - - - - file - beginLine - - - 12 - - - 1 - 7 - 1398 - - - 7 - 10 - 1641 - - - 10 - 13 - 1479 - - - 13 - 16 - 1668 - - - 16 - 20 - 1600 - - - 20 - 25 - 1587 - - - 25 - 31 - 1573 - - - 31 - 38 - 1506 - - - 38 - 49 - 1506 - - - 49 - 69 - 1425 - - - 69 - 117 - 1425 - - - 119 - 275 - 1412 - - - 276 - 2339 - 497 - - - - - - - file - beginColumn - - - 12 - - - 1 - 16 - 1533 - - - 16 - 24 - 1493 - - - 24 - 31 - 1412 - - - 31 - 40 - 1573 - - - 40 - 46 - 1452 - - - 46 - 52 - 1533 - - - 52 - 60 - 1587 - - - 60 - 68 - 1721 - - - 68 - 76 - 1533 - - - 76 - 85 - 1452 - - - 85 - 98 - 1412 - - - 98 - 122 - 1412 - - - 122 - 357 - 605 - - - - - - - file - endLine - - - 12 - - - 1 - 7 - 1398 - - - 7 - 10 - 1600 - - - 10 - 13 - 1506 - - - 13 - 16 - 1641 - - - 16 - 20 - 1614 - - - 20 - 25 - 1600 - - - 25 - 31 - 1587 - - - 31 - 38 - 1506 - - - 38 - 49 - 1506 - - - 49 - 69 - 1425 - - - 69 - 117 - 1425 - - - 119 - 275 - 1412 - - - 276 - 2339 - 497 - - - - - - - file - endColumn - - - 12 - - - 1 - 19 - 1412 - - - 19 - 27 - 1587 - - - 27 - 35 - 1425 - - - 35 - 44 - 1452 - - - 44 - 50 - 1600 - - - 50 - 57 - 1533 - - - 57 - 64 - 1439 - - - 64 - 71 - 1412 - - - 71 - 78 - 1533 - - - 78 - 87 - 1520 - - - 87 - 99 - 1493 - - - 99 - 118 - 1425 - - - 118 - 367 - 887 - - - - - - - beginLine - id - - - 12 - - - 1 - 2 - 1600 - - - 2 - 5 - 1627 - - - 5 - 6 - 3484 - - - 6 - 10 - 2676 - - - 10 - 17 - 2878 - - - 17 - 24 - 2421 - - - 24 - 43 - 2448 - - - 43 - 78 - 2394 - - - 78 - 117 - 2394 - - - 117 - 168 - 2407 - - - 169 - 262 - 2421 - - - 262 - 703 - 2394 - - - 708 - 5999 - 2394 - - - 6159 - 10971 - 282 - - - - - - - beginLine - file - - - 12 - - - 1 - 2 - 10304 - - - 2 - 3 - 5609 - - - 3 - 7 - 2838 - - - 7 - 10 - 2663 - - - 10 - 15 - 2407 - - - 15 - 23 - 2394 - - - 23 - 58 - 2407 - - - 58 - 287 - 2394 - - - 296 - 1392 - 807 - - - - - - - beginLine - beginColumn - - - 12 - - - 1 - 2 - 1600 - - - 2 - 3 - 1520 - - - 3 - 4 - 2394 - - - 4 - 6 - 2650 - - - 6 - 8 - 1775 - - - 8 - 13 - 2811 - - - 13 - 18 - 2448 - - - 18 - 29 - 2582 - - - 29 - 44 - 2475 - - - 44 - 56 - 2582 - - - 56 - 69 - 2475 - - - 69 - 86 - 2461 - - - 86 - 113 - 2407 - - - 113 - 205 - 1641 - - - - - - - beginLine - endLine - - - 12 - - - 1 - 2 - 11299 - - - 2 - 3 - 6591 - - - 3 - 4 - 2380 - - - 4 - 5 - 1815 - - - 5 - 7 - 2623 - - - 7 - 10 - 2367 - - - 10 - 17 - 2461 - - - 17 - 240 - 2286 - - - - - - - beginLine - endColumn - - - 12 - - - 1 - 2 - 1600 - - - 2 - 4 - 1627 - - - 4 - 5 - 3537 - - - 5 - 7 - 2152 - - - 7 - 11 - 2744 - - - 11 - 15 - 2461 - - - 15 - 24 - 2394 - - - 24 - 39 - 2421 - - - 39 - 52 - 2448 - - - 52 - 65 - 2542 - - - 65 - 80 - 2555 - - - 80 - 102 - 2434 - - - 102 - 136 - 2421 - - - 136 - 209 - 484 - - - - - - - beginColumn - id - - - 12 - - - 1 - 2 - 484 - - - 2 - 3 - 605 - - - 3 - 4 - 255 - - - 4 - 5 - 269 - - - 5 - 6 - 336 - - - 6 - 9 - 457 - - - 9 - 16 - 430 - - - 16 - 43 - 403 - - - 46 - 182 - 403 - - - 184 - 794 - 403 - - - 811 - 3014 - 403 - - - 3015 - 8230 - 403 - - - 8347 - 25670 - 403 - - - 28494 - 38951 - 40 - - - - - - - beginColumn - file - - - 12 - - - 1 - 2 - 1466 - - - 2 - 3 - 605 - - - 3 - 4 - 484 - - - 4 - 9 - 417 - - - 9 - 37 - 403 - - - 37 - 118 - 403 - - - 124 - 381 - 403 - - - 381 - 728 - 403 - - - 754 - 985 - 403 - - - 996 - 1392 - 309 - - - - - - - beginColumn - beginLine - - - 12 - - - 1 - 2 - 551 - - - 2 - 3 - 712 - - - 3 - 4 - 322 - - - 4 - 5 - 363 - - - 5 - 7 - 363 - - - 7 - 13 - 457 - - - 13 - 35 - 403 - - - 35 - 103 - 403 - - - 109 - 281 - 403 - - - 286 - 583 - 403 - - - 591 - 927 - 403 - - - 935 - 1163 - 403 - - - 1198 - 1405 - 107 - - - - - - - beginColumn - endLine - - - 12 - - - 1 - 2 - 551 - - - 2 - 3 - 712 - - - 3 - 4 - 322 - - - 4 - 5 - 363 - - - 5 - 7 - 363 - - - 7 - 13 - 457 - - - 13 - 35 - 403 - - - 35 - 105 - 403 - - - 108 - 282 - 403 - - - 287 - 596 - 403 - - - 596 - 945 - 403 - - - 956 - 1202 - 403 - - - 1223 - 1412 - 107 - - - - - - - beginColumn - endColumn - - - 12 - - - 1 - 2 - 1318 - - - 2 - 3 - 712 - - - 3 - 4 - 524 - - - 4 - 6 - 443 - - - 6 - 15 - 403 - - - 15 - 37 - 403 - - - 37 - 66 - 403 - - - 66 - 98 - 403 - - - 100 - 127 - 403 - - - 128 - 180 - 282 - - - - - - - endLine - id - - - 12 - - - 1 - 3 - 322 - - - 3 - 4 - 3510 - - - 4 - 6 - 2528 - - - 6 - 9 - 2394 - - - 9 - 13 - 2488 - - - 13 - 20 - 2407 - - - 20 - 33 - 2461 - - - 33 - 64 - 2421 - - - 64 - 103 - 2421 - - - 103 - 143 - 2448 - - - 143 - 220 - 2394 - - - 220 - 446 - 2394 - - - 446 - 1691 - 2394 - - - 1717 - 10278 - 1237 - - - - - - - endLine - file - - - 12 - - - 1 - 2 - 10304 - - - 2 - 3 - 5609 - - - 3 - 7 - 2838 - - - 7 - 10 - 2663 - - - 10 - 15 - 2407 - - - 15 - 23 - 2394 - - - 23 - 58 - 2407 - - - 58 - 287 - 2394 - - - 296 - 1376 - 807 - - - - - - - endLine - beginLine - - - 12 - - - 1 - 2 - 11420 - - - 2 - 3 - 5959 - - - 3 - 4 - 2636 - - - 4 - 5 - 1654 - - - 5 - 7 - 2650 - - - 7 - 10 - 2407 - - - 10 - 17 - 2394 - - - 17 - 34 - 2434 - - - 34 - 43 - 269 - - - - - - - endLine - beginColumn - - - 12 - - - 1 - 3 - 1614 - - - 3 - 4 - 3497 - - - 4 - 6 - 2824 - - - 6 - 8 - 1694 - - - 8 - 12 - 2502 - - - 12 - 17 - 2771 - - - 17 - 28 - 2421 - - - 28 - 42 - 2448 - - - 42 - 55 - 2650 - - - 55 - 67 - 2407 - - - 67 - 82 - 2434 - - - 82 - 108 - 2461 - - - 108 - 204 - 2098 - - - - - - - endLine - endColumn - - - 12 - - - 1 - 2 - 1587 - - - 2 - 3 - 1520 - - - 3 - 4 - 2421 - - - 4 - 6 - 2650 - - - 6 - 8 - 1748 - - - 8 - 13 - 2851 - - - 13 - 18 - 2448 - - - 18 - 30 - 2488 - - - 30 - 45 - 2448 - - - 45 - 58 - 2542 - - - 58 - 71 - 2421 - - - 71 - 86 - 2407 - - - 86 - 113 - 2394 - - - 113 - 209 - 1896 - - - - - - - endColumn - id - - - 12 - - - 1 - 2 - 417 - - - 2 - 3 - 484 - - - 3 - 5 - 457 - - - 5 - 6 - 174 - - - 6 - 8 - 470 - - - 8 - 12 - 417 - - - 12 - 24 - 417 - - - 24 - 72 - 417 - - - 76 - 277 - 417 - - - 278 - 1206 - 417 - - - 1227 - 3859 - 417 - - - 3977 - 8618 - 417 - - - 9094 - 11251 - 417 - - - 11548 - 19740 - 67 - - - - - - - endColumn - file - - - 12 - - - 1 - 2 - 1479 - - - 2 - 3 - 578 - - - 3 - 4 - 538 - - - 4 - 8 - 417 - - - 8 - 29 - 417 - - - 35 - 115 - 417 - - - 115 - 399 - 417 - - - 427 - 798 - 417 - - - 805 - 1038 - 417 - - - 1039 - 1359 - 309 - - - - - - - endColumn - beginLine - - - 12 - - - 1 - 2 - 591 - - - 2 - 3 - 645 - - - 3 - 4 - 336 - - - 4 - 6 - 470 - - - 6 - 9 - 470 - - - 9 - 17 - 443 - - - 17 - 47 - 417 - - - 51 - 153 - 417 - - - 153 - 387 - 417 - - - 390 - 717 - 417 - - - 730 - 1059 - 417 - - - 1062 - 1404 - 363 - - - - - - - endColumn - beginColumn - - - 12 - - - 1 - 2 - 928 - - - 2 - 3 - 390 - - - 3 - 4 - 497 - - - 4 - 5 - 363 - - - 5 - 7 - 363 - - - 7 - 14 - 443 - - - 15 - 33 - 470 - - - 33 - 49 - 417 - - - 49 - 64 - 430 - - - 65 - 81 - 417 - - - 81 - 96 - 457 - - - 97 - 109 - 228 - - - - - - - endColumn - endLine - - - 12 - - - 1 - 2 - 591 - - - 2 - 3 - 659 - - - 3 - 4 - 336 - - - 4 - 6 - 457 - - - 6 - 9 - 470 - - - 9 - 16 - 417 - - - 16 - 43 - 430 - - - 45 - 151 - 430 - - - 161 - 379 - 417 - - - 384 - 712 - 417 - - - 729 - 1046 - 417 - - - 1049 - 1397 - 363 - - - - - - - - - ruby_alias_def - 1289 - - - id - 1289 - - - alias - 1289 - - - name - 1289 - - - - - id - alias - - - 12 - - - 1 - 2 - 1289 - - - - - - - id - name - - - 12 - - - 1 - 2 - 1289 - - - - - - - alias - id - - - 12 - - - 1 - 2 - 1289 - - - - - - - alias - name - - - 12 - - - 1 - 2 - 1289 - - - - - - - name - id - - - 12 - - - 1 - 2 - 1289 - - - - - - - name - alias - - - 12 - - - 1 - 2 - 1289 - - - - - - - - - ruby_alternative_pattern_alternatives - 23 - - - ruby_alternative_pattern - 9 - - - index - 4 - - - alternatives - 23 - - - - - ruby_alternative_pattern - index - - - 12 - - - 2 - 3 - 6 - - - 3 - 4 - 1 - - - 4 - 5 - 2 - - - - - - - ruby_alternative_pattern - alternatives - - - 12 - - - 2 - 3 - 6 - - - 3 - 4 - 1 - - - 4 - 5 - 2 - - - - - - - index - ruby_alternative_pattern - - - 12 - - - 2 - 3 - 1 - - - 3 - 4 - 1 - - - 9 - 10 - 2 - - - - - - - index - alternatives - - - 12 - - - 2 - 3 - 1 - - - 3 - 4 - 1 - - - 9 - 10 - 2 - - - - - - - alternatives - ruby_alternative_pattern - - - 12 - - - 1 - 2 - 23 - - - - - - - alternatives - index - - - 12 - - - 1 - 2 - 23 - - - - - - - - - ruby_alternative_pattern_def - 9 - - - id - 9 - - - - - - ruby_argument_list_child - 879410 - - - ruby_argument_list - 706205 - - - index - 443 - - - child - 879410 - - - - - ruby_argument_list - index - - - 12 - - - 1 - 2 - 596855 - - - 2 - 3 - 68483 - - - 3 - 34 - 40866 - - - - - - - ruby_argument_list - child - - - 12 - - - 1 - 2 - 596855 - - - 2 - 3 - 68483 - - - 3 - 34 - 40866 - - - - - - - index - ruby_argument_list - - - 12 - - - 1 - 2 - 147 - - - 2 - 3 - 40 - - - 3 - 7 - 40 - - - 7 - 11 - 40 - - - 11 - 21 - 40 - - - 23 - 45 - 40 - - - 56 - 385 - 40 - - - 963 - 8130 - 40 - - - 52499 - 52500 - 13 - - - - - - - index - child - - - 12 - - - 1 - 2 - 147 - - - 2 - 3 - 40 - - - 3 - 7 - 40 - - - 7 - 11 - 40 - - - 11 - 21 - 40 - - - 23 - 45 - 40 - - - 56 - 385 - 40 - - - 963 - 8130 - 40 - - - 52499 - 52500 - 13 - - - - - - - child - ruby_argument_list - - - 12 - - - 1 - 2 - 879410 - - - - - - - child - index - - - 12 - - - 1 - 2 - 879410 - - - - - - - - - ruby_argument_list_def - 706474 - - - id - 706474 - - - - - - ruby_array_child - 708919 - - - ruby_array - 240456 - - - index - 63360 - - - child - 708919 - - - - - ruby_array - index - - - 12 - - - 1 - 2 - 12708 - - - 2 - 3 - 213730 - - - 3 - 63361 - 14018 - - - - - - - ruby_array - child - - - 12 - - - 1 - 2 - 12708 - - - 2 - 3 - 213730 - - - 3 - 63361 - 14018 - - - - - - - index - ruby_array - - - 12 - - - 1 - 2 - 40208 - - - 2 - 6 - 4769 - - - 6 - 7 - 9559 - - - 7 - 8 - 598 - - - 8 - 9 - 6932 - - - 11 - 240457 - 1294 - - - - - - - index - child - - - 12 - - - 1 - 2 - 40208 - - - 2 - 6 - 4769 - - - 6 - 7 - 9559 - - - 7 - 8 - 598 - - - 8 - 9 - 6932 - - - 11 - 240457 - 1294 - - - - - - - child - ruby_array - - - 12 - - - 1 - 2 - 708919 - - - - - - - child - index - - - 12 - - - 1 - 2 - 708919 - - - - - - - - - ruby_array_def - 249320 - - - id - 249320 - - - - - - ruby_array_pattern_child - 336 - - - ruby_array_pattern - 168 - - - index - 18 - - - child - 336 - - - - - ruby_array_pattern - index - - - 12 - - - 1 - 2 - 51 - - - 2 - 3 - 97 - - - 3 - 4 - 14 - - - 4 - 19 - 6 - - - - - - - ruby_array_pattern - child - - - 12 - - - 1 - 2 - 51 - - - 2 - 3 - 97 - - - 3 - 4 - 14 - - - 4 - 19 - 6 - - - - - - - index - ruby_array_pattern - - - 12 - - - 1 - 2 - 7 - - - 2 - 3 - 5 - - - 4 - 5 - 2 - - - 6 - 7 - 1 - - - 20 - 21 - 1 - - - 117 - 118 - 1 - - - 168 - 169 - 1 - - - - - - - index - child - - - 12 - - - 1 - 2 - 7 - - - 2 - 3 - 5 - - - 4 - 5 - 2 - - - 6 - 7 - 1 - - - 20 - 21 - 1 - - - 117 - 118 - 1 - - - 168 - 169 - 1 - - - - - - - child - ruby_array_pattern - - - 12 - - - 1 - 2 - 336 - - - - - - - child - index - - - 12 - - - 1 - 2 - 336 - - - - - - - - - ruby_array_pattern_class - 51 - - - ruby_array_pattern - 51 - - - class - 51 - - - - - ruby_array_pattern - class - - - 12 - - - 1 - 2 - 51 - - - - - - - class - ruby_array_pattern - - - 12 - - - 1 - 2 - 51 - - - - - - - - - ruby_array_pattern_def - 179 - - - id - 179 - - - - - - ruby_as_pattern_def - 156 - - - id - 156 - - - name - 156 - - - value - 156 - - - - - id - name - - - 12 - - - 1 - 2 - 156 - - - - - - - id - value - - - 12 - - - 1 - 2 - 156 - - - - - - - name - id - - - 12 - - - 1 - 2 - 156 - - - - - - - name - value - - - 12 - - - 1 - 2 - 156 - - - - - - - value - id - - - 12 - - - 1 - 2 - 156 - - - - - - - value - name - - - 12 - - - 1 - 2 - 156 - - - - - - - - - ruby_assignment_def - 141202 - - - id - 141202 - - - left - 141202 - - - right - 141202 - - - - - id - left - - - 12 - - - 1 - 2 - 141202 - - - - - - - id - right - - - 12 - - - 1 - 2 - 141202 - - - - - - - left - id - - - 12 - - - 1 - 2 - 141202 - - - - - - - left - right - - - 12 - - - 1 - 2 - 141202 - - - - - - - right - id - - - 12 - - - 1 - 2 - 141202 - - - - - - - right - left - - - 12 - - - 1 - 2 - 141202 - - - - - - - - - ruby_ast_node_location - 9723503 - - - node - 9723503 - - - loc - 9209550 - - - - - node - loc - - - 12 - - - 1 - 2 - 9723503 - - - - - - - loc - node - - - 12 - - - 1 - 2 - 8697279 - - - 2 - 4 - 512270 - - - - - - - - - ruby_ast_node_parent - 9674605 - - - node - 9674605 - - - parent - 3381025 - - - parent_index - 2892 - - - - - node - parent - - - 12 - - - 1 - 2 - 9674605 - - - - - - - node - parent_index - - - 12 - - - 1 - 2 - 9674605 - - - - - - - parent - node - - - 12 - - - 1 - 2 - 533793 - - - 2 - 3 - 465418 - - - 3 - 4 - 1832321 - - - 4 - 5 - 359620 - - - 5 - 216 - 189871 - - - - - - - parent - parent_index - - - 12 - - - 1 - 2 - 533793 - - - 2 - 3 - 465418 - - - 3 - 4 - 1832321 - - - 4 - 5 - 359620 - - - 5 - 216 - 189871 - - - - - - - parent_index - node - - - 12 - - - 1 - 2 - 470 - - - 2 - 3 - 242 - - - 3 - 4 - 363 - - - 4 - 6 - 161 - - - 6 - 7 - 484 - - - 7 - 17 - 255 - - - 17 - 29 - 228 - - - 33 - 71 - 228 - - - 72 - 298 - 228 - - - 358 - 251345 - 228 - - - - - - - parent_index - parent - - - 12 - - - 1 - 2 - 470 - - - 2 - 3 - 242 - - - 3 - 4 - 363 - - - 4 - 6 - 161 - - - 6 - 7 - 484 - - - 7 - 17 - 255 - - - 17 - 29 - 228 - - - 33 - 71 - 228 - - - 72 - 298 - 228 - - - 358 - 251345 - 228 - - - - - - - - - ruby_bare_string_child - 16784 - - - ruby_bare_string - 13136 - - - index - 2309 - - - child - 16784 - - - - - ruby_bare_string - index - - - 12 - - - 1 - 2 - 12728 - - - 2 - 2310 - 408 - - - - - - - ruby_bare_string - child - - - 12 - - - 1 - 2 - 12728 - - - 2 - 2310 - 408 - - - - - - - index - ruby_bare_string - - - 12 - - - 1 - 2 - 1942 - - - 2 - 3 - 72 - - - 3 - 4 - 276 - - - 4 - 13137 - 19 - - - - - - - index - child - - - 12 - - - 1 - 2 - 1942 - - - 2 - 3 - 72 - - - 3 - 4 - 276 - - - 4 - 13137 - 19 - - - - - - - child - ruby_bare_string - - - 12 - - - 1 - 2 - 16784 - - - - - - - child - index - - - 12 - - - 1 - 2 - 16784 - - - - - - - - - ruby_bare_string_def - 13136 - - - id - 13136 - - - - - - ruby_bare_symbol_child - 8435 - - - ruby_bare_symbol - 8435 - - - index - 2 - - - child - 8435 - - - - - ruby_bare_symbol - index - - - 12 - - - 1 - 2 - 8435 - - - - - - - ruby_bare_symbol - child - - - 12 - - - 1 - 2 - 8435 - - - - - - - index - ruby_bare_symbol - - - 12 - - - 3570 - 3571 - 2 - - - - - - - index - child - - - 12 - - - 3570 - 3571 - 2 - - - - - - - child - ruby_bare_symbol - - - 12 - - - 1 - 2 - 8435 - - - - - - - child - index - - - 12 - - - 1 - 2 - 8435 - - - - - - - - - ruby_bare_symbol_def - 8435 - - - id - 8435 - - - - - - ruby_begin_block_child - 39 - - - ruby_begin_block - 10 - - - index - 7 - - - child - 39 - - - - - ruby_begin_block - index - - - 12 - - - 1 - 2 - 3 - - - 2 - 3 - 1 - - - 3 - 4 - 2 - - - 7 - 8 - 4 - - - - - - - ruby_begin_block - child - - - 12 - - - 1 - 2 - 3 - - - 2 - 3 - 1 - - - 3 - 4 - 2 - - - 7 - 8 - 4 - - - - - - - index - ruby_begin_block - - - 12 - - - 4 - 5 - 4 - - - 6 - 7 - 1 - - - 7 - 8 - 1 - - - 10 - 11 - 1 - - - - - - - index - child - - - 12 - - - 4 - 5 - 4 - - - 6 - 7 - 1 - - - 7 - 8 - 1 - - - 10 - 11 - 1 - - - - - - - child - ruby_begin_block - - - 12 - - - 1 - 2 - 39 - - - - - - - child - index - - - 12 - - - 1 - 2 - 39 - - - - - - - - - ruby_begin_block_def - 10 - - - id - 10 - - - - - - ruby_begin_child - 7606 - - - ruby_begin - 2610 - - - index - 39 - - - child - 7606 - - - - - ruby_begin - index - - - 12 - - - 1 - 2 - 161 - - - 2 - 3 - 1414 - - - 3 - 4 - 537 - - - 4 - 5 - 200 - - - 5 - 8 - 221 - - - 8 - 40 - 77 - - - - - - - ruby_begin - child - - - 12 - - - 1 - 2 - 161 - - - 2 - 3 - 1414 - - - 3 - 4 - 537 - - - 4 - 5 - 200 - - - 5 - 8 - 221 - - - 8 - 40 - 77 - - - - - - - index - ruby_begin - - - 12 - - - 1 - 2 - 2 - - - 2 - 3 - 3 - - - 3 - 4 - 12 - - - 4 - 8 - 2 - - - 9 - 12 - 3 - - - 15 - 17 - 3 - - - 23 - 33 - 3 - - - 37 - 59 - 3 - - - 77 - 166 - 3 - - - 298 - 1036 - 3 - - - 2449 - 2611 - 2 - - - - - - - index - child - - - 12 - - - 1 - 2 - 2 - - - 2 - 3 - 3 - - - 3 - 4 - 12 - - - 4 - 8 - 2 - - - 9 - 12 - 3 - - - 15 - 17 - 3 - - - 23 - 33 - 3 - - - 37 - 59 - 3 - - - 77 - 166 - 3 - - - 298 - 1036 - 3 - - - 2449 - 2611 - 2 - - - - - - - child - ruby_begin - - - 12 - - - 1 - 2 - 7606 - - - - - - - child - index - - - 12 - - - 1 - 2 - 7606 - - - - - - - - - ruby_begin_def - 2610 - - - id - 2610 - - - - - - ruby_binary_def - 73665 - - - id - 73665 - - - left - 73665 - - - operator - 25 - - - right - 73665 - - - - - id - left - - - 12 - - - 1 - 2 - 73665 - - - - - - - id - operator - - - 12 - - - 1 - 2 - 73665 - - - - - - - id - right - - - 12 - - - 1 - 2 - 73665 - - - - - - - left - id - - - 12 - - - 1 - 2 - 73665 - - - - - - - left - operator - - - 12 - - - 1 - 2 - 73665 - - - - - - - left - right - - - 12 - - - 1 - 2 - 73665 - - - - - - - operator - id - - - 12 - - - 153 - 177 - 2 - - - 259 - 432 - 2 - - - 597 - 631 - 2 - - - 647 - 690 - 2 - - - 764 - 987 - 2 - - - 1026 - 1033 - 2 - - - 1058 - 1073 - 2 - - - 1169 - 1190 - 2 - - - 1227 - 1824 - 2 - - - 2079 - 2661 - 2 - - - 2747 - 3491 - 2 - - - 6593 - 7408 - 2 - - - 33761 - 33762 - 1 - - - - - - - operator - left - - - 12 - - - 153 - 177 - 2 - - - 259 - 432 - 2 - - - 597 - 631 - 2 - - - 647 - 690 - 2 - - - 764 - 987 - 2 - - - 1026 - 1033 - 2 - - - 1058 - 1073 - 2 - - - 1169 - 1190 - 2 - - - 1227 - 1824 - 2 - - - 2079 - 2661 - 2 - - - 2747 - 3491 - 2 - - - 6593 - 7408 - 2 - - - 33761 - 33762 - 1 - - - - - - - operator - right - - - 12 - - - 153 - 177 - 2 - - - 259 - 432 - 2 - - - 597 - 631 - 2 - - - 647 - 690 - 2 - - - 764 - 987 - 2 - - - 1026 - 1033 - 2 - - - 1058 - 1073 - 2 - - - 1169 - 1190 - 2 - - - 1227 - 1824 - 2 - - - 2079 - 2661 - 2 - - - 2747 - 3491 - 2 - - - 6593 - 7408 - 2 - - - 33761 - 33762 - 1 - - - - - - - right - id - - - 12 - - - 1 - 2 - 73665 - - - - - - - right - left - - - 12 - - - 1 - 2 - 73665 - - - - - - - right - operator - - - 12 - - - 1 - 2 - 73665 - - - - - - - - - ruby_block_argument_child - 6541 - - - ruby_block_argument - 6541 - - - child - 6541 - - - - - ruby_block_argument - child - - - 12 - - - 1 - 2 - 6541 - - - - - - - child - ruby_block_argument - - - 12 - - - 1 - 2 - 6541 - - - - - - - - - ruby_block_argument_def - 6547 - - - id - 6547 - - - - - - ruby_block_body - 103820 - - - ruby_block - 103820 - - - body - 103820 - - - - - ruby_block - body - - - 12 - - - 1 - 2 - 103820 - - - - - - - body - ruby_block - - - 12 - - - 1 - 2 - 103820 - - - - - - - - - ruby_block_body_child - 103995 - - - ruby_block_body - 103820 - - - index - 53 - - - child - 103995 - - - - - ruby_block_body - index - - - 12 - - - 1 - 2 - 103699 - - - 2 - 5 - 121 - - - - - - - ruby_block_body - child - - - 12 - - - 1 - 2 - 103699 - - - 2 - 5 - 121 - - - - - - - index - ruby_block_body - - - 12 - - - 2 - 3 - 26 - - - 9 - 10 - 13 - - - 7718 - 7719 - 13 - - - - - - - index - child - - - 12 - - - 2 - 3 - 26 - - - 9 - 10 - 13 - - - 7718 - 7719 - 13 - - - - - - - child - ruby_block_body - - - 12 - - - 1 - 2 - 103995 - - - - - - - child - index - - - 12 - - - 1 - 2 - 103995 - - - - - - - - - ruby_block_body_def - 103820 - - - id - 103820 - - - - - - ruby_block_def - 104143 - - - id - 104143 - - - - - - ruby_block_parameter_def - 2543 - - - id - 2543 - - - - - - ruby_block_parameter_name - 2537 - - - ruby_block_parameter - 2537 - - - name - 2537 - - - - - ruby_block_parameter - name - - - 12 - - - 1 - 2 - 2537 - - - - - - - name - ruby_block_parameter - - - 12 - - - 1 - 2 - 2537 - - - - - - - - - ruby_block_parameters - 10767 - - - ruby_block - 10767 - - - parameters - 10767 - - - - - ruby_block - parameters - - - 12 - - - 1 - 2 - 10767 - - - - - - - parameters - ruby_block - - - 12 - - - 1 - 2 - 10767 - - - - - - - - - ruby_block_parameters_child - 30131 - - - ruby_block_parameters - 25884 - - - index - 14 - - - child - 30131 - - - - - ruby_block_parameters - index - - - 12 - - - 1 - 2 - 22189 - - - 2 - 3 - 3329 - - - 3 - 6 - 365 - - - - - - - ruby_block_parameters - child - - - 12 - - - 1 - 2 - 22189 - - - 2 - 3 - 3329 - - - 3 - 6 - 365 - - - - - - - index - ruby_block_parameters - - - 12 - - - 27 - 28 - 2 - - - 35 - 36 - 2 - - - 122 - 123 - 2 - - - 1232 - 1233 - 2 - - - 8630 - 8631 - 2 - - - - - - - index - child - - - 12 - - - 27 - 28 - 2 - - - 35 - 36 - 2 - - - 122 - 123 - 2 - - - 1232 - 1233 - 2 - - - 8630 - 8631 - 2 - - - - - - - child - ruby_block_parameters - - - 12 - - - 1 - 2 - 30131 - - - - - - - child - index - - - 12 - - - 1 - 2 - 30131 - - - - - - - - - ruby_block_parameters_def - 25884 - - - id - 25884 - - - - - - ruby_block_parameters_locals - 16 - - - ruby_block_parameters - 12 - - - index - 2 - - - locals - 16 - - - - - ruby_block_parameters - index - - - 12 - - - 1 - 2 - 8 - - - 2 - 3 - 4 - - - - - - - ruby_block_parameters - locals - - - 12 - - - 1 - 2 - 8 - - - 2 - 3 - 4 - - - - - - - index - ruby_block_parameters - - - 12 - - - 4 - 5 - 1 - - - 12 - 13 - 1 - - - - - - - index - locals - - - 12 - - - 4 - 5 - 1 - - - 12 - 13 - 1 - - - - - - - locals - ruby_block_parameters - - - 12 - - - 1 - 2 - 16 - - - - - - - locals - index - - - 12 - - - 1 - 2 - 16 - - - - - - - - - ruby_body_statement_child - 641142 - - - ruby_body_statement - 206879 - - - index - 1187 - - - child - 641142 - - - - - ruby_body_statement - index - - - 12 - - - 1 - 2 - 95107 - - - 2 - 3 - 37693 - - - 3 - 4 - 24510 - - - 4 - 5 - 15881 - - - 5 - 7 - 16388 - - - 7 - 23 - 15560 - - - 23 - 397 - 1736 - - - - - - - ruby_body_statement - child - - - 12 - - - 1 - 2 - 95107 - - - 2 - 3 - 37693 - - - 3 - 4 - 24510 - - - 4 - 5 - 15881 - - - 5 - 7 - 16388 - - - 7 - 23 - 15560 - - - 23 - 397 - 1736 - - - - - - - index - ruby_body_statement - - - 12 - - - 1 - 2 - 140 - - - 2 - 3 - 122 - - - 3 - 4 - 77 - - - 4 - 5 - 62 - - - 5 - 7 - 98 - - - 8 - 10 - 86 - - - 10 - 12 - 89 - - - 12 - 26 - 95 - - - 26 - 42 - 92 - - - 42 - 77 - 89 - - - 80 - 179 - 89 - - - 184 - 1016 - 89 - - - 1134 - 68975 - 47 - - - - - - - index - child - - - 12 - - - 1 - 2 - 140 - - - 2 - 3 - 122 - - - 3 - 4 - 77 - - - 4 - 5 - 62 - - - 5 - 7 - 98 - - - 8 - 10 - 86 - - - 10 - 12 - 89 - - - 12 - 26 - 95 - - - 26 - 42 - 92 - - - 42 - 77 - 89 - - - 80 - 179 - 89 - - - 184 - 1016 - 89 - - - 1134 - 68975 - 47 - - - - - - - child - ruby_body_statement - - - 12 - - - 1 - 2 - 641142 - - - - - - - child - index - - - 12 - - - 1 - 2 - 641142 - - - - - - - - - ruby_body_statement_def - 213896 - - - id - 213896 - - - - - - ruby_break_child - 394 - - - ruby_break - 394 - - - child - 394 - - - - - ruby_break - child - - - 12 - - - 1 - 2 - 394 - - - - - - - child - ruby_break - - - 12 - - - 1 - 2 - 394 - - - - - - - - - ruby_break_def - 3414 - - - id - 3414 - - - - - - ruby_call_arguments - 703178 - - - ruby_call - 703178 - - - arguments - 703178 - - - - - ruby_call - arguments - - - 12 - - - 1 - 2 - 703178 - - - - - - - arguments - ruby_call - - - 12 - - - 1 - 2 - 703178 - - - - - - - - - ruby_call_block - 246208 - - - ruby_call - 246208 - - - block - 246208 - - - - - ruby_call - block - - - 12 - - - 1 - 2 - 246208 - - - - - - - block - ruby_call - - - 12 - - - 1 - 2 - 246208 - - - - - - - - - ruby_call_def - 1027501 - - - id - 1027501 - - - - - - ruby_call_method - 1027501 - - - ruby_call - 1027501 - - - method - 1027501 - - - - - ruby_call - method - - - 12 - - - 1 - 2 - 1027501 - - - - - - - method - ruby_call - - - 12 - - - 1 - 2 - 1027501 - - - - - - - - - ruby_call_operator - 571632 - - - ruby_call - 571632 - - - operator - 571632 - - - - - ruby_call - operator - - - 12 - - - 1 - 2 - 571632 - - - - - - - operator - ruby_call - - - 12 - - - 1 - 2 - 571632 - - - - - - - - - ruby_call_receiver - 571632 - - - ruby_call - 571632 - - - receiver - 571632 - - - - - ruby_call - receiver - - - 12 - - - 1 - 2 - 571632 - - - - - - - receiver - ruby_call - - - 12 - - - 1 - 2 - 571632 - - - - - - - - - ruby_case_child - 4685 - - - ruby_case__ - 1267 - - - index - 86 - - - child - 4685 - - - - - ruby_case__ - index - - - 12 - - - 1 - 2 - 69 - - - 2 - 3 - 405 - - - 3 - 4 - 399 - - - 4 - 5 - 166 - - - 5 - 6 - 89 - - - 6 - 12 - 100 - - - 12 - 87 - 39 - - - - - - - ruby_case__ - child - - - 12 - - - 1 - 2 - 69 - - - 2 - 3 - 405 - - - 3 - 4 - 399 - - - 4 - 5 - 166 - - - 5 - 6 - 89 - - - 6 - 12 - 100 - - - 12 - 87 - 39 - - - - - - - index - ruby_case__ - - - 12 - - - 1 - 2 - 42 - - - 2 - 3 - 12 - - - 3 - 6 - 6 - - - 6 - 9 - 7 - - - 9 - 31 - 7 - - - 39 - 140 - 7 - - - 228 - 1268 - 5 - - - - - - - index - child - - - 12 - - - 1 - 2 - 42 - - - 2 - 3 - 12 - - - 3 - 6 - 6 - - - 6 - 9 - 7 - - - 9 - 31 - 7 - - - 39 - 140 - 7 - - - 228 - 1268 - 5 - - - - - - - child - ruby_case__ - - - 12 - - - 1 - 2 - 4685 - - - - - - - child - index - - - 12 - - - 1 - 2 - 4685 - - - - - - - - - ruby_case_def - 1319 - - - id - 1319 - - - - - - ruby_case_match_clauses - 381 - - - ruby_case_match - 232 - - - index - 12 - - - clauses - 381 - - - - - ruby_case_match - index - - - 12 - - - 1 - 2 - 160 - - - 2 - 3 - 40 - - - 3 - 4 - 17 - - - 4 - 13 - 15 - - - - - - - ruby_case_match - clauses - - - 12 - - - 1 - 2 - 160 - - - 2 - 3 - 40 - - - 3 - 4 - 17 - - - 4 - 13 - 15 - - - - - - - index - ruby_case_match - - - 12 - - - 1 - 2 - 2 - - - 2 - 3 - 3 - - - 5 - 6 - 1 - - - 8 - 9 - 1 - - - 9 - 10 - 1 - - - 15 - 16 - 1 - - - 32 - 33 - 1 - - - 72 - 73 - 1 - - - 232 - 233 - 1 - - - - - - - index - clauses - - - 12 - - - 1 - 2 - 2 - - - 2 - 3 - 3 - - - 5 - 6 - 1 - - - 8 - 9 - 1 - - - 9 - 10 - 1 - - - 15 - 16 - 1 - - - 32 - 33 - 1 - - - 72 - 73 - 1 - - - 232 - 233 - 1 - - - - - - - clauses - ruby_case_match - - - 12 - - - 1 - 2 - 381 - - - - - - - clauses - index - - - 12 - - - 1 - 2 - 381 - - - - - - - - - ruby_case_match_def - 232 - - - id - 232 - - - value - 232 - - - - - id - value - - - 12 - - - 1 - 2 - 232 - - - - - - - value - id - - - 12 - - - 1 - 2 - 232 - - - - - - - - - ruby_case_match_else - 45 - - - ruby_case_match - 45 - - - else - 45 - - - - - ruby_case_match - else - - - 12 - - - 1 - 2 - 45 - - - - - - - else - ruby_case_match - - - 12 - - - 1 - 2 - 45 - - - - - - - - - ruby_case_value - 1277 - - - ruby_case__ - 1277 - - - value - 1277 - - - - - ruby_case__ - value - - - 12 - - - 1 - 2 - 1277 - - - - - - - value - ruby_case__ - - - 12 - - - 1 - 2 - 1277 - - - - - - - - - ruby_chained_string_child - 3320 - - - ruby_chained_string - 884 - - - index - 35 - - - child - 3320 - - - - - ruby_chained_string - index - - - 12 - - - 2 - 3 - 296 - - - 3 - 4 - 215 - - - 4 - 5 - 128 - - - 5 - 6 - 116 - - - 6 - 8 - 65 - - - 8 - 13 - 59 - - - - - - - ruby_chained_string - child - - - 12 - - - 2 - 3 - 296 - - - 3 - 4 - 215 - - - 4 - 5 - 128 - - - 5 - 6 - 116 - - - 6 - 8 - 65 - - - 8 - 13 - 59 - - - - - - - index - ruby_chained_string - - - 12 - - - 2 - 3 - 2 - - - 4 - 5 - 2 - - - 7 - 8 - 2 - - - 8 - 9 - 2 - - - 20 - 21 - 2 - - - 33 - 34 - 2 - - - 42 - 43 - 2 - - - 81 - 82 - 2 - - - 124 - 125 - 2 - - - 196 - 197 - 2 - - - 295 - 296 - 5 - - - - - - - index - child - - - 12 - - - 2 - 3 - 2 - - - 4 - 5 - 2 - - - 7 - 8 - 2 - - - 8 - 9 - 2 - - - 20 - 21 - 2 - - - 33 - 34 - 2 - - - 42 - 43 - 2 - - - 81 - 82 - 2 - - - 124 - 125 - 2 - - - 196 - 197 - 2 - - - 295 - 296 - 5 - - - - - - - child - ruby_chained_string - - - 12 - - - 1 - 2 - 3320 - - - - - - - child - index - - - 12 - - - 1 - 2 - 3320 - - - - - - - - - ruby_chained_string_def - 884 - - - id - 884 - - - - - - ruby_class_body - 15734 - - - ruby_class - 15734 - - - body - 15734 - - - - - ruby_class - body - - - 12 - - - 1 - 2 - 15734 - - - - - - - body - ruby_class - - - 12 - - - 1 - 2 - 15734 - - - - - - - - - ruby_class_def - 17441 - - - id - 17441 - - - name - 17441 - - - - - id - name - - - 12 - - - 1 - 2 - 17441 - - - - - - - name - id - - - 12 - - - 1 - 2 - 17441 - - - - - - - - - ruby_class_superclass - 13806 - - - ruby_class - 13806 - - - superclass - 13806 - - - - - ruby_class - superclass - - - 12 - - - 1 - 2 - 13806 - - - - - - - superclass - ruby_class - - - 12 - - - 1 - 2 - 13806 - - - - - - - - - ruby_complex_def - 72 - - - id - 72 - - - child - 72 - - - - - id - child - - - 12 - - - 1 - 2 - 72 - - - - - - - child - id - - - 12 - - - 1 - 2 - 72 - - - - - - - - - ruby_conditional_def - 2896 - - - id - 2896 - - - alternative - 2896 - - - condition - 2896 - - - consequence - 2896 - - - - - id - alternative - - - 12 - - - 1 - 2 - 2896 - - - - - - - id - condition - - - 12 - - - 1 - 2 - 2896 - - - - - - - id - consequence - - - 12 - - - 1 - 2 - 2896 - - - - - - - alternative - id - - - 12 - - - 1 - 2 - 2896 - - - - - - - alternative - condition - - - 12 - - - 1 - 2 - 2896 - - - - - - - alternative - consequence - - - 12 - - - 1 - 2 - 2896 - - - - - - - condition - id - - - 12 - - - 1 - 2 - 2896 - - - - - - - condition - alternative - - - 12 - - - 1 - 2 - 2896 - - - - - - - condition - consequence - - - 12 - - - 1 - 2 - 2896 - - - - - - - consequence - id - - - 12 - - - 1 - 2 - 2896 - - - - - - - consequence - alternative - - - 12 - - - 1 - 2 - 2896 - - - - - - - consequence - condition - - - 12 - - - 1 - 2 - 2896 - - - - - - - - - ruby_delimited_symbol_child - 1742 - - - ruby_delimited_symbol - 1247 - - - index - 23 - - - child - 1742 - - - - - ruby_delimited_symbol - index - - - 12 - - - 1 - 2 - 920 - - - 2 - 3 - 254 - - - 3 - 9 - 71 - - - - - - - ruby_delimited_symbol - child - - - 12 - - - 1 - 2 - 920 - - - 2 - 3 - 254 - - - 3 - 9 - 71 - - - - - - - index - ruby_delimited_symbol - - - 12 - - - 1 - 2 - 2 - - - 3 - 4 - 2 - - - 6 - 7 - 2 - - - 9 - 10 - 2 - - - 13 - 14 - 2 - - - 24 - 25 - 2 - - - 109 - 110 - 2 - - - 416 - 417 - 2 - - - - - - - index - child - - - 12 - - - 1 - 2 - 2 - - - 3 - 4 - 2 - - - 6 - 7 - 2 - - - 9 - 10 - 2 - - - 13 - 14 - 2 - - - 24 - 25 - 2 - - - 109 - 110 - 2 - - - 416 - 417 - 2 - - - - - - - child - ruby_delimited_symbol - - - 12 - - - 1 - 2 - 1742 - - - - - - - child - index - - - 12 - - - 1 - 2 - 1742 - - - - - - - - - ruby_delimited_symbol_def - 1247 - - - id - 1247 - - - - - - ruby_destructured_left_assignment_child - 226 - - - ruby_destructured_left_assignment - 108 - - - index - 4 - - - child - 226 - - - - - ruby_destructured_left_assignment - index - - - 12 - - - 1 - 2 - 12 - - - 2 - 3 - 79 - - - 3 - 4 - 12 - - - 4 - 5 - 5 - - - - - - - ruby_destructured_left_assignment - child - - - 12 - - - 1 - 2 - 12 - - - 2 - 3 - 79 - - - 3 - 4 - 12 - - - 4 - 5 - 5 - - - - - - - index - ruby_destructured_left_assignment - - - 12 - - - 5 - 6 - 1 - - - 17 - 18 - 1 - - - 96 - 97 - 1 - - - 108 - 109 - 1 - - - - - - - index - child - - - 12 - - - 5 - 6 - 1 - - - 17 - 18 - 1 - - - 96 - 97 - 1 - - - 108 - 109 - 1 - - - - - - - child - ruby_destructured_left_assignment - - - 12 - - - 1 - 2 - 226 - - - - - - - child - index - - - 12 - - - 1 - 2 - 226 - - - - - - - - - ruby_destructured_left_assignment_def - 108 - - - id - 108 - - - - - - ruby_destructured_parameter_child - 463 - - - ruby_destructured_parameter - 208 - - - index - 11 - - - child - 463 - - - - - ruby_destructured_parameter - index - - - 12 - - - 1 - 2 - 16 - - - 2 - 3 - 162 - - - 3 - 4 - 19 - - - 4 - 12 - 11 - - - - - - - ruby_destructured_parameter - child - - - 12 - - - 1 - 2 - 16 - - - 2 - 3 - 162 - - - 3 - 4 - 19 - - - 4 - 12 - 11 - - - - - - - index - ruby_destructured_parameter - - - 12 - - - 2 - 3 - 1 - - - 3 - 4 - 5 - - - 5 - 6 - 1 - - - 11 - 12 - 1 - - - 30 - 31 - 1 - - - 192 - 193 - 1 - - - 208 - 209 - 1 - - - - - - - index - child - - - 12 - - - 2 - 3 - 1 - - - 3 - 4 - 5 - - - 5 - 6 - 1 - - - 11 - 12 - 1 - - - 30 - 31 - 1 - - - 192 - 193 - 1 - - - 208 - 209 - 1 - - - - - - - child - ruby_destructured_parameter - - - 12 - - - 1 - 2 - 463 - - - - - - - child - index - - - 12 - - - 1 - 2 - 463 - - - - - - - - - ruby_destructured_parameter_def - 208 - - - id - 208 - - - - - - ruby_do_block_body - 145373 - - - ruby_do_block - 145373 - - - body - 145373 - - - - - ruby_do_block - body - - - 12 - - - 1 - 2 - 145373 - - - - - - - body - ruby_do_block - - - 12 - - - 1 - 2 - 145373 - - - - - - - - - ruby_do_block_def - 145534 - - - id - 145534 - - - - - - ruby_do_block_parameters - 16724 - - - ruby_do_block - 16724 - - - parameters - 16724 - - - - - ruby_do_block - parameters - - - 12 - - - 1 - 2 - 16724 - - - - - - - parameters - ruby_do_block - - - 12 - - - 1 - 2 - 16724 - - - - - - - - - ruby_do_child - 9352 - - - ruby_do - 1651 - - - index - 211 - - - child - 9352 - - - - - ruby_do - index - - - 12 - - - 1 - 2 - 347 - - - 2 - 3 - 300 - - - 3 - 4 - 204 - - - 4 - 6 - 149 - - - 6 - 7 - 25 - - - 7 - 8 - 137 - - - 8 - 9 - 209 - - - 9 - 14 - 116 - - - 14 - 18 - 125 - - - 18 - 212 - 39 - - - - - - - ruby_do - child - - - 12 - - - 1 - 2 - 347 - - - 2 - 3 - 300 - - - 3 - 4 - 204 - - - 4 - 6 - 149 - - - 6 - 7 - 25 - - - 7 - 8 - 137 - - - 8 - 9 - 209 - - - 9 - 14 - 116 - - - 14 - 18 - 125 - - - 18 - 212 - 39 - - - - - - - index - ruby_do - - - 12 - - - 1 - 2 - 105 - - - 2 - 3 - 26 - - - 3 - 4 - 31 - - - 4 - 6 - 18 - - - 6 - 63 - 16 - - - 116 - 1652 - 15 - - - - - - - index - child - - - 12 - - - 1 - 2 - 105 - - - 2 - 3 - 26 - - - 3 - 4 - 31 - - - 4 - 6 - 18 - - - 6 - 63 - 16 - - - 116 - 1652 - 15 - - - - - - - child - ruby_do - - - 12 - - - 1 - 2 - 9352 - - - - - - - child - index - - - 12 - - - 1 - 2 - 9352 - - - - - - - - - ruby_do_def - 1675 - - - id - 1675 - - - - - - ruby_element_reference_child - 82748 - - - ruby_element_reference - 82601 - - - index - 4 - - - child - 82748 - - - - - ruby_element_reference - index - - - 12 - - - 1 - 2 - 82455 - - - 2 - 3 - 146 - - - - - - - ruby_element_reference - child - - - 12 - - - 1 - 2 - 82455 - - - 2 - 3 - 146 - - - - - - - index - ruby_element_reference - - - 12 - - - 62 - 63 - 2 - - - 34958 - 34959 - 2 - - - - - - - index - child - - - 12 - - - 62 - 63 - 2 - - - 34958 - 34959 - 2 - - - - - - - child - ruby_element_reference - - - 12 - - - 1 - 2 - 82748 - - - - - - - child - index - - - 12 - - - 1 - 2 - 82748 - - - - - - - - - ruby_element_reference_def - 82606 - - - id - 82606 - - - object - 82606 - - - - - id - object - - - 12 - - - 1 - 2 - 82606 - - - - - - - object - id - - - 12 - - - 1 - 2 - 82606 - - - - - - - - - ruby_else_child - 9730 - - - ruby_else - 7669 - - - index - 32 - - - child - 9730 - - - - - ruby_else - index - - - 12 - - - 1 - 2 - 6454 - - - 2 - 3 - 758 - - - 3 - 12 - 455 - - - - - - - ruby_else - child - - - 12 - - - 1 - 2 - 6454 - - - 2 - 3 - 758 - - - 3 - 12 - 455 - - - - - - - index - ruby_else - - - 12 - - - 1 - 2 - 2 - - - 4 - 5 - 2 - - - 5 - 6 - 2 - - - 6 - 7 - 2 - - - 9 - 10 - 2 - - - 15 - 16 - 2 - - - 26 - 27 - 2 - - - 64 - 65 - 2 - - - 152 - 153 - 2 - - - 405 - 406 - 2 - - - 2557 - 2558 - 2 - - - - - - - index - child - - - 12 - - - 1 - 2 - 2 - - - 4 - 5 - 2 - - - 5 - 6 - 2 - - - 6 - 7 - 2 - - - 9 - 10 - 2 - - - 15 - 16 - 2 - - - 26 - 27 - 2 - - - 64 - 65 - 2 - - - 152 - 153 - 2 - - - 405 - 406 - 2 - - - 2557 - 2558 - 2 - - - - - - - child - ruby_else - - - 12 - - - 1 - 2 - 9730 - - - - - - - child - index - - - 12 - - - 1 - 2 - 9730 - - - - - - - - - ruby_else_def - 7681 - - - id - 7681 - - - - - - ruby_elsif_alternative - 1058 - - - ruby_elsif - 1058 - - - alternative - 1058 - - - - - ruby_elsif - alternative - - - 12 - - - 1 - 2 - 1058 - - - - - - - alternative - ruby_elsif - - - 12 - - - 1 - 2 - 1058 - - - - - - - - - ruby_elsif_consequence - 1571 - - - ruby_elsif - 1571 - - - consequence - 1571 - - - - - ruby_elsif - consequence - - - 12 - - - 1 - 2 - 1571 - - - - - - - consequence - ruby_elsif - - - 12 - - - 1 - 2 - 1571 - - - - - - - - - ruby_elsif_def - 1583 - - - id - 1583 - - - condition - 1583 - - - - - id - condition - - - 12 - - - 1 - 2 - 1583 - - - - - - - condition - id - - - 12 - - - 1 - 2 - 1583 - - - - - - - - - ruby_end_block_child - 27 - - - ruby_end_block - 13 - - - index - 10 - - - child - 27 - - - - - ruby_end_block - index - - - 12 - - - 1 - 2 - 8 - - - 2 - 3 - 3 - - - 3 - 4 - 1 - - - 10 - 11 - 1 - - - - - - - ruby_end_block - child - - - 12 - - - 1 - 2 - 8 - - - 2 - 3 - 3 - - - 3 - 4 - 1 - - - 10 - 11 - 1 - - - - - - - index - ruby_end_block - - - 12 - - - 1 - 2 - 7 - - - 2 - 3 - 1 - - - 5 - 6 - 1 - - - 13 - 14 - 1 - - - - - - - index - child - - - 12 - - - 1 - 2 - 7 - - - 2 - 3 - 1 - - - 5 - 6 - 1 - - - 13 - 14 - 1 - - - - - - - child - ruby_end_block - - - 12 - - - 1 - 2 - 27 - - - - - - - child - index - - - 12 - - - 1 - 2 - 27 - - - - - - - - - ruby_end_block_def - 13 - - - id - 13 - - - - - - ruby_ensure_child - 5236 - - - ruby_ensure - 4106 - - - index - 47 - - - child - 5236 - - - - - ruby_ensure - index - - - 12 - - - 1 - 2 - 3323 - - - 2 - 3 - 554 - - - 3 - 17 - 227 - - - - - - - ruby_ensure - child - - - 12 - - - 1 - 2 - 3323 - - - 2 - 3 - 554 - - - 3 - 17 - 227 - - - - - - - index - ruby_ensure - - - 12 - - - 1 - 2 - 23 - - - 3 - 4 - 5 - - - 4 - 5 - 2 - - - 5 - 6 - 2 - - - 17 - 18 - 2 - - - 76 - 77 - 2 - - - 261 - 262 - 2 - - - 1369 - 1370 - 2 - - - - - - - index - child - - - 12 - - - 1 - 2 - 23 - - - 3 - 4 - 5 - - - 4 - 5 - 2 - - - 5 - 6 - 2 - - - 17 - 18 - 2 - - - 76 - 77 - 2 - - - 261 - 262 - 2 - - - 1369 - 1370 - 2 - - - - - - - child - ruby_ensure - - - 12 - - - 1 - 2 - 5236 - - - - - - - child - index - - - 12 - - - 1 - 2 - 5236 - - - - - - - - - ruby_ensure_def - 4106 - - - id - 4106 - - - - - - ruby_exception_variable_def - 935 - - - id - 935 - - - child - 935 - - - - - id - child - - - 12 - - - 1 - 2 - 935 - - - - - - - child - id - - - 12 - - - 1 - 2 - 935 - - - - - - - - - ruby_exceptions_child - 2128 - - - ruby_exceptions - 1904 - - - index - 11 - - - child - 2128 - - - - - ruby_exceptions - index - - - 12 - - - 1 - 2 - 1748 - - - 2 - 5 - 153 - - - 5 - 6 - 2 - - - - - - - ruby_exceptions - child - - - 12 - - - 1 - 2 - 1748 - - - 2 - 5 - 153 - - - 5 - 6 - 2 - - - - - - - index - ruby_exceptions - - - 12 - - - 1 - 2 - 2 - - - 6 - 7 - 2 - - - 22 - 23 - 2 - - - 66 - 67 - 2 - - - 806 - 807 - 2 - - - - - - - index - child - - - 12 - - - 1 - 2 - 2 - - - 6 - 7 - 2 - - - 22 - 23 - 2 - - - 66 - 67 - 2 - - - 806 - 807 - 2 - - - - - - - child - ruby_exceptions - - - 12 - - - 1 - 2 - 2128 - - - - - - - child - index - - - 12 - - - 1 - 2 - 2128 - - - - - - - - - ruby_exceptions_def - 1904 - - - id - 1904 - - - - - - ruby_expression_reference_pattern_def - 3 - - - id - 3 - - - value - 3 - - - - - id - value - - - 12 - - - 1 - 2 - 3 - - - - - - - value - id - - - 12 - - - 1 - 2 - 3 - - - - - - - - - ruby_find_pattern_child - 56 - - - ruby_find_pattern - 18 - - - index - 4 - - - child - 56 - - - - - ruby_find_pattern - index - - - 12 - - - 3 - 4 - 16 - - - 4 - 5 - 2 - - - - - - - ruby_find_pattern - child - - - 12 - - - 3 - 4 - 16 - - - 4 - 5 - 2 - - - - - - - index - ruby_find_pattern - - - 12 - - - 2 - 3 - 1 - - - 18 - 19 - 3 - - - - - - - index - child - - - 12 - - - 2 - 3 - 1 - - - 18 - 19 - 3 - - - - - - - child - ruby_find_pattern - - - 12 - - - 1 - 2 - 56 - - - - - - - child - index - - - 12 - - - 1 - 2 - 56 - - - - - - - - - ruby_find_pattern_class - 5 - - - ruby_find_pattern - 5 - - - class - 5 - - - - - ruby_find_pattern - class - - - 12 - - - 1 - 2 - 5 - - - - - - - class - ruby_find_pattern - - - 12 - - - 1 - 2 - 5 - - - - - - - - - ruby_find_pattern_def - 18 - - - id - 18 - - - - - - ruby_for_def - 136 - - - id - 136 - - - body - 136 - - - pattern - 136 - - - value - 136 - - - - - id - body - - - 12 - - - 1 - 2 - 136 - - - - - - - id - pattern - - - 12 - - - 1 - 2 - 136 - - - - - - - id - value - - - 12 - - - 1 - 2 - 136 - - - - - - - body - id - - - 12 - - - 1 - 2 - 136 - - - - - - - body - pattern - - - 12 - - - 1 - 2 - 136 - - - - - - - body - value - - - 12 - - - 1 - 2 - 136 - - - - - - - pattern - id - - - 12 - - - 1 - 2 - 136 - - - - - - - pattern - body - - - 12 - - - 1 - 2 - 136 - - - - - - - pattern - value - - - 12 - - - 1 - 2 - 136 - - - - - - - value - id - - - 12 - - - 1 - 2 - 136 - - - - - - - value - body - - - 12 - - - 1 - 2 - 136 - - - - - - - value - pattern - - - 12 - - - 1 - 2 - 136 - - - - - - - - - ruby_hash_child - 96207 - - - ruby_hash - 37893 - - - index - 1439 - - - child - 96207 - - - - - ruby_hash - index - - - 12 - - - 1 - 2 - 15577 - - - 2 - 3 - 10573 - - - 3 - 4 - 4318 - - - 4 - 5 - 4385 - - - 5 - 20 - 2878 - - - 20 - 108 - 161 - - - - - - - ruby_hash - child - - - 12 - - - 1 - 2 - 15577 - - - 2 - 3 - 10573 - - - 3 - 4 - 4318 - - - 4 - 5 - 4385 - - - 5 - 20 - 2878 - - - 20 - 108 - 161 - - - - - - - index - ruby_hash - - - 12 - - - 1 - 2 - 363 - - - 2 - 3 - 255 - - - 3 - 4 - 336 - - - 5 - 6 - 107 - - - 7 - 13 - 121 - - - 16 - 55 - 121 - - - 59 - 1660 - 121 - - - 2817 - 2818 - 13 - - - - - - - index - child - - - 12 - - - 1 - 2 - 363 - - - 2 - 3 - 255 - - - 3 - 4 - 336 - - - 5 - 6 - 107 - - - 7 - 13 - 121 - - - 16 - 55 - 121 - - - 59 - 1660 - 121 - - - 2817 - 2818 - 13 - - - - - - - child - ruby_hash - - - 12 - - - 1 - 2 - 96207 - - - - - - - child - index - - - 12 - - - 1 - 2 - 96207 - - - - - - - - - ruby_hash_def - 41915 - - - id - 41915 - - - - - - ruby_hash_pattern_child - 94 - - - ruby_hash_pattern - 68 - - - index - 4 - - - child - 94 - - - - - ruby_hash_pattern - index - - - 12 - - - 1 - 2 - 50 - - - 2 - 3 - 12 - - - 3 - 5 - 6 - - - - - - - ruby_hash_pattern - child - - - 12 - - - 1 - 2 - 50 - - - 2 - 3 - 12 - - - 3 - 5 - 6 - - - - - - - index - ruby_hash_pattern - - - 12 - - - 2 - 3 - 1 - - - 6 - 7 - 1 - - - 18 - 19 - 1 - - - 68 - 69 - 1 - - - - - - - index - child - - - 12 - - - 2 - 3 - 1 - - - 6 - 7 - 1 - - - 18 - 19 - 1 - - - 68 - 69 - 1 - - - - - - - child - ruby_hash_pattern - - - 12 - - - 1 - 2 - 94 - - - - - - - child - index - - - 12 - - - 1 - 2 - 94 - - - - - - - - - ruby_hash_pattern_class - 32 - - - ruby_hash_pattern - 32 - - - class - 32 - - - - - ruby_hash_pattern - class - - - 12 - - - 1 - 2 - 32 - - - - - - - class - ruby_hash_pattern - - - 12 - - - 1 - 2 - 32 - - - - - - - - - ruby_hash_pattern_def - 73 - - - id - 73 - - - - - - ruby_hash_splat_argument_child - 1988 - - - ruby_hash_splat_argument - 1988 - - - child - 1988 - - - - - ruby_hash_splat_argument - child - - - 12 - - - 1 - 2 - 1988 - - - - - - - child - ruby_hash_splat_argument - - - 12 - - - 1 - 2 - 1988 - - - - - - - - - ruby_hash_splat_argument_def - 1989 - - - id - 1989 - - - - - - ruby_hash_splat_parameter_def - 1574 - - - id - 1574 - - - - - - ruby_hash_splat_parameter_name - 1352 - - - ruby_hash_splat_parameter - 1352 - - - name - 1352 - - - - - ruby_hash_splat_parameter - name - - - 12 - - - 1 - 2 - 1352 - - - - - - - name - ruby_hash_splat_parameter - - - 12 - - - 1 - 2 - 1352 - - - - - - - - - ruby_heredoc_body_child - 26244 - - - ruby_heredoc_body - 5817 - - - index - 512 - - - child - 26244 - - - - - ruby_heredoc_body - index - - - 12 - - - 2 - 3 - 3504 - - - 4 - 5 - 701 - - - 5 - 6 - 2 - - - 6 - 7 - 675 - - - 7 - 9 - 328 - - - 10 - 17 - 467 - - - 17 - 218 - 137 - - - - - - - ruby_heredoc_body - child - - - 12 - - - 2 - 3 - 3504 - - - 4 - 5 - 701 - - - 5 - 6 - 2 - - - 6 - 7 - 675 - - - 7 - 9 - 328 - - - 10 - 17 - 467 - - - 17 - 218 - 137 - - - - - - - index - ruby_heredoc_body - - - 12 - - - 1 - 2 - 302 - - - 2 - 3 - 40 - - - 3 - 5 - 47 - - - 5 - 13 - 40 - - - 13 - 43 - 40 - - - 56 - 2463 - 42 - - - - - - - index - child - - - 12 - - - 1 - 2 - 302 - - - 2 - 3 - 40 - - - 3 - 5 - 47 - - - 5 - 13 - 40 - - - 13 - 43 - 40 - - - 56 - 2463 - 42 - - - - - - - child - ruby_heredoc_body - - - 12 - - - 1 - 2 - 26244 - - - - - - - child - index - - - 12 - - - 1 - 2 - 26244 - - - - - - - - - ruby_heredoc_body_def - 6934 - - - id - 6934 - - - - - - ruby_if_alternative - 7192 - - - ruby_if - 7192 - - - alternative - 7192 - - - - - ruby_if - alternative - - - 12 - - - 1 - 2 - 7192 - - - - - - - alternative - ruby_if - - - 12 - - - 1 - 2 - 7192 - - - - - - - - - ruby_if_consequence - 16117 - - - ruby_if - 16117 - - - consequence - 16117 - - - - - ruby_if - consequence - - - 12 - - - 1 - 2 - 16117 - - - - - - - consequence - ruby_if - - - 12 - - - 1 - 2 - 16117 - - - - - - - - - ruby_if_def - 16164 - - - id - 16164 - - - condition - 16164 - - - - - id - condition - - - 12 - - - 1 - 2 - 16164 - - - - - - - condition - id - - - 12 - - - 1 - 2 - 16164 - - - - - - - - - ruby_if_guard_def - 9 - - - id - 9 - - - condition - 9 - - - - - id - condition - - - 12 - - - 1 - 2 - 9 - - - - - - - condition - id - - - 12 - - - 1 - 2 - 9 - - - - - - - - - ruby_if_modifier_def - 14541 - - - id - 14541 - - - body - 14541 - - - condition - 14541 - - - - - id - body - - - 12 - - - 1 - 2 - 14541 - - - - - - - id - condition - - - 12 - - - 1 - 2 - 14541 - - - - - - - body - id - - - 12 - - - 1 - 2 - 14541 - - - - - - - body - condition - - - 12 - - - 1 - 2 - 14541 - - - - - - - condition - id - - - 12 - - - 1 - 2 - 14541 - - - - - - - condition - body - - - 12 - - - 1 - 2 - 14541 - - - - - - - - - ruby_in_clause_body - 341 - - - ruby_in_clause - 341 - - - body - 341 - - - - - ruby_in_clause - body - - - 12 - - - 1 - 2 - 341 - - - - - - - body - ruby_in_clause - - - 12 - - - 1 - 2 - 341 - - - - - - - - - ruby_in_clause_def - 381 - - - id - 381 - - - pattern - 381 - - - - - id - pattern - - - 12 - - - 1 - 2 - 381 - - - - - - - pattern - id - - - 12 - - - 1 - 2 - 381 - - - - - - - - - ruby_in_clause_guard - 13 - - - ruby_in_clause - 13 - - - guard - 13 - - - - - ruby_in_clause - guard - - - 12 - - - 1 - 2 - 13 - - - - - - - guard - ruby_in_clause - - - 12 - - - 1 - 2 - 13 - - - - - - - - - ruby_in_def - 136 - - - id - 136 - - - child - 136 - - - - - id - child - - - 12 - - - 1 - 2 - 136 - - - - - - - child - id - - - 12 - - - 1 - 2 - 136 - - - - - - - - - ruby_interpolation_child - 38493 - - - ruby_interpolation - 38493 - - - index - 2 - - - child - 38493 - - - - - ruby_interpolation - index - - - 12 - - - 1 - 2 - 38493 - - - - - - - ruby_interpolation - child - - - 12 - - - 1 - 2 - 38493 - - - - - - - index - ruby_interpolation - - - 12 - - - 16291 - 16292 - 2 - - - - - - - index - child - - - 12 - - - 16291 - 16292 - 2 - - - - - - - child - ruby_interpolation - - - 12 - - - 1 - 2 - 38493 - - - - - - - child - index - - - 12 - - - 1 - 2 - 38493 - - - - - - - - - ruby_interpolation_def - 38493 - - - id - 38493 - - - - - - ruby_keyword_parameter_def - 4763 - - - id - 4763 - - - name - 4763 - - - - - id - name - - - 12 - - - 1 - 2 - 4763 - - - - - - - name - id - - - 12 - - - 1 - 2 - 4763 - - - - - - - - - ruby_keyword_parameter_value - 3293 - - - ruby_keyword_parameter - 3293 - - - value - 3293 - - - - - ruby_keyword_parameter - value - - - 12 - - - 1 - 2 - 3293 - - - - - - - value - ruby_keyword_parameter - - - 12 - - - 1 - 2 - 3293 - - - - - - - - - ruby_keyword_pattern_def - 77 - - - id - 77 - - - key__ - 77 - - - - - id - key__ - - - 12 - - - 1 - 2 - 77 - - - - - - - key__ - id - - - 12 - - - 1 - 2 - 77 - - - - - - - - - ruby_keyword_pattern_value - 56 - - - ruby_keyword_pattern - 56 - - - value - 56 - - - - - ruby_keyword_pattern - value - - - 12 - - - 1 - 2 - 56 - - - - - - - value - ruby_keyword_pattern - - - 12 - - - 1 - 2 - 56 - - - - - - - - - ruby_lambda_def - 8187 - - - id - 8187 - - - body - 8187 - - - - - id - body - - - 12 - - - 1 - 2 - 8187 - - - - - - - body - id - - - 12 - - - 1 - 2 - 8187 - - - - - - - - - ruby_lambda_parameters - 1811 - - - ruby_lambda - 1811 - - - parameters - 1811 - - - - - ruby_lambda - parameters - - - 12 - - - 1 - 2 - 1811 - - - - - - - parameters - ruby_lambda - - - 12 - - - 1 - 2 - 1811 - - - - - - - - - ruby_lambda_parameters_child - 2197 - - - ruby_lambda_parameters - 1801 - - - index - 8 - - - child - 2197 - - - - - ruby_lambda_parameters - index - - - 12 - - - 1 - 2 - 1545 - - - 2 - 3 - 164 - - - 3 - 9 - 92 - - - - - - - ruby_lambda_parameters - child - - - 12 - - - 1 - 2 - 1545 - - - 2 - 3 - 164 - - - 3 - 9 - 92 - - - - - - - index - ruby_lambda_parameters - - - 12 - - - 1 - 2 - 1 - - - 3 - 4 - 1 - - - 4 - 5 - 1 - - - 11 - 12 - 1 - - - 29 - 30 - 1 - - - 92 - 93 - 1 - - - 256 - 257 - 1 - - - 1801 - 1802 - 1 - - - - - - - index - child - - - 12 - - - 1 - 2 - 1 - - - 3 - 4 - 1 - - - 4 - 5 - 1 - - - 11 - 12 - 1 - - - 29 - 30 - 1 - - - 92 - 93 - 1 - - - 256 - 257 - 1 - - - 1801 - 1802 - 1 - - - - - - - child - ruby_lambda_parameters - - - 12 - - - 1 - 2 - 2197 - - - - - - - child - index - - - 12 - - - 1 - 2 - 2197 - - - - - - - - - ruby_lambda_parameters_def - 1811 - - - id - 1811 - - - - - - ruby_left_assignment_list_child - 6934 - - - ruby_left_assignment_list - 3100 - - - index - 15 - - - child - 6934 - - - - - ruby_left_assignment_list - index - - - 12 - - - 1 - 2 - 382 - - - 2 - 3 - 2002 - - - 3 - 4 - 531 - - - 4 - 16 - 185 - - - - - - - ruby_left_assignment_list - child - - - 12 - - - 1 - 2 - 382 - - - 2 - 3 - 2002 - - - 3 - 4 - 531 - - - 4 - 16 - 185 - - - - - - - index - ruby_left_assignment_list - - - 12 - - - 3 - 4 - 1 - - - 6 - 7 - 2 - - - 10 - 11 - 3 - - - 15 - 16 - 1 - - - 20 - 21 - 1 - - - 22 - 23 - 1 - - - 41 - 42 - 1 - - - 72 - 73 - 1 - - - 185 - 186 - 1 - - - 716 - 717 - 1 - - - 2718 - 2719 - 1 - - - 3100 - 3101 - 1 - - - - - - - index - child - - - 12 - - - 3 - 4 - 1 - - - 6 - 7 - 2 - - - 10 - 11 - 3 - - - 15 - 16 - 1 - - - 20 - 21 - 1 - - - 22 - 23 - 1 - - - 41 - 42 - 1 - - - 72 - 73 - 1 - - - 185 - 186 - 1 - - - 716 - 717 - 1 - - - 2718 - 2719 - 1 - - - 3100 - 3101 - 1 - - - - - - - child - ruby_left_assignment_list - - - 12 - - - 1 - 2 - 6934 - - - - - - - child - index - - - 12 - - - 1 - 2 - 6934 - - - - - - - - - ruby_left_assignment_list_def - 3100 - - - id - 3100 - - - - - - ruby_match_pattern_def - 31 - - - id - 31 - - - pattern - 31 - - - value - 31 - - - - - id - pattern - - - 12 - - - 1 - 2 - 31 - - - - - - - id - value - - - 12 - - - 1 - 2 - 31 - - - - - - - pattern - id - - - 12 - - - 1 - 2 - 31 - - - - - - - pattern - value - - - 12 - - - 1 - 2 - 31 - - - - - - - value - id - - - 12 - - - 1 - 2 - 31 - - - - - - - value - pattern - - - 12 - - - 1 - 2 - 31 - - - - - - - - - ruby_method_body - 102401 - - - ruby_method - 102401 - - - body - 102401 - - - - - ruby_method - body - - - 12 - - - 1 - 2 - 102401 - - - - - - - body - ruby_method - - - 12 - - - 1 - 2 - 102401 - - - - - - - - - ruby_method_def - 103532 - - - id - 103532 - - - name - 103532 - - - - - id - name - - - 12 - - - 1 - 2 - 103532 - - - - - - - name - id - - - 12 - - - 1 - 2 - 103532 - - - - - - - - - ruby_method_parameters - 29519 - - - ruby_method - 29519 - - - parameters - 29519 - - - - - ruby_method - parameters - - - 12 - - - 1 - 2 - 29519 - - - - - - - parameters - ruby_method - - - 12 - - - 1 - 2 - 29519 - - - - - - - - - ruby_method_parameters_child - 51112 - - - ruby_method_parameters - 31001 - - - index - 41 - - - child - 51112 - - - - - ruby_method_parameters - index - - - 12 - - - 1 - 2 - 18836 - - - 2 - 3 - 7543 - - - 3 - 4 - 2840 - - - 4 - 15 - 1781 - - - - - - - ruby_method_parameters - child - - - 12 - - - 1 - 2 - 18836 - - - 2 - 3 - 7543 - - - 3 - 4 - 2840 - - - 4 - 15 - 1781 - - - - - - - index - ruby_method_parameters - - - 12 - - - 1 - 2 - 8 - - - 4 - 5 - 2 - - - 7 - 8 - 2 - - - 13 - 14 - 2 - - - 37 - 38 - 2 - - - 59 - 60 - 2 - - - 129 - 130 - 2 - - - 262 - 263 - 2 - - - 594 - 595 - 2 - - - 1541 - 1542 - 2 - - - 4056 - 4057 - 2 - - - 10336 - 10337 - 2 - - - - - - - index - child - - - 12 - - - 1 - 2 - 8 - - - 4 - 5 - 2 - - - 7 - 8 - 2 - - - 13 - 14 - 2 - - - 37 - 38 - 2 - - - 59 - 60 - 2 - - - 129 - 130 - 2 - - - 262 - 263 - 2 - - - 594 - 595 - 2 - - - 1541 - 1542 - 2 - - - 4056 - 4057 - 2 - - - 10336 - 10337 - 2 - - - - - - - child - ruby_method_parameters - - - 12 - - - 1 - 2 - 51112 - - - - - - - child - index - - - 12 - - - 1 - 2 - 51112 - - - - - - - - - ruby_method_parameters_def - 31208 - - - id - 31208 - - - - - - ruby_module_body - 22881 - - - ruby_module - 22881 - - - body - 22881 - - - - - ruby_module - body - - - 12 - - - 1 - 2 - 22881 - - - - - - - body - ruby_module - - - 12 - - - 1 - 2 - 22881 - - - - - - - - - ruby_module_def - 22962 - - - id - 22962 - - - name - 22962 - - - - - id - name - - - 12 - - - 1 - 2 - 22962 - - - - - - - name - id - - - 12 - - - 1 - 2 - 22962 - - - - - - - - - ruby_next_child - 256 - - - ruby_next - 256 - - - child - 256 - - - - - ruby_next - child - - - 12 - - - 1 - 2 - 256 - - - - - - - child - ruby_next - - - 12 - - - 1 - 2 - 256 - - - - - - - - - ruby_next_def - 2020 - - - id - 2020 - - - - - - ruby_operator_assignment_def - 6160 - - - id - 6160 - - - left - 6160 - - - operator - 16 - - - right - 6160 - - - - - id - left - - - 12 - - - 1 - 2 - 6160 - - - - - - - id - operator - - - 12 - - - 1 - 2 - 6160 - - - - - - - id - right - - - 12 - - - 1 - 2 - 6160 - - - - - - - left - id - - - 12 - - - 1 - 2 - 6160 - - - - - - - left - operator - - - 12 - - - 1 - 2 - 6160 - - - - - - - left - right - - - 12 - - - 1 - 2 - 6160 - - - - - - - operator - id - - - 12 - - - 3 - 4 - 2 - - - 4 - 5 - 2 - - - 10 - 11 - 2 - - - 11 - 12 - 2 - - - 64 - 65 - 2 - - - 707 - 708 - 2 - - - 1808 - 1809 - 2 - - - - - - - operator - left - - - 12 - - - 3 - 4 - 2 - - - 4 - 5 - 2 - - - 10 - 11 - 2 - - - 11 - 12 - 2 - - - 64 - 65 - 2 - - - 707 - 708 - 2 - - - 1808 - 1809 - 2 - - - - - - - operator - right - - - 12 - - - 3 - 4 - 2 - - - 4 - 5 - 2 - - - 10 - 11 - 2 - - - 11 - 12 - 2 - - - 64 - 65 - 2 - - - 707 - 708 - 2 - - - 1808 - 1809 - 2 - - - - - - - right - id - - - 12 - - - 1 - 2 - 6160 - - - - - - - right - left - - - 12 - - - 1 - 2 - 6160 - - - - - - - right - operator - - - 12 - - - 1 - 2 - 6160 - - - - - - - - - ruby_optional_parameter_def - 6556 - - - id - 6556 - - - name - 6556 - - - value - 6556 - - - - - id - name - - - 12 - - - 1 - 2 - 6556 - - - - - - - id - value - - - 12 - - - 1 - 2 - 6556 - - - - - - - name - id - - - 12 - - - 1 - 2 - 6556 - - - - - - - name - value - - - 12 - - - 1 - 2 - 6556 - - - - - - - value - id - - - 12 - - - 1 - 2 - 6556 - - - - - - - value - name - - - 12 - - - 1 - 2 - 6556 - - - - - - - - - ruby_pair_def - 254198 - - - id - 254198 - - - key__ - 254198 - - - - - id - key__ - - - 12 - - - 1 - 2 - 254198 - - - - - - - key__ - id - - - 12 - - - 1 - 2 - 254198 - - - - - - - - - ruby_pair_value - 254198 - - - ruby_pair - 254198 - - - value - 254198 - - - - - ruby_pair - value - - - 12 - - - 1 - 2 - 254198 - - - - - - - value - ruby_pair - - - 12 - - - 1 - 2 - 254198 - - - - - - - - - ruby_parenthesized_pattern_def - 8 - - - id - 8 - - - child - 8 - - - - - id - child - - - 12 - - - 1 - 2 - 8 - - - - - - - child - id - - - 12 - - - 1 - 2 - 8 - - - - - - - - - ruby_parenthesized_statements_child - 11347 - - - ruby_parenthesized_statements - 11258 - - - index - 4 - - - child - 11347 - - - - - ruby_parenthesized_statements - index - - - 12 - - - 1 - 2 - 11179 - - - 2 - 5 - 79 - - - - - - - ruby_parenthesized_statements - child - - - 12 - - - 1 - 2 - 11179 - - - 2 - 5 - 79 - - - - - - - index - ruby_parenthesized_statements - - - 12 - - - 1 - 2 - 1 - - - 9 - 10 - 1 - - - 79 - 80 - 1 - - - 11258 - 11259 - 1 - - - - - - - index - child - - - 12 - - - 1 - 2 - 1 - - - 9 - 10 - 1 - - - 79 - 80 - 1 - - - 11258 - 11259 - 1 - - - - - - - child - ruby_parenthesized_statements - - - 12 - - - 1 - 2 - 11347 - - - - - - - child - index - - - 12 - - - 1 - 2 - 11347 - - - - - - - - - ruby_parenthesized_statements_def - 11296 - - - id - 11296 - - - - - - ruby_pattern_def - 4745 - - - id - 4745 - - - child - 4745 - - - - - id - child - - - 12 - - - 1 - 2 - 4745 - - - - - - - child - id - - - 12 - - - 1 - 2 - 4745 - - - - - - - - - ruby_program_child - 33893 - - - ruby_program - 10674 - - - index - 239 - - - child - 33893 - - - - - ruby_program - index - - - 12 - - - 1 - 2 - 3956 - - - 2 - 3 - 2531 - - - 3 - 4 - 1772 - - - 4 - 5 - 794 - - - 5 - 8 - 902 - - - 8 - 81 - 716 - - - - - - - ruby_program - child - - - 12 - - - 1 - 2 - 3956 - - - 2 - 3 - 2531 - - - 3 - 4 - 1772 - - - 4 - 5 - 794 - - - 5 - 8 - 902 - - - 8 - 81 - 716 - - - - - - - index - ruby_program - - - 12 - - - 1 - 2 - 50 - - - 2 - 3 - 29 - - - 3 - 7 - 17 - - - 8 - 11 - 17 - - - 11 - 15 - 17 - - - 16 - 23 - 17 - - - 26 - 36 - 17 - - - 38 - 60 - 17 - - - 67 - 129 - 17 - - - 145 - 397 - 17 - - - 540 - 3560 - 14 - - - - - - - index - child - - - 12 - - - 1 - 2 - 50 - - - 2 - 3 - 29 - - - 3 - 7 - 17 - - - 8 - 11 - 17 - - - 11 - 15 - 17 - - - 16 - 23 - 17 - - - 26 - 36 - 17 - - - 38 - 60 - 17 - - - 67 - 129 - 17 - - - 145 - 397 - 17 - - - 540 - 3560 - 14 - - - - - - - child - ruby_program - - - 12 - - - 1 - 2 - 33893 - - - - - - - child - index - - - 12 - - - 1 - 2 - 33893 - - - - - - - - - ruby_program_def - 18697 - - - id - 18697 - - - - - - ruby_range_begin - 4748 - - - ruby_range - 4748 - - - begin - 4748 - - - - - ruby_range - begin - - - 12 - - - 1 - 2 - 4748 - - - - - - - begin - ruby_range - - - 12 - - - 1 - 2 - 4748 - - - - - - - - - ruby_range_def - 5066 - - - id - 5066 - - - operator - 2 - - - - - id - operator - - - 12 - - - 1 - 2 - 5066 - - - - - - - operator - id - - - 12 - - - 1376 - 1377 - 1 - - - 3690 - 3691 - 1 - - - - - - - - - ruby_range_end - 4818 - - - ruby_range - 4818 - - - end - 4818 - - - - - ruby_range - end - - - 12 - - - 1 - 2 - 4818 - - - - - - - end - ruby_range - - - 12 - - - 1 - 2 - 4818 - - - - - - - - - ruby_rational_def - 166 - - - id - 166 - - - child - 166 - - - - - id - child - - - 12 - - - 1 - 2 - 166 - - - - - - - child - id - - - 12 - - - 1 - 2 - 166 - - - - - - - - - ruby_redo_child - 0 - - - ruby_redo - 0 - - - child - 0 - - - - - ruby_redo - child - - - 12 - - - 1 - 2 - 2 - - - - - - - child - ruby_redo - - - 12 - - - 1 - 2 - 2 - - - - - - - - - ruby_redo_def - 34 - - - id - 34 - - - - - - ruby_regex_child - 45368 - - - ruby_regex - 13665 - - - index - 146 - - - child - 45368 - - - - - ruby_regex - index - - - 12 - - - 1 - 2 - 7006 - - - 2 - 3 - 800 - - - 3 - 4 - 1868 - - - 4 - 5 - 500 - - - 5 - 6 - 1124 - - - 6 - 8 - 1031 - - - 8 - 16 - 1094 - - - 16 - 50 - 236 - - - - - - - ruby_regex - child - - - 12 - - - 1 - 2 - 7006 - - - 2 - 3 - 800 - - - 3 - 4 - 1868 - - - 4 - 5 - 500 - - - 5 - 6 - 1124 - - - 6 - 8 - 1031 - - - 8 - 16 - 1094 - - - 16 - 50 - 236 - - - - - - - index - ruby_regex - - - 12 - - - 1 - 2 - 17 - - - 4 - 5 - 11 - - - 6 - 7 - 2 - - - 7 - 8 - 11 - - - 8 - 15 - 11 - - - 15 - 18 - 8 - - - 18 - 21 - 11 - - - 21 - 31 - 11 - - - 32 - 80 - 11 - - - 103 - 184 - 11 - - - 249 - 445 - 11 - - - 696 - 1331 - 11 - - - 1953 - 4557 - 8 - - - - - - - index - child - - - 12 - - - 1 - 2 - 17 - - - 4 - 5 - 11 - - - 6 - 7 - 2 - - - 7 - 8 - 11 - - - 8 - 15 - 11 - - - 15 - 18 - 8 - - - 18 - 21 - 11 - - - 21 - 31 - 11 - - - 32 - 80 - 11 - - - 103 - 184 - 11 - - - 249 - 445 - 11 - - - 696 - 1331 - 11 - - - 1953 - 4557 - 8 - - - - - - - child - ruby_regex - - - 12 - - - 1 - 2 - 45368 - - - - - - - child - index - - - 12 - - - 1 - 2 - 45368 - - - - - - - - - ruby_regex_def - 13680 - - - id - 13680 - - - - - - ruby_rescue_body - 2050 - - - ruby_rescue - 2050 - - - body - 2050 - - - - - ruby_rescue - body - - - 12 - - - 1 - 2 - 2050 - - - - - - - body - ruby_rescue - - - 12 - - - 1 - 2 - 2050 - - - - - - - - - ruby_rescue_def - 2299 - - - id - 2299 - - - - - - ruby_rescue_exceptions - 1904 - - - ruby_rescue - 1904 - - - exceptions - 1904 - - - - - ruby_rescue - exceptions - - - 12 - - - 1 - 2 - 1904 - - - - - - - exceptions - ruby_rescue - - - 12 - - - 1 - 2 - 1904 - - - - - - - - - ruby_rescue_modifier_def - 458 - - - id - 458 - - - body - 458 - - - handler - 458 - - - - - id - body - - - 12 - - - 1 - 2 - 458 - - - - - - - id - handler - - - 12 - - - 1 - 2 - 458 - - - - - - - body - id - - - 12 - - - 1 - 2 - 458 - - - - - - - body - handler - - - 12 - - - 1 - 2 - 458 - - - - - - - handler - id - - - 12 - - - 1 - 2 - 458 - - - - - - - handler - body - - - 12 - - - 1 - 2 - 458 - - - - - - - - - ruby_rescue_variable - 935 - - - ruby_rescue - 935 - - - variable - 935 - - - - - ruby_rescue - variable - - - 12 - - - 1 - 2 - 935 - - - - - - - variable - ruby_rescue - - - 12 - - - 1 - 2 - 935 - - - - - - - - - ruby_rest_assignment_child - 392 - - - ruby_rest_assignment - 392 - - - child - 392 - - - - - ruby_rest_assignment - child - - - 12 - - - 1 - 2 - 392 - - - - - - - child - ruby_rest_assignment - - - 12 - - - 1 - 2 - 392 - - - - - - - - - ruby_rest_assignment_def - 414 - - - id - 414 - - - - - - ruby_retry_child - 0 - - - ruby_retry - 0 - - - child - 0 - - - - - ruby_retry - child - - - 12 - - - 1 - 2 - 2 - - - - - - - child - ruby_retry - - - 12 - - - 1 - 2 - 2 - - - - - - - - - ruby_retry_def - 58 - - - id - 58 - - - - - - ruby_return_child - 4938 - - - ruby_return - 4938 - - - child - 4938 - - - - - ruby_return - child - - - 12 - - - 1 - 2 - 4938 - - - - - - - child - ruby_return - - - 12 - - - 1 - 2 - 4938 - - - - - - - - - ruby_return_def - 7979 - - - id - 7979 - - - - - - ruby_right_assignment_list_child - 2741 - - - ruby_right_assignment_list - 1280 - - - index - 14 - - - child - 2741 - - - - - ruby_right_assignment_list - index - - - 12 - - - 2 - 3 - 1136 - - - 3 - 4 - 113 - - - 4 - 6 - 29 - - - - - - - ruby_right_assignment_list - child - - - 12 - - - 2 - 3 - 1136 - - - 3 - 4 - 113 - - - 4 - 6 - 29 - - - - - - - index - ruby_right_assignment_list - - - 12 - - - 2 - 3 - 2 - - - 10 - 11 - 2 - - - 48 - 49 - 2 - - - 427 - 428 - 5 - - - - - - - index - child - - - 12 - - - 2 - 3 - 2 - - - 10 - 11 - 2 - - - 48 - 49 - 2 - - - 427 - 428 - 5 - - - - - - - child - ruby_right_assignment_list - - - 12 - - - 1 - 2 - 2741 - - - - - - - child - index - - - 12 - - - 1 - 2 - 2741 - - - - - - - - - ruby_right_assignment_list_def - 1280 - - - id - 1280 - - - - - - ruby_scope_resolution_def - 87113 - - - id - 87113 - - - name - 87113 - - - - - id - name - - - 12 - - - 1 - 2 - 87113 - - - - - - - name - id - - - 12 - - - 1 - 2 - 87113 - - - - - - - - - ruby_scope_resolution_scope - 85203 - - - ruby_scope_resolution - 85203 - - - scope - 85203 - - - - - ruby_scope_resolution - scope - - - 12 - - - 1 - 2 - 85203 - - - - - - - scope - ruby_scope_resolution - - - 12 - - - 1 - 2 - 85203 - - - - - - - - - ruby_setter_def - 656 - - - id - 656 - - - name - 656 - - - - - id - name - - - 12 - - - 1 - 2 - 656 - - - - - - - name - id - - - 12 - - - 1 - 2 - 656 - - - - - - - - - ruby_singleton_class_body - 677 - - - ruby_singleton_class - 677 - - - body - 677 - - - - - ruby_singleton_class - body - - - 12 - - - 1 - 2 - 677 - - - - - - - body - ruby_singleton_class - - - 12 - - - 1 - 2 - 677 - - - - - - - - - ruby_singleton_class_def - 677 - - - id - 677 - - - value - 677 - - - - - id - value - - - 12 - - - 1 - 2 - 677 - - - - - - - value - id - - - 12 - - - 1 - 2 - 677 - - - - - - - - - ruby_singleton_method_body - 6313 - - - ruby_singleton_method - 6313 - - - body - 6313 - - - - - ruby_singleton_method - body - - - 12 - - - 1 - 2 - 6313 - - - - - - - body - ruby_singleton_method - - - 12 - - - 1 - 2 - 6313 - - - - - - - - - ruby_singleton_method_def - 6325 - - - id - 6325 - - - name - 6325 - - - object - 6325 - - - - - id - name - - - 12 - - - 1 - 2 - 6325 - - - - - - - id - object - - - 12 - - - 1 - 2 - 6325 - - - - - - - name - id - - - 12 - - - 1 - 2 - 6325 - - - - - - - name - object - - - 12 - - - 1 - 2 - 6325 - - - - - - - object - id - - - 12 - - - 1 - 2 - 6325 - - - - - - - object - name - - - 12 - - - 1 - 2 - 6325 - - - - - - - - - ruby_singleton_method_parameters - 3929 - - - ruby_singleton_method - 3929 - - - parameters - 3929 - - - - - ruby_singleton_method - parameters - - - 12 - - - 1 - 2 - 3929 - - - - - - - parameters - ruby_singleton_method - - - 12 - - - 1 - 2 - 3929 - - - - - - - - - ruby_splat_argument_child - 3605 - - - ruby_splat_argument - 3605 - - - child - 3605 - - - - - ruby_splat_argument - child - - - 12 - - - 1 - 2 - 3605 - - - - - - - child - ruby_splat_argument - - - 12 - - - 1 - 2 - 3605 - - - - - - - - - ruby_splat_argument_def - 3606 - - - id - 3606 - - - - - - ruby_splat_parameter_def - 3014 - - - id - 3014 - - - - - - ruby_splat_parameter_name - 2297 - - - ruby_splat_parameter - 2297 - - - name - 2297 - - - - - ruby_splat_parameter - name - - - 12 - - - 1 - 2 - 2297 - - - - - - - name - ruby_splat_parameter - - - 12 - - - 1 - 2 - 2297 - - - - - - - - - ruby_string_array_child - 13136 - - - ruby_string_array - 4120 - - - index - 606 - - - child - 13136 - - - - - ruby_string_array - index - - - 12 - - - 1 - 2 - 1350 - - - 2 - 3 - 1304 - - - 3 - 4 - 630 - - - 4 - 5 - 356 - - - 5 - 10 - 332 - - - 10 - 607 - 148 - - - - - - - ruby_string_array - child - - - 12 - - - 1 - 2 - 1350 - - - 2 - 3 - 1304 - - - 3 - 4 - 630 - - - 4 - 5 - 356 - - - 5 - 10 - 332 - - - 10 - 607 - 148 - - - - - - - index - ruby_string_array - - - 12 - - - 1 - 2 - 506 - - - 2 - 10 - 48 - - - 11 - 266 - 46 - - - 344 - 4121 - 6 - - - - - - - index - child - - - 12 - - - 1 - 2 - 506 - - - 2 - 10 - 48 - - - 11 - 266 - 46 - - - 344 - 4121 - 6 - - - - - - - child - ruby_string_array - - - 12 - - - 1 - 2 - 13136 - - - - - - - child - index - - - 12 - - - 1 - 2 - 13136 - - - - - - - - - ruby_string_array_def - 4287 - - - id - 4287 - - - - - - ruby_string_child - 559228 - - - ruby_string__ - 483542 - - - index - 281 - - - child - 559228 - - - - - ruby_string__ - index - - - 12 - - - 1 - 2 - 454555 - - - 2 - 282 - 28987 - - - - - - - ruby_string__ - child - - - 12 - - - 1 - 2 - 454555 - - - 2 - 282 - 28987 - - - - - - - index - ruby_string__ - - - 12 - - - 1 - 2 - 95 - - - 2 - 3 - 34 - - - 5 - 6 - 64 - - - 6 - 9 - 22 - - - 9 - 37 - 22 - - - 37 - 108 - 22 - - - 129 - 483543 - 22 - - - - - - - index - child - - - 12 - - - 1 - 2 - 95 - - - 2 - 3 - 34 - - - 5 - 6 - 64 - - - 6 - 9 - 22 - - - 9 - 37 - 22 - - - 37 - 108 - 22 - - - 129 - 483543 - 22 - - - - - - - child - ruby_string__ - - - 12 - - - 1 - 2 - 559228 - - - - - - - child - index - - - 12 - - - 1 - 2 - 559228 - - - - - - - - - ruby_string_def - 490602 - - - id - 490602 - - - - - - ruby_subshell_child - 551 - - - ruby_subshell - 359 - - - index - 32 - - - child - 551 - - - - - ruby_subshell - index - - - 12 - - - 1 - 2 - 263 - - - 2 - 3 - 53 - - - 3 - 5 - 32 - - - 5 - 12 - 8 - - - - - - - ruby_subshell - child - - - 12 - - - 1 - 2 - 263 - - - 2 - 3 - 53 - - - 3 - 5 - 32 - - - 5 - 12 - 8 - - - - - - - index - ruby_subshell - - - 12 - - - 1 - 2 - 11 - - - 2 - 3 - 5 - - - 3 - 4 - 2 - - - 7 - 8 - 2 - - - 14 - 15 - 2 - - - 32 - 33 - 2 - - - 120 - 121 - 2 - - - - - - - index - child - - - 12 - - - 1 - 2 - 11 - - - 2 - 3 - 5 - - - 3 - 4 - 2 - - - 7 - 8 - 2 - - - 14 - 15 - 2 - - - 32 - 33 - 2 - - - 120 - 121 - 2 - - - - - - - child - ruby_subshell - - - 12 - - - 1 - 2 - 551 - - - - - - - child - index - - - 12 - - - 1 - 2 - 551 - - - - - - - - - ruby_subshell_def - 359 - - - id - 359 - - - - - - ruby_superclass_def - 13806 - - - id - 13806 - - - child - 13806 - - - - - id - child - - - 12 - - - 1 - 2 - 13806 - - - - - - - child - id - - - 12 - - - 1 - 2 - 13806 - - - - - - - - - ruby_symbol_array_child - 8435 - - - ruby_symbol_array - 2240 - - - index - 233 - - - child - 8435 - - - - - ruby_symbol_array - index - - - 12 - - - 1 - 2 - 219 - - - 2 - 3 - 1129 - - - 3 - 4 - 347 - - - 4 - 5 - 160 - - - 5 - 8 - 189 - - - 8 - 24 - 170 - - - 24 - 100 - 23 - - - - - - - ruby_symbol_array - child - - - 12 - - - 1 - 2 - 219 - - - 2 - 3 - 1129 - - - 3 - 4 - 347 - - - 4 - 5 - 160 - - - 5 - 8 - 189 - - - 8 - 24 - 170 - - - 24 - 100 - 23 - - - - - - - index - ruby_symbol_array - - - 12 - - - 1 - 2 - 9 - - - 2 - 3 - 139 - - - 4 - 8 - 18 - - - 8 - 17 - 18 - - - 19 - 41 - 18 - - - 44 - 163 - 18 - - - 230 - 949 - 9 - - - - - - - index - child - - - 12 - - - 1 - 2 - 9 - - - 2 - 3 - 139 - - - 4 - 8 - 18 - - - 8 - 17 - 18 - - - 19 - 41 - 18 - - - 44 - 163 - 18 - - - 230 - 949 - 9 - - - - - - - child - ruby_symbol_array - - - 12 - - - 1 - 2 - 8435 - - - - - - - child - index - - - 12 - - - 1 - 2 - 8435 - - - - - - - - - ruby_symbol_array_def - 2240 - - - id - 2240 - - - - - - ruby_test_pattern_def - 5 - - - id - 5 - - - pattern - 5 - - - value - 5 - - - - - id - pattern - - - 12 - - - 1 - 2 - 5 - - - - - - - id - value - - - 12 - - - 1 - 2 - 5 - - - - - - - pattern - id - - - 12 - - - 1 - 2 - 5 - - - - - - - pattern - value - - - 12 - - - 1 - 2 - 5 - - - - - - - value - id - - - 12 - - - 1 - 2 - 5 - - - - - - - value - pattern - - - 12 - - - 1 - 2 - 5 - - - - - - - - - ruby_then_child - 37016 - - - ruby_then - 22229 - - - index - 85 - - - child - 37016 - - - - - ruby_then - index - - - 12 - - - 1 - 2 - 13943 - - - 2 - 3 - 5070 - - - 3 - 4 - 1817 - - - 4 - 37 - 1398 - - - - - - - ruby_then - child - - - 12 - - - 1 - 2 - 13943 - - - 2 - 3 - 5070 - - - 3 - 4 - 1817 - - - 4 - 37 - 1398 - - - - - - - index - ruby_then - - - 12 - - - 1 - 2 - 30 - - - 2 - 4 - 4 - - - 4 - 5 - 9 - - - 6 - 8 - 4 - - - 8 - 9 - 4 - - - 10 - 19 - 7 - - - 30 - 61 - 7 - - - 98 - 310 - 7 - - - 592 - 3508 - 7 - - - 9408 - 9409 - 2 - - - - - - - index - child - - - 12 - - - 1 - 2 - 30 - - - 2 - 4 - 4 - - - 4 - 5 - 9 - - - 6 - 8 - 4 - - - 8 - 9 - 4 - - - 10 - 19 - 7 - - - 30 - 61 - 7 - - - 98 - 310 - 7 - - - 592 - 3508 - 7 - - - 9408 - 9409 - 2 - - - - - - - child - ruby_then - - - 12 - - - 1 - 2 - 37016 - - - - - - - child - index - - - 12 - - - 1 - 2 - 37016 - - - - - - - - - ruby_then_def - 22229 - - - id - 22229 - - - - - - ruby_tokeninfo - 6351611 - - - id - 6351611 - - - kind - 56 - - - value - 275925 - - - - - id - kind - - - 12 - - - 1 - 2 - 6351611 - - - - - - - id - value - - - 12 - - - 1 - 2 - 6351611 - - - - - - - kind - id - - - 12 - - - 1 - 2 - 4 - - - 49 - 160 - 4 - - - 291 - 443 - 4 - - - 2054 - 2055 - 2 - - - 2462 - 2463 - 4 - - - 5047 - 5260 - 4 - - - 5496 - 7346 - 4 - - - 10365 - 10609 - 4 - - - 15376 - 22709 - 4 - - - 31415 - 70704 - 4 - - - 77014 - 106932 - 4 - - - 129596 - 673263 - 4 - - - 1509036 - 1509037 - 2 - - - - - - - kind - value - - - 12 - - - 1 - 2 - 16 - - - 6 - 26 - 4 - - - 36 - 48 - 4 - - - 68 - 121 - 4 - - - 151 - 181 - 4 - - - 1509 - 2060 - 4 - - - 3983 - 4628 - 4 - - - 5781 - 9380 - 4 - - - 13063 - 24102 - 4 - - - 58689 - 58690 - 2 - - - - - - - value - id - - - 12 - - - 1 - 2 - 164156 - - - 2 - 3 - 41140 - - - 3 - 4 - 19333 - - - 4 - 7 - 22761 - - - 7 - 29 - 20750 - - - 29 - 243390 - 7783 - - - - - - - value - kind - - - 12 - - - 1 - 2 - 262839 - - - 2 - 5 - 13085 - - - - - - - - - ruby_unary_def - 14535 - - - id - 14535 - - - operand - 14535 - - - operator - 6 - - - - - id - operand - - - 12 - - - 1 - 2 - 14535 - - - - - - - id - operator - - - 12 - - - 1 - 2 - 14535 - - - - - - - operand - id - - - 12 - - - 1 - 2 - 14535 - - - - - - - operand - operator - - - 12 - - - 1 - 2 - 14535 - - - - - - - operator - id - - - 12 - - - 97 - 98 - 1 - - - 172 - 173 - 1 - - - 947 - 948 - 1 - - - 1369 - 1370 - 1 - - - 2120 - 2121 - 1 - - - 9830 - 9831 - 1 - - - - - - - operator - operand - - - 12 - - - 97 - 98 - 1 - - - 172 - 173 - 1 - - - 947 - 948 - 1 - - - 1369 - 1370 - 1 - - - 2120 - 2121 - 1 - - - 9830 - 9831 - 1 - - - - - - - - - ruby_undef_child - 183 - - - ruby_undef - 182 - - - index - 2 - - - child - 183 - - - - - ruby_undef - index - - - 12 - - - 1 - 2 - 181 - - - 2 - 3 - 1 - - - - - - - ruby_undef - child - - - 12 - - - 1 - 2 - 181 - - - 2 - 3 - 1 - - - - - - - index - ruby_undef - - - 12 - - - 1 - 2 - 1 - - - 182 - 183 - 1 - - - - - - - index - child - - - 12 - - - 1 - 2 - 1 - - - 182 - 183 - 1 - - - - - - - child - ruby_undef - - - 12 - - - 1 - 2 - 183 - - - - - - - child - index - - - 12 - - - 1 - 2 - 183 - - - - - - - - - ruby_undef_def - 182 - - - id - 182 - - - - - - ruby_unless_alternative - 43 - - - ruby_unless - 43 - - - alternative - 43 - - - - - ruby_unless - alternative - - - 12 - - - 1 - 2 - 43 - - - - - - - alternative - ruby_unless - - - 12 - - - 1 - 2 - 43 - - - - - - - - - ruby_unless_consequence - 2721 - - - ruby_unless - 2721 - - - consequence - 2721 - - - - - ruby_unless - consequence - - - 12 - - - 1 - 2 - 2721 - - - - - - - consequence - ruby_unless - - - 12 - - - 1 - 2 - 2721 - - - - - - - - - ruby_unless_def - 2723 - - - id - 2723 - - - condition - 2723 - - - - - id - condition - - - 12 - - - 1 - 2 - 2723 - - - - - - - condition - id - - - 12 - - - 1 - 2 - 2723 - - - - - - - - - ruby_unless_guard_def - 4 - - - id - 4 - - - condition - 4 - - - - - id - condition - - - 12 - - - 1 - 2 - 4 - - - - - - - condition - id - - - 12 - - - 1 - 2 - 4 - - - - - - - - - ruby_unless_modifier_def - 3416 - - - id - 3416 - - - body - 3416 - - - condition - 3416 - - - - - id - body - - - 12 - - - 1 - 2 - 3416 - - - - - - - id - condition - - - 12 - - - 1 - 2 - 3416 - - - - - - - body - id - - - 12 - - - 1 - 2 - 3416 - - - - - - - body - condition - - - 12 - - - 1 - 2 - 3416 - - - - - - - condition - id - - - 12 - - - 1 - 2 - 3416 - - - - - - - condition - body - - - 12 - - - 1 - 2 - 3416 - - - - - - - - - ruby_until_def - 126 - - - id - 126 - - - body - 126 - - - condition - 126 - - - - - id - body - - - 12 - - - 1 - 2 - 126 - - - - - - - id - condition - - - 12 - - - 1 - 2 - 126 - - - - - - - body - id - - - 12 - - - 1 - 2 - 126 - - - - - - - body - condition - - - 12 - - - 1 - 2 - 126 - - - - - - - condition - id - - - 12 - - - 1 - 2 - 126 - - - - - - - condition - body - - - 12 - - - 1 - 2 - 126 - - - - - - - - - ruby_until_modifier_def - 238 - - - id - 238 - - - body - 238 - - - condition - 238 - - - - - id - body - - - 12 - - - 1 - 2 - 238 - - - - - - - id - condition - - - 12 - - - 1 - 2 - 238 - - - - - - - body - id - - - 12 - - - 1 - 2 - 238 - - - - - - - body - condition - - - 12 - - - 1 - 2 - 238 - - - - - - - condition - id - - - 12 - - - 1 - 2 - 238 - - - - - - - condition - body - - - 12 - - - 1 - 2 - 238 - - - - - - - - - ruby_variable_reference_pattern_def - 5 - - - id - 5 - - - name - 5 - - - - - id - name - - - 12 - - - 1 - 2 - 5 - - - - - - - name - id - - - 12 - - - 1 - 2 - 5 - - - - - - - - - ruby_when_body - 3790 - - - ruby_when - 3790 - - - body - 3790 - - - - - ruby_when - body - - - 12 - - - 1 - 2 - 3790 - - - - - - - body - ruby_when - - - 12 - - - 1 - 2 - 3790 - - - - - - - - - ruby_when_def - 3882 - - - id - 3882 - - - - - - ruby_when_pattern - 4745 - - - ruby_when - 3882 - - - index - 15 - - - pattern - 4745 - - - - - ruby_when - index - - - 12 - - - 1 - 2 - 3393 - - - 2 - 3 - 330 - - - 3 - 16 - 159 - - - - - - - ruby_when - pattern - - - 12 - - - 1 - 2 - 3393 - - - 2 - 3 - 330 - - - 3 - 16 - 159 - - - - - - - index - ruby_when - - - 12 - - - 1 - 2 - 2 - - - 3 - 4 - 2 - - - 4 - 5 - 2 - - - 5 - 6 - 1 - - - 10 - 11 - 1 - - - 19 - 20 - 1 - - - 31 - 32 - 1 - - - 44 - 45 - 1 - - - 90 - 91 - 1 - - - 159 - 160 - 1 - - - 489 - 490 - 1 - - - 3882 - 3883 - 1 - - - - - - - index - pattern - - - 12 - - - 1 - 2 - 2 - - - 3 - 4 - 2 - - - 4 - 5 - 2 - - - 5 - 6 - 1 - - - 10 - 11 - 1 - - - 19 - 20 - 1 - - - 31 - 32 - 1 - - - 44 - 45 - 1 - - - 90 - 91 - 1 - - - 159 - 160 - 1 - - - 489 - 490 - 1 - - - 3882 - 3883 - 1 - - - - - - - pattern - ruby_when - - - 12 - - - 1 - 2 - 4745 - - - - - - - pattern - index - - - 12 - - - 1 - 2 - 4745 - - - - - - - - - ruby_while_def - 1413 - - - id - 1413 - - - body - 1413 - - - condition - 1413 - - - - - id - body - - - 12 - - - 1 - 2 - 1413 - - - - - - - id - condition - - - 12 - - - 1 - 2 - 1413 - - - - - - - body - id - - - 12 - - - 1 - 2 - 1413 - - - - - - - body - condition - - - 12 - - - 1 - 2 - 1413 - - - - - - - condition - id - - - 12 - - - 1 - 2 - 1413 - - - - - - - condition - body - - - 12 - - - 1 - 2 - 1413 - - - - - - - - - ruby_while_modifier_def - 198 - - - id - 198 - - - body - 198 - - - condition - 198 - - - - - id - body - - - 12 - - - 1 - 2 - 198 - - - - - - - id - condition - - - 12 - - - 1 - 2 - 198 - - - - - - - body - id - - - 12 - - - 1 - 2 - 198 - - - - - - - body - condition - - - 12 - - - 1 - 2 - 198 - - - - - - - condition - id - - - 12 - - - 1 - 2 - 198 - - - - - - - condition - body - - - 12 - - - 1 - 2 - 198 - - - - - - - - - ruby_yield_child - 1103 - - - ruby_yield - 1103 - - - child - 1103 - - - - - ruby_yield - child - - - 12 - - - 1 - 2 - 1103 - - - - - - - child - ruby_yield - - - 12 - - - 1 - 2 - 1103 - - - - - - - - - ruby_yield_def - 2450 - - - id - 2450 - - - - - - sourceLocationPrefix - 13 - - - prefix - 13 - - - - - - yaml - 0 - - - id - 0 - - - kind - 0 - - - parent - 0 - - - idx - 0 - - - tag - 0 - - - tostring - 0 - - - - - id - kind - - - 12 - - - 1 - 2 - 2 - - - - - - - id - parent - - - 12 - - - 1 - 2 - 2 - - - - - - - id - idx - - - 12 - - - 1 - 2 - 2 - - - - - - - id - tag - - - 12 - - - 1 - 2 - 2 - - - - - - - id - tostring - - - 12 - - - 1 - 2 - 2 - - - - - - - kind - id - - - 12 - - - - - - kind - parent - - - 12 - - - - - - kind - idx - - - 12 - - - - - - kind - tag - - - 12 - - - - - - kind - tostring - - - 12 - - - - - - parent - id - - - 12 - - - - - - parent - kind - - - 12 - - - - - - parent - idx - - - 12 - - - - - - parent - tag - - - 12 - - - - - - parent - tostring - - - 12 - - - - - - idx - id - - - 12 - - - - - - idx - kind - - - 12 - - - - - - idx - parent - - - 12 - - - - - - idx - tag - - - 12 - - - - - - idx - tostring - - - 12 - - - - - - tag - id - - - 12 - - - - - - tag - kind - - - 12 - - - - - - tag - parent - - - 12 - - - - - - tag - idx - - - 12 - - - - - - tag - tostring - - - 12 - - - - - - tostring - id - - - 12 - - - - - - tostring - kind - - - 12 - - - - - - tostring - parent - - - 12 - - - - - - tostring - idx - - - 12 - - - - - - tostring - tag - - - 12 - - - - - - - - databaseMetadata - 1 - - - metadataKey - 1 - - - value - 1 - - - - - metadataKey - value - - - 12 - - - - - - value - metadataKey - - - 12 - - - - - - - - overlayChangedFiles - 50 - - - path - 50 - - - - - - yaml_aliases - 0 - - - alias - 0 - - - target - 0 - - - - - alias - target - - - 12 - - - 1 - 2 - 2 - - - - - - - target - alias - - - 12 - - - - - - - - yaml_anchors - 0 - - - node - 0 - - - anchor - 0 - - - - - node - anchor - - - 12 - - - 1 - 2 - 2 - - - - - - - anchor - node - - - 12 - - - - - - - - yaml_errors - 0 - - - id - 0 - - - message - 0 - - - - - id - message - - - 12 - - - 1 - 2 - 2 - - - - - - - message - id - - - 12 - - - - - - - - yaml_locations - 0 - - - locatable - 0 - - - location - 0 - - - - - locatable - location - - - 12 - - - 1 - 2 - 2 - - - - - - - location - locatable - - - 12 - - - - - - - - yaml_scalars - 0 - - - scalar - 0 - - - style - 0 - - - value - 0 - - - - - scalar - style - - - 12 - - - 1 - 2 - 2 - - - - - - - scalar - value - - - 12 - - - 1 - 2 - 2 - - - - - - - style - scalar - - - 12 - - - - - - style - value - - - 12 - - - - - - value - scalar - - - 12 - - - - - - value - style - - - 12 - - - - - - - + + From 662b1e7df60d94d2dd05be548415f11cc67be0ba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Mar 2026 10:02:30 +0000 Subject: [PATCH 066/185] Bump rules_cc from 0.2.16 to 0.2.17 Bumps [rules_cc](https://github.com/bazelbuild/rules_cc) from 0.2.16 to 0.2.17. - [Release notes](https://github.com/bazelbuild/rules_cc/releases) - [Commits](https://github.com/bazelbuild/rules_cc/compare/0.2.16...0.2.17) --- updated-dependencies: - dependency-name: rules_cc dependency-version: 0.2.17 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- MODULE.bazel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MODULE.bazel b/MODULE.bazel index 29e0308462a..4e8281f89a0 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -15,7 +15,7 @@ local_path_override( # see https://registry.bazel.build/ for a list of available packages bazel_dep(name = "platforms", version = "1.0.0") -bazel_dep(name = "rules_cc", version = "0.2.16") +bazel_dep(name = "rules_cc", version = "0.2.17") bazel_dep(name = "rules_go", version = "0.59.0") bazel_dep(name = "rules_java", version = "9.0.3") bazel_dep(name = "rules_pkg", version = "1.0.1") From 7f17b7716dd40d8cf9086759d0d75173c605a87d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Mar 2026 10:43:19 +0000 Subject: [PATCH 067/185] Bump rules_go from 0.59.0 to 0.60.0 Bumps [rules_go](https://github.com/bazel-contrib/rules_go) from 0.59.0 to 0.60.0. - [Release notes](https://github.com/bazel-contrib/rules_go/releases) - [Commits](https://github.com/bazel-contrib/rules_go/compare/v0.59.0...v0.60.0) --- updated-dependencies: - dependency-name: rules_go dependency-version: 0.60.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- MODULE.bazel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MODULE.bazel b/MODULE.bazel index 4e8281f89a0..c9cfa2d040e 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -16,7 +16,7 @@ local_path_override( bazel_dep(name = "platforms", version = "1.0.0") bazel_dep(name = "rules_cc", version = "0.2.17") -bazel_dep(name = "rules_go", version = "0.59.0") +bazel_dep(name = "rules_go", version = "0.60.0") bazel_dep(name = "rules_java", version = "9.0.3") bazel_dep(name = "rules_pkg", version = "1.0.1") bazel_dep(name = "rules_nodejs", version = "6.7.3") From 10678d3a42c9223dd3fa051862446bdc0fed3406 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Mar 2026 11:31:03 +0000 Subject: [PATCH 068/185] Bump rules_pkg from 1.0.1 to 1.2.0 Bumps [rules_pkg](https://github.com/bazelbuild/rules_pkg) from 1.0.1 to 1.2.0. - [Release notes](https://github.com/bazelbuild/rules_pkg/releases) - [Changelog](https://github.com/bazelbuild/rules_pkg/blob/main/CHANGELOG.md) - [Commits](https://github.com/bazelbuild/rules_pkg/compare/1.0.1...1.2.0) --- updated-dependencies: - dependency-name: rules_pkg dependency-version: 1.2.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- MODULE.bazel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MODULE.bazel b/MODULE.bazel index c9cfa2d040e..358b46b88f7 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -18,7 +18,7 @@ bazel_dep(name = "platforms", version = "1.0.0") bazel_dep(name = "rules_cc", version = "0.2.17") bazel_dep(name = "rules_go", version = "0.60.0") bazel_dep(name = "rules_java", version = "9.0.3") -bazel_dep(name = "rules_pkg", version = "1.0.1") +bazel_dep(name = "rules_pkg", version = "1.2.0") bazel_dep(name = "rules_nodejs", version = "6.7.3") bazel_dep(name = "rules_python", version = "1.9.0") bazel_dep(name = "rules_shell", version = "0.6.1") From 7fc1d53edec3da5e57b2a33fa3706e6d65a3cbf4 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 17 Mar 2026 20:02:01 +0100 Subject: [PATCH 069/185] Rust: Disambiguate types inferred from trait bounds --- .../typeinference/FunctionOverloading.qll | 149 +++++++----- .../internal/typeinference/TypeInference.qll | 181 ++++++++++----- .../internal/typeinference/TypeMention.qll | 72 +++--- .../type-inference/overloading.rs | 6 +- .../type-inference/type-inference.expected | 9 - .../typeinference/internal/TypeInference.qll | 215 ++++++++++++++++-- shared/util/codeql/util/UnboundList.qll | 8 + 7 files changed, 469 insertions(+), 171 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionOverloading.qll b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionOverloading.qll index 6e4cc6e2c2e..d217fc3760a 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionOverloading.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionOverloading.qll @@ -13,68 +13,105 @@ private import TypeMention private import TypeInference private import FunctionType -pragma[nomagic] -private Type resolveNonTypeParameterTypeAt(TypeMention tm, TypePath path) { - result = tm.getTypeAt(path) and - not result instanceof TypeParameter -} - -bindingset[t1, t2] -private predicate typeMentionEqual(TypeMention t1, TypeMention t2) { - forex(TypePath path, Type type | resolveNonTypeParameterTypeAt(t1, path) = type | - resolveNonTypeParameterTypeAt(t2, path) = type - ) -} - -pragma[nomagic] -private predicate implSiblingCandidate( - Impl impl, TraitItemNode trait, Type rootType, TypeMention selfTy -) { - trait = impl.(ImplItemNode).resolveTraitTy() and - selfTy = impl.getSelfTy() and - rootType = selfTy.getType() -} - -pragma[nomagic] -private predicate blanketImplSiblingCandidate(ImplItemNode impl, Trait trait) { - impl.isBlanketImplementation() and - trait = impl.resolveTraitTy() -} +private signature Type resolveTypeMentionAtSig(AstNode tm, TypePath path); /** - * Holds if `impl1` and `impl2` are a sibling implementations of `trait`. We - * consider implementations to be siblings if they implement the same trait for - * the same type. In that case `Self` is the same type in both implementations, - * and method calls to the implementations cannot be resolved unambiguously - * based only on the receiver type. + * Provides logic for identifying sibling implementations, parameterized over + * how to resolve type mentions (`PreTypeMention` vs. `TypeMention`). */ -pragma[inline] -private predicate implSiblings(TraitItemNode trait, Impl impl1, Impl impl2) { - impl1 != impl2 and - ( - exists(Type rootType, TypeMention selfTy1, TypeMention selfTy2 | - implSiblingCandidate(impl1, trait, rootType, selfTy1) and - implSiblingCandidate(impl2, trait, rootType, selfTy2) and - // In principle the second conjunct below should be superflous, but we still - // have ill-formed type mentions for types that we don't understand. For - // those checking both directions restricts further. Note also that we check - // syntactic equality, whereas equality up to renaming would be more - // correct. - typeMentionEqual(selfTy1, selfTy2) and - typeMentionEqual(selfTy2, selfTy1) +private module MkSiblingImpls { + pragma[nomagic] + private Type resolveNonTypeParameterTypeAt(AstNode tm, TypePath path) { + result = resolveTypeMentionAt(tm, path) and + not result instanceof TypeParameter + } + + bindingset[t1, t2] + private predicate typeMentionEqual(AstNode t1, AstNode t2) { + forex(TypePath path, Type type | resolveNonTypeParameterTypeAt(t1, path) = type | + resolveNonTypeParameterTypeAt(t2, path) = type ) - or - blanketImplSiblingCandidate(impl1, trait) and - blanketImplSiblingCandidate(impl2, trait) - ) + } + + pragma[nomagic] + private predicate implSiblingCandidate( + Impl impl, TraitItemNode trait, Type rootType, AstNode selfTy + ) { + trait = impl.(ImplItemNode).resolveTraitTy() and + selfTy = impl.getSelfTy() and + rootType = resolveTypeMentionAt(selfTy, TypePath::nil()) + } + + pragma[nomagic] + private predicate blanketImplSiblingCandidate(ImplItemNode impl, Trait trait) { + impl.isBlanketImplementation() and + trait = impl.resolveTraitTy() + } + + /** + * Holds if `impl1` and `impl2` are sibling implementations of `trait`. We + * consider implementations to be siblings if they implement the same trait for + * the same type. In that case `Self` is the same type in both implementations, + * and method calls to the implementations cannot be resolved unambiguously + * based only on the receiver type. + */ + pragma[inline] + predicate implSiblings(TraitItemNode trait, Impl impl1, Impl impl2) { + impl1 != impl2 and + ( + exists(Type rootType, AstNode selfTy1, AstNode selfTy2 | + implSiblingCandidate(impl1, trait, rootType, selfTy1) and + implSiblingCandidate(impl2, trait, rootType, selfTy2) and + // In principle the second conjunct below should be superfluous, but we still + // have ill-formed type mentions for types that we don't understand. For + // those checking both directions restricts further. Note also that we check + // syntactic equality, whereas equality up to renaming would be more + // correct. + typeMentionEqual(selfTy1, selfTy2) and + typeMentionEqual(selfTy2, selfTy1) + ) + or + blanketImplSiblingCandidate(impl1, trait) and + blanketImplSiblingCandidate(impl2, trait) + ) + } + + /** + * Holds if `impl` is an implementation of `trait` and if another implementation + * exists for the same type. + */ + pragma[nomagic] + predicate implHasSibling(ImplItemNode impl, Trait trait) { implSiblings(trait, impl, _) } + + pragma[nomagic] + predicate implHasAmbiguousSiblingAt(ImplItemNode impl, Trait trait, TypePath path) { + exists(ImplItemNode impl2, Type t1, Type t2 | + implSiblings(trait, impl, impl2) and + t1 = resolveTypeMentionAt(impl.getTraitPath(), path) and + t2 = resolveTypeMentionAt(impl2.getTraitPath(), path) and + t1 != t2 + | + not t1 instanceof TypeParameter or + not t2 instanceof TypeParameter + ) + } } -/** - * Holds if `impl` is an implementation of `trait` and if another implementation - * exists for the same type. - */ -pragma[nomagic] -private predicate implHasSibling(ImplItemNode impl, Trait trait) { implSiblings(trait, impl, _) } +private Type resolvePreTypeMention(AstNode tm, TypePath path) { + result = tm.(PreTypeMention).getTypeAt(path) +} + +private module PreSiblingImpls = MkSiblingImpls; + +predicate preImplHasAmbiguousSiblingAt = PreSiblingImpls::implHasAmbiguousSiblingAt/3; + +private Type resolveTypeMention(AstNode tm, TypePath path) { + result = tm.(TypeMention).getTypeAt(path) +} + +private module SiblingImpls = MkSiblingImpls; + +import SiblingImpls /** * Holds if `f` is a function declared inside `trait`, and the type of `f` at diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll index 3229b3ee0bb..6d990040f52 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll @@ -30,7 +30,7 @@ private newtype TTypeArgumentPosition = } or TTypeParamTypeArgumentPosition(TypeParam tp) -private module Input implements InputSig1, InputSig2 { +private module Input1 implements InputSig1 { private import Type as T private import codeql.rust.elements.internal.generated.Raw private import codeql.rust.elements.internal.generated.Synth @@ -122,12 +122,28 @@ private module Input implements InputSig1, InputSig2 { tp0 order by kind, id1, id2 ) } +} - int getTypePathLimit() { result = 10 } +private import Input1 - PreTypeMention getABaseTypeMention(Type t) { none() } +private module M1 = Make1; - PreTypeMention getATypeParameterConstraint(TypeParameter tp) { +import M1 + +predicate getTypePathLimit = Input1::getTypePathLimit/0; + +predicate getTypeParameterId = Input1::getTypeParameterId/1; + +class TypePath = M1::TypePath; + +module TypePath = M1::TypePath; + +/** + * Provides shared logic for implementing `InputSig2` and + * `InputSig2`. + */ +private module Input2Common { + AstNode getATypeParameterConstraint(TypeParameter tp) { result = tp.(TypeParamTypeParameter).getTypeParam().getATypeBound().getTypeRepr() or result = tp.(SelfTypeParameter).getTrait() or result = @@ -146,7 +162,7 @@ private module Input implements InputSig1, InputSig2 { * inference module for more information. */ predicate conditionSatisfiesConstraint( - TypeAbstraction abs, PreTypeMention condition, PreTypeMention constraint, boolean transitive + TypeAbstraction abs, AstNode condition, AstNode constraint, boolean transitive ) { // `impl` blocks implementing traits transitive = false and @@ -194,23 +210,64 @@ private module Input implements InputSig1, InputSig2 { ) ) } + + predicate typeParameterIsFunctionallyDetermined(TypeParameter tp) { + tp instanceof AssociatedTypeTypeParameter + } } -private import Input +private module PreInput2 implements InputSig2 { + PreTypeMention getABaseTypeMention(Type t) { none() } -private module M1 = Make1; + PreTypeMention getATypeParameterConstraint(TypeParameter tp) { + result = Input2Common::getATypeParameterConstraint(tp) + } -import M1 + predicate conditionSatisfiesConstraint( + TypeAbstraction abs, PreTypeMention condition, PreTypeMention constraint, boolean transitive + ) { + Input2Common::conditionSatisfiesConstraint(abs, condition, constraint, transitive) + } -predicate getTypePathLimit = Input::getTypePathLimit/0; + predicate typeAbstractionHasAmbiguousConstraintAt( + TypeAbstraction abs, Type constraint, TypePath path + ) { + FunctionOverloading::preImplHasAmbiguousSiblingAt(abs, constraint.(TraitType).getTrait(), path) + } -predicate getTypeParameterId = Input::getTypeParameterId/1; + predicate typeParameterIsFunctionallyDetermined = + Input2Common::typeParameterIsFunctionallyDetermined/1; +} -class TypePath = M1::TypePath; +/** Provides an instantiation of the shared type inference library for `PreTypeMention`s. */ +module PreM2 = Make2; -module TypePath = M1::TypePath; +private module Input2 implements InputSig2 { + TypeMention getABaseTypeMention(Type t) { none() } -private module M2 = Make2; + TypeMention getATypeParameterConstraint(TypeParameter tp) { + result = Input2Common::getATypeParameterConstraint(tp) + } + + predicate conditionSatisfiesConstraint( + TypeAbstraction abs, TypeMention condition, TypeMention constraint, boolean transitive + ) { + Input2Common::conditionSatisfiesConstraint(abs, condition, constraint, transitive) + } + + predicate typeAbstractionHasAmbiguousConstraintAt( + TypeAbstraction abs, Type constraint, TypePath path + ) { + FunctionOverloading::implHasAmbiguousSiblingAt(abs, constraint.(TraitType).getTrait(), path) + } + + predicate typeParameterIsFunctionallyDetermined = + Input2Common::typeParameterIsFunctionallyDetermined/1; +} + +private import Input2 + +private module M2 = Make2; import M2 @@ -596,17 +653,18 @@ module CertainTypeInference { } /** - * Holds if `n` has complete and certain type information at _some_ type path. + * Holds if `n` has complete and certain type information at `path`. */ pragma[nomagic] - predicate hasInferredCertainType(AstNode n) { exists(inferCertainType(n, _)) } + predicate hasInferredCertainType(AstNode n, TypePath path) { exists(inferCertainType(n, path)) } /** - * Holds if `n` having type `t` at `path` conflicts with certain type information. + * Holds if `n` having type `t` at `path` conflicts with certain type information + * at `prefix`. */ - bindingset[n, path, t] + bindingset[n, prefix, path, t] pragma[inline_late] - predicate certainTypeConflict(AstNode n, TypePath path, Type t) { + predicate certainTypeConflict(AstNode n, TypePath prefix, TypePath path, Type t) { inferCertainType(n, path) != t or // If we infer that `n` has _some_ type at `T1.T2....Tn`, and we also @@ -615,7 +673,7 @@ module CertainTypeInference { // otherwise there is a conflict. // // Below, `prefix` is `T1.T2...Ti` and `tp` is `T(i+1)`. - exists(TypePath prefix, TypePath suffix, TypeParameter tp, Type certainType | + exists(TypePath suffix, TypeParameter tp, Type certainType | path = prefix.appendInverse(suffix) and tp = suffix.getHead() and inferCertainType(n, prefix) = certainType and @@ -1054,9 +1112,12 @@ private module ContextTyping { pragma[nomagic] private predicate hasUnknownType(AstNode n) { hasUnknownTypeAt(n, _) } - signature Type inferCallTypeSig( - AstNode n, FunctionPosition pos, boolean hasReceiver, TypePath path - ); + newtype FunctionPositionKind = + SelfKind() or + ReturnKind() or + PositionalKind() + + signature Type inferCallTypeSig(AstNode n, FunctionPositionKind kind, TypePath path); /** * Given a predicate `inferCallType` for inferring the type of a call at a given @@ -1064,35 +1125,28 @@ private module ContextTyping { * predicate and checks that types are only propagated into arguments when they * are context-typed. */ - module CheckContextTyping { + module CheckContextTyping { pragma[nomagic] private Type inferCallNonReturnType( - AstNode n, FunctionPosition pos, boolean hasReceiver, TypePath path + AstNode n, FunctionPositionKind kind, TypePath prefix, TypePath path ) { - result = inferCallType(n, pos, hasReceiver, path) and - not pos.isReturn() - } - - pragma[nomagic] - private Type inferCallNonReturnType( - AstNode n, FunctionPosition pos, boolean hasReceiver, TypePath prefix, TypePath path - ) { - result = inferCallNonReturnType(n, pos, hasReceiver, path) and + result = inferCallType(n, kind, path) and hasUnknownType(n) and + kind != ReturnKind() and prefix = path.getAPrefix() } pragma[nomagic] Type check(AstNode n, TypePath path) { - result = inferCallType(n, any(FunctionPosition pos | pos.isReturn()), _, path) + result = inferCallType(n, ReturnKind(), path) or - exists(FunctionPosition pos, boolean hasReceiver, TypePath prefix | - result = inferCallNonReturnType(n, pos, hasReceiver, prefix, path) and + exists(FunctionPositionKind kind, TypePath prefix | + result = inferCallNonReturnType(n, kind, prefix, path) and hasUnknownTypeAt(n, prefix) | // Never propagate type information directly into the receiver, since its type // must already have been known in order to resolve the call - if pos.asPosition() = 0 and hasReceiver = true then not prefix.isEmpty() else any() + if kind = SelfKind() then not prefix.isEmpty() else any() ) } } @@ -2877,17 +2931,20 @@ private Type inferFunctionCallTypeSelf( } private Type inferFunctionCallTypePreCheck( - AstNode n, FunctionPosition pos, boolean hasReceiver, TypePath path + AstNode n, ContextTyping::FunctionPositionKind kind, TypePath path ) { - result = inferFunctionCallTypeNonSelf(n, pos, path) and - hasReceiver = false + exists(FunctionPosition pos | + result = inferFunctionCallTypeNonSelf(n, pos, path) and + if pos.isPosition() + then kind = ContextTyping::PositionalKind() + else kind = ContextTyping::ReturnKind() + ) or exists(FunctionCallMatchingInput::Access a | result = inferFunctionCallTypeSelf(a, n, DerefChain::nil(), path) and - pos.asPosition() = 0 and if a.(AssocFunctionResolution::AssocFunctionCall).hasReceiver() - then hasReceiver = true - else hasReceiver = false + then kind = ContextTyping::SelfKind() + else kind = ContextTyping::PositionalKind() ) } @@ -2896,7 +2953,7 @@ private Type inferFunctionCallTypePreCheck( * argument/receiver of a function call. */ private predicate inferFunctionCallType = - ContextTyping::CheckContextTyping::check/2; + ContextTyping::CheckContextTyping::check/2; abstract private class Constructor extends Addressable { final TypeParameter getTypeParameter(TypeParameterPosition ppos) { @@ -3055,10 +3112,14 @@ private module ConstructionMatching = Matching; pragma[nomagic] private Type inferConstructionTypePreCheck( - AstNode n, FunctionPosition pos, boolean hasReceiver, TypePath path + AstNode n, ContextTyping::FunctionPositionKind kind, TypePath path ) { - hasReceiver = false and - exists(ConstructionMatchingInput::Access a | n = a.getNodeAt(pos) | + exists(ConstructionMatchingInput::Access a, FunctionPosition pos | + n = a.getNodeAt(pos) and + if pos.isPosition() + then kind = ContextTyping::PositionalKind() + else kind = ContextTyping::ReturnKind() + | result = ConstructionMatching::inferAccessType(a, pos, path) or a.hasUnknownTypeAt(pos, path) and @@ -3067,7 +3128,7 @@ private Type inferConstructionTypePreCheck( } private predicate inferConstructionType = - ContextTyping::CheckContextTyping::check/2; + ContextTyping::CheckContextTyping::check/2; /** * A matching configuration for resolving types of operations like `a + b`. @@ -3133,17 +3194,22 @@ private module OperationMatching = Matching; pragma[nomagic] private Type inferOperationTypePreCheck( - AstNode n, FunctionPosition pos, boolean hasReceiver, TypePath path + AstNode n, ContextTyping::FunctionPositionKind kind, TypePath path ) { - exists(OperationMatchingInput::Access a | + exists(OperationMatchingInput::Access a, FunctionPosition pos | n = a.getNodeAt(pos) and result = OperationMatching::inferAccessType(a, pos, path) and - hasReceiver = true + if pos.asPosition() = 0 + then kind = ContextTyping::SelfKind() + else + if pos.isPosition() + then kind = ContextTyping::PositionalKind() + else kind = ContextTyping::ReturnKind() ) } private predicate inferOperationType = - ContextTyping::CheckContextTyping::check/2; + ContextTyping::CheckContextTyping::check/2; pragma[nomagic] private Type getFieldExprLookupType(FieldExpr fe, string name, DerefChain derefChain) { @@ -3900,10 +3966,11 @@ private module Cached { or // Don't propagate type information into a node which conflicts with certain // type information. - ( - if CertainTypeInference::hasInferredCertainType(n) - then not CertainTypeInference::certainTypeConflict(n, path, result) - else any() + forall(TypePath prefix | + CertainTypeInference::hasInferredCertainType(n, prefix) and + prefix.isPrefixOf(path) + | + not CertainTypeInference::certainTypeConflict(n, prefix, path, result) ) and ( result = inferAssignmentOperationType(n, path) @@ -3970,7 +4037,7 @@ private module Debug { TypeAbstraction abs, TypeMention condition, TypeMention constraint, boolean transitive ) { abs = getRelevantLocatable() and - Input::conditionSatisfiesConstraint(abs, condition, constraint, transitive) + Input2::conditionSatisfiesConstraint(abs, condition, constraint, transitive) } predicate debugInferShorthandSelfType(ShorthandSelfParameterMention self, TypePath path, Type t) { diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeMention.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeMention.qll index d9a00f33940..70dfbeda848 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/TypeMention.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeMention.qll @@ -205,6 +205,13 @@ private module MkTypeMention::...` + exists(PathTypeRepr typeRepr, PathTypeRepr traitRepr | + pathTypeAsTraitAssoc(_, typeRepr, traitRepr, _, _) and + this = traitRepr.getPath() and + result = typeRepr.getPath() + ) } pragma[nomagic] @@ -696,16 +703,26 @@ private module PreTypeMention = MkTypeMention; class PreTypeMention = PreTypeMention::TypeMention; +private class TraitOrTmTrait extends AstNode { + Type getTypeAt(TypePath path) { + pathTypeAsTraitAssoc(_, _, this, _, _) and + result = this.(PreTypeMention).getTypeAt(path) + or + result = TTrait(this) and + path.isEmpty() + } +} + /** * Holds if `path` accesses an associated type `alias` from `trait` on a * concrete type given by `tm`. * - * `implOrTmTrait` is either the mention that resolves to `trait` when `path` - * is of the form `::AssocType`, or the enclosing `impl` block - * when `path` is of the form `Self::AssocType`. + * `traitOrTmTrait` is either the mention that resolves to `trait` when `path` + * is of the form `::AssocType`, or the trait being implemented + * when `path` is of the form `Self::AssocType` within an `impl` block. */ private predicate pathConcreteTypeAssocType( - Path path, PreTypeMention tm, TraitItemNode trait, AstNode implOrTmTrait, TypeAlias alias + Path path, PreTypeMention tm, TraitItemNode trait, TraitOrTmTrait traitOrTmTrait, TypeAlias alias ) { exists(Path qualifier | qualifier = path.getQualifier() and @@ -713,31 +730,34 @@ private predicate pathConcreteTypeAssocType( | // path of the form `::AssocType` // ^^^ tm ^^^^^^^^^ name + // ^^^^^ traitOrTmTrait exists(string name | - pathTypeAsTraitAssoc(path, tm, implOrTmTrait, trait, name) and + pathTypeAsTraitAssoc(path, tm, traitOrTmTrait, trait, name) and getTraitAssocType(trait, name) = alias ) or // path of the form `Self::AssocType` within an `impl` block // tm ^^^^ ^^^^^^^^^ name - implOrTmTrait = - any(ImplItemNode impl | - alias = resolvePath(path) and - qualifier = impl.getASelfPath() and - tm = impl.(Impl).getSelfTy() and - trait.getAnAssocItem() = alias - ) + exists(ImplItemNode impl | + alias = resolvePath(path) and + qualifier = impl.getASelfPath() and + tm = impl.(Impl).getSelfTy() and + trait.getAnAssocItem() = alias and + traitOrTmTrait = trait + ) ) } -private module PathSatisfiesConstraintInput implements SatisfiesTypeInputSig { - predicate relevantConstraint(PreTypeMention tm, Type constraint) { - pathConcreteTypeAssocType(_, tm, constraint.(TraitType).getTrait(), _, _) +private module PathSatisfiesConstraintInput implements + PreM2::SatisfiesConstraintInputSig +{ + predicate relevantConstraint(PreTypeMention tm, TraitOrTmTrait constraint) { + pathConcreteTypeAssocType(_, tm, _, constraint, _) } } private module PathSatisfiesConstraint = - SatisfiesType; + PreM2::SatisfiesConstraint; /** * Gets the type of `path` at `typePath` when `path` accesses an associated type @@ -745,26 +765,12 @@ private module PathSatisfiesConstraint = */ private Type getPathConcreteAssocTypeAt(Path path, TypePath typePath) { exists( - PreTypeMention tm, ImplItemNode impl, TraitItemNode trait, TraitType t, AstNode implOrTmTrait, + PreTypeMention tm, ImplItemNode impl, TraitItemNode trait, TraitOrTmTrait traitOrTmTrait, TypeAlias alias, TypePath path0 | - pathConcreteTypeAssocType(path, tm, trait, implOrTmTrait, alias) and - t = TTrait(trait) and - PathSatisfiesConstraint::satisfiesConstraintTypeThrough(tm, impl, t, path0, result) and + pathConcreteTypeAssocType(path, tm, trait, traitOrTmTrait, alias) and + PathSatisfiesConstraint::satisfiesConstraintTypeThrough(tm, impl, traitOrTmTrait, path0, result) and path0.isCons(TAssociatedTypeTypeParameter(trait, alias), typePath) - | - implOrTmTrait instanceof Impl - or - // When `path` is of the form `::AssocType` we need to check - // that `impl` is not more specific than the mentioned trait - implOrTmTrait = - any(PreTypeMention tmTrait | - not exists(TypePath path1, Type t1 | - t1 = impl.getTraitPath().(PreTypeMention).getTypeAt(path1) and - not t1 instanceof TypeParameter and - t1 != tmTrait.getTypeAt(path1) - ) - ) ) } diff --git a/rust/ql/test/library-tests/type-inference/overloading.rs b/rust/ql/test/library-tests/type-inference/overloading.rs index e0f3dbf6954..06353a12c8f 100644 --- a/rust/ql/test/library-tests/type-inference/overloading.rs +++ b/rust/ql/test/library-tests/type-inference/overloading.rs @@ -509,15 +509,15 @@ mod trait_bound_impl_overlap { fn test() { let x = S(0); - let y = call_f(x); // $ target=call_f type=y:i32 $ SPURIOUS: type=y:i64 + let y = call_f(x); // $ target=call_f type=y:i32 let z: i32 = y; let x = S(0); let y = call_f::(x); // $ target=call_f type=y:i32 let x = S(0); - let y = call_f2(S(0i32), x); // $ target=call_f2 type=y:i32 $ SPURIOUS: type=y:i64 + let y = call_f2(S(0i32), x); // $ target=call_f2 type=y:i32 let x = S(0); - let y = call_f2(S(0i64), x); // $ target=call_f2 type=y:i64 $ SPURIOUS: type=y:i32 + let y = call_f2(S(0i64), x); // $ target=call_f2 type=y:i64 } } 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 54b338bd5c4..a25a9daf003 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -10775,7 +10775,6 @@ inferType | main.rs:2032:56:2034:9 | { ... } | | {EXTERNAL LOCATION} | & | | main.rs:2032:56:2034:9 | { ... } | TRef | main.rs:2028:10:2028:10 | T | | main.rs:2033:13:2033:29 | &... | | {EXTERNAL LOCATION} | & | -| main.rs:2033:13:2033:29 | &... | TRef | {EXTERNAL LOCATION} | u8 | | main.rs:2033:13:2033:29 | &... | TRef | main.rs:2028:10:2028:10 | T | | main.rs:2033:14:2033:17 | self | | {EXTERNAL LOCATION} | & | | main.rs:2033:14:2033:17 | self | TRef | main.rs:2013:5:2016:5 | MyVec | @@ -10783,7 +10782,6 @@ inferType | main.rs:2033:14:2033:22 | self.data | | {EXTERNAL LOCATION} | Vec | | main.rs:2033:14:2033:22 | self.data | A | {EXTERNAL LOCATION} | Global | | main.rs:2033:14:2033:22 | self.data | T | main.rs:2028:10:2028:10 | T | -| main.rs:2033:14:2033:29 | ...[index] | | {EXTERNAL LOCATION} | u8 | | main.rs:2033:14:2033:29 | ...[index] | | main.rs:2028:10:2028:10 | T | | main.rs:2033:24:2033:28 | index | | {EXTERNAL LOCATION} | usize | | main.rs:2037:22:2037:26 | slice | | {EXTERNAL LOCATION} | & | @@ -12931,14 +12929,11 @@ inferType | overloading.rs:511:17:511:20 | S(...) | T | {EXTERNAL LOCATION} | i32 | | overloading.rs:511:19:511:19 | 0 | | {EXTERNAL LOCATION} | i32 | | overloading.rs:512:13:512:13 | y | | {EXTERNAL LOCATION} | i32 | -| overloading.rs:512:13:512:13 | y | | {EXTERNAL LOCATION} | i64 | | overloading.rs:512:17:512:25 | call_f(...) | | {EXTERNAL LOCATION} | i32 | -| overloading.rs:512:17:512:25 | call_f(...) | | {EXTERNAL LOCATION} | i64 | | overloading.rs:512:24:512:24 | x | | overloading.rs:464:5:464:19 | S | | overloading.rs:512:24:512:24 | x | T | {EXTERNAL LOCATION} | i32 | | overloading.rs:513:13:513:13 | z | | {EXTERNAL LOCATION} | i32 | | overloading.rs:513:22:513:22 | y | | {EXTERNAL LOCATION} | i32 | -| overloading.rs:513:22:513:22 | y | | {EXTERNAL LOCATION} | i64 | | overloading.rs:515:13:515:13 | x | | overloading.rs:464:5:464:19 | S | | overloading.rs:515:13:515:13 | x | T | {EXTERNAL LOCATION} | i32 | | overloading.rs:515:17:515:20 | S(...) | | overloading.rs:464:5:464:19 | S | @@ -12954,9 +12949,7 @@ inferType | overloading.rs:518:17:518:20 | S(...) | T | {EXTERNAL LOCATION} | i32 | | overloading.rs:518:19:518:19 | 0 | | {EXTERNAL LOCATION} | i32 | | overloading.rs:519:13:519:13 | y | | {EXTERNAL LOCATION} | i32 | -| overloading.rs:519:13:519:13 | y | | {EXTERNAL LOCATION} | i64 | | overloading.rs:519:17:519:35 | call_f2(...) | | {EXTERNAL LOCATION} | i32 | -| overloading.rs:519:17:519:35 | call_f2(...) | | {EXTERNAL LOCATION} | i64 | | overloading.rs:519:25:519:31 | S(...) | | overloading.rs:464:5:464:19 | S | | overloading.rs:519:25:519:31 | S(...) | T | {EXTERNAL LOCATION} | i32 | | overloading.rs:519:27:519:30 | 0i32 | | {EXTERNAL LOCATION} | i32 | @@ -12967,9 +12960,7 @@ inferType | overloading.rs:520:17:520:20 | S(...) | | overloading.rs:464:5:464:19 | S | | overloading.rs:520:17:520:20 | S(...) | T | {EXTERNAL LOCATION} | i32 | | overloading.rs:520:19:520:19 | 0 | | {EXTERNAL LOCATION} | i32 | -| overloading.rs:521:13:521:13 | y | | {EXTERNAL LOCATION} | i32 | | overloading.rs:521:13:521:13 | y | | {EXTERNAL LOCATION} | i64 | -| overloading.rs:521:17:521:35 | call_f2(...) | | {EXTERNAL LOCATION} | i32 | | overloading.rs:521:17:521:35 | call_f2(...) | | {EXTERNAL LOCATION} | i64 | | overloading.rs:521:25:521:31 | S(...) | | overloading.rs:464:5:464:19 | S | | overloading.rs:521:25:521:31 | S(...) | T | {EXTERNAL LOCATION} | i64 | diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index cbc1f608813..7cd4dab479d 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -385,6 +385,45 @@ module Make1 Input1> { predicate conditionSatisfiesConstraint( TypeAbstraction abs, TypeMention condition, TypeMention constraint, boolean transitive ); + + /** + * Holds if the constraint belonging to `abs` with root type `constraint` is + * ambiguous at `path`, meaning that there is _some_ other abstraction `abs2` + * with a structurally identical condition and same root constraint type + * `constraint`, and where the constraints differ at `path`. + * + * Example: + * + * ```rust + * trait Trait { } + * + * impl Trait for Foo { ... } + * // ^^^ `abs` + * // ^^^^^ `constraint` + * // ^^^^^^ `condition` + * + * impl Trait for Foo { } + * // ^^^ `abs2` + * // ^^^^^ `constraint` + * // ^^^^^^ `condition2` + * ``` + * + * In the above, `abs` and `abs2` have structurally identical conditions, + * `condition` and `condition2`, and they differ at the path `"T1"`, but + * not at the path `"T2"`. + */ + predicate typeAbstractionHasAmbiguousConstraintAt( + TypeAbstraction abs, Type constraint, TypePath path + ); + + /** + * Holds if all instantiations of `tp` are functionally determined by the + * instantiations of the other type parameters in the same abstraction. + * + * For example, in Rust all associated types act as functionally determined + * type parameters. + */ + predicate typeParameterIsFunctionallyDetermined(TypeParameter tp); } module Make2 Input2> { @@ -661,6 +700,7 @@ module Make1 Input1> { * Holds if the type mention `condition` satisfies `constraint` with the * type `t` at the path `path`. */ + pragma[nomagic] predicate conditionSatisfiesConstraintTypeAt( TypeAbstraction abs, TypeMention condition, TypeMention constraint, TypePath path, Type t ) { @@ -820,15 +860,30 @@ module Make1 Input1> { private import BaseTypes - /** Provides the input to `SatisfiesConstraint`. */ - signature module SatisfiesConstraintInputSig { + /** Provides the input to `SatisfiesConstraintWithTypeMatching`. */ + signature module SatisfiesConstraintWithTypeMatchingInputSig< + HasTypeTreeSig Term, HasTypeTreeSig Constraint> + { /** Holds if it is relevant to know if `term` satisfies `constraint`. */ predicate relevantConstraint(Term term, Constraint constraint); + + /** A context in which a type parameter can be matched with an instantiation. */ + class TypeMatchingContext; + + /** Gets the type matching context for `t`. */ + TypeMatchingContext getTypeMatchingContext(Term t); + + /** + * Holds if `tp` can be matched with the type `t` at `path` in the context `ctx`. + * + * This may be used to disambiguate between multiple constraints that a term may satisfy. + */ + predicate typeMatch(TypeMatchingContext ctx, TypeParameter tp, TypePath path, Type t); } - module SatisfiesConstraint< + module SatisfiesConstraintWithTypeMatching< HasTypeTreeSig Term, HasTypeTreeSig Constraint, - SatisfiesConstraintInputSig Input> + SatisfiesConstraintWithTypeMatchingInputSig Input> { private import Input @@ -944,12 +999,103 @@ module Make1 Input1> { pragma[nomagic] private predicate satisfiesConstraintTypeMention0( + Term term, Constraint constraint, TypeMention constraintMention, TypeAbstraction abs, + TypeMention sub, TypePath path, Type t, boolean ambiguous + ) { + exists(Type constraintRoot | + hasConstraintMention(term, abs, sub, constraint, constraintRoot, constraintMention) and + conditionSatisfiesConstraintTypeAt(abs, sub, constraintMention, path, t) and + if + exists(TypePath prefix | + typeAbstractionHasAmbiguousConstraintAt(abs, constraintRoot, prefix) and + prefix.isPrefixOf(path) + ) + then ambiguous = true + else ambiguous = false + ) + } + + pragma[nomagic] + private predicate conditionSatisfiesConstraintTypeAtForDisambiguation( + TypeAbstraction abs, TypeMention condition, TypeMention constraint, TypePath path, Type t + ) { + conditionSatisfiesConstraintTypeAt(abs, condition, constraint, path, t) and + not t instanceof TypeParameter and + not typeParameterIsFunctionallyDetermined(path.getHead()) + } + + pragma[nomagic] + private predicate constraintTypeMatchForDisambiguation0( + Term term, Constraint constraint, TypePath path, TypePath suffix, TypeParameter tp + ) { + exists( + TypeMention constraintMention, TypeAbstraction abs, TypeMention sub, TypePath prefix + | + satisfiesConstraintTypeMention0(term, constraint, constraintMention, abs, sub, _, _, true) and + conditionSatisfiesConstraintTypeAtForDisambiguation(abs, sub, constraintMention, path, _) and + tp = constraint.getTypeAt(prefix) and + path = prefix.appendInverse(suffix) + ) + } + + pragma[nomagic] + private predicate constraintTypeMatchForDisambiguation1( + Term term, Constraint constraint, TypePath path, TypeMatchingContext ctx, TypePath suffix, + TypeParameter tp + ) { + constraintTypeMatchForDisambiguation0(term, constraint, path, suffix, tp) and + ctx = getTypeMatchingContext(term) + } + + /** + * Holds if the type of `constraint` at `path` is `t` because it is possible + * to match some type parameter that occurs in `constraint` at a prefix of + * `path` in the context of `term`. + * + * For example, if we have + * + * ```rust + * fn f>(x: T1, y: T2) -> T2::Output { ... } + * ``` + * + * then at a call like `f(true, ...)` the constraint `SomeTrait` has the + * type `bool` substituted for `T1`. + */ + pragma[nomagic] + private predicate constraintTypeMatchForDisambiguation( + Term term, Constraint constraint, TypePath path, Type t + ) { + exists(TypeMatchingContext ctx, TypeParameter tp, TypePath suffix | + constraintTypeMatchForDisambiguation1(term, constraint, path, ctx, suffix, tp) and + typeMatch(ctx, tp, suffix, t) + ) + } + + pragma[nomagic] + private predicate satisfiesConstraintTypeMention1( Term term, Constraint constraint, TypeAbstraction abs, TypeMention sub, TypePath path, Type t ) { - exists(Type constraintRoot, TypeMention constraintMention | - hasConstraintMention(term, abs, sub, constraint, constraintRoot, constraintMention) and - conditionSatisfiesConstraintTypeAt(abs, sub, constraintMention, path, t) + exists(TypeMention constraintMention, boolean ambiguous | + satisfiesConstraintTypeMention0(term, constraint, constraintMention, abs, sub, path, t, + ambiguous) + | + if ambiguous = true + then + // When the constraint is not uniquely satisfied, we check that the satisfying + // abstraction is not more specific than the constraint to be satisfied. For example, + // if the constraint is `MyTrait` and there is both `impl MyTrait for ...` and + // `impl MyTrait for ...`, then the latter will be filtered away + forall(TypePath path1, Type t1 | + conditionSatisfiesConstraintTypeAtForDisambiguation(abs, sub, constraintMention, + path1, t1) + | + t1 = constraint.getTypeAt(path1) + or + // The constraint may contain a type parameter, which we can match to the right type + constraintTypeMatchForDisambiguation(term, constraint, path1, t1) + ) + else any() ) } @@ -959,7 +1105,7 @@ module Make1 Input1> { TypePath pathToTypeParamInSub ) { exists(TypeMention sub, TypeParameter tp | - satisfiesConstraintTypeMention0(term, constraint, abs, sub, path, tp) and + satisfiesConstraintTypeMention1(term, constraint, abs, sub, path, tp) and tp = abs.getATypeParameter() and sub.getTypeAt(pathToTypeParamInSub) = tp ) @@ -984,7 +1130,7 @@ module Make1 Input1> { private predicate satisfiesConstraintTypeNonTypeParamInline( Term term, TypeAbstraction abs, Constraint constraint, TypePath path, Type t ) { - satisfiesConstraintTypeMention0(term, constraint, abs, _, path, t) and + satisfiesConstraintTypeMention1(term, constraint, abs, _, path, t) and not t = abs.getATypeParameter() } @@ -1048,12 +1194,41 @@ module Make1 Input1> { predicate dissatisfiesConstraint(Term term, Constraint constraint) { hasNotConstraintMention(term, constraint, _) and exists(Type t, Type constraintRoot | - hasTypeConstraint(term, t, constraint, constraintRoot) and // todo + hasTypeConstraint(term, t, constraint, constraintRoot) and t != constraintRoot ) } } + /** Provides the input to `SatisfiesConstraint`. */ + signature module SatisfiesConstraintInputSig { + /** Holds if it is relevant to know if `term` satisfies `constraint`. */ + predicate relevantConstraint(Term term, Constraint constraint); + } + + module SatisfiesConstraint< + HasTypeTreeSig Term, HasTypeTreeSig Constraint, + SatisfiesConstraintInputSig Input> + { + private module Inp implements SatisfiesConstraintWithTypeMatchingInputSig { + private import codeql.util.Void + + predicate relevantConstraint(Term term, Constraint constraint) { + Input::relevantConstraint(term, constraint) + } + + class TypeMatchingContext = Void; + + TypeMatchingContext getTypeMatchingContext(Term t) { none() } + + predicate typeMatch(TypeMatchingContext ctx, TypeParameter tp, TypePath path, Type t) { + none() + } + } + + import SatisfiesConstraintWithTypeMatching + } + /** Provides the input to `SatisfiesType`. */ signature module SatisfiesTypeInputSig { /** Holds if it is relevant to know if `term` satisfies `type`. */ @@ -1306,7 +1481,7 @@ module Make1 Input1> { } private module AccessConstraint { - predicate relevantAccessConstraint( + private predicate relevantAccessConstraint( Access a, AccessEnvironment e, Declaration target, AccessPosition apos, TypePath path, TypeMention constraint ) { @@ -1331,6 +1506,7 @@ module Make1 Input1> { RelevantAccess() { this = MkRelevantAccess(a, apos, e, path) } + pragma[nomagic] Type getTypeAt(TypePath suffix) { result = a.getInferredType(e, apos, path.appendInverse(suffix)) } @@ -1348,16 +1524,29 @@ module Make1 Input1> { } private module SatisfiesTypeParameterConstraintInput implements - SatisfiesConstraintInputSig + SatisfiesConstraintWithTypeMatchingInputSig { predicate relevantConstraint(RelevantAccess at, TypeMention constraint) { constraint = at.getConstraint(_) } + + class TypeMatchingContext = Access; + + TypeMatchingContext getTypeMatchingContext(RelevantAccess at) { + at = MkRelevantAccess(result, _, _, _) + } + + pragma[nomagic] + predicate typeMatch(TypeMatchingContext ctx, TypeParameter tp, TypePath path, Type t) { + typeMatch(ctx, _, _, path, t, tp) + } } private module SatisfiesTypeParameterConstraint = - SatisfiesConstraint; + SatisfiesConstraintWithTypeMatching; + pragma[nomagic] predicate satisfiesConstraintType( Access a, AccessEnvironment e, Declaration target, AccessPosition apos, TypePath prefix, TypeMention constraint, TypePath path, Type t diff --git a/shared/util/codeql/util/UnboundList.qll b/shared/util/codeql/util/UnboundList.qll index 79fac6506d6..6f05d6cddfc 100644 --- a/shared/util/codeql/util/UnboundList.qll +++ b/shared/util/codeql/util/UnboundList.qll @@ -167,6 +167,14 @@ module Make Input> { */ bindingset[this] UnboundList getAPrefix() { result = [this, this.getAProperPrefix()] } + + /** + * Holds if this list is a prefix of `other`. + * + * This is equivalent to `this = other.getAPrefix()`, but more performant. + */ + bindingset[this, other] + predicate isPrefixOf(UnboundList other) { this = other.prefix(this.stringLength()) } } /** Provides predicates for constructing `UnboundList`s. */ From 2e987f8d785f8169fd36defa8e0ae4186522d658 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 18 Mar 2026 14:15:05 +0000 Subject: [PATCH 070/185] C++: Add test cases emulating cpp/suspicious-add-sizeof in buildless mode. --- .../SuspiciousAddWithSizeof.expected | 5 +++++ .../semmle/SuspiciousAddWithSizeof/buildless.cpp | 10 ++++++++++ .../CWE-468/semmle/SuspiciousAddWithSizeof/test.cpp | 6 ++++++ 3 files changed, 21 insertions(+) create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-468/semmle/SuspiciousAddWithSizeof/buildless.cpp diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-468/semmle/SuspiciousAddWithSizeof/SuspiciousAddWithSizeof.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-468/semmle/SuspiciousAddWithSizeof/SuspiciousAddWithSizeof.expected index 8b67b3f8bc9..c1a192afc3a 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-468/semmle/SuspiciousAddWithSizeof/SuspiciousAddWithSizeof.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-468/semmle/SuspiciousAddWithSizeof/SuspiciousAddWithSizeof.expected @@ -1,3 +1,8 @@ +| buildless.cpp:5:15:5:25 | sizeof(int) | Suspicious sizeof offset in a pointer arithmetic expression. The type of the pointer is $@. | file://:0:0:0:0 | const short * | const short * | +| buildless.cpp:6:13:6:23 | sizeof(int) | Suspicious sizeof offset in a pointer arithmetic expression. The type of the pointer is $@. | file://:0:0:0:0 | const int * | const int * | +| buildless.cpp:7:11:7:21 | sizeof(int) | Suspicious sizeof offset in a pointer arithmetic expression. The type of the pointer is $@. | file://:0:0:0:0 | const * | const * | +| buildless.cpp:8:12:8:22 | sizeof(int) | Suspicious sizeof offset in a pointer arithmetic expression. The type of the pointer is $@. | file://:0:0:0:0 | const * | const * | +| buildless.cpp:9:12:9:22 | sizeof(int) | Suspicious sizeof offset in a pointer arithmetic expression. The type of the pointer is $@. | file://:0:0:0:0 | const * | const * | | test.cpp:6:30:6:40 | sizeof(int) | Suspicious sizeof offset in a pointer arithmetic expression. The type of the pointer is $@. | file://:0:0:0:0 | int * | int * | | test.cpp:14:30:14:40 | sizeof(int) | Suspicious sizeof offset in a pointer arithmetic expression. The type of the pointer is $@. | file://:0:0:0:0 | int * | int * | | test.cpp:22:25:22:35 | sizeof(int) | Suspicious sizeof offset in a pointer arithmetic expression. The type of the pointer is $@. | file://:0:0:0:0 | int * | int * | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-468/semmle/SuspiciousAddWithSizeof/buildless.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-468/semmle/SuspiciousAddWithSizeof/buildless.cpp new file mode 100644 index 00000000000..cc93ef719b5 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-468/semmle/SuspiciousAddWithSizeof/buildless.cpp @@ -0,0 +1,10 @@ +// semmle-extractor-options: --expect_errors + +void test_buildless(const char *p_c, const short *p_short, const int *p_int, const uint8_t *p_8, const uint16_t *p_16, const uint32_t *p_32) { + *(p_c + sizeof(int)); // GOOD (`sizeof(char)` is 1) + *(p_short + sizeof(int)); // BAD + *(p_int + sizeof(int)); // BAD + *(p_8 + sizeof(int)); // GOOD (`sizeof(p_8)` is 1) [FALSE POSITIVE] + *(p_16 + sizeof(int)); // BAD + *(p_32 + sizeof(int)); // BAD +} diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-468/semmle/SuspiciousAddWithSizeof/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-468/semmle/SuspiciousAddWithSizeof/test.cpp index f2ad227417e..fa2bd934cca 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-468/semmle/SuspiciousAddWithSizeof/test.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-468/semmle/SuspiciousAddWithSizeof/test.cpp @@ -93,3 +93,9 @@ private: myChar * const myCharsPointer; myInt * const myIntsPointer; }; + +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; + +void test_buildless(const char *p_c, const short *p_short, const int *p_int, const uint8_t *p_8, const uint16_t *p_16, const uint32_t *p_32); From 0f794b57ed742e7551c50a40a56e2fb09240eb61 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 19 Mar 2026 13:16:16 +0000 Subject: [PATCH 071/185] C++: Fix the issue. --- cpp/ql/src/Security/CWE/CWE-468/SuspiciousAddWithSizeof.ql | 3 ++- .../SuspiciousAddWithSizeof.expected | 3 --- .../CWE-468/semmle/SuspiciousAddWithSizeof/buildless.cpp | 6 +++--- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/cpp/ql/src/Security/CWE/CWE-468/SuspiciousAddWithSizeof.ql b/cpp/ql/src/Security/CWE/CWE-468/SuspiciousAddWithSizeof.ql index d9c9df4fd91..343e96a00d3 100644 --- a/cpp/ql/src/Security/CWE/CWE-468/SuspiciousAddWithSizeof.ql +++ b/cpp/ql/src/Security/CWE/CWE-468/SuspiciousAddWithSizeof.ql @@ -18,7 +18,8 @@ import IncorrectPointerScalingCommon private predicate isCharSzPtrExpr(Expr e) { exists(PointerType pt | pt = e.getFullyConverted().getUnspecifiedType() | pt.getBaseType() instanceof CharType or - pt.getBaseType() instanceof VoidType + pt.getBaseType() instanceof VoidType or + pt.getBaseType() instanceof ErroneousType // this could be char / void type in a successful compilation ) } diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-468/semmle/SuspiciousAddWithSizeof/SuspiciousAddWithSizeof.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-468/semmle/SuspiciousAddWithSizeof/SuspiciousAddWithSizeof.expected index c1a192afc3a..dbff4230f25 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-468/semmle/SuspiciousAddWithSizeof/SuspiciousAddWithSizeof.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-468/semmle/SuspiciousAddWithSizeof/SuspiciousAddWithSizeof.expected @@ -1,8 +1,5 @@ | buildless.cpp:5:15:5:25 | sizeof(int) | Suspicious sizeof offset in a pointer arithmetic expression. The type of the pointer is $@. | file://:0:0:0:0 | const short * | const short * | | buildless.cpp:6:13:6:23 | sizeof(int) | Suspicious sizeof offset in a pointer arithmetic expression. The type of the pointer is $@. | file://:0:0:0:0 | const int * | const int * | -| buildless.cpp:7:11:7:21 | sizeof(int) | Suspicious sizeof offset in a pointer arithmetic expression. The type of the pointer is $@. | file://:0:0:0:0 | const * | const * | -| buildless.cpp:8:12:8:22 | sizeof(int) | Suspicious sizeof offset in a pointer arithmetic expression. The type of the pointer is $@. | file://:0:0:0:0 | const * | const * | -| buildless.cpp:9:12:9:22 | sizeof(int) | Suspicious sizeof offset in a pointer arithmetic expression. The type of the pointer is $@. | file://:0:0:0:0 | const * | const * | | test.cpp:6:30:6:40 | sizeof(int) | Suspicious sizeof offset in a pointer arithmetic expression. The type of the pointer is $@. | file://:0:0:0:0 | int * | int * | | test.cpp:14:30:14:40 | sizeof(int) | Suspicious sizeof offset in a pointer arithmetic expression. The type of the pointer is $@. | file://:0:0:0:0 | int * | int * | | test.cpp:22:25:22:35 | sizeof(int) | Suspicious sizeof offset in a pointer arithmetic expression. The type of the pointer is $@. | file://:0:0:0:0 | int * | int * | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-468/semmle/SuspiciousAddWithSizeof/buildless.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-468/semmle/SuspiciousAddWithSizeof/buildless.cpp index cc93ef719b5..bfe4f546803 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-468/semmle/SuspiciousAddWithSizeof/buildless.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-468/semmle/SuspiciousAddWithSizeof/buildless.cpp @@ -4,7 +4,7 @@ void test_buildless(const char *p_c, const short *p_short, const int *p_int, con *(p_c + sizeof(int)); // GOOD (`sizeof(char)` is 1) *(p_short + sizeof(int)); // BAD *(p_int + sizeof(int)); // BAD - *(p_8 + sizeof(int)); // GOOD (`sizeof(p_8)` is 1) [FALSE POSITIVE] - *(p_16 + sizeof(int)); // BAD - *(p_32 + sizeof(int)); // BAD + *(p_8 + sizeof(int)); // GOOD (`sizeof(p_8)` is 1, but there's an error in the type) + *(p_16 + sizeof(int)); // BAD [NOT DETECTED] + *(p_32 + sizeof(int)); // BAD [NOT DETECTED] } From 4c525ce7ab75d94d37c0792d264458f9d55c06be Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Thu, 19 Mar 2026 10:31:22 +0100 Subject: [PATCH 072/185] C++: Add `cpp/extraction-information` query --- .../cpp-code-scanning.qls.expected | 1 + .../cpp-security-and-quality.qls.expected | 1 + .../cpp-security-extended.qls.expected | 1 + cpp/ql/src/Telemetry/DatabaseQuality.qll | 25 +++++++++++++++++++ cpp/ql/src/Telemetry/ExtractorInformation.ql | 25 +++++++++++++++++++ 5 files changed, 53 insertions(+) create mode 100644 cpp/ql/src/Telemetry/DatabaseQuality.qll create mode 100644 cpp/ql/src/Telemetry/ExtractorInformation.ql diff --git a/cpp/ql/integration-tests/query-suite/cpp-code-scanning.qls.expected b/cpp/ql/integration-tests/query-suite/cpp-code-scanning.qls.expected index 33c02079fff..57d240fd795 100644 --- a/cpp/ql/integration-tests/query-suite/cpp-code-scanning.qls.expected +++ b/cpp/ql/integration-tests/query-suite/cpp-code-scanning.qls.expected @@ -52,5 +52,6 @@ ql/cpp/ql/src/Summary/LinesOfUserCode.ql ql/cpp/ql/src/Telemetry/CompilerErrors.ql ql/cpp/ql/src/Telemetry/DatabaseQuality.ql ql/cpp/ql/src/Telemetry/ExtractionMetrics.ql +ql/cpp/ql/src/Telemetry/ExtractorInformation.ql ql/cpp/ql/src/Telemetry/MissingIncludes.ql ql/cpp/ql/src/Telemetry/SucceededIncludes.ql diff --git a/cpp/ql/integration-tests/query-suite/cpp-security-and-quality.qls.expected b/cpp/ql/integration-tests/query-suite/cpp-security-and-quality.qls.expected index 9ef67d525cd..cb4e5f7b305 100644 --- a/cpp/ql/integration-tests/query-suite/cpp-security-and-quality.qls.expected +++ b/cpp/ql/integration-tests/query-suite/cpp-security-and-quality.qls.expected @@ -160,6 +160,7 @@ ql/cpp/ql/src/Summary/LinesOfUserCode.ql ql/cpp/ql/src/Telemetry/CompilerErrors.ql ql/cpp/ql/src/Telemetry/DatabaseQuality.ql ql/cpp/ql/src/Telemetry/ExtractionMetrics.ql +ql/cpp/ql/src/Telemetry/ExtractorInformation.ql ql/cpp/ql/src/Telemetry/MissingIncludes.ql ql/cpp/ql/src/Telemetry/SucceededIncludes.ql ql/cpp/ql/src/jsf/4.06 Pre-Processing Directives/AV Rule 32.ql diff --git a/cpp/ql/integration-tests/query-suite/cpp-security-extended.qls.expected b/cpp/ql/integration-tests/query-suite/cpp-security-extended.qls.expected index f014b6d5dc5..7c5e3d98c5c 100644 --- a/cpp/ql/integration-tests/query-suite/cpp-security-extended.qls.expected +++ b/cpp/ql/integration-tests/query-suite/cpp-security-extended.qls.expected @@ -93,5 +93,6 @@ ql/cpp/ql/src/Summary/LinesOfUserCode.ql ql/cpp/ql/src/Telemetry/CompilerErrors.ql ql/cpp/ql/src/Telemetry/DatabaseQuality.ql ql/cpp/ql/src/Telemetry/ExtractionMetrics.ql +ql/cpp/ql/src/Telemetry/ExtractorInformation.ql ql/cpp/ql/src/Telemetry/MissingIncludes.ql ql/cpp/ql/src/Telemetry/SucceededIncludes.ql diff --git a/cpp/ql/src/Telemetry/DatabaseQuality.qll b/cpp/ql/src/Telemetry/DatabaseQuality.qll new file mode 100644 index 00000000000..d0665561819 --- /dev/null +++ b/cpp/ql/src/Telemetry/DatabaseQuality.qll @@ -0,0 +1,25 @@ +import cpp +import codeql.util.ReportStats + +module CallTargetStats implements StatsSig { + private class RelevantCall extends Call { + RelevantCall() { this.getFile() = any(File f | f.fromSource() and exists(f.getRelativePath())) } + } + + // We assume that calls with an implicit target are calls that could not be + // resolved. This is accurate in the vast amount of cases, but is inaccurate + // for calls that deliberately rely on implicitly declared functions. + private predicate hasImplicitTarget(RelevantCall call) { + call.getTarget().getADeclarationEntry().isImplicit() + } + + int getNumberOfOk() { result = count(RelevantCall call | not hasImplicitTarget(call)) } + + int getNumberOfNotOk() { result = count(RelevantCall call | hasImplicitTarget(call)) } + + string getOkText() { result = "calls with call target" } + + string getNotOkText() { result = "calls with missing call target" } +} + +module CallTargetStatsReport = ReportStats; diff --git a/cpp/ql/src/Telemetry/ExtractorInformation.ql b/cpp/ql/src/Telemetry/ExtractorInformation.ql new file mode 100644 index 00000000000..6e134ccd05f --- /dev/null +++ b/cpp/ql/src/Telemetry/ExtractorInformation.ql @@ -0,0 +1,25 @@ +/** + * @name C/C++ extraction information + * @description Information about the extraction for a C/C++ database + * @kind metric + * @tags summary telemetry + * @id cpp/telemetry/extraction-information + */ + +import cpp +import DatabaseQuality + +from string key, float value +where + ( + CallTargetStatsReport::numberOfOk(key, value) or + CallTargetStatsReport::numberOfNotOk(key, value) or + CallTargetStatsReport::percentageOfOk(key, value) + ) and + /* Infinity */ + value != 1.0 / 0.0 and + /* -Infinity */ + value != -1.0 / 0.0 and + /* NaN */ + value != 0.0 / 0.0 +select key, value From 21cb11ea5d1b343a68e7be818c41a9984c85ad69 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 19 Mar 2026 13:29:41 +0000 Subject: [PATCH 073/185] C++: Change note. --- cpp/ql/src/change-notes/2026-03-19-suspicious-add-sizeof.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cpp/ql/src/change-notes/2026-03-19-suspicious-add-sizeof.md diff --git a/cpp/ql/src/change-notes/2026-03-19-suspicious-add-sizeof.md b/cpp/ql/src/change-notes/2026-03-19-suspicious-add-sizeof.md new file mode 100644 index 00000000000..387e2d44b46 --- /dev/null +++ b/cpp/ql/src/change-notes/2026-03-19-suspicious-add-sizeof.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Fixed an issue with the "Suspicious add with sizeof" (`cpp/suspicious-add-sizeof`) query causing false positive results in `build-mode: none` databases. From 92c9a8e1460d711c3ea87ab01725baa273905dce Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 19 Mar 2026 13:51:03 +0000 Subject: [PATCH 074/185] Update cpp/ql/test/query-tests/Security/CWE/CWE-468/semmle/SuspiciousAddWithSizeof/buildless.cpp --- .../CWE/CWE-468/semmle/SuspiciousAddWithSizeof/buildless.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-468/semmle/SuspiciousAddWithSizeof/buildless.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-468/semmle/SuspiciousAddWithSizeof/buildless.cpp index bfe4f546803..b0b590fba69 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-468/semmle/SuspiciousAddWithSizeof/buildless.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-468/semmle/SuspiciousAddWithSizeof/buildless.cpp @@ -4,7 +4,7 @@ void test_buildless(const char *p_c, const short *p_short, const int *p_int, con *(p_c + sizeof(int)); // GOOD (`sizeof(char)` is 1) *(p_short + sizeof(int)); // BAD *(p_int + sizeof(int)); // BAD - *(p_8 + sizeof(int)); // GOOD (`sizeof(p_8)` is 1, but there's an error in the type) + *(p_8 + sizeof(int)); // GOOD (`sizeof(uint8_t)` is 1, but there's an error in the type) *(p_16 + sizeof(int)); // BAD [NOT DETECTED] *(p_32 + sizeof(int)); // BAD [NOT DETECTED] } From b9592fef2dadd41de06be7d0b5e5912046b52576 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Mar 2026 15:48:11 +0000 Subject: [PATCH 075/185] Bump bazel_skylib from 1.8.1 to 1.9.0 Bumps [bazel_skylib](https://github.com/bazelbuild/bazel-skylib) from 1.8.1 to 1.9.0. - [Release notes](https://github.com/bazelbuild/bazel-skylib/releases) - [Changelog](https://github.com/bazelbuild/bazel-skylib/blob/main/CHANGELOG.md) - [Commits](https://github.com/bazelbuild/bazel-skylib/compare/1.8.1...1.9.0) --- updated-dependencies: - dependency-name: bazel_skylib dependency-version: 1.9.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- MODULE.bazel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MODULE.bazel b/MODULE.bazel index 4f0f31fb2d3..5b4795feb31 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -22,7 +22,7 @@ bazel_dep(name = "rules_pkg", version = "1.2.0") bazel_dep(name = "rules_nodejs", version = "6.7.3") bazel_dep(name = "rules_python", version = "1.9.0") bazel_dep(name = "rules_shell", version = "0.6.1") -bazel_dep(name = "bazel_skylib", version = "1.8.1") +bazel_dep(name = "bazel_skylib", version = "1.9.0") bazel_dep(name = "abseil-cpp", version = "20260107.1", repo_name = "absl") bazel_dep(name = "nlohmann_json", version = "3.11.3", repo_name = "json") bazel_dep(name = "fmt", version = "12.1.0-codeql.1") From fef758998cfcba5aef75839a646e61a3cf0a6d84 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Mar 2026 15:48:18 +0000 Subject: [PATCH 076/185] Bump rules_java from 9.0.3 to 9.6.1 Bumps [rules_java](https://github.com/bazelbuild/rules_java) from 9.0.3 to 9.6.1. - [Release notes](https://github.com/bazelbuild/rules_java/releases) - [Commits](https://github.com/bazelbuild/rules_java/compare/9.0.3...9.6.1) --- updated-dependencies: - dependency-name: rules_java dependency-version: 9.6.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- MODULE.bazel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MODULE.bazel b/MODULE.bazel index 4f0f31fb2d3..46e526770ae 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -17,7 +17,7 @@ local_path_override( bazel_dep(name = "platforms", version = "1.0.0") bazel_dep(name = "rules_cc", version = "0.2.17") bazel_dep(name = "rules_go", version = "0.60.0") -bazel_dep(name = "rules_java", version = "9.0.3") +bazel_dep(name = "rules_java", version = "9.6.1") bazel_dep(name = "rules_pkg", version = "1.2.0") bazel_dep(name = "rules_nodejs", version = "6.7.3") bazel_dep(name = "rules_python", version = "1.9.0") From 9c6276ef48ecef9d01fcc6b9038e5c3330ec0a7f Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 19 Mar 2026 16:17:04 +0000 Subject: [PATCH 077/185] C++: Change note. --- cpp/ql/src/change-notes/2026-03-19-tainted-format-string.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cpp/ql/src/change-notes/2026-03-19-tainted-format-string.md diff --git a/cpp/ql/src/change-notes/2026-03-19-tainted-format-string.md b/cpp/ql/src/change-notes/2026-03-19-tainted-format-string.md new file mode 100644 index 00000000000..6a1133917bf --- /dev/null +++ b/cpp/ql/src/change-notes/2026-03-19-tainted-format-string.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Fixed an issue with the "Uncontrolled format string" (`cpp/tainted-format-string`) query involving certain kinds of formatting function implementations. From d191d09c5553e4b2851bc8b2612f0e98831f4cbf Mon Sep 17 00:00:00 2001 From: Jeongsoo Lee Date: Thu, 19 Mar 2026 15:48:47 -0700 Subject: [PATCH 078/185] Apply suggestions from code review Co-authored-by: Jeroen Ketema <93738568+jketema@users.noreply.github.com> --- .../semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll index 51cc7430f62..25e675053e2 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll @@ -619,7 +619,7 @@ module Public { /** * Gets the uninitialized local variable corresponding to this node behind - * the given levels of indirection, if any. + * `index` number of indirections, if any. */ LocalVariable asIndirectUninitialized(int indirectionIndex) { exists(IndirectUninitializedNode indirectUninitializedNode | @@ -632,7 +632,7 @@ module Public { /** * Gets the uninitialized local variable corresponding to this node behind - * any levels of indirection, if any. + * a number indirections, if any. */ LocalVariable asIndirectUninitialized() { result = this.asIndirectUninitialized(_) } @@ -815,7 +815,7 @@ module Public { class IndirectUninitializedNode extends AbstractUninitializedNode { IndirectUninitializedNode() { indirectionIndex > 0 } - /** Gets the level of indirection to get to this node. */ + /** Gets the indirection index of this node. */ int getIndirectionIndex() { result = indirectionIndex } } From dc291ffad76b569c9c23d55630858f6afb8f0d0b Mon Sep 17 00:00:00 2001 From: Jeongsoo Lee Date: Thu, 19 Mar 2026 15:51:00 -0700 Subject: [PATCH 079/185] Address code review --- .../semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll index 51cc7430f62..5c5b20f9e81 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll @@ -621,10 +621,10 @@ module Public { * Gets the uninitialized local variable corresponding to this node behind * the given levels of indirection, if any. */ - LocalVariable asIndirectUninitialized(int indirectionIndex) { + LocalVariable asIndirectUninitialized(int index) { exists(IndirectUninitializedNode indirectUninitializedNode | this = indirectUninitializedNode and - indirectUninitializedNode.getIndirectionIndex() = indirectionIndex + indirectUninitializedNode.getIndirectionIndex() = index | result = indirectUninitializedNode.getLocalVariable() ) @@ -808,9 +808,6 @@ module Public { /** * The value of an uninitialized local variable behind one or more levels of * indirection, viewed as a node in a data flow graph. - * - * NOTE: For the direct value of the uninitialized local variable, see - * `UninitializedNode`. */ class IndirectUninitializedNode extends AbstractUninitializedNode { IndirectUninitializedNode() { indirectionIndex > 0 } From bc518c08c7807f400bf96e002742f89fb249c50f Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Fri, 20 Mar 2026 09:19:59 +0100 Subject: [PATCH 080/185] C++: Fix grammar in comment Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- cpp/ql/src/Telemetry/DatabaseQuality.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/src/Telemetry/DatabaseQuality.qll b/cpp/ql/src/Telemetry/DatabaseQuality.qll index d0665561819..003b7dc01d1 100644 --- a/cpp/ql/src/Telemetry/DatabaseQuality.qll +++ b/cpp/ql/src/Telemetry/DatabaseQuality.qll @@ -7,7 +7,7 @@ module CallTargetStats implements StatsSig { } // We assume that calls with an implicit target are calls that could not be - // resolved. This is accurate in the vast amount of cases, but is inaccurate + // resolved. This is accurate in the vast majority of cases, but is inaccurate // for calls that deliberately rely on implicitly declared functions. private predicate hasImplicitTarget(RelevantCall call) { call.getTarget().getADeclarationEntry().isImplicit() From b63e34d4673de3a9a5e41e2da774d37332cfbe08 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Fri, 20 Mar 2026 11:34:19 +0100 Subject: [PATCH 081/185] Swift: Fix typo --- .../ql/lib/codeql/swift/frameworks/StandardLibrary/Security.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/swift/ql/lib/codeql/swift/frameworks/StandardLibrary/Security.qll b/swift/ql/lib/codeql/swift/frameworks/StandardLibrary/Security.qll index d824d1bd386..d31e21cc632 100644 --- a/swift/ql/lib/codeql/swift/frameworks/StandardLibrary/Security.qll +++ b/swift/ql/lib/codeql/swift/frameworks/StandardLibrary/Security.qll @@ -1,5 +1,5 @@ /** - * Provides models for standard library Swift classses related to security + * Provides models for standard library Swift classes related to security * (certificate, key and trust services). */ From bceab0b44e4a071575799b6e39a1adc611de4450 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Sat, 21 Feb 2026 22:25:02 +0000 Subject: [PATCH 082/185] Add extensible predicates --- .../rust/dataflow/internal/ModelsAsData.qll | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll index 8b55de8d54d..27143392e1f 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll @@ -98,6 +98,29 @@ extensible predicate neutralModel( string path, string kind, string provenance, QlBuiltins::ExtensionId madId ); +/** + * Holds if in a call to the function with canonical path `path`, the value referred + * to by `output` is a barrier of the given `kind` and `madId` is the data + * extension row number. + */ +extensible predicate barrierModel( + string path, string output, string kind, string provenance, QlBuiltins::ExtensionId madId +); + +/** + * Holds if in a call to the function with canonical path `path`, the value referred + * to by `input` is a barrier guard of the given `kind` and `madId` is the data + * extension row number. + * the value referred to by `input` is assumed to lead to a parameter of a call + * (possibly `self`), and the call is guarding the parameter. + * `branch` is either `true` or `false`, indicating which branch of the guard + * is protecting the parameter. + */ +extensible predicate barrierGuardModel( + string path, string input, string branch, string kind, string provenance, + QlBuiltins::ExtensionId madId +); + /** * Holds if the given extension tuple `madId` should pretty-print as `model`. * From f342bae962af40397a25ecbb0258290bdf9b7d84 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Sat, 21 Feb 2026 22:25:12 +0000 Subject: [PATCH 083/185] Update empty.model.yml --- .../lib/codeql/rust/dataflow/internal/empty.model.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/empty.model.yml b/rust/ql/lib/codeql/rust/dataflow/internal/empty.model.yml index 1a33951dfc3..61c0327171a 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/empty.model.yml +++ b/rust/ql/lib/codeql/rust/dataflow/internal/empty.model.yml @@ -15,3 +15,13 @@ extensions: pack: codeql/rust-all extensible: summaryModel data: [] + + - addsTo: + pack: codeql/rust-all + extensible: barrierModel + data: [] + + - addsTo: + pack: codeql/rust-all + extensible: barrierGuardModel + data: [] From f9521e9e883f36f997998fe05603439cf9c5198a Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 24 Feb 2026 19:36:17 +0000 Subject: [PATCH 084/185] Update `interpretModelForTest` --- .../lib/codeql/rust/dataflow/internal/ModelsAsData.qll | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll index 27143392e1f..ada06fafb4b 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll @@ -146,6 +146,16 @@ predicate interpretModelForTest(QlBuiltins::ExtensionId madId, string model) { neutralModel(path, kind, _, madId) and model = "Neutral: " + path + "; " + kind ) + or + exists(string path, string output, string kind | + barrierModel(path, output, kind, _, madId) and + model = "Barrier: " + path + "; " + output + "; " + kind + ) + or + exists(string path, string input, string branch, string kind | + barrierGuardModel(path, input, branch, kind, _, madId) and + model = "Barrier guard: " + path + "; " + input + "; " + branch + "; " + kind + ) } private class SummarizedCallableFromModel extends SummarizedCallable::Range { From f4550544ceea56275a4758ac7368853c4371de83 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Mon, 16 Mar 2026 22:11:58 +0000 Subject: [PATCH 085/185] Shared: Add `barrierElement` in FlowSummaryImpl.qll --- .../dataflow/internal/FlowSummaryImpl.qll | 43 ++++++++++++++++++- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll b/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll index d7667257192..fa20405f788 100644 --- a/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll @@ -368,6 +368,19 @@ module Make< abstract predicate isSink(string input, string kind, Provenance provenance, string model); } + /** A barrier element. */ + abstract class BarrierElement extends SourceBaseFinal { + bindingset[this] + BarrierElement() { any() } + + /** + * Holds if this element is a flow barrier of kind `kind`, where data + * flows out as described by `output`. + */ + pragma[nomagic] + abstract predicate isBarrier(string output, string kind, Provenance provenance, string model); + } + private signature predicate hasKindSig(string kind); signature class NeutralCallableSig extends SummarizedCallableBaseFinal { @@ -723,7 +736,19 @@ module Make< ) } - private predicate summarySpec(string spec) { + private predicate isRelevantBarrier( + BarrierElement e, string output, string kind, Provenance provenance, string model + ) { + e.isBarrier(output, kind, provenance, model) and + ( + provenance.isManual() + or + provenance.isGenerated() and + not exists(Provenance p | p.isManual() and e.isBarrier(_, kind, p, _)) + ) + } + + private predicate flowSpec(string spec) { exists(SummarizedCallable c | c.propagatesFlow(spec, _, _, _, _, _) or @@ -732,10 +757,12 @@ module Make< or isRelevantSource(_, spec, _, _, _) or + isRelevantBarrier(_, spec, _, _, _) + or isRelevantSink(_, spec, _, _, _) } - import AccessPathSyntax::AccessPath + import AccessPathSyntax::AccessPath /** Holds if specification component `token` parses as parameter `pos`. */ predicate parseParam(AccessPathToken token, ArgumentPosition pos) { @@ -1515,6 +1542,18 @@ module Make< ) } + /** + * Holds if `barrier` is a relevant barrier element with output specification `outSpec`. + */ + predicate barrierSpec( + BarrierElement barrier, SummaryComponentStack outSpec, string kind, string model + ) { + exists(string output | + isRelevantBarrier(barrier, output, kind, _, model) and + External::interpretSpec(output, outSpec) + ) + } + signature module TypesInputSig { /** Gets the type of content `c`. */ DataFlowType getContentType(ContentSet c); From d3177b9e82b28a703dfed8673a954285fff189c7 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Mon, 16 Mar 2026 22:14:07 +0000 Subject: [PATCH 086/185] Add FlowBarrier.qll --- .../lib/codeql/rust/dataflow/FlowBarrier.qll | 54 +++++++++++++++++++ .../rust/dataflow/internal/DataFlowImpl.qll | 19 +++++++ .../dataflow/internal/FlowSummaryImpl.qll | 19 +++++-- 3 files changed, 87 insertions(+), 5 deletions(-) create mode 100644 rust/ql/lib/codeql/rust/dataflow/FlowBarrier.qll diff --git a/rust/ql/lib/codeql/rust/dataflow/FlowBarrier.qll b/rust/ql/lib/codeql/rust/dataflow/FlowBarrier.qll new file mode 100644 index 00000000000..1d5e3957112 --- /dev/null +++ b/rust/ql/lib/codeql/rust/dataflow/FlowBarrier.qll @@ -0,0 +1,54 @@ +/** + * Provides classes and predicates for defining barriers. + * + * Flow barriers defined here feed into data flow configurations as follows: + * + * ```text + * data from *.model.yml | QL extensions of FlowBarrier::Range + * v v + * FlowBarrier (associated with a models-as-data kind string) + * v + * barrierNode predicate | other QL defined barriers, for example using concepts + * v v + * various Barrier classes for specific data flow configurations <- extending QueryBarrier + * ``` + * + * New barriers should be defined using models-as-data, QL extensions of + * `FlowBarrier::Range`, or concepts. Data flow configurations should use the + * `barrierNode` predicate and/or concepts to define their barriers. + */ + +private import rust +private import internal.FlowSummaryImpl as Impl +private import internal.DataFlowImpl as DataFlowImpl + +// import all instances below +private module Barriers { + private import codeql.rust.Frameworks + private import codeql.rust.dataflow.internal.ModelsAsData +} + +/** Provides the `Range` class used to define the extent of `FlowBarrier`. */ +module FlowBarrier { + /** A flow barrier. */ + abstract class Range extends Impl::Public::BarrierElement { + bindingset[this] + Range() { any() } + + override predicate isBarrier( + string output, string kind, Impl::Public::Provenance provenance, string model + ) { + this.isBarrier(output, kind) and provenance = "manual" and model = "" + } + + /** + * Holds if this element is a flow barrier of kind `kind`, where data + * flows out as described by `output`. + */ + predicate isBarrier(string output, string kind) { none() } + } +} + +final class FlowBarrier = FlowBarrier::Range; + +predicate barrierNode = DataFlowImpl::barrierNode/2; diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll index 23424dbffd9..f416c2a20e5 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll @@ -1157,6 +1157,25 @@ private module Cached { cached predicate sinkNode(Node n, string kind) { n.(FlowSummaryNode).isSink(kind, _) } + /** Holds if `n` is a flow barrier of kind `kind`. */ + cached + predicate barrierNode(Node n, string kind) { + exists( + FlowSummaryImpl::Public::BarrierElement b, + FlowSummaryImpl::Private::SummaryComponentStack stack + | + FlowSummaryImpl::Private::barrierSpec(b, stack, kind, _) + | + n = FlowSummaryImpl::StepsInput::getSourceNode(b, stack, false) + or + // For barriers like `Argument[0]` we want to target the pre-update node + n = + FlowSummaryImpl::StepsInput::getSourceNode(b, stack, true) + .(PostUpdateNode) + .getPreUpdateNode() + ) + } + /** * A step in a flow summary defined using `OptionalStep[name]`. An `OptionalStep` is "opt-in", which means * that by default the step is not present in the flow summary and needs to be explicitly enabled by defining diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll index ab0b3aff9ca..85032814651 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll @@ -143,7 +143,7 @@ module Input implements InputSig { private import Make as Impl -private module StepsInput implements Impl::Private::StepsInputSig { +module StepsInput implements Impl::Private::StepsInputSig { DataFlowCall getACall(Public::SummarizedCallable sc) { result.asCall().getStaticTarget() = sc } /** Gets the argument of `source` described by `sc`, if any. */ @@ -171,18 +171,27 @@ private module StepsInput implements Impl::Private::StepsInputSig { result.asCfgScope() = source.getEnclosingCfgScope() } - RustDataFlow::Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { + additional RustDataFlow::Node getSourceNode( + Input::SourceBase source, Impl::Private::SummaryComponentStack s, boolean isArgPostUpdate + ) { s.head() = Impl::Private::SummaryComponent::return(_) and - result.asExpr() = source.getCall() + result.asExpr() = source.getCall() and + isArgPostUpdate = false or 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()) + result.asParameter() = getCallable(arg).getParam(pos.getPosition()) and + isArgPostUpdate = false ) or result.(RustDataFlow::PostUpdateNode).getPreUpdateNode().asExpr() = - getSourceNodeArgument(source, s.headOfSingleton()) + getSourceNodeArgument(source, s.headOfSingleton()) and + isArgPostUpdate = true + } + + RustDataFlow::Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { + result = getSourceNode(source, s, _) } RustDataFlow::Node getSinkNode(Input::SinkBase sink, Impl::Private::SummaryComponent sc) { From e86ce8feeda3620f73de84c44d4345222368c6bb Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Mon, 16 Mar 2026 22:14:38 +0000 Subject: [PATCH 087/185] Instantiate flow barriers from MaD --- .../rust/dataflow/internal/ModelsAsData.qll | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll index ada06fafb4b..943a32e4448 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll @@ -44,6 +44,7 @@ */ private import rust +private import codeql.rust.dataflow.FlowBarrier private import codeql.rust.dataflow.FlowSummary private import codeql.rust.dataflow.FlowSource private import codeql.rust.dataflow.FlowSink @@ -239,6 +240,22 @@ private class FlowSinkFromModel extends FlowSink::Range { } } +private class FlowBarrierFromModel extends FlowBarrier::Range { + private string path; + + FlowBarrierFromModel() { + barrierModel(path, _, _, _, _) and + this.callResolvesTo(path) + } + + override predicate isBarrier(string output, string kind, Provenance provenance, string model) { + exists(QlBuiltins::ExtensionId madId | + barrierModel(path, output, kind, provenance, madId) and + model = "MaD:" + madId.toString() + ) + } +} + private module Debug { private import FlowSummaryImpl private import Private From 93c656065d20428fffe43d7c79850f5dca41fa4e Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Mon, 16 Mar 2026 22:16:01 +0000 Subject: [PATCH 088/185] Add test for MaD barriers --- .../dataflow/barrier/inline-flow.expected | 21 ------------------- .../dataflow/barrier/inline-flow.ext.yml | 6 ++++++ .../dataflow/barrier/inline-flow.ql | 13 +++++++++++- .../library-tests/dataflow/barrier/main.rs | 2 +- 4 files changed, 19 insertions(+), 23 deletions(-) create mode 100644 rust/ql/test/library-tests/dataflow/barrier/inline-flow.ext.yml diff --git a/rust/ql/test/library-tests/dataflow/barrier/inline-flow.expected b/rust/ql/test/library-tests/dataflow/barrier/inline-flow.expected index 68da00c4312..0514da67333 100644 --- a/rust/ql/test/library-tests/dataflow/barrier/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/barrier/inline-flow.expected @@ -1,41 +1,20 @@ models edges -| main.rs:9:13:9:19 | ...: ... | main.rs:10:11:10:11 | s | provenance | | -| main.rs:10:11:10:11 | s | main.rs:12:9:12:9 | s | provenance | | -| main.rs:12:9:12:9 | s | main.rs:9:30:14:1 | { ... } | provenance | | | main.rs:21:9:21:9 | s | main.rs:22:10:22:10 | s | provenance | | | main.rs:21:13:21:21 | source(...) | main.rs:21:9:21:9 | s | provenance | | -| main.rs:26:9:26:9 | s | main.rs:27:22:27:22 | s | provenance | | -| main.rs:26:13:26:21 | source(...) | main.rs:26:9:26:9 | s | provenance | | -| main.rs:27:9:27:9 | s | main.rs:28:10:28:10 | s | provenance | | -| main.rs:27:13:27:23 | sanitize(...) | main.rs:27:9:27:9 | s | provenance | | -| main.rs:27:22:27:22 | s | main.rs:9:13:9:19 | ...: ... | provenance | | -| main.rs:27:22:27:22 | s | main.rs:27:13:27:23 | sanitize(...) | provenance | | | main.rs:32:9:32:9 | s | main.rs:33:10:33:10 | s | provenance | | | main.rs:32:13:32:21 | source(...) | main.rs:32:9:32:9 | s | provenance | | nodes -| main.rs:9:13:9:19 | ...: ... | semmle.label | ...: ... | -| main.rs:9:30:14:1 | { ... } | semmle.label | { ... } | -| main.rs:10:11:10:11 | s | semmle.label | s | -| main.rs:12:9:12:9 | s | semmle.label | s | | main.rs:17:10:17:18 | source(...) | semmle.label | source(...) | | main.rs:21:9:21:9 | s | semmle.label | s | | main.rs:21:13:21:21 | source(...) | semmle.label | source(...) | | main.rs:22:10:22:10 | s | semmle.label | s | -| main.rs:26:9:26:9 | s | semmle.label | s | -| main.rs:26:13:26:21 | source(...) | semmle.label | source(...) | -| main.rs:27:9:27:9 | s | semmle.label | s | -| main.rs:27:13:27:23 | sanitize(...) | semmle.label | sanitize(...) | -| main.rs:27:22:27:22 | s | semmle.label | s | -| main.rs:28:10:28:10 | s | semmle.label | s | | main.rs:32:9:32:9 | s | semmle.label | s | | main.rs:32:13:32:21 | source(...) | semmle.label | source(...) | | main.rs:33:10:33:10 | s | semmle.label | s | subpaths -| main.rs:27:22:27:22 | s | main.rs:9:13:9:19 | ...: ... | main.rs:9:30:14:1 | { ... } | main.rs:27:13:27:23 | sanitize(...) | testFailures #select | main.rs:17:10:17:18 | source(...) | main.rs:17:10:17:18 | source(...) | main.rs:17:10:17:18 | source(...) | $@ | main.rs:17:10:17:18 | source(...) | source(...) | | main.rs:22:10:22:10 | s | main.rs:21:13:21:21 | source(...) | main.rs:22:10:22:10 | s | $@ | main.rs:21:13:21:21 | source(...) | source(...) | -| main.rs:28:10:28:10 | s | main.rs:26:13:26:21 | source(...) | main.rs:28:10:28:10 | s | $@ | main.rs:26:13:26:21 | source(...) | source(...) | | main.rs:33:10:33:10 | s | main.rs:32:13:32:21 | source(...) | main.rs:33:10:33:10 | s | $@ | main.rs:32:13:32:21 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/barrier/inline-flow.ext.yml b/rust/ql/test/library-tests/dataflow/barrier/inline-flow.ext.yml new file mode 100644 index 00000000000..98c62dd0758 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/barrier/inline-flow.ext.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/rust-all + extensible: barrierModel + data: + - ["main::sanitize", "ReturnValue", "test-barrier", "manual"] 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 5dcb7ee70a9..7cc30bf6350 100644 --- a/rust/ql/test/library-tests/dataflow/barrier/inline-flow.ql +++ b/rust/ql/test/library-tests/dataflow/barrier/inline-flow.ql @@ -3,8 +3,19 @@ */ import rust +import codeql.rust.dataflow.DataFlow +import codeql.rust.dataflow.FlowBarrier import utils.test.InlineFlowTest -import DefaultFlowTest + +module CustomConfig implements DataFlow::ConfigSig { + predicate isSource = DefaultFlowConfig::isSource/1; + + predicate isSink = DefaultFlowConfig::isSink/1; + + predicate isBarrier(DataFlow::Node n) { barrierNode(n, "test-barrier") } +} + +import FlowTest import TaintFlow::PathGraph from TaintFlow::PathNode source, TaintFlow::PathNode sink diff --git a/rust/ql/test/library-tests/dataflow/barrier/main.rs b/rust/ql/test/library-tests/dataflow/barrier/main.rs index 14935f0f328..0791c56f240 100644 --- a/rust/ql/test/library-tests/dataflow/barrier/main.rs +++ b/rust/ql/test/library-tests/dataflow/barrier/main.rs @@ -25,7 +25,7 @@ fn through_variable() { fn with_barrier() { let s = source(1); let s = sanitize(s); - sink(s); // $ SPURIOUS: hasValueFlow=1 + sink(s); } fn main() { From 2f0d3288ce534ab74b3fb8deb3955cd101e9c4db Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Mon, 16 Mar 2026 22:18:56 +0000 Subject: [PATCH 089/185] Misc: fix typos in QLDocs --- rust/ql/lib/codeql/rust/dataflow/internal/Node.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll b/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll index 1fa3983f811..1ccb7db73f5 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll @@ -82,12 +82,12 @@ class FlowSummaryNode extends Node, TFlowSummaryNode { result = this.getSummaryNode().getSinkElement() } - /** Holds is this node is a source node of kind `kind`. */ + /** Holds if this node is a source node of kind `kind`. */ predicate isSource(string kind, string model) { this.getSummaryNode().(FlowSummaryImpl::Private::SourceOutputNode).isEntry(kind, model) } - /** Holds is this node is a sink node of kind `kind`. */ + /** Holds if this node is a sink node of kind `kind`. */ predicate isSink(string kind, string model) { this.getSummaryNode().(FlowSummaryImpl::Private::SinkInputNode).isExit(kind, model) } From c5457d3e309dd5abd8778ad213170e4e16e757df Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 17 Mar 2026 10:46:08 +0000 Subject: [PATCH 090/185] Add (failing) test for MaD barrier guard --- .../dataflow/barrier/inline-flow.expected | 6 ++++++ .../ql/test/library-tests/dataflow/barrier/main.rs | 14 ++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/rust/ql/test/library-tests/dataflow/barrier/inline-flow.expected b/rust/ql/test/library-tests/dataflow/barrier/inline-flow.expected index 0514da67333..b1e32f95fb9 100644 --- a/rust/ql/test/library-tests/dataflow/barrier/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/barrier/inline-flow.expected @@ -4,6 +4,8 @@ edges | main.rs:21:13:21:21 | source(...) | main.rs:21:9:21:9 | s | provenance | | | main.rs:32:9:32:9 | s | main.rs:33:10:33:10 | s | provenance | | | main.rs:32:13:32:21 | source(...) | main.rs:32:9:32:9 | s | provenance | | +| main.rs:44:9:44:9 | s | main.rs:46:14:46:14 | s | provenance | | +| main.rs:44:13:44:21 | source(...) | main.rs:44:9:44:9 | s | provenance | | nodes | main.rs:17:10:17:18 | source(...) | semmle.label | source(...) | | main.rs:21:9:21:9 | s | semmle.label | s | @@ -12,9 +14,13 @@ nodes | main.rs:32:9:32:9 | s | semmle.label | s | | main.rs:32:13:32:21 | source(...) | semmle.label | source(...) | | main.rs:33:10:33:10 | s | semmle.label | s | +| main.rs:44:9:44:9 | s | semmle.label | s | +| main.rs:44:13:44:21 | source(...) | semmle.label | source(...) | +| main.rs:46:14:46:14 | s | semmle.label | s | subpaths testFailures #select | main.rs:17:10:17:18 | source(...) | main.rs:17:10:17:18 | source(...) | main.rs:17:10:17:18 | source(...) | $@ | main.rs:17:10:17:18 | source(...) | source(...) | | main.rs:22:10:22:10 | s | main.rs:21:13:21:21 | source(...) | main.rs:22:10:22:10 | s | $@ | main.rs:21:13:21:21 | source(...) | source(...) | | main.rs:33:10:33:10 | s | main.rs:32:13:32:21 | source(...) | main.rs:33:10:33:10 | s | $@ | main.rs:32:13:32:21 | source(...) | source(...) | +| main.rs:46:14:46:14 | s | main.rs:44:13:44:21 | source(...) | main.rs:46:14:46:14 | s | $@ | main.rs:44:13:44:21 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/barrier/main.rs b/rust/ql/test/library-tests/dataflow/barrier/main.rs index 0791c56f240..6cf317d105a 100644 --- a/rust/ql/test/library-tests/dataflow/barrier/main.rs +++ b/rust/ql/test/library-tests/dataflow/barrier/main.rs @@ -32,3 +32,17 @@ fn main() { let s = source(1); sink(s); // $ hasValueFlow=1 } + +fn verify_safe(s: &str) -> bool { + match s { + "dangerous" => false, + _ => true, + } +} + +fn with_barrier_guard() { + let s = source(1); + if verify_safe(s) { + sink(s); // $ SPURIOUS: hasValueFlow=1 + } +} From 77cb35380c6d28af2a1027e4446f565007d269d4 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 17 Mar 2026 11:10:25 +0000 Subject: [PATCH 091/185] Add MaD barrier guard model to make test pass --- .../test/library-tests/dataflow/barrier/inline-flow.ext.yml | 5 +++++ rust/ql/test/library-tests/dataflow/barrier/main.rs | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/rust/ql/test/library-tests/dataflow/barrier/inline-flow.ext.yml b/rust/ql/test/library-tests/dataflow/barrier/inline-flow.ext.yml index 98c62dd0758..58e55a040d2 100644 --- a/rust/ql/test/library-tests/dataflow/barrier/inline-flow.ext.yml +++ b/rust/ql/test/library-tests/dataflow/barrier/inline-flow.ext.yml @@ -4,3 +4,8 @@ extensions: extensible: barrierModel data: - ["main::sanitize", "ReturnValue", "test-barrier", "manual"] + - addsTo: + pack: codeql/rust-all + extensible: barrierGuardModel + data: + - ["main::verify_safe", "Argument[0]", "true", "test-barrier", "manual"] diff --git a/rust/ql/test/library-tests/dataflow/barrier/main.rs b/rust/ql/test/library-tests/dataflow/barrier/main.rs index 6cf317d105a..268a8673bc9 100644 --- a/rust/ql/test/library-tests/dataflow/barrier/main.rs +++ b/rust/ql/test/library-tests/dataflow/barrier/main.rs @@ -43,6 +43,6 @@ fn verify_safe(s: &str) -> bool { fn with_barrier_guard() { let s = source(1); if verify_safe(s) { - sink(s); // $ SPURIOUS: hasValueFlow=1 + sink(s); } } From 7d65baccb2bd33a30be364a463fec5996cc46d0e Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 20 Mar 2026 11:08:33 +0000 Subject: [PATCH 092/185] Add `FlowBarrierGuard` to FlowBarrier.qll --- .../lib/codeql/rust/dataflow/FlowBarrier.qll | 23 ++++++ .../rust/dataflow/internal/DataFlowImpl.qll | 76 ++++++++++++++++++- .../codeql/rust/dataflow/internal/SsaImpl.qll | 25 ++++++ .../dataflow/internal/FlowSummaryImpl.qll | 43 +++++++++++ 4 files changed, 164 insertions(+), 3 deletions(-) diff --git a/rust/ql/lib/codeql/rust/dataflow/FlowBarrier.qll b/rust/ql/lib/codeql/rust/dataflow/FlowBarrier.qll index 1d5e3957112..7ca64bedb5f 100644 --- a/rust/ql/lib/codeql/rust/dataflow/FlowBarrier.qll +++ b/rust/ql/lib/codeql/rust/dataflow/FlowBarrier.qll @@ -51,4 +51,27 @@ module FlowBarrier { final class FlowBarrier = FlowBarrier::Range; +/** Provides the `Range` class used to define the extent of `FlowBarrierGuard`. */ +module FlowBarrierGuard { + /** A flow barrier guard. */ + abstract class Range extends Impl::Public::BarrierGuardElement { + bindingset[this] + Range() { any() } + + override predicate isBarrierGuard( + string input, string branch, string kind, Impl::Public::Provenance provenance, string model + ) { + this.isBarrierGuard(input, branch, kind) and provenance = "manual" and model = "" + } + + /** + * Holds if this element is a flow barrier guard of kind `kind`, for data + * flowing in as described by `input`, when `this` evaluates to `branch`. + */ + predicate isBarrierGuard(string input, string branch, string kind) { none() } + } +} + +final class FlowBarrierGuard = FlowBarrierGuard::Range; + predicate barrierNode = DataFlowImpl::barrierNode/2; diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll index f416c2a20e5..27773758fc4 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll @@ -1157,14 +1157,50 @@ private module Cached { cached predicate sinkNode(Node n, string kind) { n.(FlowSummaryNode).isSink(kind, _) } - /** Holds if `n` is a flow barrier of kind `kind`. */ + private newtype TKindModelPair = + TMkPair(string kind, string model) { + FlowSummaryImpl::Private::barrierGuardSpec(_, _, _, kind, model) + } + + private boolean convertAcceptingValue(FlowSummaryImpl::Public::AcceptingValue av) { + av.isTrue() and result = true + or + av.isFalse() and result = false + // Remaining cases are not supported yet, they depend on the shared Guards library. + // 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(AstNode g, Expr e, boolean gv, TKindModelPair kmp) { + exists( + FlowSummaryImpl::Public::BarrierGuardElement b, + FlowSummaryImpl::Private::SummaryComponentStack stack, + FlowSummaryImpl::Public::AcceptingValue acceptingvalue, string kind, string model + | + FlowSummaryImpl::Private::barrierGuardSpec(b, stack, acceptingvalue, kind, model) and + e = FlowSummaryImpl::StepsInput::getSinkNode(b, stack.headOfSingleton()).asExpr() and + kmp = TMkPair(kind, model) and + gv = convertAcceptingValue(acceptingvalue) and + g = b.getCall() + ) + } + + /** Holds if `n` is a flow barrier of kind `kind` and model `model`. */ cached - predicate barrierNode(Node n, string kind) { + predicate barrierNode(Node n, string kind, string model) { exists( FlowSummaryImpl::Public::BarrierElement b, FlowSummaryImpl::Private::SummaryComponentStack stack | - FlowSummaryImpl::Private::barrierSpec(b, stack, kind, _) + FlowSummaryImpl::Private::barrierSpec(b, stack, kind, model) | n = FlowSummaryImpl::StepsInput::getSourceNode(b, stack, false) or @@ -1174,6 +1210,9 @@ private module Cached { .(PostUpdateNode) .getPreUpdateNode() ) + or + ParameterizedBarrierGuard::getABarrierNode(TMkPair(kind, + model)) = n } /** @@ -1199,3 +1238,34 @@ private module Cached { } import Cached + +/** Holds if `n` is a flow barrier of kind `kind`. */ +predicate barrierNode(Node n, string kind) { barrierNode(n, kind, _) } + +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(AstNode g, Expr e, boolean branch, 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::ParameterizedBarrierGuard::getABarrierNode(param) + } +} diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll index 03db7c35b4d..874126f6a08 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll @@ -305,6 +305,31 @@ private module Cached { predicate getABarrierNode = getABarrierNodeImpl/0; } + + bindingset[this] + private signature class ParamSig; + + private module WithParam { + signature predicate guardChecksSig(AstNode g, Expr e, boolean branch, P param); + } + + overlay[global] + cached // nothing is actually cached + module ParameterizedBarrierGuard::guardChecksSig/4 guardChecks> { + private predicate guardChecksAdjTypes( + DataFlowIntegrationInput::Guard g, DataFlowIntegrationInput::Expr e, + DataFlowIntegrationInput::GuardValue branch, P param + ) { + guardChecks(g, e, branch, param) + } + + private Node getABarrierNodeImpl(P param) { + result = + DataFlowIntegrationImpl::BarrierGuardWithState::getABarrierNode(param) + } + + predicate getABarrierNode = getABarrierNodeImpl/1; + } } } diff --git a/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll b/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll index fa20405f788..8b25c54bfa0 100644 --- a/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll @@ -381,6 +381,21 @@ module Make< abstract predicate isBarrier(string output, string kind, Provenance provenance, string model); } + /** A barrier guard element. */ + abstract class BarrierGuardElement extends SinkBaseFinal { + bindingset[this] + BarrierGuardElement() { any() } + + /** + * Holds if this element is a flow barrier guard of kind `kind`, for data + * flowing in as described by `input`, when `this` evaluates to `branch`. + */ + pragma[nomagic] + abstract predicate isBarrierGuard( + string input, string branch, string kind, Provenance provenance, string model + ); + } + private signature predicate hasKindSig(string kind); signature class NeutralCallableSig extends SummarizedCallableBaseFinal { @@ -748,6 +763,19 @@ module Make< ) } + private predicate isRelevantBarrierGuard( + BarrierGuardElement e, string input, string branch, string kind, Provenance provenance, + string model + ) { + e.isBarrierGuard(input, branch, kind, provenance, model) and + ( + provenance.isManual() + or + provenance.isGenerated() and + not exists(Provenance p | p.isManual() and e.isBarrierGuard(_, _, kind, p, _)) + ) + } + private predicate flowSpec(string spec) { exists(SummarizedCallable c | c.propagatesFlow(spec, _, _, _, _, _) @@ -759,6 +787,8 @@ module Make< or isRelevantBarrier(_, spec, _, _, _) or + isRelevantBarrierGuard(_, spec, _, _, _, _) + or isRelevantSink(_, spec, _, _, _) } @@ -1554,6 +1584,19 @@ module Make< ) } + /** + * Holds if `barrierGuard` is a relevant barrier guard element with input specification `inSpec`. + */ + predicate barrierGuardSpec( + BarrierGuardElement barrierGuard, SummaryComponentStack inSpec, string branch, string kind, + string model + ) { + exists(string input | + isRelevantBarrierGuard(barrierGuard, input, branch, kind, _, model) and + External::interpretSpec(input, inSpec) + ) + } + signature module TypesInputSig { /** Gets the type of content `c`. */ DataFlowType getContentType(ContentSet c); From 769b3a6aae2d28093948d70f8b9f1da4cb73fe92 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 17 Mar 2026 13:16:25 +0000 Subject: [PATCH 093/185] Instantiate flow barrier guards from MaD --- .../rust/dataflow/internal/ModelsAsData.qll | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll index 943a32e4448..a3f3da9364d 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll @@ -256,6 +256,24 @@ private class FlowBarrierFromModel extends FlowBarrier::Range { } } +private class FlowBarrierGuardFromModel extends FlowBarrierGuard::Range { + private string path; + + FlowBarrierGuardFromModel() { + barrierGuardModel(path, _, _, _, _, _) and + this.callResolvesTo(path) + } + + override predicate isBarrierGuard( + string input, string branch, string kind, Provenance provenance, string model + ) { + exists(QlBuiltins::ExtensionId madId | + barrierGuardModel(path, input, branch, kind, provenance, madId) and + model = "MaD:" + madId.toString() + ) + } +} + private module Debug { private import FlowSummaryImpl private import Private From bde9378ceeba8321291580b2ea7dc362fa8c7023 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 20 Mar 2026 11:10:08 +0000 Subject: [PATCH 094/185] Update MaD barrier guard test output --- .../library-tests/dataflow/barrier/inline-flow.expected | 6 ------ 1 file changed, 6 deletions(-) diff --git a/rust/ql/test/library-tests/dataflow/barrier/inline-flow.expected b/rust/ql/test/library-tests/dataflow/barrier/inline-flow.expected index b1e32f95fb9..0514da67333 100644 --- a/rust/ql/test/library-tests/dataflow/barrier/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/barrier/inline-flow.expected @@ -4,8 +4,6 @@ edges | main.rs:21:13:21:21 | source(...) | main.rs:21:9:21:9 | s | provenance | | | main.rs:32:9:32:9 | s | main.rs:33:10:33:10 | s | provenance | | | main.rs:32:13:32:21 | source(...) | main.rs:32:9:32:9 | s | provenance | | -| main.rs:44:9:44:9 | s | main.rs:46:14:46:14 | s | provenance | | -| main.rs:44:13:44:21 | source(...) | main.rs:44:9:44:9 | s | provenance | | nodes | main.rs:17:10:17:18 | source(...) | semmle.label | source(...) | | main.rs:21:9:21:9 | s | semmle.label | s | @@ -14,13 +12,9 @@ nodes | main.rs:32:9:32:9 | s | semmle.label | s | | main.rs:32:13:32:21 | source(...) | semmle.label | source(...) | | main.rs:33:10:33:10 | s | semmle.label | s | -| main.rs:44:9:44:9 | s | semmle.label | s | -| main.rs:44:13:44:21 | source(...) | semmle.label | source(...) | -| main.rs:46:14:46:14 | s | semmle.label | s | subpaths testFailures #select | main.rs:17:10:17:18 | source(...) | main.rs:17:10:17:18 | source(...) | main.rs:17:10:17:18 | source(...) | $@ | main.rs:17:10:17:18 | source(...) | source(...) | | main.rs:22:10:22:10 | s | main.rs:21:13:21:21 | source(...) | main.rs:22:10:22:10 | s | $@ | main.rs:21:13:21:21 | source(...) | source(...) | | main.rs:33:10:33:10 | s | main.rs:32:13:32:21 | source(...) | main.rs:33:10:33:10 | s | $@ | main.rs:32:13:32:21 | source(...) | source(...) | -| main.rs:46:14:46:14 | s | main.rs:44:13:44:21 | source(...) | main.rs:46:14:46:14 | s | $@ | main.rs:44:13:44:21 | source(...) | source(...) | From 4b364639a2bf4ae8a63b596917a29183e36ddfbd Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 19 Mar 2026 13:16:27 +0100 Subject: [PATCH 095/185] Ruby: Fix join orders following DB stats removal --- .../lib/codeql/ruby/ast/internal/Literal.qll | 66 ++++++++++--------- .../lib/codeql/ruby/ast/internal/Module.qll | 6 +- .../ql/lib/codeql/ruby/ast/internal/Scope.qll | 16 +++-- .../dataflow/internal/DataFlowDispatch.qll | 38 ++++++----- .../dataflow/internal/DataFlowPrivate.qll | 61 ++++++++++------- .../codeql/ruby/frameworks/ActiveRecord.qll | 38 ++++++----- .../frameworks/actioncontroller/Filters.qll | 7 +- .../actiondispatch/internal/Routing.qll | 1 + .../lib/codeql/ruby/frameworks/core/Array.qll | 4 +- .../lib/codeql/ruby/frameworks/core/Hash.qll | 4 +- 10 files changed, 139 insertions(+), 102 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/ast/internal/Literal.qll b/ruby/ql/lib/codeql/ruby/ast/internal/Literal.qll index 6a2df06b349..c6f906a8752 100644 --- a/ruby/ql/lib/codeql/ruby/ast/internal/Literal.qll +++ b/ruby/ql/lib/codeql/ruby/ast/internal/Literal.qll @@ -9,8 +9,12 @@ private import codeql.ruby.ast.internal.Scope private import codeql.ruby.controlflow.CfgNodes private import codeql.util.Numbers +bindingset[t] +pragma[inline_late] +private string getTokenValue(Ruby::Token t) { result = t.getValue() } + int parseInteger(Ruby::Integer i) { - exists(string s | s = i.getValue().toLowerCase().replaceAll("_", "") | + exists(string s | s = getTokenValue(i).toLowerCase().replaceAll("_", "") | s.charAt(0) != "0" and result = s.toInt() or @@ -38,7 +42,7 @@ class IntegerLiteralReal extends IntegerLiteralImpl, TIntegerLiteralReal { final override int getValue() { result = parseInteger(g) } - final override string toString() { result = g.getValue() } + final override string toString() { result = getTokenValue(g) } } class IntegerLiteralSynth extends IntegerLiteralImpl, TIntegerLiteralSynth { @@ -52,7 +56,7 @@ class IntegerLiteralSynth extends IntegerLiteralImpl, TIntegerLiteralSynth { } // TODO: implement properly -float parseFloat(Ruby::Float f) { result = f.getValue().toFloat() } +float parseFloat(Ruby::Float f) { result = getTokenValue(f).toFloat() } class FloatLiteralImpl extends Expr, TFloatLiteral { private Ruby::Float g; @@ -61,7 +65,7 @@ class FloatLiteralImpl extends Expr, TFloatLiteral { final float getValue() { result = parseFloat(g) } - final override string toString() { result = g.getValue() } + final override string toString() { result = getTokenValue(g) } } predicate isRationalValue(Ruby::Rational r, int numerator, int denominator) { @@ -71,8 +75,8 @@ predicate isRationalValue(Ruby::Rational r, int numerator, int denominator) { exists(Ruby::Float f, string regex, string before, string after | f = r.getChild() and regex = "([^.]*)\\.(.*)" and - before = f.getValue().regexpCapture(regex, 1) and - after = f.getValue().regexpCapture(regex, 2) and + before = getTokenValue(f).regexpCapture(regex, 1) and + after = getTokenValue(f).regexpCapture(regex, 2) and numerator = before.toInt() * denominator + after.toInt() and denominator = 10.pow(after.length()) ) @@ -87,14 +91,14 @@ class RationalLiteralImpl extends Expr, TRationalLiteral { isRationalValue(g, numerator, denominator) } - final override string toString() { result = g.getChild().(Ruby::Token).getValue() + "r" } + final override string toString() { result = getTokenValue(g.getChild()) + "r" } } float getComplexValue(Ruby::Complex c) { exists(int n, int d | isRationalValue(c.getChild(), n, d) and result = n.(float) / d.(float)) or exists(string s | - s = c.getChild().(Ruby::Token).getValue() and + s = getTokenValue(c.getChild()) and result = s.prefix(s.length()).toFloat() ) } @@ -109,8 +113,8 @@ class ComplexLiteralImpl extends Expr, TComplexLiteral { } final override string toString() { - result = g.getChild().(Ruby::Token).getValue() + "i" or - result = g.getChild().(Ruby::Rational).getChild().(Ruby::Token).getValue() + "ri" + result = getTokenValue(g.getChild()) + "i" or + result = getTokenValue(g.getChild().(Ruby::Rational).getChild()) + "ri" } } @@ -137,7 +141,7 @@ class TrueLiteral extends BooleanLiteralImpl, TTrueLiteral { TrueLiteral() { this = TTrueLiteral(g) } - final override string toString() { result = g.getValue() } + final override string toString() { result = getTokenValue(g) } final override boolean getValue() { result = true } } @@ -147,7 +151,7 @@ class FalseLiteral extends BooleanLiteralImpl, TFalseLiteral { FalseLiteral() { this = TFalseLiteral(g) } - final override string toString() { result = g.getValue() } + final override string toString() { result = getTokenValue(g) } final override boolean getValue() { result = false } } @@ -290,9 +294,9 @@ class RangeLiteralSynth extends RangeLiteralImpl, TRangeLiteralSynth { } private string getMethodName(MethodName::Token t) { - result = t.(Ruby::Token).getValue() + result = getTokenValue(t) or - result = t.(Ruby::Setter).getName().getValue() + "=" + result = getTokenValue(t.(Ruby::Setter).getName()) + "=" } class TokenMethodName extends Expr, TTokenMethodName { @@ -339,9 +343,9 @@ class StringTextComponentStringOrHeredocContent extends StringTextComponentImpl, final override string getValue() { result = this.getUnescapedText() } - final override string getRawTextImpl() { result = g.getValue() } + final override string getRawTextImpl() { result = getTokenValue(g) } - final private string getUnescapedText() { result = unescapeTextComponent(g.getValue()) } + final private string getUnescapedText() { result = unescapeTextComponent(getTokenValue(g)) } } private class StringTextComponentSimpleSymbol extends StringTextComponentImpl, @@ -352,7 +356,7 @@ private class StringTextComponentSimpleSymbol extends StringTextComponentImpl, StringTextComponentSimpleSymbol() { this = TStringTextComponentNonRegexpSimpleSymbol(g) } // Tree-sitter gives us value text including the colon, which we skip. - private string getSimpleSymbolValue() { result = g.getValue().suffix(1) } + private string getSimpleSymbolValue() { result = getTokenValue(g).suffix(1) } final override string getValue() { result = this.getSimpleSymbolValue() } @@ -366,9 +370,9 @@ private class StringTextComponentHashKeySymbol extends StringTextComponentImpl, StringTextComponentHashKeySymbol() { this = TStringTextComponentNonRegexpHashKeySymbol(g) } - final override string getValue() { result = g.getValue() } + final override string getValue() { result = getTokenValue(g) } - final override string getRawTextImpl() { result = g.getValue() } + final override string getRawTextImpl() { result = getTokenValue(g) } } bindingset[escaped] @@ -438,9 +442,9 @@ class StringEscapeSequenceComponentImpl extends StringComponentImpl, final override string getValue() { result = this.getUnescapedText() } - final string getRawTextImpl() { result = g.getValue() } + final string getRawTextImpl() { result = getTokenValue(g) } - final private string getUnescapedText() { result = unescapeEscapeSequence(g.getValue()) } + final private string getUnescapedText() { result = unescapeEscapeSequence(getTokenValue(g)) } final override string toString() { result = this.getRawTextImpl() } } @@ -473,10 +477,10 @@ class RegExpTextComponentImpl extends RegExpComponentImpl, TStringTextComponentR // Exclude components that are children of a free-spacing regex. // We do this because `ParseRegExp.qll` cannot handle free-spacing regexes. not this.getParent().(RegExpLiteral).hasFreeSpacingFlag() and - result = g.getValue() + result = getTokenValue(g) } - final override string toString() { result = g.getValue() } + final override string toString() { result = getTokenValue(g) } } class RegExpEscapeSequenceComponentImpl extends RegExpComponentImpl, @@ -490,10 +494,10 @@ class RegExpEscapeSequenceComponentImpl extends RegExpComponentImpl, // Exclude components that are children of a free-spacing regex. // We do this because `ParseRegExp.qll` cannot handle free-spacing regexes. not this.getParent().(RegExpLiteral).hasFreeSpacingFlag() and - result = g.getValue() + result = getTokenValue(g) } - final override string toString() { result = g.getValue() } + final override string toString() { result = getTokenValue(g) } } class RegExpInterpolationComponentImpl extends RegExpComponentImpl, @@ -564,7 +568,7 @@ abstract class StringlikeLiteralImpl extends Expr, TStringlikeLiteral { concat(StringComponent c, int i, string s | c = this.getComponentImpl(i) and ( - s = toGenerated(c).(Ruby::Token).getValue() + s = getTokenValue(toGenerated(c)) or not toGenerated(c) instanceof Ruby::Token and s = "#{...}" @@ -635,7 +639,7 @@ class SimpleSymbolLiteralReal extends SimpleSymbolLiteralImpl, TSimpleSymbolLite final override StringComponent getComponentImpl(int n) { n = 0 and toGenerated(result) = g } - final override string toString() { result = g.getValue() } + final override string toString() { result = getTokenValue(g) } } class SimpleSymbolLiteralSynth extends SimpleSymbolLiteralImpl, TSimpleSymbolLiteralSynth, @@ -677,7 +681,7 @@ private class HashKeySymbolLiteral extends SymbolLiteralImpl, THashKeySymbolLite final override StringComponent getComponentImpl(int n) { n = 0 and toGenerated(result) = g } - final override string toString() { result = ":" + g.getValue() } + final override string toString() { result = ":" + getTokenValue(g) } } class RegExpLiteralImpl extends StringlikeLiteralImpl, TRegExpLiteral { @@ -701,9 +705,9 @@ class CharacterLiteralImpl extends Expr, TCharacterLiteral { CharacterLiteralImpl() { this = TCharacterLiteral(g) } - final string getValue() { result = g.getValue() } + final string getValue() { result = getTokenValue(g) } - final override string toString() { result = g.getValue() } + final override string toString() { result = getTokenValue(g) } } class HereDocImpl extends StringlikeLiteralImpl, THereDoc { @@ -715,5 +719,5 @@ class HereDocImpl extends StringlikeLiteralImpl, THereDoc { toGenerated(result) = getHereDocBody(g).getChild(n) } - final override string toString() { result = g.getValue() } + final override string toString() { result = getTokenValue(g) } } diff --git a/ruby/ql/lib/codeql/ruby/ast/internal/Module.qll b/ruby/ql/lib/codeql/ruby/ast/internal/Module.qll index 3670cc5eb98..4d65a743346 100644 --- a/ruby/ql/lib/codeql/ruby/ast/internal/Module.qll +++ b/ruby/ql/lib/codeql/ruby/ast/internal/Module.qll @@ -639,7 +639,7 @@ private TMethodOrExpr lookupMethodOrConst(Module m, string name) { // For now, we restrict the scope of top-level declarations to their file. // This may remove some plausible targets, but also removes a lot of // implausible targets - if getNode(result).getEnclosingModule() instanceof Toplevel - then getNode(result).getFile() = m.getADeclaration().getFile() - else any() + forall(File file | file = getNode(result).getEnclosingModule().(Toplevel).getFile() | + file = m.getADeclaration().getFile() + ) } diff --git a/ruby/ql/lib/codeql/ruby/ast/internal/Scope.qll b/ruby/ql/lib/codeql/ruby/ast/internal/Scope.qll index 9ec237012bc..03fe2ce4350 100644 --- a/ruby/ql/lib/codeql/ruby/ast/internal/Scope.qll +++ b/ruby/ql/lib/codeql/ruby/ast/internal/Scope.qll @@ -149,11 +149,11 @@ cached private module Cached { /** Gets the enclosing scope of a node */ cached - Scope::Range scopeOf(Ruby::AstNode n) { + Scope::Range scopeOfImpl(Ruby::AstNode n) { exists(Ruby::AstNode p | p = parentOf(n) | p = result or - not p instanceof Scope::Range and result = scopeOf(p) + not p instanceof Scope::Range and result = scopeOfImpl(p) ) } @@ -163,16 +163,22 @@ private module Cached { * and synthesized scopes into account. */ cached - Scope scopeOfInclSynth(AstNode n) { + Scope scopeOfInclSynthImpl(AstNode n) { exists(AstNode p | p = parentOfInclSynth(n) | p = result or - not p instanceof Scope and result = scopeOfInclSynth(p) + not p instanceof Scope and result = scopeOfInclSynthImpl(p) ) } } -import Cached +bindingset[n] +pragma[inline_late] +Scope::Range scopeOf(Ruby::AstNode n) { result = Cached::scopeOfImpl(n) } + +bindingset[n] +pragma[inline_late] +Scope scopeOfInclSynth(AstNode n) { result = Cached::scopeOfInclSynthImpl(n) } abstract class ScopeImpl extends AstNode, TScopeType { final Scope getOuterScopeImpl() { result = scopeOfInclSynth(this) } diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll index 70c761e411c..3c647f41bbb 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowDispatch.qll @@ -687,26 +687,30 @@ pragma[nomagic] private CfgScope getTargetInstance(DataFlowCall call, string method) { exists(boolean exact | result = lookupInstanceMethodCall(call, method, exact) and - ( - if result.(Method).isPrivate() - then - call.asCall().getReceiver().getExpr() instanceof SelfVariableAccess and - // For now, we restrict the scope of top-level declarations to their file. - // This may remove some plausible targets, but also removes a lot of - // implausible targets - ( - isToplevelMethodInFile(result, call.asCall().getFile()) or - not isToplevelMethodInFile(result, _) - ) - else any() - ) and - if result.(Method).isProtected() - then - result = lookupMethod(call.asCall().getExpr().getEnclosingModule().getModule(), method, exact) - else any() + (if result.(Method).isPrivate() then result = privateFilter(call) else any()) and + if result.(Method).isProtected() then result = protectedFilter(call, method, exact) else any() ) } +bindingset[call, result] +pragma[inline_late] +private CfgScope privateFilter(DataFlowCall call) { + call.asCall().getReceiver().getExpr() instanceof SelfVariableAccess and + // For now, we restrict the scope of top-level declarations to their file. + // This may remove some plausible targets, but also removes a lot of + // implausible targets + ( + isToplevelMethodInFile(result, call.asCall().getFile()) or + not isToplevelMethodInFile(result, _) + ) +} + +bindingset[call, method, exact, result] +pragma[inline_late] +private CfgScope protectedFilter(DataFlowCall call, string method, boolean exact) { + result = lookupMethod(call.asCall().getExpr().getEnclosingModule().getModule(), method, exact) +} + private module TrackBlockInput implements CallGraphConstruction::Simple::InputSig { class State = Block; diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll index 9332aa43e52..e4bcf2537a7 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll @@ -28,7 +28,13 @@ abstract class NodeImpl extends Node { DataFlowCallable getEnclosingCallable() { result = TCfgScope(this.getCfgScope()) } /** Do not call: use `getEnclosingCallable()` instead. */ - abstract CfgScope getCfgScope(); + abstract CfgScope getCfgScopeImpl(); + + /** Do not call: use `getEnclosingCallable()` instead. */ + pragma[inline] + final CfgScope getCfgScope() { + pragma[only_bind_into](result) = pragma[only_bind_out](this).getCfgScopeImpl() + } /** Do not call: use `getLocation()` instead. */ abstract Location getLocationImpl(); @@ -38,7 +44,7 @@ abstract class NodeImpl extends Node { } private class ExprNodeImpl extends ExprNode, NodeImpl { - override CfgScope getCfgScope() { result = this.getExprNode().getExpr().getCfgScope() } + override CfgScope getCfgScopeImpl() { result = this.getExprNode().getExpr().getCfgScope() } override Location getLocationImpl() { result = this.getExprNode().getLocation() } @@ -780,7 +786,7 @@ class SsaNode extends NodeImpl, TSsaNode { /** Holds if this node should be hidden from path explanations. */ predicate isHidden() { any() } - override CfgScope getCfgScope() { result = node.getBasicBlock().getScope() } + override CfgScope getCfgScopeImpl() { result = node.getBasicBlock().getScope() } override Location getLocationImpl() { result = node.getLocation() } @@ -827,7 +833,7 @@ class CapturedVariableNode extends NodeImpl, TCapturedVariableNode { /** Gets the captured variable represented by this node. */ VariableCapture::CapturedVariable getVariable() { result = variable } - override CfgScope getCfgScope() { result = variable.getCallable() } + override CfgScope getCfgScopeImpl() { result = variable.getCallable() } override Location getLocationImpl() { result = variable.getLocation() } @@ -849,7 +855,7 @@ class ReturningStatementNode extends NodeImpl, TReturningNode { /** Gets the expression corresponding to this node. */ CfgNodes::ReturningCfgNode getReturningNode() { result = n } - override CfgScope getCfgScope() { result = n.getScope() } + override CfgScope getCfgScopeImpl() { result = n.getScope() } override Location getLocationImpl() { result = n.getLocation() } @@ -867,7 +873,7 @@ class CaptureNode extends NodeImpl, TCaptureNode { VariableCapture::Flow::SynthesizedCaptureNode getSynthesizedCaptureNode() { result = cn } - override CfgScope getCfgScope() { result = cn.getEnclosingCallable() } + override CfgScope getCfgScopeImpl() { result = cn.getEnclosingCallable() } override Location getLocationImpl() { result = cn.getLocation() } @@ -935,7 +941,7 @@ private module ParameterNodes { ) } - override CfgScope getCfgScope() { result = parameter.getCallable() } + override CfgScope getCfgScopeImpl() { result = parameter.getCallable() } override Location getLocationImpl() { result = parameter.getLocation() } @@ -979,7 +985,7 @@ private module ParameterNodes { final override SelfVariable getSelfVariable() { result.getDeclaringScope() = method } - override CfgScope getCfgScope() { result = method } + override CfgScope getCfgScopeImpl() { result = method } override Location getLocationImpl() { result = method.getLocation() } } @@ -1001,7 +1007,7 @@ private module ParameterNodes { final override SelfVariable getSelfVariable() { result.getDeclaringScope() = t } - override CfgScope getCfgScope() { result = t } + override CfgScope getCfgScopeImpl() { result = t } override Location getLocationImpl() { result = t.getLocation() } } @@ -1028,7 +1034,7 @@ private module ParameterNodes { callable = c.asCfgScope() and pos.isLambdaSelf() } - override CfgScope getCfgScope() { result = callable } + override CfgScope getCfgScopeImpl() { result = callable } override Location getLocationImpl() { result = callable.getLocation() } @@ -1071,7 +1077,7 @@ private module ParameterNodes { c.asCfgScope() = method and pos.isBlock() } - override CfgScope getCfgScope() { result = method } + override CfgScope getCfgScopeImpl() { result = method } override Location getLocationImpl() { result = this.getParameter().getLocation() @@ -1130,7 +1136,7 @@ private module ParameterNodes { c = callable and pos.isSynthHashSplat() } - final override CfgScope getCfgScope() { result = callable.asCfgScope() } + final override CfgScope getCfgScopeImpl() { result = callable.asCfgScope() } final override DataFlowCallable getEnclosingCallable() { result = callable } @@ -1193,7 +1199,7 @@ private module ParameterNodes { ) } - final override CfgScope getCfgScope() { result = callable.asCfgScope() } + final override CfgScope getCfgScopeImpl() { result = callable.asCfgScope() } final override DataFlowCallable getEnclosingCallable() { result = callable } @@ -1240,7 +1246,7 @@ private module ParameterNodes { cs = getArrayContent(pos) } - final override CfgScope getCfgScope() { result = callable.asCfgScope() } + final override CfgScope getCfgScopeImpl() { result = callable.asCfgScope() } final override DataFlowCallable getEnclosingCallable() { result = callable } @@ -1278,7 +1284,7 @@ class FlowSummaryNode extends NodeImpl, TFlowSummaryNode { result = this.getSummaryNode().getSummarizedCallable() } - override CfgScope getCfgScope() { none() } + override CfgScope getCfgScopeImpl() { none() } override DataFlowCallable getEnclosingCallable() { result.asLibraryCallable() = this.getSummarizedCallable() @@ -1349,7 +1355,7 @@ module ArgumentNodes { this.sourceArgumentOf(call.asCall(), pos) } - override CfgScope getCfgScope() { result = yield.getScope() } + override CfgScope getCfgScopeImpl() { result = yield.getScope() } override Location getLocationImpl() { result = yield.getLocation() } } @@ -1379,7 +1385,7 @@ module ArgumentNodes { this.sourceArgumentOf(call.asCall(), pos) } - override CfgScope getCfgScope() { result = sup.getScope() } + override CfgScope getCfgScopeImpl() { result = sup.getScope() } override Location getLocationImpl() { result = sup.getLocation() } } @@ -1415,7 +1421,7 @@ module ArgumentNodes { this.sourceArgumentOf(call.asCall(), pos) } - final override CfgScope getCfgScope() { result = call_.getExpr().getCfgScope() } + final override CfgScope getCfgScopeImpl() { result = call_.getExpr().getCfgScope() } final override Location getLocationImpl() { result = call_.getLocation() } } @@ -1563,7 +1569,7 @@ module ArgumentNodes { ) } - override CfgScope getCfgScope() { result = c.getExpr().getCfgScope() } + override CfgScope getCfgScopeImpl() { result = c.getExpr().getCfgScope() } override Location getLocationImpl() { result = c.getLocation() } @@ -2037,16 +2043,21 @@ private predicate compatibleTypesNonSymRefl(DataFlowType t1, DataFlowType t2) { } pragma[nomagic] -private predicate compatibleModuleTypes(TModuleDataFlowType t1, TModuleDataFlowType t2) { - exists(Module m1, Module m2, Module m3 | - t1 = TModuleDataFlowType(m1) and - t2 = TModuleDataFlowType(m2) - | +private predicate compatibleModules(Module m1, Module m2) { + exists(Module m3 | m3.getAnAncestor() = m1 and m3.getAnAncestor() = m2 ) } +private predicate compatibleModuleTypes(TModuleDataFlowType t1, TModuleDataFlowType t2) { + exists(Module m1, Module m2 | + compatibleModules(m1, m2) and + t1 = TModuleDataFlowType(m1) and + t2 = TModuleDataFlowType(m2) + ) +} + /** * Holds if `t1` and `t2` are compatible, that is, whether data can flow from * a node of type `t1` to a node of type `t2`. @@ -2074,7 +2085,7 @@ private module PostUpdateNodes { override ExprNode getPreUpdateNode() { e = result.getExprNode() } - override CfgScope getCfgScope() { result = e.getExpr().getCfgScope() } + override CfgScope getCfgScopeImpl() { result = e.getExpr().getCfgScope() } override Location getLocationImpl() { result = e.getLocation() } diff --git a/ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll b/ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll index 42c6286e4ea..6275da6d98c 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll @@ -500,6 +500,7 @@ private module Persistence { class ActiveRecordAssociation extends DataFlow::CallNode { private ActiveRecordModelClass modelClass; + pragma[nomagic] ActiveRecordAssociation() { not exists(this.asExpr().getExpr().getEnclosingMethod()) and this.asExpr().getExpr().getEnclosingModule() = modelClass and @@ -583,6 +584,14 @@ private string pluralize(string input) { exists(string stem | stem + "s" = input) and result = input } +pragma[nomagic] +private predicate activeRecordAssociationMethodCall( + DataFlow::CallNode call, ActiveRecordAssociation assoc, string model +) { + call.getReceiver().(ActiveRecordInstance).getClass() = assoc.getSourceClass() and + model = assoc.getTargetModelName() +} + /** * A call to a method generated by an ActiveRecord association. * These yield ActiveRecord collection proxies, which act like collections but @@ -595,24 +604,21 @@ private class ActiveRecordAssociationMethodCall extends DataFlow::CallNode { ActiveRecordAssociation assoc; ActiveRecordAssociationMethodCall() { - exists(string model | model = assoc.getTargetModelName() | - this.getReceiver().(ActiveRecordInstance).getClass() = assoc.getSourceClass() and + exists(string model | activeRecordAssociationMethodCall(this, assoc, model) | + assoc.isCollection() and ( - assoc.isCollection() and - ( - this.getMethodName() = pluralize(model) + ["", "="] - or - this.getMethodName() = "<<" - or - this.getMethodName() = model + ["_ids", "_ids="] - ) + this.getMethodName() = pluralize(model) + ["", "="] or - assoc.isSingular() and - ( - this.getMethodName() = model + ["", "="] or - this.getMethodName() = ["build_", "reload_"] + model or - this.getMethodName() = "create_" + model + ["!", ""] - ) + this.getMethodName() = "<<" + or + this.getMethodName() = model + ["_ids", "_ids="] + ) + or + assoc.isSingular() and + ( + this.getMethodName() = model + ["", "="] or + this.getMethodName() = ["build_", "reload_"] + model or + this.getMethodName() = "create_" + model + ["!", ""] ) ) } diff --git a/ruby/ql/lib/codeql/ruby/frameworks/actioncontroller/Filters.qll b/ruby/ql/lib/codeql/ruby/frameworks/actioncontroller/Filters.qll index 568f99da475..20bde03daad 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/actioncontroller/Filters.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/actioncontroller/Filters.qll @@ -46,6 +46,10 @@ module Filters { ) } + bindingset[m, name] + pragma[inline_late] + private Method lookupMethodInlineLate(Module m, string name) { result = lookupMethod(m, name) } + /** * A call to a class method that adds or removes a filter from the callback chain. * This class exists to encapsulate common behavior between calls that @@ -140,7 +144,8 @@ module Filters { */ Callable getAFilterCallable() { result = - lookupMethod(this.getExpr().getEnclosingModule().getModule(), this.getFilterArgumentName()) + lookupMethodInlineLate(this.getExpr().getEnclosingModule().getModule(), + this.getFilterArgumentName()) } } diff --git a/ruby/ql/lib/codeql/ruby/frameworks/actiondispatch/internal/Routing.qll b/ruby/ql/lib/codeql/ruby/frameworks/actiondispatch/internal/Routing.qll index 5910317b2c1..e6e453d449f 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/actiondispatch/internal/Routing.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/actiondispatch/internal/Routing.qll @@ -943,6 +943,7 @@ module Routing { * Note: All-uppercase words like `CONSTANT` are not handled correctly. */ bindingset[base] + pragma[inline_late] string underscore(string base) { base = "" and result = "" or diff --git a/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll b/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll index ec21ffc7475..a29f7c2a427 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll @@ -526,7 +526,7 @@ module Array { MethodCall mc; bindingset[this] - DeleteSummary() { mc.getMethodName() = "delete" } + DeleteSummary() { pragma[only_bind_into](mc).getMethodName() = "delete" } final override MethodCall getACallSimple() { result = mc } @@ -790,7 +790,7 @@ module Array { MethodCall mc; bindingset[this] - FetchSummary() { mc.getMethodName() = "fetch" } + FetchSummary() { pragma[only_bind_into](mc).getMethodName() = "fetch" } override MethodCall getACallSimple() { result = mc } } diff --git a/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll b/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll index 36d7bd2cc75..c1a4c4d50d1 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/core/Hash.qll @@ -286,7 +286,7 @@ abstract private class FetchValuesSummary extends SummarizedCallable::Range { MethodCall mc; bindingset[this] - FetchValuesSummary() { mc.getMethodName() = "fetch_values" } + FetchValuesSummary() { pragma[only_bind_into](mc).getMethodName() = "fetch_values" } final override MethodCall getACallSimple() { result = mc } @@ -390,7 +390,7 @@ abstract private class SliceSummary extends SummarizedCallable::Range { MethodCall mc; bindingset[this] - SliceSummary() { mc.getMethodName() = "slice" } + SliceSummary() { pragma[only_bind_into](mc).getMethodName() = "slice" } final override MethodCall getACallSimple() { result = mc } } From f4841e1f391e29200e30c8db3f0b29c27ab97e84 Mon Sep 17 00:00:00 2001 From: Taus Date: Thu, 19 Mar 2026 15:33:04 +0000 Subject: [PATCH 096/185] Python: Use API graphs instead of points-to for simple built-ins Also extends the list of known built-ins slightly, to add some that were missing. --- .../python/dataflow/new/internal/Builtins.qll | 8 +++--- python/ql/src/Expressions/UseofApply.ql | 9 ++++--- python/ql/src/Imports/DeprecatedModule.ql | 4 +-- .../ql/src/Statements/SideEffectInAssert.ql | 12 ++++----- python/ql/src/Statements/UnnecessaryDelete.ql | 8 +++--- .../SuspiciousUnusedLoopIterationVariable.ql | 27 +++++++------------ 6 files changed, 32 insertions(+), 36 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/Builtins.qll b/python/ql/lib/semmle/python/dataflow/new/internal/Builtins.qll index 6a66d241083..764af5d9dc5 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/Builtins.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/Builtins.qll @@ -32,7 +32,9 @@ module Builtins { "UnicodeDecodeError", "UnicodeEncodeError", "UnicodeError", "UnicodeTranslateError", "UnicodeWarning", "UserWarning", "ValueError", "Warning", "ZeroDivisionError", // Added for compatibility - "exec" + "exec", + // Added by the `site` module (available by default unless `-S` is used) + "copyright", "credits", "exit", "quit" ] or // Built-in constants shared between Python 2 and 3 @@ -51,8 +53,8 @@ module Builtins { or // Python 2 only result in [ - "basestring", "cmp", "execfile", "file", "long", "raw_input", "reduce", "reload", "unichr", - "unicode", "xrange" + "apply", "basestring", "cmp", "execfile", "file", "long", "raw_input", "reduce", "reload", + "unichr", "unicode", "xrange" ] } diff --git a/python/ql/src/Expressions/UseofApply.ql b/python/ql/src/Expressions/UseofApply.ql index 2012f2d9361..f1068eca837 100644 --- a/python/ql/src/Expressions/UseofApply.ql +++ b/python/ql/src/Expressions/UseofApply.ql @@ -10,9 +10,10 @@ */ import python -private import LegacyPointsTo -private import semmle.python.types.Builtins +private import semmle.python.ApiGraphs -from CallNode call, ControlFlowNodeWithPointsTo func -where major_version() = 2 and call.getFunction() = func and func.pointsTo(Value::named("apply")) +from CallNode call +where + major_version() = 2 and + call = API::builtin("apply").getACall().asCfgNode() select call, "Call to the obsolete builtin function 'apply'." diff --git a/python/ql/src/Imports/DeprecatedModule.ql b/python/ql/src/Imports/DeprecatedModule.ql index 3d529943fb8..62d77231334 100644 --- a/python/ql/src/Imports/DeprecatedModule.ql +++ b/python/ql/src/Imports/DeprecatedModule.ql @@ -11,7 +11,7 @@ */ import python -private import LegacyPointsTo +private import semmle.python.ApiGraphs /** * Holds if the module `name` was deprecated in Python version `major`.`minor`, @@ -80,7 +80,7 @@ where name = imp.getName() and deprecated_module(name, instead, _, _) and not exists(Try try, ExceptStmt except | except = try.getAHandler() | - except.getType().(ExprWithPointsTo).pointsTo(ClassValue::importError()) and + except.getType() = API::builtin("ImportError").getAValueReachableFromSource().asExpr() and except.containsInScope(imp) ) select imp, deprecation_message(name) + replacement_message(name) diff --git a/python/ql/src/Statements/SideEffectInAssert.ql b/python/ql/src/Statements/SideEffectInAssert.ql index 902b6c4c9c1..7ac96030c04 100644 --- a/python/ql/src/Statements/SideEffectInAssert.ql +++ b/python/ql/src/Statements/SideEffectInAssert.ql @@ -13,7 +13,7 @@ */ import python -private import LegacyPointsTo +private import semmle.python.ApiGraphs predicate func_with_side_effects(Expr e) { exists(string name | name = e.(Attribute).getName() or name = e.(Name).getId() | @@ -24,11 +24,11 @@ predicate func_with_side_effects(Expr e) { } predicate call_with_side_effect(Call e) { - e.getAFlowNode() = Value::named("subprocess.call").getACall() - or - e.getAFlowNode() = Value::named("subprocess.check_call").getACall() - or - e.getAFlowNode() = Value::named("subprocess.check_output").getACall() + e.getAFlowNode() = + API::moduleImport("subprocess") + .getMember(["call", "check_call", "check_output"]) + .getACall() + .asCfgNode() } predicate probable_side_effect(Expr e) { diff --git a/python/ql/src/Statements/UnnecessaryDelete.ql b/python/ql/src/Statements/UnnecessaryDelete.ql index c7b80ecc66a..da239f81405 100644 --- a/python/ql/src/Statements/UnnecessaryDelete.ql +++ b/python/ql/src/Statements/UnnecessaryDelete.ql @@ -13,7 +13,7 @@ */ import python -private import LegacyPointsTo +private import semmle.python.ApiGraphs predicate isInsideLoop(AstNode node) { node.getParentNode() instanceof While @@ -33,9 +33,9 @@ where not isInsideLoop(del) and // False positive: calling `sys.exc_info` within a function results in a // reference cycle, and an explicit call to `del` helps break this cycle. - not exists(FunctionValue ex | - ex = Value::named("sys.exc_info") and - ex.getACall().getScope() = f + not exists(API::CallNode call | + call = API::moduleImport("sys").getMember("exc_info").getACall() and + call.getScope() = f ) select del, "Unnecessary deletion of local variable $@ in function $@.", e, e.toString(), f, f.getName() diff --git a/python/ql/src/Variables/SuspiciousUnusedLoopIterationVariable.ql b/python/ql/src/Variables/SuspiciousUnusedLoopIterationVariable.ql index 87900c48fc5..18c83240667 100644 --- a/python/ql/src/Variables/SuspiciousUnusedLoopIterationVariable.ql +++ b/python/ql/src/Variables/SuspiciousUnusedLoopIterationVariable.ql @@ -12,7 +12,7 @@ */ import python -private import LegacyPointsTo +private import semmle.python.ApiGraphs import Definition predicate is_increment(Stmt s) { @@ -41,23 +41,16 @@ predicate one_item_only(For f) { ) } -predicate points_to_call_to_range(ControlFlowNode f) { - /* (x)range is a function in Py2 and a class in Py3, so we must treat it as a plain object */ - exists(Value range | - range = Value::named("range") or - range = Value::named("xrange") - | - f = range.getACall() - ) +/** Holds if `node` is a call to `range`, `xrange`, or `list(range(...))`. */ +predicate call_to_range(DataFlow::Node node) { + node = API::builtin(["range", "xrange"]).getACall() or - /* In case points-to fails due to 'from six.moves import range' or similar. */ - exists(string range | f.getNode().(Call).getFunc().(Name).getId() = range | - range = "range" or range = "xrange" - ) + /* Handle 'from six.moves import range' or similar. */ + node = API::moduleImport("six").getMember("moves").getMember(["range", "xrange"]).getACall() or /* Handle list(range(...)) and list(list(range(...))) */ - f.(CallNode).(ControlFlowNodeWithPointsTo).pointsTo().getClass() = ClassValue::list() and - points_to_call_to_range(f.(CallNode).getArg(0)) + node = API::builtin("list").getACall() and + call_to_range(node.(DataFlow::CallCfgNode).getArg(0)) } /** Whether n is a use of a variable that is a not effectively a constant. */ @@ -102,8 +95,8 @@ from For f, Variable v, string msg where f.getTarget() = v.getAnAccess() and not f.getAStmt().contains(v.getAnAccess()) and - not points_to_call_to_range(f.getIter().getAFlowNode()) and - not points_to_call_to_range(get_comp_iterable(f)) and + not call_to_range(DataFlow::exprNode(f.getIter())) and + not call_to_range(DataFlow::exprNode(get_comp_iterable(f).getNode())) and not name_acceptable_for_unused_variable(v) and not f.getScope().getName() = "genexpr" and not empty_loop(f) and From 1dcc76996daca8ff302db3be4f39fa4b8a097c92 Mon Sep 17 00:00:00 2001 From: Taus Date: Thu, 19 Feb 2026 15:06:47 +0000 Subject: [PATCH 097/185] Python: Port `py/print-during-import` Uses a (perhaps) slightly coarser approximation of what modules are imported, but it's probably fine. --- python/ql/src/Statements/TopLevelPrint.ql | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/python/ql/src/Statements/TopLevelPrint.ql b/python/ql/src/Statements/TopLevelPrint.ql index 12095f7a484..1896d41908e 100644 --- a/python/ql/src/Statements/TopLevelPrint.ql +++ b/python/ql/src/Statements/TopLevelPrint.ql @@ -12,7 +12,6 @@ */ import python -private import LegacyPointsTo predicate main_eq_name(If i) { exists(Name n, StringLiteral m, Compare c | @@ -32,10 +31,19 @@ predicate is_print_stmt(Stmt s) { ) } +/** + * Holds if module `m` is likely used as a module (imported by another module), + * as opposed to being exclusively used as a script. + */ +predicate is_used_as_module(Module m) { + m.isPackageInit() + or + exists(ImportingStmt i | i.getAnImportedModuleName() = m.getName()) +} + from Stmt p where is_print_stmt(p) and - // TODO: Need to discuss how we would like to handle ModuleObject.getKind in the glorious future - exists(ModuleValue m | m.getScope() = p.getScope() and m.isUsedAsModule()) and + is_used_as_module(p.getScope()) and not exists(If i | main_eq_name(i) and i.getASubStatement().getASubStatement*() = p) select p, "Print statement may execute during import." From 33ed6034f63b03b2a90a0835940e38d7d43d0610 Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 20 Feb 2026 13:37:25 +0000 Subject: [PATCH 098/185] Python: Introduce `DuckTyping` module This module (which for convenience currently resides inside `DataFlowDispatch`, but this may change later) contains convenience predicates for bridging the gap between the data-flow layer and the old points-to analysis. --- .../new/internal/DataFlowDispatch.qll | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index 37eecb76d4c..9b5de413973 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -1977,3 +1977,95 @@ private module OutNodes { * `kind`. */ OutNode getAnOutNode(DataFlowCall call, ReturnKind kind) { call = result.getCall(kind) } + +/** + * Provides predicates for approximating type properties of user-defined classes + * based on their structure (method declarations, base classes). + * + * This module should _not_ be used in the call graph computation itself, as parts of it may depend + * on layers that themselves build upon the call graph (e.g. API graphs). + */ +module DuckTyping { + private import semmle.python.ApiGraphs + + /** + * Holds if `cls` or any of its resolved superclasses declares a method with the given `name`. + */ + predicate hasMethod(Class cls, string name) { + cls.getAMethod().getName() = name + or + hasMethod(getADirectSuperclass(cls), name) + } + + /** + * Holds if `cls` has a base class that cannot be resolved to a user-defined class + * and is not just `object`, meaning it may inherit methods from an unknown class. + */ + predicate hasUnresolvedBase(Class cls) { + exists(Expr base | base = cls.getABase() | + not base = classTracker(_).asExpr() and + not base = API::builtin("object").getAValueReachableFromSource().asExpr() + ) + } + + /** + * Holds if `cls` supports the container protocol, i.e. it declares + * `__contains__`, `__iter__`, or `__getitem__`. + */ + predicate isContainer(Class cls) { + hasMethod(cls, "__contains__") or + hasMethod(cls, "__iter__") or + hasMethod(cls, "__getitem__") + } + + /** + * Holds if `cls` supports the iterable protocol, i.e. it declares + * `__iter__` or `__getitem__`. + */ + predicate isIterable(Class cls) { + hasMethod(cls, "__iter__") or + hasMethod(cls, "__getitem__") + } + + /** + * Holds if `cls` supports the iterator protocol, i.e. it declares + * both `__iter__` and `__next__`. + */ + predicate isIterator(Class cls) { + hasMethod(cls, "__iter__") and + hasMethod(cls, "__next__") + } + + /** + * Holds if `cls` supports the context manager protocol, i.e. it declares + * both `__enter__` and `__exit__`. + */ + predicate isContextManager(Class cls) { + hasMethod(cls, "__enter__") and + hasMethod(cls, "__exit__") + } + + /** + * Holds if `cls` supports the descriptor protocol, i.e. it declares + * `__get__`, `__set__`, or `__delete__`. + */ + predicate isDescriptor(Class cls) { + hasMethod(cls, "__get__") or + hasMethod(cls, "__set__") or + hasMethod(cls, "__delete__") + } + + /** + * Holds if `cls` is callable, i.e. it declares `__call__`. + */ + predicate isCallable(Class cls) { hasMethod(cls, "__call__") } + + /** + * Holds if `cls` supports the mapping protocol, i.e. it declares + * `__getitem__` and `keys`, or `__getitem__` and `__iter__`. + */ + predicate isMapping(Class cls) { + hasMethod(cls, "__getitem__") and + (hasMethod(cls, "keys") or hasMethod(cls, "__iter__")) + } +} From cd92162920f9507b8662dc69928e9b4395263ce7 Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 20 Feb 2026 15:19:18 +0000 Subject: [PATCH 099/185] Python: Add `DuckTyping::isNewStyle` Approximates the behaviour of `Types::isNewStyle` but without depending on points-to --- .../new/internal/DataFlowDispatch.qll | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index 9b5de413973..529fc3c95fd 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -2068,4 +2068,30 @@ module DuckTyping { hasMethod(cls, "__getitem__") and (hasMethod(cls, "keys") or hasMethod(cls, "__iter__")) } + + /** + * Holds if `cls` is a new-style class. In Python 3, all classes are new-style. + * In Python 2, a class is new-style if it (transitively) inherits from `object`, + * or has a declared `__metaclass__`, or has an unresolved base class. + */ + predicate isNewStyle(Class cls) { + major_version() = 3 + or + major_version() = 2 and + ( + cls.getABase() = API::builtin("object").getAValueReachableFromSource().asExpr() + or + isNewStyle(getADirectSuperclass(cls)) + or + hasUnresolvedBase(cls) + or + exists(cls.getMetaClass()) + or + // Module-level __metaclass__ = type makes all classes in the module new-style + exists(Assign a | + a.getScope() = cls.getEnclosingModule() and + a.getATarget().(Name).getId() = "__metaclass__" + ) + ) + } } From b57e92164ce7a8d8ddbc24875512879679984fe5 Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 20 Feb 2026 15:56:14 +0000 Subject: [PATCH 100/185] Python: Add declares/getAttribute API These could arguably be moved to `Class` itself, but for now I'm choosing to limit the changes to the `DuckTyping` module (until we decide on a proper API). --- .../dataflow/new/internal/DataFlowDispatch.qll | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index 529fc3c95fd..2aaa33de159 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -2055,6 +2055,23 @@ module DuckTyping { hasMethod(cls, "__delete__") } + /** + * Holds if `cls` directly assigns to an attribute named `name` in its class body. + * This covers attribute assignments like `x = value`, but not method definitions. + */ + predicate declaresAttribute(Class cls, string name) { exists(getAnAttributeValue(cls, name)) } + + /** + * Gets the value expression assigned to attribute `name` directly in the class body of `cls`. + */ + Expr getAnAttributeValue(Class cls, string name) { + exists(Assign a | + a.getScope() = cls and + a.getATarget().(Name).getId() = name and + result = a.getValue() + ) + } + /** * Holds if `cls` is callable, i.e. it declares `__call__`. */ From 3d20050c0ad0f485b6c0e11f5c4a0c950ea5c5b8 Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 20 Feb 2026 15:25:57 +0000 Subject: [PATCH 101/185] Python: Port SlotsInOldStyleClass.ql Only trivial test changes. --- python/ql/src/Classes/SlotsInOldStyleClass.ql | 8 +++++--- .../Classes/new-style/SlotsInOldStyleClass.expected | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/python/ql/src/Classes/SlotsInOldStyleClass.ql b/python/ql/src/Classes/SlotsInOldStyleClass.ql index 2f91a88cf64..70a7997113e 100644 --- a/python/ql/src/Classes/SlotsInOldStyleClass.ql +++ b/python/ql/src/Classes/SlotsInOldStyleClass.ql @@ -12,9 +12,11 @@ */ import python -private import LegacyPointsTo +private import semmle.python.dataflow.new.internal.DataFlowDispatch -from ClassObject c -where not c.isNewStyle() and c.declaresAttribute("__slots__") and not c.failedInference() +from Class c +where + not DuckTyping::isNewStyle(c) and + DuckTyping::declaresAttribute(c, "__slots__") select c, "Using '__slots__' in an old style class just creates a class attribute called '__slots__'." diff --git a/python/ql/test/2/query-tests/Classes/new-style/SlotsInOldStyleClass.expected b/python/ql/test/2/query-tests/Classes/new-style/SlotsInOldStyleClass.expected index ccad85bd384..14d30913b93 100644 --- a/python/ql/test/2/query-tests/Classes/new-style/SlotsInOldStyleClass.expected +++ b/python/ql/test/2/query-tests/Classes/new-style/SlotsInOldStyleClass.expected @@ -1 +1 @@ -| newstyle_test.py:4:1:4:16 | class OldStyle1 | Using '__slots__' in an old style class just creates a class attribute called '__slots__'. | +| newstyle_test.py:4:1:4:16 | Class OldStyle1 | Using '__slots__' in an old style class just creates a class attribute called '__slots__'. | From e860d706c946640b819c17d3757dcbb2117ee532 Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 20 Feb 2026 15:26:27 +0000 Subject: [PATCH 102/185] Python: Port SuperInOldStyleClass.ql --- python/ql/src/Classes/SuperInOldStyleClass.ql | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/python/ql/src/Classes/SuperInOldStyleClass.ql b/python/ql/src/Classes/SuperInOldStyleClass.ql index a6a272b1b3b..bc6541052de 100644 --- a/python/ql/src/Classes/SuperInOldStyleClass.ql +++ b/python/ql/src/Classes/SuperInOldStyleClass.ql @@ -11,14 +11,13 @@ */ import python -private import LegacyPointsTo +private import semmle.python.dataflow.new.internal.DataFlowDispatch predicate uses_of_super_in_old_style_class(Call s) { - exists(Function f, ClassObject c | + exists(Function f, Class c | s.getScope() = f and - f.getScope() = c.getPyClass() and - not c.failedInference() and - not c.isNewStyle() and + f.getScope() = c and + not DuckTyping::isNewStyle(c) and s.getFunc().(Name).getId() = "super" ) } From 8cfdea2001c75b111607024b6cfcb7d47bfbd86f Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 20 Feb 2026 15:27:32 +0000 Subject: [PATCH 103/185] Python: Port PropertyInOldStyleClass.ql Only trivial test changes. --- python/ql/src/Classes/PropertyInOldStyleClass.ql | 9 ++++++--- .../Classes/new-style/PropertyInOldStyleClass.expected | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/python/ql/src/Classes/PropertyInOldStyleClass.ql b/python/ql/src/Classes/PropertyInOldStyleClass.ql index 2fd7b1d14cf..80a5ef06bbe 100644 --- a/python/ql/src/Classes/PropertyInOldStyleClass.ql +++ b/python/ql/src/Classes/PropertyInOldStyleClass.ql @@ -11,10 +11,13 @@ */ import python -private import LegacyPointsTo +private import semmle.python.dataflow.new.internal.DataFlowDispatch -from PropertyObject prop, ClassObject cls -where cls.declaredAttribute(_) = prop and not cls.failedInference() and not cls.isNewStyle() +from Function prop, Class cls +where + prop.getScope() = cls and + prop.getADecorator().(Name).getId() = "property" and + not DuckTyping::isNewStyle(cls) select prop, "Property " + prop.getName() + " will not work properly, as class " + cls.getName() + " is an old-style class." diff --git a/python/ql/test/2/query-tests/Classes/new-style/PropertyInOldStyleClass.expected b/python/ql/test/2/query-tests/Classes/new-style/PropertyInOldStyleClass.expected index 9fb3e582cb7..1e5be51fbaf 100644 --- a/python/ql/test/2/query-tests/Classes/new-style/PropertyInOldStyleClass.expected +++ b/python/ql/test/2/query-tests/Classes/new-style/PropertyInOldStyleClass.expected @@ -1 +1 @@ -| property_old_style.py:8:6:8:13 | Property piosc | Property piosc will not work properly, as class OldStyle is an old-style class. | +| property_old_style.py:9:5:9:20 | Function piosc | Property piosc will not work properly, as class OldStyle is an old-style class. | From 025a7d0ccac1b8715996eb4d9f8672728918e72b Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 20 Feb 2026 16:54:34 +0000 Subject: [PATCH 104/185] Python: Port UselessClass.ql No test changes. --- python/ql/src/Classes/UselessClass.ql | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/python/ql/src/Classes/UselessClass.ql b/python/ql/src/Classes/UselessClass.ql index 740c74bf96d..229e42fd292 100644 --- a/python/ql/src/Classes/UselessClass.ql +++ b/python/ql/src/Classes/UselessClass.ql @@ -13,7 +13,7 @@ */ import python -private import LegacyPointsTo +private import semmle.python.dataflow.new.internal.DataFlowDispatch predicate fewer_than_two_public_methods(Class cls, int methods) { (methods = 0 or methods = 1) and @@ -25,13 +25,8 @@ predicate does_not_define_special_method(Class cls) { } predicate no_inheritance(Class c) { - not exists(ClassValue cls, ClassValue other | - cls.getScope() = c and - other != ClassValue::object() - | - other.getABaseType() = cls or - cls.getABaseType() = other - ) and + not exists(getADirectSubclass(c)) and + not exists(getADirectSuperclass(c)) and not exists(Expr base | base = c.getABase() | not base instanceof Name or base.(Name).getId() != "object" ) From 283231bdbc044ad1c98da4c522b89dc1012baf18 Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 20 Feb 2026 16:54:49 +0000 Subject: [PATCH 105/185] Python: Port ShouldBeContextManager.ql Only trivial test changes. --- python/ql/src/Classes/ShouldBeContextManager.ql | 8 +++++--- .../ShouldBeContextManager.expected | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/python/ql/src/Classes/ShouldBeContextManager.ql b/python/ql/src/Classes/ShouldBeContextManager.ql index 6aec0f0e0ab..9a50d841a74 100644 --- a/python/ql/src/Classes/ShouldBeContextManager.ql +++ b/python/ql/src/Classes/ShouldBeContextManager.ql @@ -14,10 +14,12 @@ */ import python -private import LegacyPointsTo +private import semmle.python.dataflow.new.internal.DataFlowDispatch -from ClassValue c -where not c.isBuiltin() and not c.isContextManager() and exists(c.declaredAttribute("__del__")) +from Class c +where + not DuckTyping::isContextManager(c) and + DuckTyping::hasMethod(c, "__del__") select c, "Class " + c.getName() + " implements __del__ (presumably to release some resource). Consider making it a context manager." diff --git a/python/ql/test/query-tests/Classes/should-be-context-manager/ShouldBeContextManager.expected b/python/ql/test/query-tests/Classes/should-be-context-manager/ShouldBeContextManager.expected index 47c773804ae..3cd6d92ff64 100644 --- a/python/ql/test/query-tests/Classes/should-be-context-manager/ShouldBeContextManager.expected +++ b/python/ql/test/query-tests/Classes/should-be-context-manager/ShouldBeContextManager.expected @@ -1,2 +1,2 @@ -| should_be_context_manager.py:3:1:3:22 | class MegaDel | Class MegaDel implements __del__ (presumably to release some resource). Consider making it a context manager. | -| should_be_context_manager.py:16:1:16:22 | class MiniDel | Class MiniDel implements __del__ (presumably to release some resource). Consider making it a context manager. | +| should_be_context_manager.py:3:1:3:22 | Class MegaDel | Class MegaDel implements __del__ (presumably to release some resource). Consider making it a context manager. | +| should_be_context_manager.py:16:1:16:22 | Class MiniDel | Class MiniDel implements __del__ (presumably to release some resource). Consider making it a context manager. | From c04b615a07a7fcd128fbe5b420bc68b6b3d4ab41 Mon Sep 17 00:00:00 2001 From: Taus Date: Mon, 23 Feb 2026 15:55:58 +0000 Subject: [PATCH 106/185] Python: Extend DuckTyping module Adds `overridesMethod` and `isPropertyAccessor`. --- .../new/internal/DataFlowDispatch.qll | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index 2aaa33de159..529e90798ba 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -2111,4 +2111,27 @@ module DuckTyping { ) ) } + + /** + * Gets the `__init__` function that will be invoked when `cls` is constructed, + * resolved according to the MRO. + */ + Function getInit(Class cls) { result = invokedFunctionFromClassConstruction(cls, "__init__") } + + /** + * Holds if `f` overrides a method in a superclass with the same name. + */ + predicate overridesMethod(Function f) { + exists(Class cls | f.getScope() = cls | hasMethod(getADirectSuperclass(cls), f.getName())) + } + + /** + * Holds if `f` is a property accessor (decorated with `@property`, `@name.setter`, + * or `@name.deleter`). + */ + predicate isPropertyAccessor(Function f) { + exists(Attribute a | a = f.getADecorator() | a.getName() = "setter" or a.getName() = "deleter") + or + f.getADecorator().(Name).getId() = "property" + } } From fa8e4f7314d111ef9b1de920f22ea3ae9ce0c2fc Mon Sep 17 00:00:00 2001 From: Taus Date: Mon, 23 Feb 2026 15:55:05 +0000 Subject: [PATCH 107/185] Python: Port DocStrings.ql --- python/ql/src/Statements/DocStrings.ql | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/python/ql/src/Statements/DocStrings.ql b/python/ql/src/Statements/DocStrings.ql index df7b09a963e..f71b204c018 100644 --- a/python/ql/src/Statements/DocStrings.ql +++ b/python/ql/src/Statements/DocStrings.ql @@ -17,7 +17,7 @@ */ import python -private import LegacyPointsTo +private import semmle.python.dataflow.new.internal.DataFlowDispatch predicate needs_docstring(Scope s) { s.isPublic() and @@ -29,15 +29,15 @@ predicate needs_docstring(Scope s) { } predicate function_needs_docstring(FunctionMetrics f) { - not exists(FunctionValue fo, FunctionValue base | fo.overrides(base) and fo.getScope() = f | - not function_needs_docstring(base.getScope()) + not exists(Function base | + DuckTyping::overridesMethod(f) and + base.getScope() = getADirectSuperclass+(f.getScope()) and + base.getName() = f.getName() and + not function_needs_docstring(base) ) and f.getName() != "lambda" and (f.getNumberOfLinesOfCode() - count(f.getADecorator())) > 2 and - not exists(PythonPropertyObject p | - p.getGetter().getFunction() = f or - p.getSetter().getFunction() = f - ) + not DuckTyping::isPropertyAccessor(f) } string scope_type(Scope s) { From 50b3b7ee1ff76754ecde6c113bb0998f1d7d8cd4 Mon Sep 17 00:00:00 2001 From: Taus Date: Thu, 19 Mar 2026 15:34:54 +0000 Subject: [PATCH 108/185] Python: Add `DuckTyping::hasUnreliableMro` Primarily used to filter out false positives in cases where our MRO approximation may be wrong. --- .../dataflow/new/internal/DataFlowDispatch.qll | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index 529e90798ba..21fa6872864 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -2118,6 +2118,19 @@ module DuckTyping { */ Function getInit(Class cls) { result = invokedFunctionFromClassConstruction(cls, "__init__") } + /** + * Holds if `cls` or any of its superclasses uses multiple inheritance, or + * has an unresolved base class. In these cases, our MRO approximation may + * resolve to the wrong `__init__`, so we should not flag argument mismatches. + */ + predicate hasUnreliableMro(Class cls) { + exists(Class sup | sup = getADirectSuperclass*(cls) | + exists(sup.getBase(1)) + or + hasUnresolvedBase(sup) + ) + } + /** * Holds if `f` overrides a method in a superclass with the same name. */ From 3584ad19059890cd598867b1a5c61f78764cbda0 Mon Sep 17 00:00:00 2001 From: Taus Date: Mon, 23 Feb 2026 15:51:25 +0000 Subject: [PATCH 109/185] Python: Port DeprecatedSliceMethod.ql Only trivial test changes. --- python/ql/src/Functions/DeprecatedSliceMethod.ql | 11 ++++++----- .../Functions/general/DeprecatedSliceMethod.expected | 6 +++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/python/ql/src/Functions/DeprecatedSliceMethod.ql b/python/ql/src/Functions/DeprecatedSliceMethod.ql index 3e9cdb681d9..937b3f46a4f 100644 --- a/python/ql/src/Functions/DeprecatedSliceMethod.ql +++ b/python/ql/src/Functions/DeprecatedSliceMethod.ql @@ -10,16 +10,17 @@ */ import python -private import LegacyPointsTo +private import semmle.python.dataflow.new.internal.DataFlowDispatch predicate slice_method_name(string name) { name = "__getslice__" or name = "__setslice__" or name = "__delslice__" } -from PythonFunctionValue f, string meth +from Function f, string meth where - f.getScope().isMethod() and - not f.isOverridingMethod() and + f.isMethod() and slice_method_name(meth) and - f.getName() = meth + f.getName() = meth and + not DuckTyping::overridesMethod(f) and + not DuckTyping::hasUnresolvedBase(getADirectSuperclass*(f.getScope())) select f, meth + " method has been deprecated since Python 2.0." diff --git a/python/ql/test/query-tests/Functions/general/DeprecatedSliceMethod.expected b/python/ql/test/query-tests/Functions/general/DeprecatedSliceMethod.expected index 1a6df6eca47..c9875b7a805 100644 --- a/python/ql/test/query-tests/Functions/general/DeprecatedSliceMethod.expected +++ b/python/ql/test/query-tests/Functions/general/DeprecatedSliceMethod.expected @@ -1,3 +1,3 @@ -| functions_test.py:95:5:95:40 | Function DeprecatedSliceMethods.__getslice__ | __getslice__ method has been deprecated since Python 2.0. | -| functions_test.py:98:5:98:47 | Function DeprecatedSliceMethods.__setslice__ | __setslice__ method has been deprecated since Python 2.0. | -| functions_test.py:101:5:101:40 | Function DeprecatedSliceMethods.__delslice__ | __delslice__ method has been deprecated since Python 2.0. | +| functions_test.py:95:5:95:40 | Function __getslice__ | __getslice__ method has been deprecated since Python 2.0. | +| functions_test.py:98:5:98:47 | Function __setslice__ | __setslice__ method has been deprecated since Python 2.0. | +| functions_test.py:101:5:101:40 | Function __delslice__ | __delslice__ method has been deprecated since Python 2.0. | From 434b3973eb285a69c038dba3719070eddbd6d735 Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 13 Mar 2026 16:36:36 +0000 Subject: [PATCH 110/185] Python: Add change note --- .../change-notes/2026-03-13-port-simple-points-to-queries.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 python/ql/src/change-notes/2026-03-13-port-simple-points-to-queries.md diff --git a/python/ql/src/change-notes/2026-03-13-port-simple-points-to-queries.md b/python/ql/src/change-notes/2026-03-13-port-simple-points-to-queries.md new file mode 100644 index 00000000000..3673b6de83a --- /dev/null +++ b/python/ql/src/change-notes/2026-03-13-port-simple-points-to-queries.md @@ -0,0 +1,5 @@ +--- +category: majorAnalysis +--- + +- Several quality queries have been ported away from using the legacy points-to library. This may lead to changes in alerts. From 093c27955ff61cb7e2f940d8a90aad4f9971a055 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> Date: Fri, 20 Mar 2026 15:24:15 +0000 Subject: [PATCH 111/185] Fix incorrect QLDoc Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- rust/ql/lib/codeql/rust/dataflow/FlowBarrier.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/ql/lib/codeql/rust/dataflow/FlowBarrier.qll b/rust/ql/lib/codeql/rust/dataflow/FlowBarrier.qll index 7ca64bedb5f..5813e9df690 100644 --- a/rust/ql/lib/codeql/rust/dataflow/FlowBarrier.qll +++ b/rust/ql/lib/codeql/rust/dataflow/FlowBarrier.qll @@ -10,7 +10,7 @@ * v * barrierNode predicate | other QL defined barriers, for example using concepts * v v - * various Barrier classes for specific data flow configurations <- extending QueryBarrier + * various Barrier classes for specific data flow configurations * ``` * * New barriers should be defined using models-as-data, QL extensions of From d2fcced5adf53ee9dde4338ceae57c49b5290736 Mon Sep 17 00:00:00 2001 From: Jeongsoo Lee Date: Fri, 20 Mar 2026 09:59:12 -0700 Subject: [PATCH 112/185] Add a `feature` change note --- .../2026-03-20-add-indirect-uninitialized-node.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cpp/ql/lib/change-notes/2026-03-20-add-indirect-uninitialized-node.md diff --git a/cpp/ql/lib/change-notes/2026-03-20-add-indirect-uninitialized-node.md b/cpp/ql/lib/change-notes/2026-03-20-add-indirect-uninitialized-node.md new file mode 100644 index 00000000000..9dd67f8910d --- /dev/null +++ b/cpp/ql/lib/change-notes/2026-03-20-add-indirect-uninitialized-node.md @@ -0,0 +1,4 @@ +--- +category: feature +--- +* A new data flow class called `IndirectUninitializedNode` represents uninitialized data of a variable behind some level of indirection. From a9eb801fea3c20b17882d74f3e92afe88cd81a78 Mon Sep 17 00:00:00 2001 From: Gregro Date: Thu, 19 Mar 2026 02:33:38 +0000 Subject: [PATCH 113/185] C#: Fix false positives in cs/log-forging for extension methods --- ...03-19-fix-log-forging-extension-methods.md | 8 ++++ ...crosoft.Extensions.Logging.Sinks.model.yml | 40 +++++++++++++++++++ .../security/dataflow/LogForgingQuery.qll | 12 +++++- .../Security Features/CWE-117/LogForging.cs | 18 +++++++++ .../CWE-117/LogForging.expected | 14 +++++-- 5 files changed, 87 insertions(+), 5 deletions(-) create mode 100644 csharp/ql/lib/change-notes/2026-03-19-fix-log-forging-extension-methods.md create mode 100644 csharp/ql/lib/ext/Microsoft.Extensions.Logging.Sinks.model.yml diff --git a/csharp/ql/lib/change-notes/2026-03-19-fix-log-forging-extension-methods.md b/csharp/ql/lib/change-notes/2026-03-19-fix-log-forging-extension-methods.md new file mode 100644 index 00000000000..7bf22b65221 --- /dev/null +++ b/csharp/ql/lib/change-notes/2026-03-19-fix-log-forging-extension-methods.md @@ -0,0 +1,8 @@ +--- +category: minorAnalysis +--- +* The `cs/log-forging` query no longer treats arguments to user-defined extension methods + on `ILogger` types as sinks. Instead, taint is tracked interprocedurally through extension + method bodies, reducing false positives when extension methods sanitize input internally. + Known framework extension methods (`Microsoft.Extensions.Logging.LoggerExtensions`) are + now modeled as explicit sinks via Models as Data. diff --git a/csharp/ql/lib/ext/Microsoft.Extensions.Logging.Sinks.model.yml b/csharp/ql/lib/ext/Microsoft.Extensions.Logging.Sinks.model.yml new file mode 100644 index 00000000000..c42173c3f7a --- /dev/null +++ b/csharp/ql/lib/ext/Microsoft.Extensions.Logging.Sinks.model.yml @@ -0,0 +1,40 @@ +extensions: + - addsTo: + pack: codeql/csharp-all + extensible: sinkModel + data: + # Log overloads + - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "Log", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])", "", "Argument[4..5]", "log-injection", "manual"] + - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "Log", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,System.String,System.Object[])", "", "Argument[3..4]", "log-injection", "manual"] + - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "Log", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.LogLevel,System.Exception,System.String,System.Object[])", "", "Argument[3..4]", "log-injection", "manual"] + - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "Log", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.LogLevel,System.String,System.Object[])", "", "Argument[2..3]", "log-injection", "manual"] + # LogCritical overloads + - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogCritical", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])", "", "Argument[3..4]", "log-injection", "manual"] + - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogCritical", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.String,System.Object[])", "", "Argument[2..3]", "log-injection", "manual"] + - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogCritical", "(Microsoft.Extensions.Logging.ILogger,System.Exception,System.String,System.Object[])", "", "Argument[2..3]", "log-injection", "manual"] + - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogCritical", "(Microsoft.Extensions.Logging.ILogger,System.String,System.Object[])", "", "Argument[1..2]", "log-injection", "manual"] + # LogDebug overloads + - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogDebug", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])", "", "Argument[3..4]", "log-injection", "manual"] + - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogDebug", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.String,System.Object[])", "", "Argument[2..3]", "log-injection", "manual"] + - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogDebug", "(Microsoft.Extensions.Logging.ILogger,System.Exception,System.String,System.Object[])", "", "Argument[2..3]", "log-injection", "manual"] + - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogDebug", "(Microsoft.Extensions.Logging.ILogger,System.String,System.Object[])", "", "Argument[1..2]", "log-injection", "manual"] + # LogError overloads + - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogError", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])", "", "Argument[3..4]", "log-injection", "manual"] + - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogError", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.String,System.Object[])", "", "Argument[2..3]", "log-injection", "manual"] + - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogError", "(Microsoft.Extensions.Logging.ILogger,System.Exception,System.String,System.Object[])", "", "Argument[2..3]", "log-injection", "manual"] + - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogError", "(Microsoft.Extensions.Logging.ILogger,System.String,System.Object[])", "", "Argument[1..2]", "log-injection", "manual"] + # LogInformation overloads + - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogInformation", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])", "", "Argument[3..4]", "log-injection", "manual"] + - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogInformation", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.String,System.Object[])", "", "Argument[2..3]", "log-injection", "manual"] + - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogInformation", "(Microsoft.Extensions.Logging.ILogger,System.Exception,System.String,System.Object[])", "", "Argument[2..3]", "log-injection", "manual"] + - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogInformation", "(Microsoft.Extensions.Logging.ILogger,System.String,System.Object[])", "", "Argument[1..2]", "log-injection", "manual"] + # LogTrace overloads + - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogTrace", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])", "", "Argument[3..4]", "log-injection", "manual"] + - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogTrace", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.String,System.Object[])", "", "Argument[2..3]", "log-injection", "manual"] + - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogTrace", "(Microsoft.Extensions.Logging.ILogger,System.Exception,System.String,System.Object[])", "", "Argument[2..3]", "log-injection", "manual"] + - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogTrace", "(Microsoft.Extensions.Logging.ILogger,System.String,System.Object[])", "", "Argument[1..2]", "log-injection", "manual"] + # LogWarning overloads + - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogWarning", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])", "", "Argument[3..4]", "log-injection", "manual"] + - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogWarning", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.String,System.Object[])", "", "Argument[2..3]", "log-injection", "manual"] + - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogWarning", "(Microsoft.Extensions.Logging.ILogger,System.Exception,System.String,System.Object[])", "", "Argument[2..3]", "log-injection", "manual"] + - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogWarning", "(Microsoft.Extensions.Logging.ILogger,System.String,System.Object[])", "", "Argument[1..2]", "log-injection", "manual"] diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/LogForgingQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/LogForgingQuery.qll index 22023ebc409..b3e0149c2f0 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/LogForgingQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/LogForgingQuery.qll @@ -10,6 +10,7 @@ private import semmle.code.csharp.frameworks.system.text.RegularExpressions private import semmle.code.csharp.security.Sanitizers private import semmle.code.csharp.security.dataflow.flowsinks.ExternalLocationSink private import semmle.code.csharp.dataflow.internal.ExternalFlow +private import semmle.code.csharp.commons.Loggers /** * A data flow source for untrusted user input used in log entries. @@ -52,9 +53,16 @@ private class HtmlSanitizer extends Sanitizer { } /** - * An argument to a call to a method on a logger class. + * An argument to a call to a method on a logger class, excluding extension methods + * which are analyzed interprocedurally. */ -private class LogForgingLogMessageSink extends Sink, LogMessageSink { } +private class LogForgingLogMessageSink extends Sink { + LogForgingLogMessageSink() { + this.getExpr() = any(LoggerType i).getAMethod().getACall().getAnArgument() or + this.getExpr() = + any(MethodCall call | call.getQualifier().getType() instanceof LoggerType).getAnArgument() + } +} /** * An argument to a call to a method on a trace class. diff --git a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.cs b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.cs index 18169e4a4b0..70cce8493ff 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.cs @@ -33,6 +33,11 @@ public class LogForgingHandler : IHttpHandler Microsoft.Extensions.Logging.ILogger logger2 = null; // BAD: Logged as-is logger2.LogError(username); // $ Alert + + // GOOD: uses safe extension method that sanitizes internally + logger.WarnSafe(username + " logged in"); + // BAD: uses unsafe extension method that does not sanitize + logger.WarnUnsafe(username + " logged in"); } public bool IsReusable @@ -43,3 +48,16 @@ public class LogForgingHandler : IHttpHandler } } } + +static class LoggerExtensions +{ + public static void WarnSafe(this ILogger logger, string message) + { + logger.Warn(message.Replace(Environment.NewLine, "")); + } + + public static void WarnUnsafe(this ILogger logger, string message) + { + logger.Warn(message); // $ Alert + } +} diff --git a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.expected b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.expected index 1820eaa07d9..04397886a0b 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.expected @@ -2,17 +2,22 @@ | LogForging.cs:21:21:21:43 | ... + ... | LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:21:21:21:43 | ... + ... | This log entry depends on a $@. | LogForging.cs:18:27:18:49 | access to property QueryString | user-provided value | | LogForging.cs:31:50:31:72 | ... + ... | LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:31:50:31:72 | ... + ... | This log entry depends on a $@. | LogForging.cs:18:27:18:49 | access to property QueryString | user-provided value | | LogForging.cs:35:26:35:33 | access to local variable username | LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:35:26:35:33 | access to local variable username | This log entry depends on a $@. | LogForging.cs:18:27:18:49 | access to property QueryString | user-provided value | +| LogForging.cs:61:21:61:27 | access to parameter message | LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:61:21:61:27 | access to parameter message | This log entry depends on a $@. | LogForging.cs:18:27:18:49 | access to property QueryString | user-provided value | | LogForgingAsp.cs:17:21:17:43 | ... + ... | LogForgingAsp.cs:13:32:13:39 | username : String | LogForgingAsp.cs:17:21:17:43 | ... + ... | This log entry depends on a $@. | LogForgingAsp.cs:13:32:13:39 | username | user-provided value | edges | LogForging.cs:18:16:18:23 | access to local variable username : String | LogForging.cs:21:21:21:43 | ... + ... | provenance | | | LogForging.cs:18:16:18:23 | access to local variable username : String | LogForging.cs:31:50:31:72 | ... + ... | provenance | | -| LogForging.cs:18:16:18:23 | access to local variable username : String | LogForging.cs:35:26:35:33 | access to local variable username | provenance | | +| LogForging.cs:18:16:18:23 | access to local variable username : String | LogForging.cs:35:26:35:33 | access to local variable username | provenance | Sink:MaD:1 | +| LogForging.cs:18:16:18:23 | access to local variable username : String | LogForging.cs:40:27:40:49 | ... + ... : String | provenance | | | LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:18:16:18:23 | access to local variable username : String | provenance | | -| LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:18:27:18:61 | access to indexer : String | provenance | MaD:1 | +| LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:18:27:18:61 | access to indexer : String | provenance | MaD:2 | | LogForging.cs:18:27:18:61 | access to indexer : String | LogForging.cs:18:16:18:23 | access to local variable username : String | provenance | | +| LogForging.cs:40:27:40:49 | ... + ... : String | LogForging.cs:59:63:59:69 | message : String | provenance | | +| LogForging.cs:59:63:59:69 | message : String | LogForging.cs:61:21:61:27 | access to parameter message | provenance | | | LogForgingAsp.cs:13:32:13:39 | username : String | LogForgingAsp.cs:17:21:17:43 | ... + ... | provenance | | models -| 1 | Summary: System.Collections.Specialized; NameValueCollection; false; get_Item; (System.String); ; Argument[this]; ReturnValue; taint; df-generated | +| 1 | Sink: Microsoft.Extensions.Logging; LoggerExtensions; false; LogError; (Microsoft.Extensions.Logging.ILogger,System.String,System.Object[]); ; Argument[1..2]; log-injection; manual | +| 2 | Summary: System.Collections.Specialized; NameValueCollection; false; get_Item; (System.String); ; Argument[this]; ReturnValue; taint; df-generated | nodes | LogForging.cs:18:16:18:23 | access to local variable username : String | semmle.label | access to local variable username : String | | LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | @@ -20,6 +25,9 @@ nodes | LogForging.cs:21:21:21:43 | ... + ... | semmle.label | ... + ... | | LogForging.cs:31:50:31:72 | ... + ... | semmle.label | ... + ... | | LogForging.cs:35:26:35:33 | access to local variable username | semmle.label | access to local variable username | +| LogForging.cs:40:27:40:49 | ... + ... : String | semmle.label | ... + ... : String | +| LogForging.cs:59:63:59:69 | message : String | semmle.label | message : String | +| LogForging.cs:61:21:61:27 | access to parameter message | semmle.label | access to parameter message | | LogForgingAsp.cs:13:32:13:39 | username : String | semmle.label | username : String | | LogForgingAsp.cs:17:21:17:43 | ... + ... | semmle.label | ... + ... | subpaths From d99247cf13c5792bd6d36cbb5b08e0a631bcaab9 Mon Sep 17 00:00:00 2001 From: Gregro Date: Sat, 21 Mar 2026 18:12:14 +0000 Subject: [PATCH 114/185] Clarify static extension method class name --- .../ql/test/query-tests/Security Features/CWE-117/LogForging.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.cs b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.cs index 70cce8493ff..adc10f75715 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.cs @@ -49,7 +49,7 @@ public class LogForgingHandler : IHttpHandler } } -static class LoggerExtensions +static class UserLoggerExtensions { public static void WarnSafe(this ILogger logger, string message) { From d0c48893f59b771efd7caa43280c6ae9897cb5ab Mon Sep 17 00:00:00 2001 From: Gregro Date: Sat, 21 Mar 2026 18:30:44 +0000 Subject: [PATCH 115/185] update test helper to use more robust .ReplaceLineEndings() sanitizer --- .../ql/test/query-tests/Security Features/CWE-117/LogForging.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.cs b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.cs index adc10f75715..10ff408e226 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.cs @@ -53,7 +53,7 @@ static class UserLoggerExtensions { public static void WarnSafe(this ILogger logger, string message) { - logger.Warn(message.Replace(Environment.NewLine, "")); + logger.Warn(message.ReplaceLineEndings("")); } public static void WarnUnsafe(this ILogger logger, string message) From a59c865328fde4832848239fdff96832a8fedcef Mon Sep 17 00:00:00 2001 From: Gregro Date: Sat, 21 Mar 2026 19:30:31 +0000 Subject: [PATCH 116/185] let interprocedural analysis handle source-available extension methods for LogForgingLogMessageSink's --- ...03-19-fix-log-forging-extension-methods.md | 9 ++--- ...crosoft.Extensions.Logging.Sinks.model.yml | 40 ------------------- .../security/dataflow/LogForgingQuery.qll | 12 +++--- .../CWE-117/LogForging.expected | 7 ++-- 4 files changed, 13 insertions(+), 55 deletions(-) delete mode 100644 csharp/ql/lib/ext/Microsoft.Extensions.Logging.Sinks.model.yml diff --git a/csharp/ql/lib/change-notes/2026-03-19-fix-log-forging-extension-methods.md b/csharp/ql/lib/change-notes/2026-03-19-fix-log-forging-extension-methods.md index 7bf22b65221..65ce217b105 100644 --- a/csharp/ql/lib/change-notes/2026-03-19-fix-log-forging-extension-methods.md +++ b/csharp/ql/lib/change-notes/2026-03-19-fix-log-forging-extension-methods.md @@ -1,8 +1,7 @@ --- category: minorAnalysis --- -* The `cs/log-forging` query no longer treats arguments to user-defined extension methods - on `ILogger` types as sinks. Instead, taint is tracked interprocedurally through extension - method bodies, reducing false positives when extension methods sanitize input internally. - Known framework extension methods (`Microsoft.Extensions.Logging.LoggerExtensions`) are - now modeled as explicit sinks via Models as Data. +* The `cs/log-forging` query no longer treats arguments to extension methods with + source code on `ILogger` types as sinks. Instead, taint is tracked interprocedurally + through extension method bodies, reducing false positives when extension methods + sanitize input internally. diff --git a/csharp/ql/lib/ext/Microsoft.Extensions.Logging.Sinks.model.yml b/csharp/ql/lib/ext/Microsoft.Extensions.Logging.Sinks.model.yml deleted file mode 100644 index c42173c3f7a..00000000000 --- a/csharp/ql/lib/ext/Microsoft.Extensions.Logging.Sinks.model.yml +++ /dev/null @@ -1,40 +0,0 @@ -extensions: - - addsTo: - pack: codeql/csharp-all - extensible: sinkModel - data: - # Log overloads - - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "Log", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])", "", "Argument[4..5]", "log-injection", "manual"] - - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "Log", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,System.String,System.Object[])", "", "Argument[3..4]", "log-injection", "manual"] - - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "Log", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.LogLevel,System.Exception,System.String,System.Object[])", "", "Argument[3..4]", "log-injection", "manual"] - - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "Log", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.LogLevel,System.String,System.Object[])", "", "Argument[2..3]", "log-injection", "manual"] - # LogCritical overloads - - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogCritical", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])", "", "Argument[3..4]", "log-injection", "manual"] - - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogCritical", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.String,System.Object[])", "", "Argument[2..3]", "log-injection", "manual"] - - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogCritical", "(Microsoft.Extensions.Logging.ILogger,System.Exception,System.String,System.Object[])", "", "Argument[2..3]", "log-injection", "manual"] - - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogCritical", "(Microsoft.Extensions.Logging.ILogger,System.String,System.Object[])", "", "Argument[1..2]", "log-injection", "manual"] - # LogDebug overloads - - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogDebug", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])", "", "Argument[3..4]", "log-injection", "manual"] - - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogDebug", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.String,System.Object[])", "", "Argument[2..3]", "log-injection", "manual"] - - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogDebug", "(Microsoft.Extensions.Logging.ILogger,System.Exception,System.String,System.Object[])", "", "Argument[2..3]", "log-injection", "manual"] - - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogDebug", "(Microsoft.Extensions.Logging.ILogger,System.String,System.Object[])", "", "Argument[1..2]", "log-injection", "manual"] - # LogError overloads - - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogError", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])", "", "Argument[3..4]", "log-injection", "manual"] - - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogError", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.String,System.Object[])", "", "Argument[2..3]", "log-injection", "manual"] - - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogError", "(Microsoft.Extensions.Logging.ILogger,System.Exception,System.String,System.Object[])", "", "Argument[2..3]", "log-injection", "manual"] - - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogError", "(Microsoft.Extensions.Logging.ILogger,System.String,System.Object[])", "", "Argument[1..2]", "log-injection", "manual"] - # LogInformation overloads - - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogInformation", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])", "", "Argument[3..4]", "log-injection", "manual"] - - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogInformation", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.String,System.Object[])", "", "Argument[2..3]", "log-injection", "manual"] - - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogInformation", "(Microsoft.Extensions.Logging.ILogger,System.Exception,System.String,System.Object[])", "", "Argument[2..3]", "log-injection", "manual"] - - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogInformation", "(Microsoft.Extensions.Logging.ILogger,System.String,System.Object[])", "", "Argument[1..2]", "log-injection", "manual"] - # LogTrace overloads - - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogTrace", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])", "", "Argument[3..4]", "log-injection", "manual"] - - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogTrace", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.String,System.Object[])", "", "Argument[2..3]", "log-injection", "manual"] - - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogTrace", "(Microsoft.Extensions.Logging.ILogger,System.Exception,System.String,System.Object[])", "", "Argument[2..3]", "log-injection", "manual"] - - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogTrace", "(Microsoft.Extensions.Logging.ILogger,System.String,System.Object[])", "", "Argument[1..2]", "log-injection", "manual"] - # LogWarning overloads - - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogWarning", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])", "", "Argument[3..4]", "log-injection", "manual"] - - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogWarning", "(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.String,System.Object[])", "", "Argument[2..3]", "log-injection", "manual"] - - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogWarning", "(Microsoft.Extensions.Logging.ILogger,System.Exception,System.String,System.Object[])", "", "Argument[2..3]", "log-injection", "manual"] - - ["Microsoft.Extensions.Logging", "LoggerExtensions", false, "LogWarning", "(Microsoft.Extensions.Logging.ILogger,System.String,System.Object[])", "", "Argument[1..2]", "log-injection", "manual"] diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/LogForgingQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/LogForgingQuery.qll index b3e0149c2f0..293b8ff9b8b 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/LogForgingQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/LogForgingQuery.qll @@ -10,7 +10,6 @@ private import semmle.code.csharp.frameworks.system.text.RegularExpressions private import semmle.code.csharp.security.Sanitizers private import semmle.code.csharp.security.dataflow.flowsinks.ExternalLocationSink private import semmle.code.csharp.dataflow.internal.ExternalFlow -private import semmle.code.csharp.commons.Loggers /** * A data flow source for untrusted user input used in log entries. @@ -54,13 +53,14 @@ private class HtmlSanitizer extends Sanitizer { /** * An argument to a call to a method on a logger class, excluding extension methods - * which are analyzed interprocedurally. + * with source code which are analyzed interprocedurally. */ -private class LogForgingLogMessageSink extends Sink { +private class LogForgingLogMessageSink extends Sink, LogMessageSink { LogForgingLogMessageSink() { - this.getExpr() = any(LoggerType i).getAMethod().getACall().getAnArgument() or - this.getExpr() = - any(MethodCall call | call.getQualifier().getType() instanceof LoggerType).getAnArgument() + not exists(ExtensionMethodCall mc | + this.getExpr() = mc.getAnArgument() and + mc.getTarget().fromSource() + ) } } diff --git a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.expected b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.expected index 04397886a0b..994cabadc75 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.expected @@ -7,17 +7,16 @@ edges | LogForging.cs:18:16:18:23 | access to local variable username : String | LogForging.cs:21:21:21:43 | ... + ... | provenance | | | LogForging.cs:18:16:18:23 | access to local variable username : String | LogForging.cs:31:50:31:72 | ... + ... | provenance | | -| LogForging.cs:18:16:18:23 | access to local variable username : String | LogForging.cs:35:26:35:33 | access to local variable username | provenance | Sink:MaD:1 | +| LogForging.cs:18:16:18:23 | access to local variable username : String | LogForging.cs:35:26:35:33 | access to local variable username | provenance | | | LogForging.cs:18:16:18:23 | access to local variable username : String | LogForging.cs:40:27:40:49 | ... + ... : String | provenance | | | LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:18:16:18:23 | access to local variable username : String | provenance | | -| LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:18:27:18:61 | access to indexer : String | provenance | MaD:2 | +| LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:18:27:18:61 | access to indexer : String | provenance | MaD:1 | | LogForging.cs:18:27:18:61 | access to indexer : String | LogForging.cs:18:16:18:23 | access to local variable username : String | provenance | | | LogForging.cs:40:27:40:49 | ... + ... : String | LogForging.cs:59:63:59:69 | message : String | provenance | | | LogForging.cs:59:63:59:69 | message : String | LogForging.cs:61:21:61:27 | access to parameter message | provenance | | | LogForgingAsp.cs:13:32:13:39 | username : String | LogForgingAsp.cs:17:21:17:43 | ... + ... | provenance | | models -| 1 | Sink: Microsoft.Extensions.Logging; LoggerExtensions; false; LogError; (Microsoft.Extensions.Logging.ILogger,System.String,System.Object[]); ; Argument[1..2]; log-injection; manual | -| 2 | Summary: System.Collections.Specialized; NameValueCollection; false; get_Item; (System.String); ; Argument[this]; ReturnValue; taint; df-generated | +| 1 | Summary: System.Collections.Specialized; NameValueCollection; false; get_Item; (System.String); ; Argument[this]; ReturnValue; taint; df-generated | nodes | LogForging.cs:18:16:18:23 | access to local variable username : String | semmle.label | access to local variable username : String | | LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | From ee00b98476df28c8d1698d3c6a93644db0c4d66a Mon Sep 17 00:00:00 2001 From: Jeroen Ketema <93738568+jketema@users.noreply.github.com> Date: Mon, 23 Mar 2026 10:44:21 +0100 Subject: [PATCH 117/185] Update cpp/ql/lib/change-notes/2026-03-20-add-indirect-uninitialized-node.md --- .../change-notes/2026-03-20-add-indirect-uninitialized-node.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/lib/change-notes/2026-03-20-add-indirect-uninitialized-node.md b/cpp/ql/lib/change-notes/2026-03-20-add-indirect-uninitialized-node.md index 9dd67f8910d..60f6b0a276e 100644 --- a/cpp/ql/lib/change-notes/2026-03-20-add-indirect-uninitialized-node.md +++ b/cpp/ql/lib/change-notes/2026-03-20-add-indirect-uninitialized-node.md @@ -1,4 +1,4 @@ --- category: feature --- -* A new data flow class called `IndirectUninitializedNode` represents uninitialized data of a variable behind some level of indirection. +* Added a new data flow node, `IndirectUninitializedNode`, that represents uninitialized local variables behind a number of indirections. From c67122b3f1bcb695f5fbf1da03cf8043193ff099 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Mon, 23 Mar 2026 12:14:11 +0100 Subject: [PATCH 118/185] C++: Add expressions with type data to cpp/extraction-information --- cpp/ql/src/Telemetry/DatabaseQuality.qll | 27 +++++++++++++++++++- cpp/ql/src/Telemetry/ExtractorInformation.ql | 5 +++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/cpp/ql/src/Telemetry/DatabaseQuality.qll b/cpp/ql/src/Telemetry/DatabaseQuality.qll index 003b7dc01d1..be44a9431aa 100644 --- a/cpp/ql/src/Telemetry/DatabaseQuality.qll +++ b/cpp/ql/src/Telemetry/DatabaseQuality.qll @@ -1,9 +1,14 @@ import cpp import codeql.util.ReportStats +/** A file that is included in the quality statistics. */ +private class RelevantFile extends File { + RelevantFile() { this.fromSource() and exists(this.getRelativePath()) } +} + module CallTargetStats implements StatsSig { private class RelevantCall extends Call { - RelevantCall() { this.getFile() = any(File f | f.fromSource() and exists(f.getRelativePath())) } + RelevantCall() { this.getFile() instanceof RelevantFile } } // We assume that calls with an implicit target are calls that could not be @@ -22,4 +27,24 @@ module CallTargetStats implements StatsSig { string getNotOkText() { result = "calls with missing call target" } } +private class SourceExpr extends Expr { + SourceExpr() { this.getFile() instanceof RelevantFile } +} + +predicate find(SourceExpr e) { not hasGoodType(e) } + +private predicate hasGoodType(Expr e) { not e.getType() instanceof ErroneousType } + +module ExprTypeStats implements StatsSig { + int getNumberOfOk() { result = count(SourceExpr e | hasGoodType(e)) } + + int getNumberOfNotOk() { result = count(SourceExpr e | not hasGoodType(e)) } + + string getOkText() { result = "expressions with known type" } + + string getNotOkText() { result = "expressions with unknown type" } +} + module CallTargetStatsReport = ReportStats; + +module ExprTypeStatsReport = ReportStats; diff --git a/cpp/ql/src/Telemetry/ExtractorInformation.ql b/cpp/ql/src/Telemetry/ExtractorInformation.ql index 6e134ccd05f..a82b3b86ace 100644 --- a/cpp/ql/src/Telemetry/ExtractorInformation.ql +++ b/cpp/ql/src/Telemetry/ExtractorInformation.ql @@ -14,7 +14,10 @@ where ( CallTargetStatsReport::numberOfOk(key, value) or CallTargetStatsReport::numberOfNotOk(key, value) or - CallTargetStatsReport::percentageOfOk(key, value) + CallTargetStatsReport::percentageOfOk(key, value) or + ExprTypeStatsReport::numberOfOk(key, value) or + ExprTypeStatsReport::numberOfNotOk(key, value) or + ExprTypeStatsReport::percentageOfOk(key, value) ) and /* Infinity */ value != 1.0 / 0.0 and From 09caeca7e9b3347cebd9f4a5e2a563d9c38a9ea9 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 23 Mar 2026 13:27:20 +0000 Subject: [PATCH 119/185] C++: Move parameter indirection nodes into the public API. --- .../code/cpp/ir/dataflow/internal/DataFlowNodes.qll | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll index fe954c640d1..36dc85f4f40 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll @@ -795,6 +795,12 @@ module Public { /** An explicit positional parameter, including `this`, but not `...`. */ final class DirectParameterNode = AbstractDirectParameterNode; + /** + * A node representing an indirection of a positional parameter, + * including `*this`, but not `*...`. + */ + final class IndirectParameterNode = AbstractIndirectParameterNode; + final class ExplicitParameterNode = AbstractExplicitParameterNode; /** An implicit `this` parameter. */ @@ -954,11 +960,6 @@ module Public { private import Public -/** - * A node representing an indirection of a parameter. - */ -final class IndirectParameterNode = AbstractIndirectParameterNode; - /** * A class that lifts pre-SSA dataflow nodes to regular dataflow nodes. */ From 1363c54a9f16d26e52c845478f67eb2b55f10d09 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 23 Mar 2026 13:28:33 +0000 Subject: [PATCH 120/185] C++: Add 'asIndirectInstruction' as a public predicate. --- .../semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll index 36dc85f4f40..51eabe8b223 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll @@ -321,6 +321,12 @@ module Public { */ Operand asIndirectOperand(int index) { hasOperandAndIndex(this, result, index) } + /** + * Gets the instruction that is indirectly tracked by this node behind + * `index` number of indirections. + */ + Instruction asIndirectInstruction(int index) { hasInstructionAndIndex(this, result, index) } + /** * Holds if this node is at index `i` in basic block `block`. * From fef314e27fff8f92d06aa807545097443fdf0aa2 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 23 Mar 2026 13:39:15 +0000 Subject: [PATCH 121/185] C++: Add change note. --- ...-23-indirect-parameter-nodes-and-indirect-instructions.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 cpp/ql/lib/change-notes/2026-03-23-indirect-parameter-nodes-and-indirect-instructions.md diff --git a/cpp/ql/lib/change-notes/2026-03-23-indirect-parameter-nodes-and-indirect-instructions.md b/cpp/ql/lib/change-notes/2026-03-23-indirect-parameter-nodes-and-indirect-instructions.md new file mode 100644 index 00000000000..c3bd4028ee9 --- /dev/null +++ b/cpp/ql/lib/change-notes/2026-03-23-indirect-parameter-nodes-and-indirect-instructions.md @@ -0,0 +1,5 @@ +--- +category: feature +--- +* Added a class `DataFlow::IndirectParameterNode` to represent the indirection of a parameter as a dataflow node. +* Added a predicate `Node::asIndirectInstruction` which returns the `Instruction` that defines the indirect dataflow node, if any. \ No newline at end of file From 8cebf510dc9964c40121dd89cf43dedbb3be2b73 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Mon, 23 Mar 2026 13:45:46 +0000 Subject: [PATCH 122/185] C++: Reword the change note from #21458. --- .../change-notes/2026-03-20-add-indirect-uninitialized-node.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/lib/change-notes/2026-03-20-add-indirect-uninitialized-node.md b/cpp/ql/lib/change-notes/2026-03-20-add-indirect-uninitialized-node.md index 60f6b0a276e..07235e047d4 100644 --- a/cpp/ql/lib/change-notes/2026-03-20-add-indirect-uninitialized-node.md +++ b/cpp/ql/lib/change-notes/2026-03-20-add-indirect-uninitialized-node.md @@ -1,4 +1,4 @@ --- category: feature --- -* Added a new data flow node, `IndirectUninitializedNode`, that represents uninitialized local variables behind a number of indirections. +* Added a class `IndirectUninitializedNode` to represent the indirection of an uninitialized local variable as a dataflow node. From 5859590b5d2345afa57a6fbfa7a6c827488d4baa Mon Sep 17 00:00:00 2001 From: Taus Date: Mon, 23 Mar 2026 15:07:31 +0100 Subject: [PATCH 123/185] Python: Fix typo in comment Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../ql/src/Variables/SuspiciousUnusedLoopIterationVariable.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/src/Variables/SuspiciousUnusedLoopIterationVariable.ql b/python/ql/src/Variables/SuspiciousUnusedLoopIterationVariable.ql index 18c83240667..d252742d67c 100644 --- a/python/ql/src/Variables/SuspiciousUnusedLoopIterationVariable.ql +++ b/python/ql/src/Variables/SuspiciousUnusedLoopIterationVariable.ql @@ -53,7 +53,7 @@ predicate call_to_range(DataFlow::Node node) { call_to_range(node.(DataFlow::CallCfgNode).getArg(0)) } -/** Whether n is a use of a variable that is a not effectively a constant. */ +/** Whether n is a use of a variable that is not effectively a constant. */ predicate use_of_non_constant(Name n) { exists(Variable var | n.uses(var) and From 56c83e250e29f20be505d577080b0966e0f9bfa4 Mon Sep 17 00:00:00 2001 From: Taus Date: Mon, 23 Mar 2026 15:09:27 +0100 Subject: [PATCH 124/185] Python: Make comment more precise Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../semmle/python/dataflow/new/internal/DataFlowDispatch.qll | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index 21fa6872864..abdf03daa13 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -2089,7 +2089,8 @@ module DuckTyping { /** * Holds if `cls` is a new-style class. In Python 3, all classes are new-style. * In Python 2, a class is new-style if it (transitively) inherits from `object`, - * or has a declared `__metaclass__`, or has an unresolved base class. + * or has a declared `__metaclass__`, or is in a module with a module-level + * `__metaclass__` declaration, or has an unresolved base class. */ predicate isNewStyle(Class cls) { major_version() = 3 From 1ffcdc92939102715c79ff916d147b67ae969ff5 Mon Sep 17 00:00:00 2001 From: Taus Date: Mon, 23 Mar 2026 14:55:28 +0000 Subject: [PATCH 125/185] Python: Select property instead of function in PropertyInOldStyleClass. This matches the previous behaviour more closely. --- python/ql/src/Classes/PropertyInOldStyleClass.ql | 7 ++++--- .../Classes/new-style/PropertyInOldStyleClass.expected | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/python/ql/src/Classes/PropertyInOldStyleClass.ql b/python/ql/src/Classes/PropertyInOldStyleClass.ql index 80a5ef06bbe..4b3666067ec 100644 --- a/python/ql/src/Classes/PropertyInOldStyleClass.ql +++ b/python/ql/src/Classes/PropertyInOldStyleClass.ql @@ -13,11 +13,12 @@ import python private import semmle.python.dataflow.new.internal.DataFlowDispatch -from Function prop, Class cls +from Function prop, Class cls, Name decorator where prop.getScope() = cls and - prop.getADecorator().(Name).getId() = "property" and + decorator = prop.getADecorator() and + decorator.getId() = "property" and not DuckTyping::isNewStyle(cls) -select prop, +select decorator, "Property " + prop.getName() + " will not work properly, as class " + cls.getName() + " is an old-style class." diff --git a/python/ql/test/2/query-tests/Classes/new-style/PropertyInOldStyleClass.expected b/python/ql/test/2/query-tests/Classes/new-style/PropertyInOldStyleClass.expected index 1e5be51fbaf..fb508cbe859 100644 --- a/python/ql/test/2/query-tests/Classes/new-style/PropertyInOldStyleClass.expected +++ b/python/ql/test/2/query-tests/Classes/new-style/PropertyInOldStyleClass.expected @@ -1 +1 @@ -| property_old_style.py:9:5:9:20 | Function piosc | Property piosc will not work properly, as class OldStyle is an old-style class. | +| property_old_style.py:8:6:8:13 | property | Property piosc will not work properly, as class OldStyle is an old-style class. | From a276f721f72dedf9afe754463af88055eab36179 Mon Sep 17 00:00:00 2001 From: Taus Date: Mon, 23 Mar 2026 15:21:27 +0000 Subject: [PATCH 126/185] Python: Add ternary `overridesMethod` This one also allows easy access to the method being overridden and the class on which it resides. This let's us simplify DocStrings.ql accordingly. --- .../dataflow/new/internal/DataFlowDispatch.qll | 14 ++++++++++++-- python/ql/src/Statements/DocStrings.ql | 4 +--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index abdf03daa13..d73b0cfabb6 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -2135,8 +2135,18 @@ module DuckTyping { /** * Holds if `f` overrides a method in a superclass with the same name. */ - predicate overridesMethod(Function f) { - exists(Class cls | f.getScope() = cls | hasMethod(getADirectSuperclass(cls), f.getName())) + predicate overridesMethod(Function f) { overridesMethod(f, _, _) } + + /** + * Holds if `f` overrides `overridden` declared in `superclass`. + */ + predicate overridesMethod(Function f, Class superclass, Function overridden) { + exists(Class cls | + f.getScope() = cls and + superclass = getADirectSuperclass+(cls) and + overridden = superclass.getAMethod() and + overridden.getName() = f.getName() + ) } /** diff --git a/python/ql/src/Statements/DocStrings.ql b/python/ql/src/Statements/DocStrings.ql index f71b204c018..d1f8c07abba 100644 --- a/python/ql/src/Statements/DocStrings.ql +++ b/python/ql/src/Statements/DocStrings.ql @@ -30,9 +30,7 @@ predicate needs_docstring(Scope s) { predicate function_needs_docstring(FunctionMetrics f) { not exists(Function base | - DuckTyping::overridesMethod(f) and - base.getScope() = getADirectSuperclass+(f.getScope()) and - base.getName() = f.getName() and + DuckTyping::overridesMethod(f, _, base) and not function_needs_docstring(base) ) and f.getName() != "lambda" and From 93e35661e67cb576d9b4fe5a4429e01c2104a957 Mon Sep 17 00:00:00 2001 From: Taus Date: Mon, 23 Mar 2026 15:22:24 +0000 Subject: [PATCH 127/185] Python: Make `isNewType` more precise For module-level metaclass declarations, we now also check that the right hand side in a `__metaclass__ = type` assignment is in fact the built-in `type`. --- .../semmle/python/dataflow/new/internal/DataFlowDispatch.qll | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index d73b0cfabb6..d1af9585275 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -2108,7 +2108,8 @@ module DuckTyping { // Module-level __metaclass__ = type makes all classes in the module new-style exists(Assign a | a.getScope() = cls.getEnclosingModule() and - a.getATarget().(Name).getId() = "__metaclass__" + a.getATarget().(Name).getId() = "__metaclass__" and + a.getValue() = API::builtin("type").getAValueReachableFromSource().asExpr() ) ) } From ac48eca9169b0ddd506564f3f075aedf96f37b5c Mon Sep 17 00:00:00 2001 From: Taus Date: Mon, 23 Mar 2026 15:26:00 +0000 Subject: [PATCH 128/185] Python: Use `cls.getMethod` instead of `getName` --- .../semmle/python/dataflow/new/internal/DataFlowDispatch.qll | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index d1af9585275..1db6c08f5f4 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -2145,8 +2145,7 @@ module DuckTyping { exists(Class cls | f.getScope() = cls and superclass = getADirectSuperclass+(cls) and - overridden = superclass.getAMethod() and - overridden.getName() = f.getName() + overridden = superclass.getMethod(f.getName()) ) } From d82fc67b364ea63ba60441d45eabd01edf2caf64 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Mon, 23 Mar 2026 16:11:22 +0000 Subject: [PATCH 129/185] Fix QLDoc formatting --- .../ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll index a3f3da9364d..451608329f6 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll @@ -112,10 +112,10 @@ extensible predicate barrierModel( * Holds if in a call to the function with canonical path `path`, the value referred * to by `input` is a barrier guard of the given `kind` and `madId` is the data * extension row number. - * the value referred to by `input` is assumed to lead to a parameter of a call - * (possibly `self`), and the call is guarding the parameter. - * `branch` is either `true` or `false`, indicating which branch of the guard - * is protecting the parameter. + * + * The value referred to by `input` is assumed to lead to a parameter of a call + * (possibly `self`), and the call is guarding the parameter. `branch` is either `true` + * or `false`, indicating which branch of the guard is protecting the parameter. */ extensible predicate barrierGuardModel( string path, string input, string branch, string kind, string provenance, From 97ebc0e8398023a0e18c8d5c3ccb743c2ae1980f Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Mon, 23 Mar 2026 16:22:27 +0000 Subject: [PATCH 130/185] Update QLDoc in FlowBarrier.qll --- rust/ql/lib/codeql/rust/dataflow/FlowBarrier.qll | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/rust/ql/lib/codeql/rust/dataflow/FlowBarrier.qll b/rust/ql/lib/codeql/rust/dataflow/FlowBarrier.qll index 5813e9df690..49e1d676921 100644 --- a/rust/ql/lib/codeql/rust/dataflow/FlowBarrier.qll +++ b/rust/ql/lib/codeql/rust/dataflow/FlowBarrier.qll @@ -1,7 +1,7 @@ /** - * Provides classes and predicates for defining barriers. + * Provides classes and predicates for defining barriers and barrier guards. * - * Flow barriers defined here feed into data flow configurations as follows: + * Flow barriers and barrier guards defined here feed into data flow configurations as follows: * * ```text * data from *.model.yml | QL extensions of FlowBarrier::Range @@ -11,10 +11,18 @@ * barrierNode predicate | other QL defined barriers, for example using concepts * v v * various Barrier classes for specific data flow configurations + * + * data from *.model.yml | QL extensions of FlowBarrierGuard::Range + * v v + * FlowBarrierGuard (associated with a models-as-data kind string) + * v + * barrierNode predicate | other QL defined barrier guards, for example using concepts + * v v + * various Barrier classes for specific data flow configurations * ``` * - * New barriers should be defined using models-as-data, QL extensions of - * `FlowBarrier::Range`, or concepts. Data flow configurations should use the + * New barriers and barrier guards should be defined using models-as-data, QL extensions of + * `FlowBarrier::Range`/`FlowBarrierGuard::Range`, or concepts. Data flow configurations should use the * `barrierNode` predicate and/or concepts to define their barriers. */ From 8d16a2b4fa51dce30c15cd401599a2d9c3090982 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Mon, 23 Mar 2026 16:24:03 +0000 Subject: [PATCH 131/185] Fix `parameter` -> `argument` in QLDoc --- rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll index 451608329f6..4d28dd8de81 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll @@ -113,9 +113,9 @@ extensible predicate barrierModel( * to by `input` is a barrier guard of the given `kind` and `madId` is the data * extension row number. * - * The value referred to by `input` is assumed to lead to a parameter of a call - * (possibly `self`), and the call is guarding the parameter. `branch` is either `true` - * or `false`, indicating which branch of the guard is protecting the parameter. + * The value referred to by `input` is assumed to lead to an argument of a call + * (possibly `self`), and the call is guarding the argument. `branch` is either `true` + * or `false`, indicating which branch of the guard is protecting the argument. */ extensible predicate barrierGuardModel( string path, string input, string branch, string kind, string provenance, From 19424627c16d3460a7cca37652f5904d0feb5465 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 23 Mar 2026 20:19:09 +0000 Subject: [PATCH 132/185] update codeql documentation --- .../codeql-changelog/codeql-cli-2.19.1.rst | 2 +- .../codeql-changelog/codeql-cli-2.21.3.rst | 2 +- .../codeql-changelog/codeql-cli-2.22.3.rst | 2 +- .../codeql-changelog/codeql-cli-2.25.0.rst | 131 ++++++++++++++++++ .../codeql-changelog/index.rst | 1 + 5 files changed, 135 insertions(+), 3 deletions(-) create mode 100644 docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.25.0.rst diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst index f2948d0db67..39d4d36537c 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst @@ -129,7 +129,7 @@ Java/Kotlin """"""""""" * The Java extractor and QL libraries now support Java 23. -* Kotlin versions up to 2.1.0\ *x* are now supported. +* Kotlin versions up to 2.1.0*x* are now supported. Python """""" diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.3.rst index 71a8e3a6824..fffe94c04b8 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.3.rst @@ -144,7 +144,7 @@ New Features Java/Kotlin """"""""""" -* Kotlin versions up to 2.2.0\ *x* are now supported. Support for the Kotlin 1.5.x series is dropped (so the minimum Kotlin version is now 1.6.0). +* Kotlin versions up to 2.2.0*x* are now supported. Support for the Kotlin 1.5.x series is dropped (so the minimum Kotlin version is now 1.6.0). Swift """"" diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst index 4f1d34ff2dd..8e5a18a0c74 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst @@ -98,4 +98,4 @@ C/C++ Java/Kotlin """"""""""" -* Kotlin versions up to 2.2.2\ *x* are now supported. +* Kotlin versions up to 2.2.2*x* are now supported. diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.25.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.25.0.rst new file mode 100644 index 00000000000..7c371a3a365 --- /dev/null +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.25.0.rst @@ -0,0 +1,131 @@ +.. _codeql-cli-2.25.0: + +========================== +CodeQL 2.25.0 (2026-03-19) +========================== + +.. contents:: Contents + :depth: 2 + :local: + :backlinks: none + +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. + +Security Coverage +----------------- + +CodeQL 2.25.0 runs a total of 491 security queries when configured with the Default suite (covering 166 CWE). The Extended suite enables an additional 135 queries (covering 35 more CWE). + +CodeQL CLI +---------- + +Breaking Changes +~~~~~~~~~~~~~~~~ + +* :code:`codeql database interpret-results` and :code:`codeql database analyze` no longer attempt to reconstruct file baseline information from databases created with CLI versions before 2.11.2. + +Bug Fixes +~~~~~~~~~ + +* Upgraded Jackson library from 2.16.1 to 2.18.6 to address a high-severity denial of service vulnerability (GHSA-72hv-8253-57qq) in jackson-core's async JSON parser. +* Upgraded snakeyaml (which is a dependency of jackson-dataformat-yaml) from 2.2 to 2.3. + +Language Libraries +------------------ + +Breaking Changes +~~~~~~~~~~~~~~~~ + +Java/Kotlin +""""""""""" + +* The Java control flow graph (CFG) implementation has been completely rewritten. The CFG now includes additional nodes to more accurately represent certain constructs. This also means that any existing code that implicitly relies on very specific details about the CFG may need to be updated. + The CFG now only includes the nodes that are reachable from the entry point. + Additionally, the following breaking changes have been made: + + * :code:`ControlFlowNode.asCall` has been removed - use :code:`Call.getControlFlowNode` instead. + * :code:`ControlFlowNode.getEnclosingStmt` has been removed. + * :code:`ControlFlow::ExprNode` has been removed. + * :code:`ControlFlow::StmtNode` has been removed. + * :code:`ControlFlow::Node` has been removed - this was merely an alias of + :code:`ControlFlowNode`, which is still available. + * Previously deprecated predicates on :code:`BasicBlock` have been removed. + +Major Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Swift +""""" + +* Upgraded to allow analysis of Swift 6.2.4. + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C/C++ +""""" + +* Inline expectations test comments, which are of the form :code:`// $ tag` or :code:`// $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the :code:`$` symbol. + +C# +"" + +* Inline expectations test comments, which are of the form :code:`// $ tag` or :code:`// $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the :code:`$` symbol. +* Added :code:`System.Net.WebSockets::ReceiveAsync` as a remote flow source. +* Added reverse taint flow from implicit conversion operator calls to their arguments. +* Added post-update nodes for struct-type arguments, allowing data flow out of method calls via those arguments. +* C# 14: Added support for partial constructors. + +Golang +"""""" + +* Inline expectations test comments, which are of the form :code:`// $ tag` or :code:`// $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the :code:`$` symbol. + +Java/Kotlin +""""""""""" + +* Inline expectations test comments, which are of the form :code:`// $ tag` or :code:`// $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the :code:`$` symbol. +* The class :code:`Assignment` now extends :code:`BinaryExpr`. Uses of :code:`BinaryExpr` may in some cases need slight adjustment. + +JavaScript/TypeScript +""""""""""""""""""""" + +* Added support for browser-specific source kinds (:code:`browser`, :code:`browser-url-query`, :code:`browser-url-fragment`, :code:`browser-url-path`, :code:`browser-url`, :code:`browser-window-name`, :code:`browser-message-event`) that can be used in data extensions to model sources in browser environments. +* Inline expectations test comments, which are of the form :code:`// $ tag` or :code:`// $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the :code:`$` symbol. + +Python +"""""" + +* The call graph resolution no longer considers methods marked using |link-code-typing-overload-1|_ as valid targets. This ensures that only the method that contains the actual implementation gets resolved as a target. +* Inline expectations test comments, which are of the form :code:`# $ tag` or :code:`# $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the :code:`$` symbol. + +Ruby +"""" + +* Inline expectations test comments, which are of the form :code:`# $ tag` or :code:`# $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the :code:`$` symbol. + +Swift +""""" + +* Inline expectations test comments, which are of the form :code:`// $ tag` or :code:`// $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the :code:`$` symbol. + +Rust +"""" + +* Inline expectations test comments, which are of the form :code:`// $ tag` or :code:`// $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the :code:`$` symbol. +* Added neutral models to inhibit spurious generated sink models for :code:`map` and :code:`from`. This fixes some false positive query results. + +Shared Libraries +---------------- + +New Features +~~~~~~~~~~~~ + +Dataflow Analysis +""""""""""""""""" + +* Two new flow features :code:`FeatureEscapesSourceCallContext` and :code:`FeatureEscapesSourceCallContextOrEqualSourceSinkCallContext` have been added. The former implies that the sink must be reached from the source by escaping the source call context, that is, flow must either return from the callable containing the source or use a jump-step before reaching the sink. The latter is the disjunction of the former and the existing :code:`FeatureEqualSourceSinkCallContext` flow feature. + +.. |link-code-typing-overload-1| replace:: :code:`@typing.overload`\ +.. _link-code-typing-overload-1: https://typing.python.org/en/latest/spec/overload.html#overloads + diff --git a/docs/codeql/codeql-overview/codeql-changelog/index.rst b/docs/codeql/codeql-overview/codeql-changelog/index.rst index c128fe96410..d880a7e56d8 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/index.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/index.rst @@ -11,6 +11,7 @@ A list of queries for each suite and language `is available here Date: Mon, 23 Mar 2026 23:17:22 +0000 Subject: [PATCH 133/185] C++: Fix bad join in `callsVariadicFormatter` On `wireshark` this reduces the intermediate tuple count from roughly 88 million tuples to roughly 3000 (with the new helper predicate materialising ~300 tuples). --- cpp/ql/lib/semmle/code/cpp/commons/Printf.qll | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/commons/Printf.qll b/cpp/ql/lib/semmle/code/cpp/commons/Printf.qll index 023ce09c5c1..d189dd36f87 100644 --- a/cpp/ql/lib/semmle/code/cpp/commons/Printf.qll +++ b/cpp/ql/lib/semmle/code/cpp/commons/Printf.qll @@ -163,12 +163,23 @@ predicate primitiveVariadicFormatter( ) } +/** + * Gets a function call whose target is a variadic formatter with the given + * `type`, `format` parameter index and `output` parameter index. + * + * Join-order helper for `callsVariadicFormatter`. + */ +pragma[nomagic] +private predicate callsVariadicFormatterCall(FunctionCall fc, string type, int format, int output) { + variadicFormatter(fc.getTarget(), type, format, output) +} + private predicate callsVariadicFormatter( Function f, string type, int formatParamIndex, int outputParamIndex ) { // calls a variadic formatter with `formatParamIndex`, `outputParamIndex` linked exists(FunctionCall fc, int format, int output | - variadicFormatter(pragma[only_bind_into](fc.getTarget()), type, format, output) and + callsVariadicFormatterCall(fc, type, format, output) and fc.getEnclosingFunction() = f and fc.getArgument(format) = f.getParameter(formatParamIndex).getAnAccess() and fc.getArgument(output) = f.getParameter(outputParamIndex).getAnAccess() @@ -176,7 +187,7 @@ private predicate callsVariadicFormatter( or // calls a variadic formatter with only `formatParamIndex` linked exists(FunctionCall fc, string calledType, int format, int output | - variadicFormatter(pragma[only_bind_into](fc.getTarget()), calledType, format, output) and + callsVariadicFormatterCall(fc, calledType, format, output) and fc.getEnclosingFunction() = f and fc.getArgument(format) = f.getParameter(formatParamIndex).getAnAccess() and not fc.getArgument(output) = f.getParameter(_).getAnAccess() and From 5762191832b974ccc3d887ffb613aca673963e02 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Mon, 23 Mar 2026 17:20:43 +0000 Subject: [PATCH 134/185] Enable MaD barriers for queries with MaD sinks --- .../security/AccessInvalidPointerExtensions.qll | 8 ++++++++ .../rust/security/CleartextLoggingExtensions.qll | 8 ++++++++ .../security/CleartextStorageDatabaseExtensions.qll | 7 +++++++ .../security/CleartextTransmissionExtensions.qll | 8 ++++++++ .../security/DisabledCertificateCheckExtensions.qll | 13 +++++++++++++ .../HardcodedCryptographicValueExtensions.qll | 10 ++++++++++ .../rust/security/InsecureCookieExtensions.qll | 8 ++++++++ .../codeql/rust/security/LogInjectionExtensions.qll | 8 ++++++++ .../rust/security/RequestForgeryExtensions.qll | 8 ++++++++ .../codeql/rust/security/SqlInjectionExtensions.qll | 10 +++++++++- .../codeql/rust/security/TaintedPathExtensions.qll | 5 +++++ .../UncontrolledAllocationSizeExtensions.qll | 8 ++++++++ .../codeql/rust/security/UseOfHttpExtensions.qll | 8 ++++++++ rust/ql/lib/codeql/rust/security/XssExtensions.qll | 8 ++++++++ .../security/regex/RegexInjectionExtensions.qll | 8 ++++++++ .../security/CWE-295/DisabledCertificateCheck.ql | 2 ++ 16 files changed, 126 insertions(+), 1 deletion(-) diff --git a/rust/ql/lib/codeql/rust/security/AccessInvalidPointerExtensions.qll b/rust/ql/lib/codeql/rust/security/AccessInvalidPointerExtensions.qll index 117f67a7b4e..89a0a2c5c92 100644 --- a/rust/ql/lib/codeql/rust/security/AccessInvalidPointerExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/AccessInvalidPointerExtensions.qll @@ -5,6 +5,7 @@ import rust private import codeql.rust.dataflow.DataFlow +private import codeql.rust.dataflow.FlowBarrier private import codeql.rust.dataflow.FlowSource private import codeql.rust.dataflow.FlowSink private import codeql.rust.Concepts @@ -69,6 +70,13 @@ module AccessInvalidPointer { ModelsAsDataSink() { sinkNode(this, "pointer-access") } } + /** + * A barrier for invalid pointer access from model data. + */ + private class ModelsAsDataBarrier extends Barrier { + ModelsAsDataBarrier() { barrierNode(this, "pointer-access") } + } + /** * A barrier for invalid pointer access vulnerabilities for values checked to * be non-`null`. diff --git a/rust/ql/lib/codeql/rust/security/CleartextLoggingExtensions.qll b/rust/ql/lib/codeql/rust/security/CleartextLoggingExtensions.qll index f634992fb81..c728d29f015 100644 --- a/rust/ql/lib/codeql/rust/security/CleartextLoggingExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/CleartextLoggingExtensions.qll @@ -5,6 +5,7 @@ import rust private import codeql.rust.dataflow.DataFlow +private import codeql.rust.dataflow.FlowBarrier private import codeql.rust.dataflow.FlowSink private import codeql.rust.security.SensitiveData private import codeql.rust.Concepts @@ -44,6 +45,13 @@ module CleartextLogging { ModelsAsDataSink() { sinkNode(this, "log-injection") } } + /** + * A barrier for logging from model data. + */ + private class ModelsAsDataBarrier extends Barrier { + ModelsAsDataBarrier() { barrierNode(this, "log-injection") } + } + private class BooleanTypeBarrier extends Barrier instanceof Barriers::BooleanTypeBarrier { } private class FieldlessEnumTypeBarrier extends Barrier instanceof Barriers::FieldlessEnumTypeBarrier diff --git a/rust/ql/lib/codeql/rust/security/CleartextStorageDatabaseExtensions.qll b/rust/ql/lib/codeql/rust/security/CleartextStorageDatabaseExtensions.qll index f92b2df1dc0..afbf27e5bc9 100644 --- a/rust/ql/lib/codeql/rust/security/CleartextStorageDatabaseExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/CleartextStorageDatabaseExtensions.qll @@ -45,4 +45,11 @@ module CleartextStorageDatabase { private class ModelsAsDataSink extends Sink { ModelsAsDataSink() { sinkNode(this, ["sql-injection", "database-store"]) } } + + /** + * A barrier for cleartext storage vulnerabilities from model data. + */ + private class ModelsAsDataBarrier extends Barrier { + ModelsAsDataBarrier() { barrierNode(this, ["sql-injection", "database-store"]) } + } } diff --git a/rust/ql/lib/codeql/rust/security/CleartextTransmissionExtensions.qll b/rust/ql/lib/codeql/rust/security/CleartextTransmissionExtensions.qll index 7d5a91a55f7..14ee95186c3 100644 --- a/rust/ql/lib/codeql/rust/security/CleartextTransmissionExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/CleartextTransmissionExtensions.qll @@ -6,6 +6,7 @@ private import codeql.util.Unit private import rust private import codeql.rust.dataflow.DataFlow +private import codeql.rust.dataflow.FlowBarrier private import codeql.rust.dataflow.FlowSink private import codeql.rust.security.SensitiveData private import codeql.rust.Concepts @@ -55,4 +56,11 @@ module CleartextTransmission { private class ModelsAsDataSink extends Sink { ModelsAsDataSink() { sinkNode(this, ["transmission", "request-url"]) } } + + /** + * A barrier defined through MaD. + */ + private class ModelsAsDataBarrier extends Barrier { + ModelsAsDataBarrier() { barrierNode(this, ["transmission", "request-url"]) } + } } diff --git a/rust/ql/lib/codeql/rust/security/DisabledCertificateCheckExtensions.qll b/rust/ql/lib/codeql/rust/security/DisabledCertificateCheckExtensions.qll index a86ee506dfa..a5933bc74b1 100644 --- a/rust/ql/lib/codeql/rust/security/DisabledCertificateCheckExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/DisabledCertificateCheckExtensions.qll @@ -5,6 +5,7 @@ import rust private import codeql.rust.dataflow.DataFlow +private import codeql.rust.dataflow.FlowBarrier private import codeql.rust.dataflow.FlowSink private import codeql.rust.Concepts private import codeql.rust.dataflow.internal.Node as Node @@ -21,6 +22,11 @@ module DisabledCertificateCheckExtensions { override string getSinkType() { result = "DisabledCertificateCheck" } } + /** + * A data flow barrier for disabled certificate check vulnerabilities. + */ + abstract class Barrier extends DataFlow::Node { } + /** * A sink for disabled certificate check vulnerabilities from model data. */ @@ -42,4 +48,11 @@ module DisabledCertificateCheckExtensions { ) } } + + /** + * A barrier for disabled certificate check vulnerabilities from model data. + */ + private class ModelsAsDataBarrier extends Barrier { + ModelsAsDataBarrier() { barrierNode(this, "disable-certificate") } + } } diff --git a/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll b/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll index 9bdfc53971e..ffef3658d58 100644 --- a/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll @@ -5,6 +5,7 @@ import rust private import codeql.rust.dataflow.DataFlow +private import codeql.rust.dataflow.FlowBarrier private import codeql.rust.dataflow.FlowSource private import codeql.rust.dataflow.FlowSink private import codeql.rust.Concepts @@ -130,6 +131,15 @@ module HardcodedCryptographicValue { override CryptographicValueKind getKind() { result = kind } } + /** + * An externally modeled barrier for hard-coded cryptographic value vulnerabilities. + */ + private class ModelsAsDataBarrier extends Barrier { + CryptographicValueKind kind; + + ModelsAsDataBarrier() { barrierNode(this, "credentials-" + kind) } + } + /** * A call to `getrandom` that is a barrier. */ diff --git a/rust/ql/lib/codeql/rust/security/InsecureCookieExtensions.qll b/rust/ql/lib/codeql/rust/security/InsecureCookieExtensions.qll index 87d37d6b85b..bd74dcb8728 100644 --- a/rust/ql/lib/codeql/rust/security/InsecureCookieExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/InsecureCookieExtensions.qll @@ -5,6 +5,7 @@ import rust private import codeql.rust.dataflow.DataFlow +private import codeql.rust.dataflow.FlowBarrier private import codeql.rust.dataflow.FlowSource private import codeql.rust.dataflow.FlowSink private import codeql.rust.Concepts @@ -48,6 +49,13 @@ module InsecureCookie { ModelsAsDataSink() { sinkNode(this, "cookie-use") } } + /** + * A barrier for insecure cookie vulnerabilities from model data. + */ + private class ModelsAsDataBarrier extends Barrier { + ModelsAsDataBarrier() { barrierNode(this, "cookie-use") } + } + /** * Holds if a models-as-data optional barrier for cookies is specified for `summaryNode`, * with arguments `attrib` (`secure` or `partitioned`) and `arg` (argument index). For example, diff --git a/rust/ql/lib/codeql/rust/security/LogInjectionExtensions.qll b/rust/ql/lib/codeql/rust/security/LogInjectionExtensions.qll index 31403b625f9..40d11362355 100644 --- a/rust/ql/lib/codeql/rust/security/LogInjectionExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/LogInjectionExtensions.qll @@ -5,6 +5,7 @@ import rust private import codeql.rust.dataflow.DataFlow +private import codeql.rust.dataflow.FlowBarrier private import codeql.rust.dataflow.FlowSink private import codeql.rust.Concepts private import codeql.util.Unit @@ -44,6 +45,13 @@ module LogInjection { ModelsAsDataSink() { sinkNode(this, "log-injection") } } + /** + * A barrier for log-injection from model data. + */ + private class ModelsAsDataBarrier extends Barrier { + ModelsAsDataBarrier() { barrierNode(this, "log-injection") } + } + /** * A barrier for log injection vulnerabilities for nodes whose type is a * numeric type, which is unlikely to expose any vulnerability. diff --git a/rust/ql/lib/codeql/rust/security/RequestForgeryExtensions.qll b/rust/ql/lib/codeql/rust/security/RequestForgeryExtensions.qll index 1822baff644..d5b75258ad4 100644 --- a/rust/ql/lib/codeql/rust/security/RequestForgeryExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/RequestForgeryExtensions.qll @@ -5,6 +5,7 @@ import rust private import codeql.rust.dataflow.DataFlow +private import codeql.rust.dataflow.FlowBarrier private import codeql.rust.dataflow.FlowSink private import codeql.rust.dataflow.FlowSource private import codeql.rust.Concepts @@ -46,4 +47,11 @@ module RequestForgery { private class ModelsAsDataSink extends Sink { ModelsAsDataSink() { sinkNode(this, "request-url") } } + + /** + * A barrier for request forgery from model data. + */ + private class ModelsAsDataBarrier extends Barrier { + ModelsAsDataBarrier() { barrierNode(this, "request-url") } + } } diff --git a/rust/ql/lib/codeql/rust/security/SqlInjectionExtensions.qll b/rust/ql/lib/codeql/rust/security/SqlInjectionExtensions.qll index f36ab264987..de2622974f6 100644 --- a/rust/ql/lib/codeql/rust/security/SqlInjectionExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/SqlInjectionExtensions.qll @@ -6,6 +6,7 @@ import rust private import codeql.rust.dataflow.DataFlow +private import codeql.rust.dataflow.FlowBarrier private import codeql.rust.dataflow.FlowSink private import codeql.rust.Concepts private import codeql.util.Unit @@ -53,12 +54,19 @@ module SqlInjection { } /** - * A sink for sql-injection from model data. + * A sink for SQL injection from model data. */ private class ModelsAsDataSink extends Sink { ModelsAsDataSink() { sinkNode(this, "sql-injection") } } + /** + * A barrier for SQL injection from model data. + */ + private class ModelsAsDataBarrier extends Barrier { + ModelsAsDataBarrier() { barrierNode(this, "sql-injection") } + } + /** * A barrier for SQL injection vulnerabilities for nodes whose type is a numeric * type, which is unlikely to expose any vulnerability. diff --git a/rust/ql/lib/codeql/rust/security/TaintedPathExtensions.qll b/rust/ql/lib/codeql/rust/security/TaintedPathExtensions.qll index ccf3736ceb4..2bd009909f6 100644 --- a/rust/ql/lib/codeql/rust/security/TaintedPathExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/TaintedPathExtensions.qll @@ -47,6 +47,11 @@ module TaintedPath { private class ModelsAsDataSinks extends Sink { ModelsAsDataSinks() { sinkNode(this, "path-injection") } } + + /** A barrier for path-injection from model data. */ + private class ModelsAsDataBarriers extends Barrier { + ModelsAsDataBarriers() { barrierNode(this, "path-injection") } + } } private predicate sanitizerGuard(AstNode g, Expr e, boolean branch) { diff --git a/rust/ql/lib/codeql/rust/security/UncontrolledAllocationSizeExtensions.qll b/rust/ql/lib/codeql/rust/security/UncontrolledAllocationSizeExtensions.qll index c6251563ea6..f0c0bed0009 100644 --- a/rust/ql/lib/codeql/rust/security/UncontrolledAllocationSizeExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/UncontrolledAllocationSizeExtensions.qll @@ -6,6 +6,7 @@ import rust private import codeql.rust.Concepts private import codeql.rust.dataflow.DataFlow +private import codeql.rust.dataflow.FlowBarrier private import codeql.rust.dataflow.FlowSink /** @@ -32,6 +33,13 @@ module UncontrolledAllocationSize { ModelsAsDataSink() { sinkNode(this, ["alloc-size", "alloc-layout"]) } } + /** + * A barrier for uncontrolled allocation size from model data. + */ + private class ModelsAsDataBarrier extends Barrier { + ModelsAsDataBarrier() { barrierNode(this, ["alloc-size", "alloc-layout"]) } + } + /** * A barrier for uncontrolled allocation size that is an upper bound check / guard. */ diff --git a/rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll b/rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll index 076ed42edfb..f4dd5a1e1a8 100644 --- a/rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/UseOfHttpExtensions.qll @@ -5,6 +5,7 @@ import rust private import codeql.rust.dataflow.DataFlow +private import codeql.rust.dataflow.FlowBarrier private import codeql.rust.dataflow.FlowSink private import codeql.rust.Concepts @@ -59,4 +60,11 @@ module UseOfHttp { private class ModelsAsDataSink extends Sink { ModelsAsDataSink() { sinkNode(this, "request-url") } } + + /** + * A barrier for use of HTTP URLs from model data. + */ + private class ModelsAsDataBarrier extends Barrier { + ModelsAsDataBarrier() { barrierNode(this, "request-url") } + } } diff --git a/rust/ql/lib/codeql/rust/security/XssExtensions.qll b/rust/ql/lib/codeql/rust/security/XssExtensions.qll index 97318ff8173..74ed161acb0 100644 --- a/rust/ql/lib/codeql/rust/security/XssExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/XssExtensions.qll @@ -5,6 +5,7 @@ import rust private import codeql.rust.dataflow.DataFlow +private import codeql.rust.dataflow.FlowBarrier private import codeql.rust.dataflow.FlowSink private import codeql.rust.Concepts private import codeql.util.Unit @@ -44,6 +45,13 @@ module Xss { ModelsAsDataSink() { sinkNode(this, "html-injection") } } + /** + * A barrier for XSS from model data. + */ + private class ModelsAsDataBarrier extends Barrier { + ModelsAsDataBarrier() { barrierNode(this, "html-injection") } + } + /** * A barrier for XSS vulnerabilities for nodes whose type is a * numeric or boolean type, which is unlikely to expose any vulnerability. diff --git a/rust/ql/lib/codeql/rust/security/regex/RegexInjectionExtensions.qll b/rust/ql/lib/codeql/rust/security/regex/RegexInjectionExtensions.qll index 7cb0dc47c9f..3f1dbbafb7d 100644 --- a/rust/ql/lib/codeql/rust/security/regex/RegexInjectionExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/regex/RegexInjectionExtensions.qll @@ -6,6 +6,7 @@ private import codeql.util.Unit private import rust private import codeql.rust.dataflow.DataFlow +private import codeql.rust.dataflow.FlowBarrier private import codeql.rust.dataflow.FlowSink private import codeql.rust.Concepts private import codeql.rust.security.Barriers as Barriers @@ -69,6 +70,13 @@ module RegexInjection { ModelsAsDataSink() { sinkNode(this, "regex-use") } } + /** + * A barrier for regular expression injection from model data. + */ + private class ModelsAsDataBarrier extends Barrier { + ModelsAsDataBarrier() { barrierNode(this, "regex-use") } + } + /** * An escape barrier for regular expression injection vulnerabilities. */ diff --git a/rust/ql/src/queries/security/CWE-295/DisabledCertificateCheck.ql b/rust/ql/src/queries/security/CWE-295/DisabledCertificateCheck.ql index ae22a3c9d2c..3e978e2934b 100644 --- a/rust/ql/src/queries/security/CWE-295/DisabledCertificateCheck.ql +++ b/rust/ql/src/queries/security/CWE-295/DisabledCertificateCheck.ql @@ -33,6 +33,8 @@ module DisabledCertificateCheckConfig implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node node) { node instanceof Sink } + predicate isBarrier(DataFlow::Node node) { node instanceof Barrier } + predicate observeDiffInformedIncrementalMode() { any() } } From 93231794ee64b8c4788d6077490cb762a193cea5 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 24 Mar 2026 10:39:05 +0000 Subject: [PATCH 135/185] Document that MaD barriers for hardcoded credentials apply to all kinds --- .../rust/security/HardcodedCryptographicValueExtensions.qll | 3 +++ 1 file changed, 3 insertions(+) diff --git a/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll b/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll index ffef3658d58..70799e39d58 100644 --- a/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll @@ -133,6 +133,9 @@ module HardcodedCryptographicValue { /** * An externally modeled barrier for hard-coded cryptographic value vulnerabilities. + * + * Note that a sanitizer with kind `credentials-key` will sanitize flow to + * all sinks, not just sinks with the same kind. */ private class ModelsAsDataBarrier extends Barrier { CryptographicValueKind kind; From 7e6319d6484c107113b1ac1b7056c7ee25fb8e74 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 24 Mar 2026 10:39:32 +0000 Subject: [PATCH 136/185] Remove unused field --- .../rust/security/HardcodedCryptographicValueExtensions.qll | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll b/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll index 70799e39d58..14482872443 100644 --- a/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll @@ -138,9 +138,7 @@ module HardcodedCryptographicValue { * all sinks, not just sinks with the same kind. */ private class ModelsAsDataBarrier extends Barrier { - CryptographicValueKind kind; - - ModelsAsDataBarrier() { barrierNode(this, "credentials-" + kind) } + ModelsAsDataBarrier() { exists(string kind | barrierNode(this, "credentials-" + kind)) } } /** From 059693ce898c93c9a40e04948e1ceeacd9a02175 Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 24 Mar 2026 13:04:44 +0000 Subject: [PATCH 137/185] Python: Restrict `ShouldBeContextManager.ql` results By limiting the results to the class that actually defines the `__del__` method, we eliminate a bunch of FPs where a _subclass_ of such a class would also get flagged. --- python/ql/src/Classes/ShouldBeContextManager.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/src/Classes/ShouldBeContextManager.ql b/python/ql/src/Classes/ShouldBeContextManager.ql index 9a50d841a74..ee97a0e682f 100644 --- a/python/ql/src/Classes/ShouldBeContextManager.ql +++ b/python/ql/src/Classes/ShouldBeContextManager.ql @@ -19,7 +19,7 @@ private import semmle.python.dataflow.new.internal.DataFlowDispatch from Class c where not DuckTyping::isContextManager(c) and - DuckTyping::hasMethod(c, "__del__") + exists(c.getMethod("__del__")) select c, "Class " + c.getName() + " implements __del__ (presumably to release some resource). Consider making it a context manager." From 14b3f6211e8ed87750f99248db2d3033e01fe4ad Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 24 Mar 2026 14:15:19 +0100 Subject: [PATCH 138/185] C#: Opt out of dotnet CLI telemetry Add `DOTNET_CLI_TELEMETRY_OPTOUT=1` to the minimal environment used for all `dotnet` invocations. The telemetry is unnecessary and may even be causing segfaults in some cases. --- .../IDotNetCliInvoker.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNetCliInvoker.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNetCliInvoker.cs index 61d0ea4260d..ef5bcd4753b 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNetCliInvoker.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNetCliInvoker.cs @@ -12,16 +12,18 @@ namespace Semmle.Extraction.CSharp.DependencyFetching /// /// A minimal environment for running the .NET CLI. - /// + /// /// DOTNET_CLI_UI_LANGUAGE: The .NET CLI language is set to English to avoid localized output. /// MSBUILDDISABLENODEREUSE: To ensure clean environment for each build. /// DOTNET_SKIP_FIRST_TIME_EXPERIENCE: To skip first time experience messages. + /// DOTNET_CLI_TELEMETRY_OPTOUT: To skip any dotnet telemetry: it's unnecessary and can even cause issues. /// static ReadOnlyDictionary MinimalEnvironment { get; } = new(new Dictionary { {"DOTNET_CLI_UI_LANGUAGE", "en"}, {"MSBUILDDISABLENODEREUSE", "1"}, - {"DOTNET_SKIP_FIRST_TIME_EXPERIENCE", "true"} + {"DOTNET_SKIP_FIRST_TIME_EXPERIENCE", "true"}, + {"DOTNET_CLI_TELEMETRY_OPTOUT", "1"} }); /// From c8169f576fd380d7700931d80228e9203bd5e576 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 20 Mar 2026 12:21:21 +0100 Subject: [PATCH 139/185] C#: Don't extract expanded assignments and swap child indices for assignments. --- .../Entities/Expressions/Assignment.cs | 75 ++----------------- .../Entities/Expressions/Initializer.cs | 29 +++---- .../ObjectCreation/AnonymousObjectCreation.cs | 6 +- .../Entities/Expressions/Query.cs | 6 +- .../Expressions/VariableDeclaration.cs | 6 +- .../Entities/Field.cs | 4 +- .../Entities/Property.cs | 4 +- 7 files changed, 33 insertions(+), 97 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Assignment.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Assignment.cs index f3e2e510cd6..67e49b2919c 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Assignment.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Assignment.cs @@ -22,26 +22,12 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions protected override void PopulateExpression(TextWriter trapFile) { - var operatorKind = OperatorKind; - if (operatorKind.HasValue) - { - // Convert assignment such as `a += b` into `a = a + b`. - var simpleAssignExpr = new Expression(new ExpressionInfo(Context, Type, Location, ExprKind.SIMPLE_ASSIGN, this, 2, isCompilerGenerated: true, null)); - Create(Context, Syntax.Left, simpleAssignExpr, 1); - var opexpr = new Expression(new ExpressionInfo(Context, Type, Location, operatorKind.Value, simpleAssignExpr, 0, isCompilerGenerated: true, null)); - Create(Context, Syntax.Left, opexpr, 0, isCompilerGenerated: true); - Create(Context, Syntax.Right, opexpr, 1); - opexpr.OperatorCall(trapFile, Syntax); - } - else - { - Create(Context, Syntax.Left, this, 1); - Create(Context, Syntax.Right, this, 0); + Create(Context, Syntax.Left, this, 0); + Create(Context, Syntax.Right, this, 1); - if (Kind == ExprKind.ADD_EVENT || Kind == ExprKind.REMOVE_EVENT) - { - OperatorCall(trapFile, Syntax); - } + if (Kind != ExprKind.SIMPLE_ASSIGN && Kind != ExprKind.ASSIGN_COALESCE) + { + OperatorCall(trapFile, Syntax); } } @@ -108,56 +94,5 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions return kind; } - - /// - /// Gets the kind of this assignment operator (null if the - /// assignment is not an assignment operator). For example, the operator - /// kind of `*=` is `*`. - /// - private ExprKind? OperatorKind - { - get - { - var kind = Kind; - if (kind == ExprKind.REMOVE_EVENT || kind == ExprKind.ADD_EVENT || kind == ExprKind.SIMPLE_ASSIGN) - return null; - - if (CallType.AdjustKind(kind) == ExprKind.OPERATOR_INVOCATION) - return ExprKind.OPERATOR_INVOCATION; - - switch (kind) - { - case ExprKind.ASSIGN_ADD: - return ExprKind.ADD; - case ExprKind.ASSIGN_AND: - return ExprKind.BIT_AND; - case ExprKind.ASSIGN_DIV: - return ExprKind.DIV; - case ExprKind.ASSIGN_LSHIFT: - return ExprKind.LSHIFT; - case ExprKind.ASSIGN_MUL: - return ExprKind.MUL; - case ExprKind.ASSIGN_OR: - return ExprKind.BIT_OR; - case ExprKind.ASSIGN_REM: - return ExprKind.REM; - case ExprKind.ASSIGN_RSHIFT: - return ExprKind.RSHIFT; - case ExprKind.ASSIGN_URSHIFT: - return ExprKind.URSHIFT; - case ExprKind.ASSIGN_SUB: - return ExprKind.SUB; - case ExprKind.ASSIGN_XOR: - return ExprKind.BIT_XOR; - case ExprKind.ASSIGN_COALESCE: - return ExprKind.NULL_COALESCING; - default: - Context.ModelError(Syntax, $"Couldn't unfold assignment of type {kind}"); - return ExprKind.UNKNOWN; - } - } - } - - public new CallType CallType => GetCallType(Context, Syntax); } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Initializer.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Initializer.cs index 92e2b910f99..63024cd47fc 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Initializer.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Initializer.cs @@ -83,8 +83,22 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions { var assignmentInfo = new ExpressionNodeInfo(Context, init, this, child++).SetKind(ExprKind.SIMPLE_ASSIGN); var assignmentEntity = new Expression(assignmentInfo); + var target = Context.GetSymbolInfo(assignment.Left); + + // If the target is null, then assume that this is an array initializer (of the form `[...] = ...`) + var access = target.Symbol is null ? + new Expression(new ExpressionNodeInfo(Context, assignment.Left, assignmentEntity, 0).SetKind(ExprKind.ARRAY_ACCESS)) : + Access.Create(new ExpressionNodeInfo(Context, assignment.Left, assignmentEntity, 0), target.Symbol, false, Context.CreateEntity(target.Symbol)); + + if (assignment.Left is ImplicitElementAccessSyntax iea) + { + // An array/indexer initializer of the form `[...] = ...` + access.PopulateArguments(trapFile, iea.ArgumentList.Arguments, 0); + } + var typeInfoRight = Context.GetTypeInfo(assignment.Right); if (typeInfoRight.Type is null) + { // The type may be null for nested initializers such as // ```csharp // new ClassWithArrayField() { As = { [0] = a } } @@ -92,21 +106,8 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions // In this case we take the type from the assignment // `As = { [0] = a }` instead typeInfoRight = assignmentInfo.TypeInfo; - CreateFromNode(new ExpressionNodeInfo(Context, assignment.Right, assignmentEntity, 0, typeInfoRight)); - - var target = Context.GetSymbolInfo(assignment.Left); - - // If the target is null, then assume that this is an array initializer (of the form `[...] = ...`) - - var access = target.Symbol is null ? - new Expression(new ExpressionNodeInfo(Context, assignment.Left, assignmentEntity, 1).SetKind(ExprKind.ARRAY_ACCESS)) : - Access.Create(new ExpressionNodeInfo(Context, assignment.Left, assignmentEntity, 1), target.Symbol, false, Context.CreateEntity(target.Symbol)); - - if (assignment.Left is ImplicitElementAccessSyntax iea) - { - // An array/indexer initializer of the form `[...] = ...` - access.PopulateArguments(trapFile, iea.ArgumentList.Arguments, 0); } + CreateFromNode(new ExpressionNodeInfo(Context, assignment.Right, assignmentEntity, 1, typeInfoRight)); } else { diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ObjectCreation/AnonymousObjectCreation.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ObjectCreation/AnonymousObjectCreation.cs index a6f94f53338..1fdf03171b9 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ObjectCreation/AnonymousObjectCreation.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ObjectCreation/AnonymousObjectCreation.cs @@ -41,11 +41,11 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions var loc = Context.CreateLocation(init.GetLocation()); var assignment = new Expression(new ExpressionInfo(Context, type, loc, ExprKind.SIMPLE_ASSIGN, objectInitializer, child++, isCompilerGenerated: false, null)); - Create(Context, init.Expression, assignment, 0); Property.Create(Context, property); - - var access = new Expression(new ExpressionInfo(Context, type, loc, ExprKind.PROPERTY_ACCESS, assignment, 1, isCompilerGenerated: false, null)); + var access = new Expression(new ExpressionInfo(Context, type, loc, ExprKind.PROPERTY_ACCESS, assignment, 0, isCompilerGenerated: false, null)); trapFile.expr_access(access, propEntity); + + Create(Context, init.Expression, assignment, 1); } } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Query.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Query.cs index 85a1ceda47c..aadf06f2dee 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Query.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Query.cs @@ -94,12 +94,12 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions child ); - Expression.Create(cx, Expr, decl, 0); - var nameLoc = cx.CreateLocation(name.GetLocation()); - var access = new Expression(new ExpressionInfo(cx, type, nameLoc, ExprKind.LOCAL_VARIABLE_ACCESS, decl, 1, isCompilerGenerated: false, null)); + var access = new Expression(new ExpressionInfo(cx, type, nameLoc, ExprKind.LOCAL_VARIABLE_ACCESS, decl, 0, isCompilerGenerated: false, null)); cx.TrapWriter.Writer.expr_access(access, LocalVariable.Create(cx, variableSymbol)); + Expression.Create(cx, Expr, decl, 1); + return decl; } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/VariableDeclaration.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/VariableDeclaration.cs index c44f9e2b946..47ecee3e037 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/VariableDeclaration.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/VariableDeclaration.cs @@ -176,11 +176,11 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions if (d.Initializer is not null) { - Create(cx, d.Initializer.Value, ret, 0); - // Create an access - var access = new Expression(new ExpressionInfo(cx, type, localVar.Location, ExprKind.LOCAL_VARIABLE_ACCESS, ret, 1, isCompilerGenerated: false, null)); + var access = new Expression(new ExpressionInfo(cx, type, localVar.Location, ExprKind.LOCAL_VARIABLE_ACCESS, ret, 0, isCompilerGenerated: false, null)); cx.TrapWriter.Writer.expr_access(access, localVar); + + Create(cx, d.Initializer.Value, ret, 1); } if (d.Parent is VariableDeclarationSyntax decl) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Field.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Field.cs index 329115f11c7..708c00d2f73 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Field.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Field.cs @@ -116,9 +116,9 @@ namespace Semmle.Extraction.CSharp.Entities { var type = Symbol.GetAnnotatedType(); var simpleAssignExpr = new Expression(new ExpressionInfo(Context, type, loc, ExprKind.SIMPLE_ASSIGN, this, child++, isCompilerGenerated: true, constValue)); - Expression.CreateFromNode(new ExpressionNodeInfo(Context, initializer, simpleAssignExpr, 0)); - var access = new Expression(new ExpressionInfo(Context, type, Location, ExprKind.FIELD_ACCESS, simpleAssignExpr, 1, isCompilerGenerated: true, constValue)); + var access = new Expression(new ExpressionInfo(Context, type, Location, ExprKind.FIELD_ACCESS, simpleAssignExpr, 0, isCompilerGenerated: true, constValue)); trapFile.expr_access(access, this); + Expression.CreateFromNode(new ExpressionNodeInfo(Context, initializer, simpleAssignExpr, 1)); return access; } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Property.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Property.cs index 57eb5efc007..988ca843927 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Property.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Property.cs @@ -94,9 +94,9 @@ namespace Semmle.Extraction.CSharp.Entities var loc = Context.CreateLocation(initializer!.GetLocation()); var annotatedType = AnnotatedTypeSymbol.CreateNotAnnotated(Symbol.Type); var simpleAssignExpr = new Expression(new ExpressionInfo(Context, annotatedType, loc, ExprKind.SIMPLE_ASSIGN, this, child++, isCompilerGenerated: true, null)); - Expression.CreateFromNode(new ExpressionNodeInfo(Context, initializer.Value, simpleAssignExpr, 0)); - var access = new Expression(new ExpressionInfo(Context, annotatedType, Location, ExprKind.PROPERTY_ACCESS, simpleAssignExpr, 1, isCompilerGenerated: true, null)); + var access = new Expression(new ExpressionInfo(Context, annotatedType, Location, ExprKind.PROPERTY_ACCESS, simpleAssignExpr, 0, isCompilerGenerated: true, null)); trapFile.expr_access(access, this); + Expression.CreateFromNode(new ExpressionNodeInfo(Context, initializer.Value, simpleAssignExpr, 1)); if (!Symbol.IsStatic) { This.CreateImplicit(Context, Symbol.ContainingType, Location, access, -1); From b426c6fb391aedc2dd5bf66a06f03914ffaaa4b3 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 20 Mar 2026 12:25:36 +0100 Subject: [PATCH 140/185] C#: Update the DB scheme to reflect that assign arithmetic- and bitwise operations are operator calls. --- csharp/ql/lib/semmlecode.csharp.dbscheme | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/csharp/ql/lib/semmlecode.csharp.dbscheme b/csharp/ql/lib/semmlecode.csharp.dbscheme index e73ca2c93df..7763debea24 100644 --- a/csharp/ql/lib/semmlecode.csharp.dbscheme +++ b/csharp/ql/lib/semmlecode.csharp.dbscheme @@ -1216,7 +1216,8 @@ case @expr.kind of | @string_literal_expr | @null_literal_expr; @assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; -@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_op_call_expr = @assign_arith_expr | @assign_bitwise_expr +@assign_op_expr = @assign_op_call_expr | @assign_event_expr | @assign_coalesce_expr; @assign_event_expr = @add_event_expr | @remove_event_expr; @assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr @@ -1270,14 +1271,15 @@ case @expr.kind of @anonymous_function_expr = @lambda_expr | @anonymous_method_expr; -@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr +@op_invoke_expr = @operator_invocation_expr | @assign_op_call_expr +@call = @method_invocation_expr | @constructor_init_expr | @op_invoke_expr | @delegate_invocation_expr | @object_creation_expr | @call_access_expr | @local_function_invocation_expr | @function_pointer_invocation_expr; @call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; @late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr - | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + | @object_creation_expr | @method_invocation_expr | @op_invoke_expr; @throw_element = @throw_expr | @throw_stmt; From 327757dbcba657f58d25bb969d97c3ead51d9c17 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 20 Mar 2026 12:33:57 +0100 Subject: [PATCH 141/185] C#: Update the child indices for assignments, update Assign classes to extend OperatorCall and add AssignOperation classes. --- csharp/ql/lib/semmle/code/csharp/Property.qll | 2 +- csharp/ql/lib/semmle/code/csharp/Variable.qll | 2 +- .../semmle/code/csharp/exprs/Assignment.qll | 59 ++++----- .../ql/lib/semmle/code/csharp/exprs/Call.qll | 8 +- .../lib/semmle/code/csharp/exprs/Dynamic.qll | 8 +- .../ql/lib/semmle/code/csharp/exprs/Expr.qll | 21 +-- .../semmle/code/csharp/exprs/Operation.qll | 122 ++++++++++++++++++ 7 files changed, 163 insertions(+), 59 deletions(-) create mode 100644 csharp/ql/lib/semmle/code/csharp/exprs/Operation.qll diff --git a/csharp/ql/lib/semmle/code/csharp/Property.qll b/csharp/ql/lib/semmle/code/csharp/Property.qll index 88665280d5b..bbd4fdd9d8e 100644 --- a/csharp/ql/lib/semmle/code/csharp/Property.qll +++ b/csharp/ql/lib/semmle/code/csharp/Property.qll @@ -226,7 +226,7 @@ class Property extends DeclarationWithGetSetAccessors, @property { * } * ``` */ - Expr getInitializer() { result = this.getChildExpr(1).getChildExpr(0) } + Expr getInitializer() { result = this.getChildExpr(1).getChildExpr(1) } /** * Holds if this property has an initial value. For example, the initial diff --git a/csharp/ql/lib/semmle/code/csharp/Variable.qll b/csharp/ql/lib/semmle/code/csharp/Variable.qll index 746ea6acd2f..6d59816373d 100644 --- a/csharp/ql/lib/semmle/code/csharp/Variable.qll +++ b/csharp/ql/lib/semmle/code/csharp/Variable.qll @@ -408,7 +408,7 @@ class Field extends Variable, AssignableMember, Attributable, TopLevelExprParent * } * ``` */ - final override Expr getInitializer() { result = this.getChildExpr(0).getChildExpr(0) } + final override Expr getInitializer() { result = this.getChildExpr(0).getChildExpr(1) } /** * Holds if this field has an initial value. For example, the initial diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/Assignment.qll b/csharp/ql/lib/semmle/code/csharp/exprs/Assignment.qll index 9fa2a93724d..baf366be1ba 100644 --- a/csharp/ql/lib/semmle/code/csharp/exprs/Assignment.qll +++ b/csharp/ql/lib/semmle/code/csharp/exprs/Assignment.qll @@ -17,18 +17,14 @@ class Assignment extends BinaryOperation, @assign_expr { implies // Same as `this.(LocalVariableDeclExpr).hasInitializer()` but avoids // negative recursion - expr_parent(_, 0, this) + expr_parent(_, 1, this) } - override Expr getLeftOperand() { result = this.getChild(1) } - - override Expr getRightOperand() { result = this.getChild(0) } - /** Gets the left operand of this assignment. */ - Expr getLValue() { result = this.getChild(1) } + Expr getLValue() { result = this.getLeftOperand() } /** Gets the right operand of this assignment. */ - Expr getRValue() { result = this.getChild(0) } + Expr getRValue() { result = this.getRightOperand() } /** Gets the variable being assigned to, if any. */ Variable getTargetVariable() { result.getAnAccess() = this.getLValue() } @@ -64,37 +60,33 @@ class AssignExpr extends Assignment, @simple_assign_expr { /** * An assignment operation. Either an arithmetic assignment operation - * (`AssignArithmeticOperation`), a bitwise assignment operation - * (`AssignBitwiseOperation`), or an event assignment (`AddOrRemoveEventExpr`). + * (`AssignArithmeticOperation`), a bitwise assignment operation or + * (`AssignBitwiseOperation`), an event assignment (`AddOrRemoveEventExpr`), or + * a null-coalescing assignment (`AssignCoalesceExpr`). */ class AssignOperation extends Assignment, @assign_op_expr { override string getOperator() { none() } /** - * Gets the expanded version of this assignment operation, if any. - * - * For example, if this assignment operation is `x += y` then - * the expanded assignment is `x = x + y`. - * - * If an expanded version exists, then it is used in the control - * flow graph. + * Expanded versions of compound assignments are no longer extracted. */ - AssignExpr getExpandedAssignment() { expr_parent(result, 2, this) } + deprecated AssignExpr getExpandedAssignment() { none() } /** - * Holds if this assignment operation has an expanded version. - * - * For example, if this assignment operation is `x += y` then - * it has the expanded version `x = x + y`. - * - * If an expanded version exists, then it is used in the control - * flow graph. + * Expanded versions of compound assignments are no longer extracted. */ - predicate hasExpandedAssignment() { exists(this.getExpandedAssignment()) } + deprecated predicate hasExpandedAssignment() { none() } override string toString() { result = "... " + this.getOperator() + " ..." } } +/** + * An assignment operation that corresponds to an operator call, for example `x += y` corresponds to `x = x + y`. + */ +class AssignCallOperation extends AssignOperation, OperatorCall, @assign_op_call_expr { + override string toString() { result = "... " + this.getOperator() + " ..." } +} + /** * An arithmetic assignment operation. Either an addition assignment operation * (`AssignAddExpr`), a subtraction assignment operation (`AssignSubExpr`), a @@ -102,7 +94,7 @@ class AssignOperation extends Assignment, @assign_op_expr { * operation (`AssignDivExpr`), or a remainder assignment operation * (`AssignRemExpr`). */ -class AssignArithmeticOperation extends AssignOperation, @assign_arith_expr { } +class AssignArithmeticOperation extends AssignCallOperation, @assign_arith_expr { } /** * An addition assignment operation, for example `x += y`. @@ -158,7 +150,7 @@ class AssignRemExpr extends AssignArithmeticOperation, @assign_rem_expr { * operation (`AssignRightShiftExpr`), or an unsigned right-shift assignment * operation (`AssignUnsignedRightShiftExpr`). */ -class AssignBitwiseOperation extends AssignOperation, @assign_bitwise_expr { } +class AssignBitwiseOperation extends AssignCallOperation, @assign_bitwise_expr { } /** * A bitwise-and assignment operation, for example `x &= y`. @@ -208,12 +200,17 @@ class AssignRightShiftExpr extends AssignBitwiseOperation, @assign_rshift_expr { /** * An unsigned right-shift assignment operation, for example `x >>>= y`. */ -class AssignUnsighedRightShiftExpr extends AssignBitwiseOperation, @assign_urshift_expr { +class AssignUnsignedRightShiftExpr extends AssignBitwiseOperation, @assign_urshift_expr { override string getOperator() { result = ">>>=" } - override string getAPrimaryQlClass() { result = "AssignUnsighedRightShiftExpr" } + override string getAPrimaryQlClass() { result = "AssignUnsignedRightShiftExpr" } } +/** + * DEPRECATED: Use `AssignUnsignedRightShiftExpr` instead. + */ +deprecated class AssignUnsighedRightShiftExpr = AssignUnsignedRightShiftExpr; + /** * An event assignment. Either an event addition (`AddEventExpr`) or an event * removal (`RemoveEventExpr`). @@ -222,9 +219,9 @@ class AddOrRemoveEventExpr extends AssignOperation, @assign_event_expr { /** Gets the event targeted by this event assignment. */ Event getTarget() { result = this.getLValue().getTarget() } - override EventAccess getLValue() { result = this.getChild(1) } + override EventAccess getLValue() { result = this.getChild(0) } - override Expr getRValue() { result = this.getChild(0) } + override EventAccess getLeftOperand() { result = this.getChild(0) } } /** diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll b/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll index f8b51a990ed..912cb23e06b 100644 --- a/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll +++ b/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll @@ -493,12 +493,16 @@ class ConstructorInitializer extends Call, @constructor_init_expr { * } * ``` */ -class OperatorCall extends Call, LateBindableExpr, @operator_invocation_expr { +class OperatorCall extends Call, LateBindableExpr, @op_invoke_expr { override Operator getTarget() { expr_call(this, result) } override Operator getARuntimeTarget() { result = Call.super.getARuntimeTarget() } - override string toString() { result = "call to operator " + this.getTarget().getName() } + override string toString() { + if this instanceof DynamicOperatorCall + then result = "dynamic call to operator " + this.getLateBoundTargetName() + else result = "call to operator " + this.getTarget().getName() + } override string getAPrimaryQlClass() { result = "OperatorCall" } } diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/Dynamic.qll b/csharp/ql/lib/semmle/code/csharp/exprs/Dynamic.qll index 04ea9f062a5..bfc5c36ff37 100644 --- a/csharp/ql/lib/semmle/code/csharp/exprs/Dynamic.qll +++ b/csharp/ql/lib/semmle/code/csharp/exprs/Dynamic.qll @@ -96,13 +96,7 @@ class DynamicMethodCall extends DynamicExpr, MethodCall { * Unlike an ordinary call to a user-defined operator (`OperatorCall`), the * target operator may not be known at compile-time (as in the example above). */ -class DynamicOperatorCall extends DynamicExpr, OperatorCall { - override string toString() { - result = "dynamic call to operator " + this.getLateBoundTargetName() - } - - override string getAPrimaryQlClass() { result = "DynamicOperatorCall" } -} +class DynamicOperatorCall extends DynamicExpr, OperatorCall { } /** * A call to a user-defined mutator operator where the operand is a `dynamic` diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll b/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll index c3b9bcc363b..66764d06479 100644 --- a/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll +++ b/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll @@ -14,6 +14,7 @@ import Creation import Dynamic import Literal import LogicalOperation +import Operation import semmle.code.csharp.controlflow.ControlFlowElement import semmle.code.csharp.Location import semmle.code.csharp.Stmt @@ -65,25 +66,11 @@ class Expr extends ControlFlowElement, @expr { /** Gets the enclosing callable of this expression, if any. */ override Callable getEnclosingCallable() { enclosingCallable(this, result) } - pragma[nomagic] - private predicate isExpandedAssignmentRValueDescendant() { - this = - any(AssignOperation op).getExpandedAssignment().getRValue().getChildExpr(0).getAChildExpr() - or - exists(Expr parent | - parent.isExpandedAssignmentRValueDescendant() and - this = parent.getAChildExpr() - ) - } - /** * Holds if this expression is generated by the compiler and does not appear * explicitly in the source code. */ - final predicate isImplicit() { - compiler_generated(this) or - this.isExpandedAssignmentRValueDescendant() - } + final predicate isImplicit() { compiler_generated(this) } /** * Gets an expression that is the result of stripping (recursively) all @@ -168,7 +155,7 @@ class LocalVariableDeclExpr extends Expr, @local_var_decl_expr { string getName() { result = this.getVariable().getName() } /** Gets the initializer expression of this local variable declaration, if any. */ - Expr getInitializer() { result = this.getChild(0) } + Expr getInitializer() { result = this.getChild(1) } /** Holds if this local variable declaration has an initializer. */ predicate hasInitializer() { exists(this.getInitializer()) } @@ -188,7 +175,7 @@ class LocalVariableDeclExpr extends Expr, @local_var_decl_expr { /** Gets the variable access used in this declaration, if any. */ LocalVariableAccess getAccess() { - result = this.getChild(1) or + result = this.getChild(0) or result = this // `out` argument } diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/Operation.qll b/csharp/ql/lib/semmle/code/csharp/exprs/Operation.qll new file mode 100644 index 00000000000..3310fe4de1a --- /dev/null +++ b/csharp/ql/lib/semmle/code/csharp/exprs/Operation.qll @@ -0,0 +1,122 @@ +/** + * Provides classes for operations that also have compound assignment forms. + */ + +import Expr + +/** A binary operation that involves a null-coalescing operation. */ +abstract private class NullCoalescingOperationImpl extends BinaryOperation { } + +final class NullCoalescingOperation = NullCoalescingOperationImpl; + +private class AddNullCoalescingExpr extends NullCoalescingOperationImpl instanceof NullCoalescingExpr +{ } + +private class AddAssignCoalesceExpr extends NullCoalescingOperationImpl instanceof AssignCoalesceExpr +{ } + +/** A binary operations that involves an addition operation. */ +abstract private class AddOperationImpl extends BinaryOperation { } + +final class AddOperation = AddOperationImpl; + +private class AddAddExpr extends AddOperationImpl instanceof AddExpr { } + +private class AddAssignExpr extends AddOperationImpl instanceof AssignAddExpr { } + +/** A binary operation that involves a subtraction operation. */ +abstract private class SubOperationImpl extends BinaryOperation { } + +final class SubOperation = SubOperationImpl; + +private class AddSubExpr extends SubOperationImpl instanceof SubExpr { } + +private class AddSubAssignExpr extends SubOperationImpl instanceof AssignSubExpr { } + +/** A binary operation that involves a multiplication operation. */ +abstract private class MulOperationImpl extends BinaryOperation { } + +final class MulOperation = MulOperationImpl; + +private class AddMulExpr extends MulOperationImpl instanceof MulExpr { } + +private class AddMulAssignExpr extends MulOperationImpl instanceof AssignMulExpr { } + +/** A binary operation that involves a division operation. */ +abstract private class DivOperationImpl extends BinaryOperation { + /** Gets the denominator of this division operation. */ + Expr getDenominator() { result = this.getRightOperand() } +} + +final class DivOperation = DivOperationImpl; + +private class AddDivExpr extends DivOperationImpl instanceof DivExpr { } + +private class AddDivAssignExpr extends DivOperationImpl instanceof AssignDivExpr { } + +/** A binary operation that involves a remainder operation. */ +abstract private class RemOperationImpl extends BinaryOperation { } + +final class RemOperation = RemOperationImpl; + +private class AddRemExpr extends RemOperationImpl instanceof RemExpr { } + +private class AddRemAssignExpr extends RemOperationImpl instanceof AssignRemExpr { } + +/** A binary operation that involves a bitwise AND operation. */ +abstract private class BitwiseAndOperationImpl extends BinaryOperation { } + +final class BitwiseAndOperation = BitwiseAndOperationImpl; + +private class AddBitwiseAndExpr extends BitwiseAndOperationImpl instanceof BitwiseAndExpr { } + +private class AddAssignBitwiseAndExpr extends BitwiseAndOperationImpl instanceof AssignAndExpr { } + +/** A binary operation that involves a bitwise OR operation. */ +abstract private class BitwiseOrOperationImpl extends BinaryOperation { } + +final class BitwiseOrOperation = BitwiseOrOperationImpl; + +private class AddBitwiseOrExpr extends BitwiseOrOperationImpl instanceof BitwiseOrExpr { } + +private class AddAssignBitwiseOrExpr extends BitwiseOrOperationImpl instanceof AssignOrExpr { } + +/** A binary operation that involves a bitwise XOR operation. */ +abstract private class BitwiseXorOperationImpl extends BinaryOperation { } + +final class BitwiseXorOperation = BitwiseXorOperationImpl; + +private class AddBitwiseXorExpr extends BitwiseXorOperationImpl instanceof BitwiseXorExpr { } + +private class AddAssignBitwiseXorExpr extends BitwiseXorOperationImpl instanceof AssignXorExpr { } + +/** A binary operation that involves a left shift operation. */ +abstract private class LeftShiftOperationImpl extends BinaryOperation { } + +final class LeftShiftOperation = LeftShiftOperationImpl; + +private class AddLeftShiftExpr extends LeftShiftOperationImpl instanceof LeftShiftExpr { } + +private class AddAssignLeftShiftExpr extends LeftShiftOperationImpl instanceof AssignLeftShiftExpr { +} + +/** A binary operation that involves a right shift operation. */ +abstract private class RightShiftOperationImpl extends BinaryOperation { } + +final class RightShiftOperation = RightShiftOperationImpl; + +private class AddRightShiftExpr extends RightShiftOperationImpl instanceof RightShiftExpr { } + +private class AddAssignRightShiftExpr extends RightShiftOperationImpl instanceof AssignRightShiftExpr +{ } + +/** A binary operation that involves a unsigned right shift operation. */ +abstract private class UnsignedRightShiftOperationImpl extends BinaryOperation { } + +final class UnsignedRightShiftOperation = UnsignedRightShiftOperationImpl; + +private class AddUnsignedRightShiftExpr extends UnsignedRightShiftOperationImpl instanceof UnsignedRightShiftExpr +{ } + +private class AddAssignUnsignedRightShiftExpr extends UnsignedRightShiftOperationImpl instanceof AssignUnsignedRightShiftExpr +{ } From 2a781832387dfaaa4b28e59d6c9a79c843fea0c9 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 20 Mar 2026 12:38:10 +0100 Subject: [PATCH 142/185] C#: Deprecate the expanded assignment predicate as we no longer extract expanded assignments. --- .../semmle/code/csharp/ExprOrStmtParent.qll | 58 +------------------ 1 file changed, 3 insertions(+), 55 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/ExprOrStmtParent.qll b/csharp/ql/lib/semmle/code/csharp/ExprOrStmtParent.qll index 5afacf608a8..ae9ed04e018 100644 --- a/csharp/ql/lib/semmle/code/csharp/ExprOrStmtParent.qll +++ b/csharp/ql/lib/semmle/code/csharp/ExprOrStmtParent.qll @@ -20,7 +20,7 @@ class ExprOrStmtParent extends Element, @exprorstmt_parent { /** Gets the `i`th child expression of this element (zero-based). */ final Expr getChildExpr(int i) { - expr_parent_adjusted(result, i, this) or + expr_parent(result, i, this) or expr_parent_top_level_adjusted(result, i, this) } @@ -119,66 +119,14 @@ private module Cached { } /** - * The `expr_parent()` relation adjusted for expandable assignments. For example, - * the assignment `x += y` is extracted as - * - * ``` - * += - * | - * 2 - * | - * = - * / \ - * 1 0 - * / \ - * x + - * / \ - * 1 0 - * / \ - * x y - * ``` - * - * in order to be able to retrieve the expanded assignment `x = x + y` as the 2nd - * child. This predicate changes the diagram above into - * - * ``` - * += - * / \ - * 1 0 - * / \ - * x y - * ``` + * Use `expr_parent` instead. */ cached - predicate expr_parent_adjusted(Expr child, int i, ControlFlowElement parent) { - if parent instanceof AssignOperation - then - parent = - any(AssignOperation ao | - exists(AssignExpr ae | ae = ao.getExpandedAssignment() | - i = 0 and - exists(Expr right | - // right = `x + y` - expr_parent(right, 0, ae) - | - expr_parent(child, 1, right) - ) - or - i = 1 and - expr_parent(child, 1, ae) - ) - or - not ao.hasExpandedAssignment() and - expr_parent(child, i, parent) - ) - else expr_parent(child, i, parent) - } + deprecated predicate expr_parent_adjusted(Expr child, int i, ControlFlowElement parent) { none() } private Expr getAChildExpr(ExprOrStmtParent parent) { result = parent.getAChildExpr() and not result = parent.(DeclarationWithGetSetAccessors).getExpressionBody() - or - result = parent.(AssignOperation).getExpandedAssignment() } private ControlFlowElement getAChild(ExprOrStmtParent parent) { From e2afb000b251feff563431e3178925e247895bae Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 20 Mar 2026 12:42:30 +0100 Subject: [PATCH 143/185] C#: Cleaup expanded assignments from the dispatch logic. --- csharp/ql/lib/semmle/code/csharp/dispatch/Dispatch.qll | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/dispatch/Dispatch.qll b/csharp/ql/lib/semmle/code/csharp/dispatch/Dispatch.qll index a83967441d7..f7f6c7a50be 100644 --- a/csharp/ql/lib/semmle/code/csharp/dispatch/Dispatch.qll +++ b/csharp/ql/lib/semmle/code/csharp/dispatch/Dispatch.qll @@ -202,11 +202,9 @@ private module Internal { private predicate isPotentialEventCall( AssignArithmeticOperation aao, DynamicMemberAccess dma, string name ) { - exists(DynamicOperatorCall doc, AssignExpr ae | - ae = aao.getExpandedAssignment() and - dma = ae.getLValue() and - doc = ae.getRValue() - | + aao instanceof DynamicOperatorCall and + dma = aao.getLeftOperand() and + ( aao instanceof AssignAddExpr and name = "add_" + dma.getLateBoundTargetName() or From 569e33b407f4f18d70faa60daba728d1cffc050b Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 20 Mar 2026 12:45:22 +0100 Subject: [PATCH 144/185] C#: Introduce a new kind of assignable definitions for compound assignments (those that was previously covered by expanded assignments). --- .../ql/lib/semmle/code/csharp/Assignable.qll | 42 ++++++++++++++++--- 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/Assignable.qll b/csharp/ql/lib/semmle/code/csharp/Assignable.qll index 3c7170a6f84..a0e575218ad 100644 --- a/csharp/ql/lib/semmle/code/csharp/Assignable.qll +++ b/csharp/ql/lib/semmle/code/csharp/Assignable.qll @@ -78,6 +78,8 @@ class AssignableRead extends AssignableAccess { this.isRefArgument() or this = any(AssignableDefinitions::AddressOfDefinition def).getTargetAccess() + or + this = any(AssignableDefinitions::AssignOperationDefinition def).getTargetAccess() ) and not nameOfChild(_, this) } @@ -271,6 +273,8 @@ module AssignableInternal { def = TAddressOfDefinition(result) or def = TPatternDefinition(result) + or + def = TAssignOperationDefinition(result) } /** A local variable declaration at the top-level of a pattern. */ @@ -286,7 +290,11 @@ module AssignableInternal { private module Cached { cached newtype TAssignableDefinition = - TAssignmentDefinition(Assignment a) { not a.getLValue() instanceof TupleExpr } or + TAssignmentDefinition(Assignment a) { + not a.getLValue() instanceof TupleExpr and + not a instanceof AssignCallOperation and + not a instanceof AssignCoalesceExpr + } or TTupleAssignmentDefinition(AssignExpr ae, Expr leaf) { tupleAssignmentDefinition(ae, leaf) } or TOutRefDefinition(AssignableAccess aa) { aa.isOutArgument() @@ -309,7 +317,11 @@ module AssignableInternal { ) } or TAddressOfDefinition(AddressOfExpr aoe) or - TPatternDefinition(TopLevelPatternDecl tlpd) + TPatternDefinition(TopLevelPatternDecl tlpd) or + TAssignOperationDefinition(AssignOperation ao) { + ao instanceof AssignCallOperation or + ao instanceof AssignCoalesceExpr + } /** * Gets the source expression assigned in tuple definition `def`, if any. @@ -355,6 +367,8 @@ module AssignableInternal { def = TMutationDefinition(any(MutatorOperation mo | mo.getOperand() = result)) or def = TAddressOfDefinition(any(AddressOfExpr aoe | aoe.getOperand() = result)) + or + def = TAssignOperationDefinition(any(AssignOperation ao | ao.getLeftOperand() = result)) } /** @@ -369,8 +383,10 @@ module AssignableInternal { or exists(Assignment ass | ac = ass.getLValue() | result = ass.getRValue() and - not ass.(AssignOperation).hasExpandedAssignment() + not ass instanceof AssignOperation ) + or + exists(AssignOperation ao | ac = ao.getLeftOperand() | result = ao) } } @@ -388,8 +404,9 @@ private import AssignableInternal * a mutation update (`AssignableDefinitions::MutationDefinition`), a local variable * declaration without an initializer (`AssignableDefinitions::LocalVariableDefinition`), * an implicit parameter definition (`AssignableDefinitions::ImplicitParameterDefinition`), - * an address-of definition (`AssignableDefinitions::AddressOfDefinition`), or a pattern - * definition (`AssignableDefinitions::PatternDefinition`). + * an address-of definition (`AssignableDefinitions::AddressOfDefinition`), a pattern + * definition (`AssignableDefinitions::PatternDefinition`), or a compound assignment + * operation definition (`AssignableDefinitions::AssignOperationDefinition`) */ class AssignableDefinition extends TAssignableDefinition { /** @@ -511,7 +528,7 @@ module AssignableDefinitions { override Expr getSource() { result = a.getRValue() and - not a instanceof AssignOperation + not a instanceof AddOrRemoveEventExpr } override string toString() { result = a.toString() } @@ -735,4 +752,17 @@ module AssignableDefinitions { /** Gets the assignable (field or property) being initialized. */ Assignable getAssignable() { result = fieldOrProp } } + + /** + * A definition by a compound assignment operation, for example `x += y`. + */ + class AssignOperationDefinition extends AssignableDefinition, TAssignOperationDefinition { + AssignOperation ao; + + AssignOperationDefinition() { this = TAssignOperationDefinition(ao) } + + override Expr getSource() { result = ao } + + override string toString() { result = ao.toString() } + } } From 149df86ce2666d647c65a16fd107758db252eda0 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 20 Mar 2026 12:50:30 +0100 Subject: [PATCH 145/185] C#: Update the CFG implementation based on the new operations and remove hack that rotates children of assignments. --- .../internal/ControlFlowGraphImpl.qll | 47 +++---------------- 1 file changed, 6 insertions(+), 41 deletions(-) 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 0bdf1f795db..e29e92d26eb 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll @@ -62,18 +62,13 @@ class CfgScope extends Element, @top_level_exprorstmt_parent { private class TAstNode = @callable or @control_flow_element; -private Element getAChild(Element p) { - result = p.getAChild() or - result = p.(AssignOperation).getExpandedAssignment() -} - pragma[nomagic] private predicate astNode(Element e) { e = any(@top_level_exprorstmt_parent p | not p instanceof Attribute) or exists(Element parent | astNode(parent) and - e = getAChild(parent) + e = parent.getAChild() ) } @@ -447,7 +442,6 @@ module Expressions { private AstNode getExprChild0(Expr e, int i) { not e instanceof NameOfExpr and not e instanceof QualifiableExpr and - not e instanceof Assignment and not e instanceof AnonymousFunctionExpr and result = e.getChild(i) or @@ -458,14 +452,6 @@ module Expressions { not qe instanceof ExtensionMethodCall and result = qe.getChild(i) ) - or - e = - any(Assignment a | - // The left-hand side of an assignment is evaluated before the right-hand side - i = 0 and result = a.getLValue() - or - i = 1 and result = a.getRValue() - ) } private AstNode getExprChild(Expr e, int i) { @@ -491,9 +477,8 @@ module Expressions { not this instanceof LogicalNotExpr and not this instanceof LogicalAndExpr and not this instanceof LogicalOrExpr and - not this instanceof NullCoalescingExpr and + not this instanceof NullCoalescingOperation and not this instanceof ConditionalExpr and - not this instanceof AssignOperationWithExpandedAssignment and not this instanceof ConditionallyQualifiedExpr and not this instanceof ThrowExpr and not this instanceof ObjectCreation and @@ -590,8 +575,7 @@ module Expressions { QualifiedAccessorWrite() { def.getExpr() = this and def.getTargetAccess().(WriteAccess) instanceof QualifiableExpr and - not def instanceof AssignableDefinitions::OutRefDefinition and - not this instanceof AssignOperationWithExpandedAssignment + not def instanceof AssignableDefinitions::OutRefDefinition } /** @@ -723,7 +707,8 @@ module Expressions { } } - private class NullCoalescingExprTree extends PostOrderTree instanceof NullCoalescingExpr { + private class NullCoalescingOperationTree extends PostOrderTree instanceof NullCoalescingOperation + { final override predicate propagatesAbnormal(AstNode child) { child in [super.getLeftOperand(), super.getRightOperand()] } @@ -774,26 +759,6 @@ module Expressions { } } - /** - * An assignment operation that has an expanded version. We use the expanded - * version in the control flow graph in order to get better data flow / taint - * tracking. - */ - private class AssignOperationWithExpandedAssignment extends ControlFlowTree instanceof AssignOperation - { - private Expr expanded; - - AssignOperationWithExpandedAssignment() { expanded = this.getExpandedAssignment() } - - final override predicate first(AstNode first) { first(expanded, first) } - - final override predicate last(AstNode last, Completion c) { last(expanded, last, c) } - - final override predicate propagatesAbnormal(AstNode child) { none() } - - final override predicate succ(AstNode pred, AstNode succ, Completion c) { none() } - } - /** A conditionally qualified expression. */ private class ConditionallyQualifiedExpr extends PostOrderTree instanceof QualifiableExpr { private Expr qualifier; @@ -1551,7 +1516,7 @@ module Statements { /** Gets a child of `cfe` that is in CFG scope `scope`. */ pragma[noinline] private ControlFlowElement getAChildInScope(AstNode cfe, Callable scope) { - result = getAChild(cfe) and + result = cfe.getAChild() and scope = result.getEnclosingCallable() } From 51673312c5e16f17cc83943c70b0e3c16dabb928 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 20 Mar 2026 13:00:33 +0100 Subject: [PATCH 146/185] C#: Upgrade libraries and queries to use the new Operation classes. --- .../src/ModifiedFnvFunctionDetection.ql | 13 +--- .../Cryptography/NonCryptographicHashes.qll | 2 +- .../semmle/code/csharp/commons/Strings.qll | 5 ++ .../semmle/code/csharp/controlflow/Guards.qll | 37 +++++------ .../controlflow/internal/Completion.qll | 16 ++--- .../csharp/controlflow/internal/Splitting.qll | 2 +- .../semmle/code/csharp/dataflow/Nullness.qll | 2 +- .../dataflow/internal/DataFlowPrivate.qll | 4 +- .../internal/TaintTrackingPrivate.qll | 2 +- .../rangeanalysis/ModulusAnalysisSpecific.qll | 12 ++-- .../internal/rangeanalysis/RangeUtils.qll | 63 +++++++++++-------- .../rangeanalysis/SignAnalysisSpecific.qll | 7 ++- .../internal/rangeanalysis/SsaUtils.qll | 4 +- .../code/csharp/frameworks/system/Xml.qll | 2 +- .../semmle/code/csharp/metrics/Complexity.qll | 2 +- .../Control-Flow/ConstantCondition.ql | 4 +- csharp/ql/src/Complexity/ComplexCondition.ql | 29 +++++++-- csharp/ql/src/Dead Code/DeadStoreOfLocal.ql | 2 + .../UselessNullCoalescingExpression.ql | 12 ++-- .../Collections/WriteOnlyContainer.ql | 4 +- .../DangerousNonShortCircuitLogic.ql | 1 - .../Likely Bugs/PossibleLossOfPrecision.ql | 8 +-- .../Performance/StringConcatenationInLoop.ql | 1 - .../CWE-119/LocalUnvalidatedArithmetic.ql | 2 +- .../Security Features/InsecureRandomness.ql | 6 +- .../experimental/CWE-918/RequestForgery.qll | 2 +- .../CWE-759/HashWithoutSalt.ql | 2 +- 27 files changed, 138 insertions(+), 108 deletions(-) diff --git a/csharp/ql/campaigns/Solorigate/src/ModifiedFnvFunctionDetection.ql b/csharp/ql/campaigns/Solorigate/src/ModifiedFnvFunctionDetection.ql index e09d00807e6..ca153bfb97d 100644 --- a/csharp/ql/campaigns/Solorigate/src/ModifiedFnvFunctionDetection.ql +++ b/csharp/ql/campaigns/Solorigate/src/ModifiedFnvFunctionDetection.ql @@ -16,16 +16,9 @@ import experimental.code.csharp.Cryptography.NonCryptographicHashes from Variable v, Literal l, LoopStmt loop, Expr additional_xor where maybeUsedInFnvFunction(v, _, _, loop) and - ( - exists(BitwiseXorExpr xor2 | xor2.getAnOperand() = l and additional_xor = xor2 | - loop.getAControlFlowExitNode().getASuccessor*() = xor2.getAControlFlowNode() and - xor2.getAnOperand() = v.getAnAccess() - ) - or - exists(AssignXorExpr xor2 | xor2.getAnOperand() = l and additional_xor = xor2 | - loop.getAControlFlowExitNode().getASuccessor*() = xor2.getAControlFlowNode() and - xor2.getAnOperand() = v.getAnAccess() - ) + exists(BitwiseXorOperation xor2 | xor2.getAnOperand() = l and additional_xor = xor2 | + loop.getAControlFlowExitNode().getASuccessor*() = xor2.getAControlFlowNode() and + xor2.getAnOperand() = v.getAnAccess() ) select l, "This literal is used in an $@ after an FNV-like hash calculation with variable $@.", additional_xor, "additional xor", v, v.toString() diff --git a/csharp/ql/lib/experimental/code/csharp/Cryptography/NonCryptographicHashes.qll b/csharp/ql/lib/experimental/code/csharp/Cryptography/NonCryptographicHashes.qll index 49dd011658d..b09251cf6e4 100644 --- a/csharp/ql/lib/experimental/code/csharp/Cryptography/NonCryptographicHashes.qll +++ b/csharp/ql/lib/experimental/code/csharp/Cryptography/NonCryptographicHashes.qll @@ -48,7 +48,7 @@ private predicate maybeUsedInElfHashFunction(Variable v, Operation xor, Operatio Expr e1, Expr e2, AssignExpr addAssign, AssignExpr xorAssign, Operation notOp, AssignExpr notAssign | - (add instanceof AddExpr or add instanceof AssignAddExpr) and + add instanceof AddOperation and e1.getAChild*() = add.getAnOperand() and e1 instanceof BinaryBitwiseOperation and e2 = e1.(BinaryBitwiseOperation).getLeftOperand() and diff --git a/csharp/ql/lib/semmle/code/csharp/commons/Strings.qll b/csharp/ql/lib/semmle/code/csharp/commons/Strings.qll index bdf9e558539..678a1f92816 100644 --- a/csharp/ql/lib/semmle/code/csharp/commons/Strings.qll +++ b/csharp/ql/lib/semmle/code/csharp/commons/Strings.qll @@ -49,6 +49,11 @@ class ImplicitToStringExpr extends Expr { this = add.getOtherOperand(o).stripImplicit() ) or + exists(AssignAddExpr add, Expr o | o = add.getLeftOperand() | + o.stripImplicit().getType() instanceof StringType and + this = add.getRightOperand().stripImplicit() + ) + or this = any(InterpolatedStringExpr ise).getAnInsert().stripImplicit() } } diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll index 40ec3722edd..03a5aa7e2b7 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll @@ -119,14 +119,14 @@ private module GuardsInput implements class AndExpr extends BinExpr { AndExpr() { this instanceof LogicalAndExpr or - this instanceof BitwiseAndExpr + this instanceof BitwiseAndOperation } } class OrExpr extends BinExpr { OrExpr() { this instanceof LogicalOrExpr or - this instanceof BitwiseOrExpr + this instanceof BitwiseOrOperation } } @@ -292,7 +292,7 @@ private module LogicInput implements GuardsImpl::LogicInputSig { v1.isNonNullValue() and v2 = v1 or - g2 = g1.(NullCoalescingExpr).getAnOperand() and + g2 = g1.(NullCoalescingOperation).getAnOperand() and v1.isNullValue() and v2 = v1 or @@ -840,14 +840,14 @@ module Internal { or e1 = e2.(Cast).getExpr() or - e2 = e1.(NullCoalescingExpr).getAnOperand() + e2 = e1.(NullCoalescingOperation).getAnOperand() } /** Holds if expression `e3` is a `null` value whenever `e1` and `e2` are. */ predicate nullValueImpliedBinary(Expr e1, Expr e2, Expr e3) { e3 = any(ConditionalExpr ce | e1 = ce.getThen() and e2 = ce.getElse()) or - e3 = any(NullCoalescingExpr nce | e1 = nce.getLeftOperand() and e2 = nce.getRightOperand()) + e3 = any(NullCoalescingOperation no | e1 = no.getLeftOperand() and e2 = no.getRightOperand()) } predicate nullValueImplied(Expr e) { @@ -907,7 +907,7 @@ module Internal { or // "In string concatenation operations, the C# compiler treats a null string the same as an empty string." // (https://docs.microsoft.com/en-us/dotnet/csharp/how-to/concatenate-multiple-strings) - e instanceof AddExpr and + e instanceof AddOperation and e.getType() instanceof StringType or e.(DefaultValueExpr).getType().isValueType() @@ -922,11 +922,9 @@ module Internal { /** Holds if expression `e2` is a non-`null` value whenever `e1` is. */ predicate nonNullValueImpliedUnary(Expr e1, Expr e2) { - e1 = e2.(CastExpr).getExpr() - or - e1 = e2.(AssignExpr).getRValue() - or - e1 = e2.(NullCoalescingExpr).getAnOperand() + e1 = e2.(CastExpr).getExpr() or + e1 = e2.(AssignExpr).getRValue() or + e1 = e2.(NullCoalescingOperation).getAnOperand() } /** @@ -953,10 +951,13 @@ module Internal { ) or // In C#, `null + 1` has type `int?` with value `null` - exists(BinaryArithmeticOperation bao, Expr o | - result = bao and - bao.getAnOperand() = e and - bao.getAnOperand() = o and + exists(BinaryOperation bo, Expr o | + bo instanceof BinaryArithmeticOperation or + bo instanceof AssignArithmeticOperation + | + result = bo and + bo.getAnOperand() = e and + bo.getAnOperand() = o and // The other operand must be provably non-null in order // for `only if` to hold nonNullValueImplied(o) and @@ -972,10 +973,10 @@ module Internal { any(QualifiableExpr qe | qe.isConditional() and result = qe.getQualifier() - ) - or + ) or // In C#, `null + 1` has type `int?` with value `null` - e = any(BinaryArithmeticOperation bao | result = bao.getAnOperand()) + e = any(BinaryArithmeticOperation bao | result = bao.getAnOperand()) or + e = any(AssignArithmeticOperation aao | result = aao.getAnOperand()) } deprecated predicate isGuard(Expr e, GuardValue val) { diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Completion.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Completion.qll index ab8bb233e2c..e734e79402b 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Completion.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Completion.qll @@ -344,7 +344,7 @@ private class TriedControlFlowElement extends ControlFlowElement { result instanceof SystemOutOfMemoryExceptionClass or this = - any(AddExpr ae | + any(AddOperation ae | ae.getType() instanceof StringType and result instanceof SystemOutOfMemoryExceptionClass or @@ -353,24 +353,24 @@ private class TriedControlFlowElement extends ControlFlowElement { ) or this = - any(SubExpr se | + any(SubOperation se | se.getType() instanceof IntegralType and result instanceof SystemOverflowExceptionClass ) or this = - any(MulExpr me | + any(MulOperation me | me.getType() instanceof IntegralType and result instanceof SystemOverflowExceptionClass ) or this = - any(DivExpr de | + any(DivOperation de | not de.getDenominator().getValue().toFloat() != 0 and result instanceof SystemDivideByZeroExceptionClass ) or - this instanceof RemExpr and + this instanceof RemOperation and result instanceof SystemDivideByZeroExceptionClass or this instanceof DynamicExpr and @@ -447,7 +447,7 @@ private predicate inBooleanContext(Expr e) { e in [ce.getThen(), ce.getElse()] ) or - e = any(NullCoalescingExpr nce | inBooleanContext(nce)).getAnOperand() + e = any(NullCoalescingOperation nce | inBooleanContext(nce)).getAnOperand() or e = any(SwitchExpr se | inBooleanContext(se)).getACase() or @@ -467,13 +467,13 @@ private predicate mustHaveNullnessCompletion(Expr e) { * that `e` evaluates to determines a `null`/non-`null` branch successor. */ private predicate inNullnessContext(Expr e) { - e = any(NullCoalescingExpr nce).getLeftOperand() + e = any(NullCoalescingOperation nce).getLeftOperand() or exists(QualifiableExpr qe | qe.isConditional() | e = qe.getChildExpr(-1)) or exists(ConditionalExpr ce | inNullnessContext(ce) | (e = ce.getThen() or e = ce.getElse())) or - exists(NullCoalescingExpr nce | inNullnessContext(nce) | e = nce.getRightOperand()) + exists(NullCoalescingOperation nce | inNullnessContext(nce) | e = nce.getRightOperand()) or e = any(SwitchExpr se | inNullnessContext(se)).getACase() or 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 55b75ed31a7..173179216f3 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Splitting.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Splitting.qll @@ -95,7 +95,7 @@ module ConditionalCompletionSplitting { child = parent.(SwitchCaseExpr).getBody() or parent = - any(NullCoalescingExpr nce | + any(NullCoalescingOperation nce | if childCompletion instanceof NullnessCompletion then child = nce.getRightOperand() else child = nce.getAnOperand() diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll index c7ac34d3d01..a82779eaa5d 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll @@ -42,7 +42,7 @@ private Expr maybeNullExpr(Expr reason) { ce.getElse() = maybeNullExpr(reason) ) or - result.(NullCoalescingExpr).getRightOperand() = maybeNullExpr(reason) + result.(NullCoalescingOperation).getRightOperand() = maybeNullExpr(reason) or result = any(QualifiableExpr qe | 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 03164960d41..afb09f85835 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -512,7 +512,7 @@ module LocalFlow { predicate localExprStep(Expr e1, Expr e2) { e1 = e2.(ParenthesizedExpr).getExpr() or - e1 = e2.(NullCoalescingExpr).getAnOperand() + e1 = e2.(NullCoalescingOperation).getAnOperand() or e1 = e2.(SuppressNullableWarningExpr).getExpr() or @@ -623,7 +623,7 @@ module LocalFlow { ( e instanceof ConditionalExpr or e instanceof Cast or - e instanceof NullCoalescingExpr or + e instanceof NullCoalescingOperation or e instanceof SwitchExpr or e instanceof SuppressNullableWarningExpr or e instanceof AssignExpr 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 99a50b36873..d3ae19c6d18 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll @@ -47,7 +47,7 @@ predicate defaultImplicitTaintRead(DataFlow::Node node, DataFlow::ContentSet c) private predicate localTaintExprStep(Expr e1, Expr e2) { e1 = e2.(ElementAccess).getQualifier() or - e1 = e2.(AddExpr).getAnOperand() + e1 = e2.(AddOperation).getAnOperand() or // A comparison expression where taint can flow from one of the // operands if the other operand is a constant value. diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/ModulusAnalysisSpecific.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/ModulusAnalysisSpecific.qll index c9c3a937ef9..ca0aa83f29f 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/ModulusAnalysisSpecific.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/ModulusAnalysisSpecific.qll @@ -20,17 +20,17 @@ module Private { class ConditionalExpr = RU::ExprNode::ConditionalExpr; - class AddExpr = RU::ExprNode::AddExpr; + class AddExpr = RU::ExprNode::AddOperation; - class SubExpr = RU::ExprNode::SubExpr; + class SubExpr = RU::ExprNode::SubOperation; - class RemExpr = RU::ExprNode::RemExpr; + class RemExpr = RU::ExprNode::RemOperation; - class BitwiseAndExpr = RU::ExprNode::BitwiseAndExpr; + class BitwiseAndExpr = RU::ExprNode::BitwiseAndOperation; - class MulExpr = RU::ExprNode::MulExpr; + class MulExpr = RU::ExprNode::MulOperation; - class LeftShiftExpr = RU::ExprNode::LeftShiftExpr; + class LeftShiftExpr = RU::ExprNode::LeftShiftOperation; predicate guardControlsSsaRead = RU::guardControlsSsaRead/3; diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/RangeUtils.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/RangeUtils.qll index 656bf9aae21..46153f18dae 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/RangeUtils.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/RangeUtils.qll @@ -21,7 +21,11 @@ private module Impl { /** Holds if SSA definition `def` equals `e + delta`. */ predicate ssaUpdateStep(ExplicitDefinition def, ExprNode e, int delta) { exists(ControlFlow::Node cfn | cfn = def.getControlFlowNode() | - e = cfn.(ExprNode::Assignment).getRValue() and delta = 0 + e = cfn.(ExprNode::Assignment).getRValue() and + delta = 0 and + not cfn instanceof ExprNode::AssignOperation + or + e = cfn.(ExprNode::AssignOperation) and delta = 0 or e = cfn.(ExprNode::PostIncrExpr).getOperand() and delta = 1 or @@ -48,15 +52,15 @@ private module Impl { e2.(ExprNode::PreDecrExpr).getOperand() = e1 and delta = -1 or exists(ConstantIntegerExpr x | - e2.(ExprNode::AddExpr).getAnOperand() = e1 and - e2.(ExprNode::AddExpr).getAnOperand() = x and + e2.(ExprNode::AddOperation).getAnOperand() = e1 and + e2.(ExprNode::AddOperation).getAnOperand() = x and e1 != x and x.getIntValue() = delta ) or exists(ConstantIntegerExpr x | - e2.(ExprNode::SubExpr).getLeftOperand() = e1 and - e2.(ExprNode::SubExpr).getRightOperand() = x and + e2.(ExprNode::SubOperation).getLeftOperand() = e1 and + e2.(ExprNode::SubOperation).getRightOperand() = x and x.getIntValue() = -delta ) or @@ -218,6 +222,11 @@ module ExprNode { override CS::AssignExpr e; } + /** A compound assignment operation. */ + class AssignOperation extends Assignment, BinaryOperation { + override CS::AssignOperation e; + } + /** A unary operation. */ class UnaryOperation extends ExprNode { override CS::UnaryOperation e; @@ -309,78 +318,78 @@ module ExprNode { } /** An addition operation. */ - class AddExpr extends BinaryOperation { - override CS::AddExpr e; + class AddOperation extends BinaryOperation { + override CS::AddOperation e; override TAddOp getOp() { any() } } /** A subtraction operation. */ - class SubExpr extends BinaryOperation { - override CS::SubExpr e; + class SubOperation extends BinaryOperation { + override CS::SubOperation e; override TSubOp getOp() { any() } } /** A multiplication operation. */ - class MulExpr extends BinaryOperation { - override CS::MulExpr e; + class MulOperation extends BinaryOperation { + override CS::MulOperation e; override TMulOp getOp() { any() } } /** A division operation. */ - class DivExpr extends BinaryOperation { - override CS::DivExpr e; + class DivOperation extends BinaryOperation { + override CS::DivOperation e; override TDivOp getOp() { any() } } /** A remainder operation. */ - class RemExpr extends BinaryOperation { - override CS::RemExpr e; + class RemOperation extends BinaryOperation { + override CS::RemOperation e; override TRemOp getOp() { any() } } /** A bitwise-and operation. */ - class BitwiseAndExpr extends BinaryOperation { - override CS::BitwiseAndExpr e; + class BitwiseAndOperation extends BinaryOperation { + override CS::BitwiseAndOperation e; override TBitAndOp getOp() { any() } } /** A bitwise-or operation. */ - class BitwiseOrExpr extends BinaryOperation { - override CS::BitwiseOrExpr e; + class BitwiseOrOperation extends BinaryOperation { + override CS::BitwiseOrOperation e; override TBitOrOp getOp() { any() } } /** A bitwise-xor operation. */ - class BitwiseXorExpr extends BinaryOperation { - override CS::BitwiseXorExpr e; + class BitwiseXorOperation extends BinaryOperation { + override CS::BitwiseXorOperation e; override TBitXorOp getOp() { any() } } /** A left-shift operation. */ - class LeftShiftExpr extends BinaryOperation { - override CS::LeftShiftExpr e; + class LeftShiftOperation extends BinaryOperation { + override CS::LeftShiftOperation e; override TLeftShiftOp getOp() { any() } } /** A right-shift operation. */ - class RightShiftExpr extends BinaryOperation { - override CS::RightShiftExpr e; + class RightShiftOperation extends BinaryOperation { + override CS::RightShiftOperation e; override TRightShiftOp getOp() { any() } } /** An unsigned right-shift operation. */ - class UnsignedRightShiftExpr extends BinaryOperation { - override CS::UnsignedRightShiftExpr e; + class UnsignedRightShiftOperation extends BinaryOperation { + override CS::UnsignedRightShiftOperation e; override TUnsignedRightShiftOp getOp() { any() } } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll index 1bd86e19f34..d59d7958765 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll @@ -41,7 +41,7 @@ module Private { class RealLiteral = RU::ExprNode::RealLiteral; - class DivExpr = RU::ExprNode::DivExpr; + class DivExpr = RU::ExprNode::DivOperation; class UnaryOperation = RU::ExprNode::UnaryOperation; @@ -130,6 +130,11 @@ private module Impl { adef = def.getADefinition() and hasChild(adef.getExpr(), adef.getSource(), def.getControlFlowNode(), result) ) + or + exists(AssignableDefinitions::AssignOperationDefinition adef | + adef = def.getADefinition() and + result.getExpr() = adef.getSource() + ) } /** Holds if `def` can have any sign. */ diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SsaUtils.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SsaUtils.qll index b26082b6250..89117d90ba7 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SsaUtils.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SsaUtils.qll @@ -29,7 +29,7 @@ ExprNode getAnExplicitDefinitionRead(ExprNode src) { ExprNode ssaRead(Definition v, int delta) { exists(v.getAReadAtNode(result)) and delta = 0 or - exists(ExprNode::AddExpr add, int d1, ConstantIntegerExpr c | + exists(ExprNode::AddOperation add, int d1, ConstantIntegerExpr c | result = add and delta = d1 - c.getIntValue() | @@ -38,7 +38,7 @@ ExprNode ssaRead(Definition v, int delta) { add.getRightOperand() = ssaRead(v, d1) and add.getLeftOperand() = c ) or - exists(ExprNode::SubExpr sub, int d1, ConstantIntegerExpr c | + exists(ExprNode::SubOperation sub, int d1, ConstantIntegerExpr c | result = sub and sub.getLeftOperand() = ssaRead(v, d1) and sub.getRightOperand() = c and diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/system/Xml.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/system/Xml.qll index c0edf9e110e..798a8ed3822 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/system/Xml.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/system/Xml.qll @@ -131,7 +131,7 @@ class SystemXmlSchemaXmlSchemaValidationFlags extends EnumConstant { } } -private Expr getBitwiseOrOperand(Expr e) { result = e.(BitwiseOrExpr).getAnOperand() } +private Expr getBitwiseOrOperand(Expr e) { result = e.(BitwiseOrOperation).getAnOperand() } /** A creation of an instance of `System.Xml.XmlReaderSettings`. */ class XmlReaderSettingsCreation extends ObjectCreation { diff --git a/csharp/ql/lib/semmle/code/csharp/metrics/Complexity.qll b/csharp/ql/lib/semmle/code/csharp/metrics/Complexity.qll index 2f37d23fe49..392f13d118e 100644 --- a/csharp/ql/lib/semmle/code/csharp/metrics/Complexity.qll +++ b/csharp/ql/lib/semmle/code/csharp/metrics/Complexity.qll @@ -32,7 +32,7 @@ private predicate branchingExpr(Expr expr) { expr instanceof ConditionalExpr or expr instanceof LogicalAndExpr or expr instanceof LogicalOrExpr or - expr instanceof NullCoalescingExpr + expr instanceof NullCoalescingOperation } /** diff --git a/csharp/ql/src/Bad Practices/Control-Flow/ConstantCondition.ql b/csharp/ql/src/Bad Practices/Control-Flow/ConstantCondition.ql index 386b238e049..a58e19049ff 100644 --- a/csharp/ql/src/Bad Practices/Control-Flow/ConstantCondition.ql +++ b/csharp/ql/src/Bad Practices/Control-Flow/ConstantCondition.ql @@ -43,7 +43,7 @@ module ConstCondImpl = ConstCond::Make; predicate nullCheck(Expr e, boolean direct) { exists(QualifiableExpr qe | qe.isConditional() and qe.getQualifier() = e and direct = true) or - exists(NullCoalescingExpr nce | nce.getLeftOperand() = e and direct = true) + exists(NullCoalescingOperation nce | nce.getLeftOperand() = e and direct = true) or exists(ConditionalExpr ce | ce.getThen() = e or ce.getElse() = e | nullCheck(ce, _) and direct = false @@ -114,7 +114,7 @@ class ConstantBooleanCondition extends ConstantCondition { override predicate isWhiteListed() { // E.g. `x ?? false` - this.(BoolLiteral) = any(NullCoalescingExpr nce).getRightOperand() or + this.(BoolLiteral) = any(NullCoalescingOperation nce).getRightOperand() or // No need to flag logical operations when the operands are constant isConstantCondition(this.(LogicalNotExpr).getOperand(), _) or this = diff --git a/csharp/ql/src/Complexity/ComplexCondition.ql b/csharp/ql/src/Complexity/ComplexCondition.ql index 0afb27e2a94..0a4d37705a3 100644 --- a/csharp/ql/src/Complexity/ComplexCondition.ql +++ b/csharp/ql/src/Complexity/ComplexCondition.ql @@ -12,19 +12,38 @@ import csharp -predicate nontrivialLogicalOperator(BinaryLogicalOperation e) { - not exists(BinaryLogicalOperation parent | +abstract class RelevantBinaryOperations extends Operation { } + +private class AddBinaryLogicalOperationRelevantBinaryOperations extends RelevantBinaryOperations, + BinaryLogicalOperation +{ } + +private class AddAssignCoalesceExprRelevantBinaryOperations extends RelevantBinaryOperations, + AssignCoalesceExpr +{ } + +abstract class RelevantOperations extends Operation { } + +private class AddLogicalOperationRelevantOperations extends RelevantOperations, LogicalOperation { } + +private class AddAssignCoalesceExprRelevantOperations extends RelevantOperations, AssignCoalesceExpr +{ } + +predicate nontrivialLogicalOperator(RelevantBinaryOperations e) { + not exists(RelevantBinaryOperations parent | parent = e.getParent() and parent.getOperator() = e.getOperator() ) } -predicate logicalParent(LogicalOperation op, LogicalOperation parent) { parent = op.getParent() } +predicate logicalParent(RelevantOperations op, RelevantOperations parent) { + parent = op.getParent() +} from Expr e, int operators where - not e.getParent() instanceof LogicalOperation and + not e.getParent() instanceof RelevantOperations and operators = - count(BinaryLogicalOperation op | logicalParent*(op, e) and nontrivialLogicalOperator(op)) and + count(RelevantBinaryOperations op | logicalParent*(op, e) and nontrivialLogicalOperator(op)) and operators > 3 select e, "Complex condition: too many logical operations in this expression." diff --git a/csharp/ql/src/Dead Code/DeadStoreOfLocal.ql b/csharp/ql/src/Dead Code/DeadStoreOfLocal.ql index 0f6e6d11fb2..59816a18b3f 100644 --- a/csharp/ql/src/Dead Code/DeadStoreOfLocal.ql +++ b/csharp/ql/src/Dead Code/DeadStoreOfLocal.ql @@ -84,6 +84,8 @@ class RelevantDefinition extends AssignableDefinition { ) or this instanceof AssignableDefinitions::PatternDefinition + or + this instanceof AssignableDefinitions::AssignOperationDefinition } /** Holds if this assignment may be live. */ diff --git a/csharp/ql/src/Language Abuse/UselessNullCoalescingExpression.ql b/csharp/ql/src/Language Abuse/UselessNullCoalescingExpression.ql index 7790fc5ba4a..78e1ea365a5 100644 --- a/csharp/ql/src/Language Abuse/UselessNullCoalescingExpression.ql +++ b/csharp/ql/src/Language Abuse/UselessNullCoalescingExpression.ql @@ -17,20 +17,20 @@ import semmle.code.csharp.commons.StructuralComparison pragma[noinline] private predicate same(AssignableAccess x, AssignableAccess y) { - exists(NullCoalescingExpr nce | - x = nce.getLeftOperand() and - y = nce.getRightOperand().getAChildExpr*() + exists(NullCoalescingOperation nc | + x = nc.getLeftOperand() and + y = nc.getRightOperand().getAChildExpr*() ) and sameGvn(x, y) } -private predicate uselessNullCoalescingExpr(NullCoalescingExpr nce) { +private predicate uselessNullCoalescingOperation(NullCoalescingOperation nce) { exists(AssignableAccess x | nce.getLeftOperand() = x and forex(AssignableAccess y | same(x, y) | y instanceof AssignableRead and not y.isRefArgument()) ) } -from NullCoalescingExpr nce -where uselessNullCoalescingExpr(nce) +from NullCoalescingOperation nce +where uselessNullCoalescingOperation(nce) select nce, "Both operands of this null-coalescing expression access the same variable or property." diff --git a/csharp/ql/src/Likely Bugs/Collections/WriteOnlyContainer.ql b/csharp/ql/src/Likely Bugs/Collections/WriteOnlyContainer.ql index 5a24a1f5f51..5fcb140e679 100644 --- a/csharp/ql/src/Likely Bugs/Collections/WriteOnlyContainer.ql +++ b/csharp/ql/src/Likely Bugs/Collections/WriteOnlyContainer.ql @@ -23,7 +23,9 @@ where ) and forex(Access a | a = v.getAnAccess() | a = any(ModifierMethodCall m).getQualifier() or - a = any(Assignment ass | ass.getRValue() instanceof ObjectCreation).getLValue() + a = any(AssignExpr ass | ass.getRValue() instanceof ObjectCreation).getLValue() or + a = + any(LocalVariableDeclAndInitExpr ass | ass.getRValue() instanceof ObjectCreation).getLValue() ) and not v = any(ForeachStmt fs).getVariable() and not v = any(BindingPatternExpr vpe).getVariableDeclExpr().getVariable() and diff --git a/csharp/ql/src/Likely Bugs/DangerousNonShortCircuitLogic.ql b/csharp/ql/src/Likely Bugs/DangerousNonShortCircuitLogic.ql index b980bfba1ae..8c77a6376d6 100644 --- a/csharp/ql/src/Likely Bugs/DangerousNonShortCircuitLogic.ql +++ b/csharp/ql/src/Likely Bugs/DangerousNonShortCircuitLogic.ql @@ -23,7 +23,6 @@ class NonShortCircuit extends BinaryBitwiseOperation { or this instanceof BitwiseOrExpr ) and - not exists(AssignBitwiseOperation abo | abo.getExpandedAssignment().getRValue() = this) and this.getLeftOperand().getType() instanceof BoolType and this.getRightOperand().getType() instanceof BoolType } diff --git a/csharp/ql/src/Likely Bugs/PossibleLossOfPrecision.ql b/csharp/ql/src/Likely Bugs/PossibleLossOfPrecision.ql index c66bbbeedbd..8b719bb92a5 100644 --- a/csharp/ql/src/Likely Bugs/PossibleLossOfPrecision.ql +++ b/csharp/ql/src/Likely Bugs/PossibleLossOfPrecision.ql @@ -27,13 +27,13 @@ predicate convertedToFloatOrDecimal(Expr e, Type t) { t instanceof DecimalType ) or - exists(BinaryArithmeticOperation op | + exists(BinaryOperation op | op.getAnOperand() = e and convertedToFloatOrDecimal(op, t) | - op instanceof AddExpr or - op instanceof SubExpr or - op instanceof MulExpr + op instanceof AddOperation or + op instanceof SubOperation or + op instanceof MulOperation ) } diff --git a/csharp/ql/src/Performance/StringConcatenationInLoop.ql b/csharp/ql/src/Performance/StringConcatenationInLoop.ql index a015771610d..3b3228588a4 100644 --- a/csharp/ql/src/Performance/StringConcatenationInLoop.ql +++ b/csharp/ql/src/Performance/StringConcatenationInLoop.ql @@ -23,7 +23,6 @@ class StringCat extends AddExpr { * where `v` is a simple variable (and not, for example, a property). */ predicate isSelfConcatAssignExpr(AssignExpr e, Variable v) { - not e = any(AssignAddExpr a).getExpandedAssignment() and exists(VariableAccess use | stringCatContains(e.getRValue(), use) and use.getTarget() = e.getTargetVariable() and diff --git a/csharp/ql/src/Security Features/CWE-119/LocalUnvalidatedArithmetic.ql b/csharp/ql/src/Security Features/CWE-119/LocalUnvalidatedArithmetic.ql index 57d6e500134..d5efb1304af 100644 --- a/csharp/ql/src/Security Features/CWE-119/LocalUnvalidatedArithmetic.ql +++ b/csharp/ql/src/Security Features/CWE-119/LocalUnvalidatedArithmetic.ql @@ -18,7 +18,7 @@ import csharp import semmle.code.csharp.controlflow.Guards -from AddExpr add, VirtualMethodCall taintSrc +from AddOperation add, VirtualMethodCall taintSrc where // `add` is performing pointer arithmetic add.getType() instanceof PointerType and diff --git a/csharp/ql/src/Security Features/InsecureRandomness.ql b/csharp/ql/src/Security Features/InsecureRandomness.ql index 2c2df7010c6..8237afdff13 100644 --- a/csharp/ql/src/Security Features/InsecureRandomness.ql +++ b/csharp/ql/src/Security Features/InsecureRandomness.ql @@ -89,11 +89,7 @@ module Random { e = any(SensitiveLibraryParameter v).getAnAssignedArgument() or // Assignment operation, e.g. += or similar - exists(AssignOperation ao | - ao.getRValue() = e and - // "expanded" assignments will be covered by simple assignment - not ao.hasExpandedAssignment() - | + exists(AssignOperation ao | ao.getRValue() = e | ao.getLValue() = any(SensitiveVariable v).getAnAccess() or ao.getLValue() = any(SensitiveProperty v).getAnAccess() or ao.getLValue() = any(SensitiveLibraryParameter v).getAnAccess() diff --git a/csharp/ql/src/experimental/CWE-918/RequestForgery.qll b/csharp/ql/src/experimental/CWE-918/RequestForgery.qll index 84ea534a50f..12af7fd7d33 100644 --- a/csharp/ql/src/experimental/CWE-918/RequestForgery.qll +++ b/csharp/ql/src/experimental/CWE-918/RequestForgery.qll @@ -211,7 +211,7 @@ module RequestForgery { } private predicate stringConcatStep(DataFlow::Node prev, DataFlow::Node succ) { - exists(AddExpr a | + exists(AddOperation a | a.getLeftOperand() = prev.asExpr() or a.getRightOperand() = prev.asExpr() and diff --git a/csharp/ql/src/experimental/Security Features/CWE-759/HashWithoutSalt.ql b/csharp/ql/src/experimental/Security Features/CWE-759/HashWithoutSalt.ql index f175723c099..d43050c2deb 100644 --- a/csharp/ql/src/experimental/Security Features/CWE-759/HashWithoutSalt.ql +++ b/csharp/ql/src/experimental/Security Features/CWE-759/HashWithoutSalt.ql @@ -174,7 +174,7 @@ module HashWithoutSaltConfig implements DataFlow::ConfigSig { mc.getAnArgument() = node.asExpr() ) or - exists(AddExpr e | node.asExpr() = e.getAnOperand()) // password+salt + exists(AddOperation e | node.asExpr() = e.getAnOperand()) // password+salt or exists(InterpolatedStringExpr e | node.asExpr() = e.getAnInsert()) or From 55516342b224c3a2f6ad6fc64624f3be4e1b714b Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 20 Mar 2026 13:01:46 +0100 Subject: [PATCH 147/185] C#: Add/update tests and expected output. --- .../arguments/argumentByName.expected | 10 +- .../arguments/argumentByParameter.expected | 4 +- .../arguments/argumentType.expected | 2 - .../arguments/parameterGetArguments.expected | 4 +- .../AssignOperationExpanded.expected | 3 - .../assignments/AssignOperationExpanded.ql | 22 -- .../controlflow/graph/BasicBlock.expected | 26 +- .../controlflow/graph/Condition.expected | 8 +- .../controlflow/graph/Dominance.expected | 346 +++++------------- .../graph/EnclosingCallable.expected | 88 +---- .../controlflow/graph/EntryElement.expected | 66 ---- .../controlflow/graph/ExitElement.expected | 171 +++------ .../controlflow/graph/NodeGraph.expected | 124 ++----- .../library-tests/csharp11/PrintAst.expected | 2 +- .../library-tests/csharp11/operators.expected | 3 +- .../csharp8/NullCoalescingAssignment.expected | 3 +- .../csharp8/NullCoalescingAssignment.ql | 4 +- .../NullCoalescingControlFlow.expected | 7 +- .../dataflow/local/DataFlowStep.expected | 5 +- .../dataflow/local/TaintTrackingStep.expected | 13 +- .../modulusanalysis/ModulusAnalysis.expected | 12 +- .../dataflow/nullcoalescing/NullCoalescing.cs | 35 ++ .../nullCoalescingFlow.expected | 70 ++++ .../nullcoalescing/nullCoalescingFlow.ql | 12 + .../signanalysis/SignAnalysis.expected | 3 +- .../dataflow/ssa/DefAdjacentRead.expected | 2 +- .../dataflow/ssa/SsaDefElement.expected | 10 +- .../dataflow/ssa/SsaExplicitDef.expected | 10 +- .../dispatch/CallContext.expected | 18 +- .../library-tests/dispatch/CallGraph.expected | 118 +++--- .../dispatch/GetADynamicTarget.expected | 116 +++--- .../library-tests/dispatch/ViableCallable.cs | 1 + .../dispatch/viableCallable.expected | 65 ++-- .../dynamic/DynamicOperatorCall.expected | 4 +- .../library-tests/dynamic/PrintAst.expected | 6 +- .../structuralComparison.expected | 64 ++-- .../SynchSetUnsynchGet/SynchSetUnsynchGet.cs | 21 ++ .../DeadStoreOfLocal.expected | 2 +- .../UselessNullCoalescingExpression.cs | 3 + .../UselessNullCoalescingExpression.expected | 2 + .../WriteOnlyContainer/WriteOnlyContainer.cs | 6 + 41 files changed, 605 insertions(+), 886 deletions(-) delete mode 100644 csharp/ql/test/library-tests/assignments/AssignOperationExpanded.expected delete mode 100644 csharp/ql/test/library-tests/assignments/AssignOperationExpanded.ql create mode 100644 csharp/ql/test/library-tests/dataflow/nullcoalescing/NullCoalescing.cs create mode 100644 csharp/ql/test/library-tests/dataflow/nullcoalescing/nullCoalescingFlow.expected create mode 100644 csharp/ql/test/library-tests/dataflow/nullcoalescing/nullCoalescingFlow.ql diff --git a/csharp/ql/test/library-tests/arguments/argumentByName.expected b/csharp/ql/test/library-tests/arguments/argumentByName.expected index 6fcb9021d17..065d7070312 100644 --- a/csharp/ql/test/library-tests/arguments/argumentByName.expected +++ b/csharp/ql/test/library-tests/arguments/argumentByName.expected @@ -33,14 +33,16 @@ | arguments.cs:59:16:59:25 | access to indexer | arguments.cs:59:21:59:21 | 3 | a | | arguments.cs:59:16:59:25 | access to indexer | arguments.cs:59:24:59:24 | 4 | b | | arguments.cs:59:16:59:25 | access to indexer | arguments.cs:59:34:59:34 | 6 | value | -| arguments.cs:61:9:61:12 | access to property Prop | arguments.cs:61:9:61:17 | ... + ... | value | +| arguments.cs:61:9:61:12 | access to property Prop | arguments.cs:61:9:61:17 | ... += ... | value | +| arguments.cs:61:9:61:17 | ... += ... | arguments.cs:61:9:61:12 | access to property Prop | left | +| arguments.cs:61:9:61:17 | ... += ... | arguments.cs:61:17:61:17 | 7 | right | | arguments.cs:62:9:62:18 | access to indexer | arguments.cs:62:14:62:14 | 8 | a | | arguments.cs:62:9:62:18 | access to indexer | arguments.cs:62:17:62:17 | 9 | b | -| arguments.cs:63:9:63:20 | access to indexer | arguments.cs:63:9:63:26 | ... + ... | value | -| arguments.cs:63:9:63:20 | access to indexer | arguments.cs:63:14:63:15 | 10 | a | +| arguments.cs:63:9:63:20 | access to indexer | arguments.cs:63:9:63:26 | ... += ... | value | | arguments.cs:63:9:63:20 | access to indexer | arguments.cs:63:14:63:15 | 10 | a | | arguments.cs:63:9:63:20 | access to indexer | arguments.cs:63:18:63:19 | 11 | b | -| arguments.cs:63:9:63:20 | access to indexer | arguments.cs:63:18:63:19 | 11 | b | +| arguments.cs:63:9:63:26 | ... += ... | arguments.cs:63:9:63:20 | access to indexer | left | +| arguments.cs:63:9:63:26 | ... += ... | arguments.cs:63:25:63:26 | 12 | right | | arguments.cs:65:16:65:27 | access to indexer | arguments.cs:65:21:65:22 | 15 | a | | arguments.cs:65:16:65:27 | access to indexer | arguments.cs:65:25:65:26 | 16 | b | | arguments.cs:76:9:76:31 | call to method f8`1 | arguments.cs:76:12:76:12 | 0 | o | diff --git a/csharp/ql/test/library-tests/arguments/argumentByParameter.expected b/csharp/ql/test/library-tests/arguments/argumentByParameter.expected index ac354d31e28..c0465859253 100644 --- a/csharp/ql/test/library-tests/arguments/argumentByParameter.expected +++ b/csharp/ql/test/library-tests/arguments/argumentByParameter.expected @@ -33,12 +33,12 @@ | arguments.cs:59:16:59:25 | access to indexer | arguments.cs:59:21:59:21 | 3 | arguments.cs:53:18:53:18 | a | | arguments.cs:59:16:59:25 | access to indexer | arguments.cs:59:24:59:24 | 4 | arguments.cs:53:25:53:25 | b | | arguments.cs:59:16:59:25 | access to indexer | arguments.cs:59:34:59:34 | 6 | arguments.cs:53:44:53:46 | value | -| arguments.cs:61:9:61:12 | access to property Prop | arguments.cs:61:9:61:17 | ... + ... | arguments.cs:51:21:51:23 | value | +| arguments.cs:61:9:61:12 | access to property Prop | arguments.cs:61:9:61:17 | ... += ... | arguments.cs:51:21:51:23 | value | | arguments.cs:62:9:62:18 | access to indexer | arguments.cs:62:14:62:14 | 8 | arguments.cs:53:18:53:18 | a | | arguments.cs:62:9:62:18 | access to indexer | arguments.cs:62:14:62:14 | 8 | arguments.cs:53:18:53:18 | a | | arguments.cs:62:9:62:18 | access to indexer | arguments.cs:62:17:62:17 | 9 | arguments.cs:53:25:53:25 | b | | arguments.cs:62:9:62:18 | access to indexer | arguments.cs:62:17:62:17 | 9 | arguments.cs:53:25:53:25 | b | -| arguments.cs:63:9:63:20 | access to indexer | arguments.cs:63:9:63:26 | ... + ... | arguments.cs:53:44:53:46 | value | +| arguments.cs:63:9:63:20 | access to indexer | arguments.cs:63:9:63:26 | ... += ... | arguments.cs:53:44:53:46 | value | | arguments.cs:63:9:63:20 | access to indexer | arguments.cs:63:14:63:15 | 10 | arguments.cs:53:18:53:18 | a | | arguments.cs:63:9:63:20 | access to indexer | arguments.cs:63:14:63:15 | 10 | arguments.cs:53:18:53:18 | a | | arguments.cs:63:9:63:20 | access to indexer | arguments.cs:63:18:63:19 | 11 | arguments.cs:53:25:53:25 | b | diff --git a/csharp/ql/test/library-tests/arguments/argumentType.expected b/csharp/ql/test/library-tests/arguments/argumentType.expected index 0dac7019345..fa148e657b4 100644 --- a/csharp/ql/test/library-tests/arguments/argumentType.expected +++ b/csharp/ql/test/library-tests/arguments/argumentType.expected @@ -36,8 +36,6 @@ | arguments.cs:62:14:62:14 | 8 | 0 | | arguments.cs:62:17:62:17 | 9 | 0 | | arguments.cs:63:14:63:15 | 10 | 0 | -| arguments.cs:63:14:63:15 | 10 | 0 | -| arguments.cs:63:18:63:19 | 11 | 0 | | arguments.cs:63:18:63:19 | 11 | 0 | | arguments.cs:64:22:64:23 | 13 | 0 | | arguments.cs:64:26:64:27 | 14 | 0 | diff --git a/csharp/ql/test/library-tests/arguments/parameterGetArguments.expected b/csharp/ql/test/library-tests/arguments/parameterGetArguments.expected index 6f25b07e2e5..9f830954efb 100644 --- a/csharp/ql/test/library-tests/arguments/parameterGetArguments.expected +++ b/csharp/ql/test/library-tests/arguments/parameterGetArguments.expected @@ -28,7 +28,7 @@ | arguments.cs:51:21:51:23 | value | arguments.cs:57:16:57:16 | 0 | | arguments.cs:51:21:51:23 | value | arguments.cs:58:16:58:25 | access to indexer | | arguments.cs:51:21:51:23 | value | arguments.cs:59:31:59:31 | 5 | -| arguments.cs:51:21:51:23 | value | arguments.cs:61:9:61:17 | ... + ... | +| arguments.cs:51:21:51:23 | value | arguments.cs:61:9:61:17 | ... += ... | | arguments.cs:53:18:53:18 | a | arguments.cs:58:21:58:21 | 1 | | arguments.cs:53:18:53:18 | a | arguments.cs:59:21:59:21 | 3 | | arguments.cs:53:18:53:18 | a | arguments.cs:62:14:62:14 | 8 | @@ -44,7 +44,7 @@ | arguments.cs:53:25:53:25 | b | arguments.cs:63:18:63:19 | 11 | | arguments.cs:53:25:53:25 | b | arguments.cs:65:25:65:26 | 16 | | arguments.cs:53:44:53:46 | value | arguments.cs:59:34:59:34 | 6 | -| arguments.cs:53:44:53:46 | value | arguments.cs:63:9:63:26 | ... + ... | +| arguments.cs:53:44:53:46 | value | arguments.cs:63:9:63:26 | ... += ... | | arguments.cs:74:20:74:20 | o | arguments.cs:76:12:76:12 | 0 | | arguments.cs:74:20:74:20 | o | arguments.cs:77:12:77:12 | 0 | | arguments.cs:74:20:74:20 | o | arguments.cs:78:12:78:12 | 0 | diff --git a/csharp/ql/test/library-tests/assignments/AssignOperationExpanded.expected b/csharp/ql/test/library-tests/assignments/AssignOperationExpanded.expected deleted file mode 100644 index bcc9d11c42f..00000000000 --- a/csharp/ql/test/library-tests/assignments/AssignOperationExpanded.expected +++ /dev/null @@ -1,3 +0,0 @@ -| Assignments.cs:6:9:6:14 | ... += ... | Assignments.cs:6:9:6:14 | ... = ... | Assignments.cs:6:9:6:9 | access to local variable x | Assignments.cs:6:9:6:14 | ... + ... | Assignments.cs:6:9:6:9 | access to local variable x | Assignments.cs:6:14:6:14 | 1 | -| Assignments.cs:9:9:9:14 | ... -= ... | Assignments.cs:9:9:9:14 | ... = ... | Assignments.cs:9:9:9:9 | access to local variable d | Assignments.cs:9:9:9:14 | dynamic call to operator - | Assignments.cs:9:9:9:9 | access to local variable d | Assignments.cs:9:14:9:14 | 2 | -| Assignments.cs:12:9:12:17 | ... += ... | Assignments.cs:12:9:12:17 | ... = ... | Assignments.cs:12:9:12:9 | access to local variable a | Assignments.cs:12:9:12:17 | call to operator + | Assignments.cs:12:9:12:9 | access to local variable a | Assignments.cs:12:14:12:17 | this access | diff --git a/csharp/ql/test/library-tests/assignments/AssignOperationExpanded.ql b/csharp/ql/test/library-tests/assignments/AssignOperationExpanded.ql deleted file mode 100644 index bd67776520f..00000000000 --- a/csharp/ql/test/library-tests/assignments/AssignOperationExpanded.ql +++ /dev/null @@ -1,22 +0,0 @@ -import csharp - -predicate getExpandedOperatorArgs(Expr e, Expr left, Expr right) { - e = - any(BinaryArithmeticOperation bo | - bo.getLeftOperand() = left and - bo.getRightOperand() = right - ) - or - e = - any(OperatorCall oc | - oc.getArgument(0) = left and - oc.getArgument(1) = right - ) -} - -from AssignOperation ao, AssignExpr ae, Expr op, Expr left, Expr right -where - ae = ao.getExpandedAssignment() and - op = ae.getRValue() and - getExpandedOperatorArgs(op, left, right) -select ao, ae, ae.getLValue(), op, left, right diff --git a/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected b/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected index 30f2b105155..9802f2b0195 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected @@ -7,11 +7,11 @@ | AccessorCalls.cs:19:10:19:11 | enter M2 | AccessorCalls.cs:19:10:19:11 | exit M2 | 42 | | AccessorCalls.cs:28:10:28:11 | enter M3 | AccessorCalls.cs:28:10:28:11 | exit M3 | 17 | | AccessorCalls.cs:35:10:35:11 | enter M4 | AccessorCalls.cs:35:10:35:11 | exit M4 | 20 | -| AccessorCalls.cs:42:10:42:11 | enter M5 | AccessorCalls.cs:42:10:42:11 | exit M5 | 34 | -| AccessorCalls.cs:49:10:49:11 | enter M6 | AccessorCalls.cs:49:10:49:11 | exit M6 | 43 | +| AccessorCalls.cs:42:10:42:11 | enter M5 | AccessorCalls.cs:42:10:42:11 | exit M5 | 24 | +| AccessorCalls.cs:49:10:49:11 | enter M6 | AccessorCalls.cs:49:10:49:11 | exit M6 | 30 | | AccessorCalls.cs:56:10:56:11 | enter M7 | AccessorCalls.cs:56:10:56:11 | exit M7 | 25 | | AccessorCalls.cs:61:10:61:11 | enter M8 | AccessorCalls.cs:61:10:61:11 | exit M8 | 31 | -| AccessorCalls.cs:66:10:66:11 | enter M9 | AccessorCalls.cs:66:10:66:11 | exit M9 | 58 | +| AccessorCalls.cs:66:10:66:11 | enter M9 | AccessorCalls.cs:66:10:66:11 | exit M9 | 51 | | 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 | @@ -164,7 +164,7 @@ | 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 | 7 | -| Assignments.cs:3:10:3:10 | enter M | Assignments.cs:3:10:3:10 | exit M | 34 | +| Assignments.cs:3:10:3:10 | enter M | Assignments.cs:3:10:3:10 | exit M | 31 | | 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 | | Assignments.cs:27:10:27:23 | enter SetParamSingle | Assignments.cs:27:10:27:23 | exit SetParamSingle | 7 | @@ -250,7 +250,6 @@ | ConditionalAccess.cs:42:9:42:11 | enter get_Item | ConditionalAccess.cs:42:9:42:11 | exit get_Item | 6 | | ConditionalAccess.cs:43:9:43:11 | enter set_Item | ConditionalAccess.cs:43:9:43:11 | exit set_Item | 4 | | ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | 4 | -| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:46:10:46:11 | exit M9 | 2 | | ConditionalAccess.cs:48:24:48:25 | 42 | ConditionalAccess.cs:48:12:48:25 | ... = ... | 3 | | ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:49:9:49:10 | access to parameter ca | 2 | | ConditionalAccess.cs:49:26:49:32 | "Hello" | ConditionalAccess.cs:49:12:49:32 | ... = ... | 3 | @@ -262,14 +261,11 @@ | ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:52:9:52:16 | access to property Prop | 1 | | ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:9:52:10 | access to parameter ca | 2 | | ConditionalAccess.cs:52:32:52:38 | "World" | ConditionalAccess.cs:52:18:52:38 | ... = ... | 3 | -| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | 1 | | ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:9:53:20 | access to field IntField | 1 | | ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | 2 | -| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:12:53:25 | ... = ... | 4 | -| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | 1 | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | 4 | | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | 1 | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | 2 | -| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:12:54:29 | ... = ... | 4 | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:46:10:46:11 | exit M9 | 4 | | ConditionalAccess.cs:60:26:60:38 | enter CommaJoinWith | ConditionalAccess.cs:60:26:60:38 | exit CommaJoinWith | 8 | | 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 | @@ -331,12 +327,12 @@ | Conditions.cs:97:17:97:20 | ...; | Conditions.cs:97:17:97:19 | ...++ | 3 | | Conditions.cs:99:16:99:16 | access to local variable x | Conditions.cs:86:9:86:10 | exit M7 | 4 | | Conditions.cs:102:12:102:13 | enter M8 | Conditions.cs:105:13:105:13 | access to parameter b | 8 | -| Conditions.cs:106:13:106:20 | ...; | Conditions.cs:106:13:106:19 | ... = ... | 5 | +| Conditions.cs:106:13:106:20 | ...; | Conditions.cs:106:13:106:19 | ... += ... | 4 | | Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:107:13:107:24 | ... > ... | 5 | | Conditions.cs:108:13:109:24 | if (...) ... | Conditions.cs:108:18:108:18 | access to parameter b | 2 | | Conditions.cs:108:17:108:18 | [false] !... | Conditions.cs:108:17:108:18 | [false] !... | 1 | | Conditions.cs:108:17:108:18 | [true] !... | Conditions.cs:108:17:108:18 | [true] !... | 1 | -| Conditions.cs:109:17:109:24 | ...; | Conditions.cs:109:17:109:23 | ... = ... | 5 | +| Conditions.cs:109:17:109:24 | ...; | Conditions.cs:109:17:109:23 | ... += ... | 4 | | Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:102:12:102:13 | exit M8 | 4 | | Conditions.cs:113:10:113:11 | enter M9 | Conditions.cs:116:18:116:22 | Int32 i = ... | 8 | | Conditions.cs:113:10:113:11 | exit M9 (normal) | Conditions.cs:113:10:113:11 | exit M9 | 2 | @@ -533,7 +529,7 @@ | Finally.cs:254:13:254:45 | ...; | Finally.cs:254:13:254:44 | call to method WriteLine | 3 | | Finally.cs:257:9:259:9 | {...} | Finally.cs:258:13:258:46 | call to method WriteLine | 4 | | Finally.cs:260:9:260:34 | ...; | Finally.cs:233:10:233:12 | exit M12 (normal) | 4 | -| Finally.cs:263:10:263:12 | enter M13 | Finally.cs:272:13:272:18 | ... = ... | 16 | +| Finally.cs:263:10:263:12 | enter M13 | Finally.cs:272:13:272:18 | ... += ... | 15 | | 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 | @@ -1130,7 +1126,7 @@ | cflow.cs:201:9:205:9 | {...} | cflow.cs:193:10:193:17 | exit Booleans (abnormal) | 5 | | cflow.cs:208:10:208:11 | enter Do | cflow.cs:210:9:221:36 | do ... while (...); | 3 | | cflow.cs:208:10:208:11 | exit Do (normal) | cflow.cs:208:10:208:11 | exit Do | 2 | -| cflow.cs:211:9:221:9 | {...} | cflow.cs:213:17:213:32 | ... > ... | 15 | +| cflow.cs:211:9:221:9 | {...} | cflow.cs:213:17:213:32 | ... > ... | 12 | | cflow.cs:214:13:216:13 | {...} | cflow.cs:215:17:215:25 | continue; | 2 | | cflow.cs:217:13:220:13 | if (...) ... | cflow.cs:217:17:217:32 | ... < ... | 6 | | cflow.cs:218:13:220:13 | {...} | cflow.cs:219:17:219:22 | break; | 2 | @@ -1138,7 +1134,7 @@ | cflow.cs:224:10:224:16 | enter Foreach | cflow.cs:226:27:226:64 | call to method Repeat | 5 | | cflow.cs:224:10:224:16 | exit Foreach (normal) | cflow.cs:224:10:224:16 | exit Foreach | 2 | | cflow.cs:226:9:237:9 | foreach (... ... in ...) ... | cflow.cs:226:9:237:9 | foreach (... ... in ...) ... | 1 | -| cflow.cs:226:22:226:22 | String x | cflow.cs:229:17:229:32 | ... > ... | 16 | +| cflow.cs:226:22:226:22 | String x | cflow.cs:229:17:229:32 | ... > ... | 13 | | cflow.cs:230:13:232:13 | {...} | cflow.cs:231:17:231:25 | continue; | 2 | | cflow.cs:233:13:236:13 | if (...) ... | cflow.cs:233:17:233:32 | ... < ... | 6 | | cflow.cs:234:13:236:13 | {...} | cflow.cs:235:17:235:22 | break; | 2 | diff --git a/csharp/ql/test/library-tests/controlflow/graph/Condition.expected b/csharp/ql/test/library-tests/controlflow/graph/Condition.expected index 3ef1d481abe..cda25b6abd1 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/Condition.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/Condition.expected @@ -100,14 +100,8 @@ conditionBlock | ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:52:32:52:38 | "World" | false | | ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:9:52:16 | access to property Prop | false | | ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:32:52:38 | "World" | false | -| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:20 | access to field IntField | false | -| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | false | | ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:20 | access to field IntField | false | -| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:25:53:25 | 1 | false | -| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | false | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | false | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | false | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:27:54:29 | "!" | false | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | false | | Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:6:13:6:16 | ...; | true | | Conditions.cs:7:9:8:16 | if (...) ... | Conditions.cs:7:13:7:16 | [false] !... | true | | Conditions.cs:7:9:8:16 | if (...) ... | Conditions.cs:7:13:7:16 | [true] !... | false | diff --git a/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected b/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected index 204092c6df2..072d874d8d4 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected @@ -129,77 +129,54 @@ dominance | AccessorCalls.cs:42:10:42:11 | enter M5 | AccessorCalls.cs:43:5:47:5 | {...} | | AccessorCalls.cs:42:10:42:11 | exit M5 (normal) | AccessorCalls.cs:42:10:42:11 | exit M5 | | AccessorCalls.cs:43:5:47:5 | {...} | AccessorCalls.cs:44:9:44:33 | ...; | -| AccessorCalls.cs:44:9:44:12 | this access | AccessorCalls.cs:44:9:44:12 | this access | | AccessorCalls.cs:44:9:44:12 | this access | AccessorCalls.cs:44:9:44:18 | access to field Field | -| AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:44:9:44:32 | ... = ... | | AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:44:23:44:26 | this access | -| AccessorCalls.cs:44:9:44:32 | ... + ... | AccessorCalls.cs:44:9:44:18 | access to field Field | -| AccessorCalls.cs:44:9:44:32 | ... = ... | AccessorCalls.cs:45:9:45:31 | ...; | +| AccessorCalls.cs:44:9:44:32 | ... += ... | AccessorCalls.cs:45:9:45:31 | ...; | | AccessorCalls.cs:44:9:44:33 | ...; | AccessorCalls.cs:44:9:44:12 | this access | | AccessorCalls.cs:44:23:44:26 | this access | AccessorCalls.cs:44:23:44:32 | access to field Field | -| AccessorCalls.cs:44:23:44:32 | access to field Field | AccessorCalls.cs:44:9:44:32 | ... + ... | -| AccessorCalls.cs:45:9:45:12 | this access | AccessorCalls.cs:45:9:45:12 | this access | +| AccessorCalls.cs:44:23:44:32 | access to field Field | AccessorCalls.cs:44:9:44:32 | ... += ... | | AccessorCalls.cs:45:9:45:12 | this access | AccessorCalls.cs:45:9:45:17 | access to property Prop | -| AccessorCalls.cs:45:9:45:17 | access to property Prop | AccessorCalls.cs:45:9:45:30 | ... = ... | | AccessorCalls.cs:45:9:45:17 | access to property Prop | AccessorCalls.cs:45:22:45:25 | this access | -| AccessorCalls.cs:45:9:45:30 | ... + ... | AccessorCalls.cs:45:9:45:17 | access to property Prop | -| AccessorCalls.cs:45:9:45:30 | ... = ... | AccessorCalls.cs:46:9:46:27 | ...; | +| AccessorCalls.cs:45:9:45:30 | ... += ... | AccessorCalls.cs:46:9:46:27 | ...; | | AccessorCalls.cs:45:9:45:31 | ...; | AccessorCalls.cs:45:9:45:12 | this access | | AccessorCalls.cs:45:22:45:25 | this access | AccessorCalls.cs:45:22:45:30 | access to property Prop | -| AccessorCalls.cs:45:22:45:30 | access to property Prop | AccessorCalls.cs:45:9:45:30 | ... + ... | +| AccessorCalls.cs:45:22:45:30 | access to property Prop | AccessorCalls.cs:45:9:45:30 | ... += ... | | AccessorCalls.cs:46:9:46:12 | this access | AccessorCalls.cs:46:14:46:14 | 0 | -| AccessorCalls.cs:46:9:46:12 | this access | AccessorCalls.cs:46:14:46:14 | 0 | -| AccessorCalls.cs:46:9:46:15 | access to indexer | AccessorCalls.cs:46:9:46:26 | ... = ... | | AccessorCalls.cs:46:9:46:15 | access to indexer | AccessorCalls.cs:46:20:46:23 | this access | -| AccessorCalls.cs:46:9:46:26 | ... + ... | AccessorCalls.cs:46:9:46:15 | access to indexer | -| AccessorCalls.cs:46:9:46:26 | ... = ... | AccessorCalls.cs:42:10:42:11 | exit M5 (normal) | +| AccessorCalls.cs:46:9:46:26 | ... += ... | AccessorCalls.cs:42:10:42:11 | exit M5 (normal) | | AccessorCalls.cs:46:9:46:27 | ...; | AccessorCalls.cs:46:9:46:12 | this access | -| AccessorCalls.cs:46:14:46:14 | 0 | AccessorCalls.cs:46:9:46:12 | this access | | AccessorCalls.cs:46:14:46:14 | 0 | AccessorCalls.cs:46:9:46:15 | access to indexer | | AccessorCalls.cs:46:20:46:23 | this access | AccessorCalls.cs:46:25:46:25 | 0 | -| AccessorCalls.cs:46:20:46:26 | access to indexer | AccessorCalls.cs:46:9:46:26 | ... + ... | +| AccessorCalls.cs:46:20:46:26 | access to indexer | AccessorCalls.cs:46:9:46:26 | ... += ... | | AccessorCalls.cs:46:25:46:25 | 0 | AccessorCalls.cs:46:20:46:26 | access to indexer | | AccessorCalls.cs:49:10:49:11 | enter M6 | AccessorCalls.cs:50:5:54:5 | {...} | | AccessorCalls.cs:49:10:49:11 | exit M6 (normal) | AccessorCalls.cs:49:10:49:11 | exit M6 | | AccessorCalls.cs:50:5:54:5 | {...} | AccessorCalls.cs:51:9:51:37 | ...; | | AccessorCalls.cs:51:9:51:12 | this access | AccessorCalls.cs:51:9:51:14 | access to field x | -| AccessorCalls.cs:51:9:51:12 | this access | AccessorCalls.cs:51:9:51:14 | access to field x | -| AccessorCalls.cs:51:9:51:14 | access to field x | AccessorCalls.cs:51:9:51:12 | this access | | AccessorCalls.cs:51:9:51:14 | access to field x | AccessorCalls.cs:51:9:51:20 | access to field Field | -| AccessorCalls.cs:51:9:51:20 | access to field Field | AccessorCalls.cs:51:9:51:36 | ... = ... | | AccessorCalls.cs:51:9:51:20 | access to field Field | AccessorCalls.cs:51:25:51:28 | this access | -| AccessorCalls.cs:51:9:51:36 | ... + ... | AccessorCalls.cs:51:9:51:20 | access to field Field | -| AccessorCalls.cs:51:9:51:36 | ... = ... | AccessorCalls.cs:52:9:52:35 | ...; | +| AccessorCalls.cs:51:9:51:36 | ... += ... | AccessorCalls.cs:52:9:52:35 | ...; | | AccessorCalls.cs:51:9:51:37 | ...; | AccessorCalls.cs:51:9:51:12 | this access | | AccessorCalls.cs:51:25:51:28 | this access | AccessorCalls.cs:51:25:51:30 | access to field x | | AccessorCalls.cs:51:25:51:30 | access to field x | AccessorCalls.cs:51:25:51:36 | access to field Field | -| AccessorCalls.cs:51:25:51:36 | access to field Field | AccessorCalls.cs:51:9:51:36 | ... + ... | +| AccessorCalls.cs:51:25:51:36 | access to field Field | AccessorCalls.cs:51:9:51:36 | ... += ... | | AccessorCalls.cs:52:9:52:12 | this access | AccessorCalls.cs:52:9:52:14 | access to field x | -| AccessorCalls.cs:52:9:52:12 | this access | AccessorCalls.cs:52:9:52:14 | access to field x | -| AccessorCalls.cs:52:9:52:14 | access to field x | AccessorCalls.cs:52:9:52:12 | this access | | AccessorCalls.cs:52:9:52:14 | access to field x | AccessorCalls.cs:52:9:52:19 | access to property Prop | -| AccessorCalls.cs:52:9:52:19 | access to property Prop | AccessorCalls.cs:52:9:52:34 | ... = ... | | AccessorCalls.cs:52:9:52:19 | access to property Prop | AccessorCalls.cs:52:24:52:27 | this access | -| AccessorCalls.cs:52:9:52:34 | ... + ... | AccessorCalls.cs:52:9:52:19 | access to property Prop | -| AccessorCalls.cs:52:9:52:34 | ... = ... | AccessorCalls.cs:53:9:53:31 | ...; | +| AccessorCalls.cs:52:9:52:34 | ... += ... | AccessorCalls.cs:53:9:53:31 | ...; | | AccessorCalls.cs:52:9:52:35 | ...; | AccessorCalls.cs:52:9:52:12 | this access | | AccessorCalls.cs:52:24:52:27 | this access | AccessorCalls.cs:52:24:52:29 | access to field x | | AccessorCalls.cs:52:24:52:29 | access to field x | AccessorCalls.cs:52:24:52:34 | access to property Prop | -| AccessorCalls.cs:52:24:52:34 | access to property Prop | AccessorCalls.cs:52:9:52:34 | ... + ... | -| AccessorCalls.cs:53:9:53:12 | this access | AccessorCalls.cs:53:9:53:14 | access to field x | +| AccessorCalls.cs:52:24:52:34 | access to property Prop | AccessorCalls.cs:52:9:52:34 | ... += ... | | AccessorCalls.cs:53:9:53:12 | this access | AccessorCalls.cs:53:9:53:14 | access to field x | | AccessorCalls.cs:53:9:53:14 | access to field x | AccessorCalls.cs:53:16:53:16 | 0 | -| AccessorCalls.cs:53:9:53:14 | access to field x | AccessorCalls.cs:53:16:53:16 | 0 | -| AccessorCalls.cs:53:9:53:17 | access to indexer | AccessorCalls.cs:53:9:53:30 | ... = ... | | AccessorCalls.cs:53:9:53:17 | access to indexer | AccessorCalls.cs:53:22:53:25 | this access | -| AccessorCalls.cs:53:9:53:30 | ... + ... | AccessorCalls.cs:53:9:53:17 | access to indexer | -| AccessorCalls.cs:53:9:53:30 | ... = ... | AccessorCalls.cs:49:10:49:11 | exit M6 (normal) | +| AccessorCalls.cs:53:9:53:30 | ... += ... | AccessorCalls.cs:49:10:49:11 | exit M6 (normal) | | AccessorCalls.cs:53:9:53:31 | ...; | AccessorCalls.cs:53:9:53:12 | this access | -| AccessorCalls.cs:53:16:53:16 | 0 | AccessorCalls.cs:53:9:53:12 | this access | | AccessorCalls.cs:53:16:53:16 | 0 | AccessorCalls.cs:53:9:53:17 | access to indexer | | AccessorCalls.cs:53:22:53:25 | this access | AccessorCalls.cs:53:22:53:27 | access to field x | | AccessorCalls.cs:53:22:53:27 | access to field x | AccessorCalls.cs:53:29:53:29 | 0 | -| AccessorCalls.cs:53:22:53:30 | access to indexer | AccessorCalls.cs:53:9:53:30 | ... + ... | +| AccessorCalls.cs:53:22:53:30 | access to indexer | AccessorCalls.cs:53:9:53:30 | ... += ... | | AccessorCalls.cs:53:29:53:29 | 0 | AccessorCalls.cs:53:22:53:30 | access to indexer | | AccessorCalls.cs:56:10:56:11 | enter M7 | AccessorCalls.cs:57:5:59:5 | {...} | | AccessorCalls.cs:56:10:56:11 | exit M7 (normal) | AccessorCalls.cs:56:10:56:11 | exit M7 | @@ -271,25 +248,18 @@ dominance | AccessorCalls.cs:70:9:70:19 | dynamic access to member MaybeProp | AccessorCalls.cs:70:9:70:21 | dynamic call to operator ++ | | AccessorCalls.cs:70:9:70:21 | dynamic call to operator ++ | AccessorCalls.cs:71:9:71:26 | ...; | | AccessorCalls.cs:70:9:70:22 | ...; | AccessorCalls.cs:70:9:70:9 | access to local variable d | -| AccessorCalls.cs:71:9:71:9 | access to local variable d | AccessorCalls.cs:71:9:71:9 | access to local variable d | | AccessorCalls.cs:71:9:71:9 | access to local variable d | AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | -| AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | AccessorCalls.cs:71:9:71:25 | ... = ... | | AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | AccessorCalls.cs:71:25:71:25 | access to parameter e | -| AccessorCalls.cs:71:9:71:25 | ... = ... | AccessorCalls.cs:72:9:72:21 | ...; | -| AccessorCalls.cs:71:9:71:25 | dynamic call to operator + | AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | +| AccessorCalls.cs:71:9:71:25 | ... += ... | AccessorCalls.cs:72:9:72:21 | ...; | | AccessorCalls.cs:71:9:71:26 | ...; | AccessorCalls.cs:71:9:71:9 | access to local variable d | -| AccessorCalls.cs:71:25:71:25 | access to parameter e | AccessorCalls.cs:71:9:71:25 | dynamic call to operator + | +| AccessorCalls.cs:71:25:71:25 | access to parameter e | AccessorCalls.cs:71:9:71:25 | ... += ... | | AccessorCalls.cs:72:9:72:9 | access to local variable d | AccessorCalls.cs:72:11:72:11 | 0 | -| AccessorCalls.cs:72:9:72:9 | access to local variable d | AccessorCalls.cs:72:11:72:11 | 0 | -| AccessorCalls.cs:72:9:72:12 | dynamic access to element | AccessorCalls.cs:72:9:72:20 | ... = ... | | AccessorCalls.cs:72:9:72:12 | dynamic access to element | AccessorCalls.cs:72:17:72:17 | access to local variable d | -| AccessorCalls.cs:72:9:72:20 | ... = ... | AccessorCalls.cs:73:9:73:84 | ...; | -| AccessorCalls.cs:72:9:72:20 | dynamic call to operator + | AccessorCalls.cs:72:9:72:12 | dynamic access to element | +| AccessorCalls.cs:72:9:72:20 | ... += ... | AccessorCalls.cs:73:9:73:84 | ...; | | AccessorCalls.cs:72:9:72:21 | ...; | AccessorCalls.cs:72:9:72:9 | access to local variable d | -| AccessorCalls.cs:72:11:72:11 | 0 | AccessorCalls.cs:72:9:72:9 | access to local variable d | | AccessorCalls.cs:72:11:72:11 | 0 | AccessorCalls.cs:72:9:72:12 | dynamic access to element | | AccessorCalls.cs:72:17:72:17 | access to local variable d | AccessorCalls.cs:72:19:72:19 | 1 | -| AccessorCalls.cs:72:17:72:20 | dynamic access to element | AccessorCalls.cs:72:9:72:20 | dynamic call to operator + | +| AccessorCalls.cs:72:17:72:20 | dynamic access to element | AccessorCalls.cs:72:9:72:20 | ... += ... | | AccessorCalls.cs:72:19:72:19 | 1 | AccessorCalls.cs:72:17:72:20 | dynamic access to element | | AccessorCalls.cs:73:9:73:44 | (..., ...) | AccessorCalls.cs:73:49:73:49 | access to local variable d | | AccessorCalls.cs:73:9:73:83 | ... = ... | AccessorCalls.cs:66:10:66:11 | exit M9 (normal) | @@ -732,27 +702,24 @@ dominance | Assignments.cs:5:13:5:17 | Int32 x = ... | Assignments.cs:6:9:6:15 | ...; | | Assignments.cs:5:17:5:17 | 0 | Assignments.cs:5:13:5:17 | Int32 x = ... | | Assignments.cs:6:9:6:9 | access to local variable x | Assignments.cs:6:14:6:14 | 1 | -| Assignments.cs:6:9:6:14 | ... + ... | Assignments.cs:6:9:6:14 | ... = ... | -| Assignments.cs:6:9:6:14 | ... = ... | Assignments.cs:8:9:8:22 | ... ...; | +| Assignments.cs:6:9:6:14 | ... += ... | Assignments.cs:8:9:8:22 | ... ...; | | Assignments.cs:6:9:6:15 | ...; | Assignments.cs:6:9:6:9 | access to local variable x | -| Assignments.cs:6:14:6:14 | 1 | Assignments.cs:6:9:6:14 | ... + ... | +| Assignments.cs:6:14:6:14 | 1 | Assignments.cs:6:9:6:14 | ... += ... | | Assignments.cs:8:9:8:22 | ... ...; | Assignments.cs:8:21:8:21 | 0 | | Assignments.cs:8:17:8:21 | dynamic d = ... | Assignments.cs:9:9:9:15 | ...; | | Assignments.cs:8:21:8:21 | 0 | Assignments.cs:8:21:8:21 | (...) ... | | Assignments.cs:8:21:8:21 | (...) ... | Assignments.cs:8:17:8:21 | dynamic d = ... | | Assignments.cs:9:9:9:9 | access to local variable d | Assignments.cs:9:14:9:14 | 2 | -| Assignments.cs:9:9:9:14 | ... = ... | Assignments.cs:11:9:11:34 | ... ...; | -| Assignments.cs:9:9:9:14 | dynamic call to operator - | Assignments.cs:9:9:9:14 | ... = ... | +| Assignments.cs:9:9:9:14 | ... -= ... | Assignments.cs:11:9:11:34 | ... ...; | | Assignments.cs:9:9:9:15 | ...; | Assignments.cs:9:9:9:9 | access to local variable d | -| Assignments.cs:9:14:9:14 | 2 | Assignments.cs:9:9:9:14 | dynamic call to operator - | +| Assignments.cs:9:14:9:14 | 2 | Assignments.cs:9:9:9:14 | ... -= ... | | Assignments.cs:11:9:11:34 | ... ...; | Assignments.cs:11:17:11:33 | object creation of type Assignments | | Assignments.cs:11:13:11:33 | Assignments a = ... | Assignments.cs:12:9:12:18 | ...; | | Assignments.cs:11:17:11:33 | object creation of type Assignments | Assignments.cs:11:13:11:33 | Assignments a = ... | | Assignments.cs:12:9:12:9 | access to local variable a | Assignments.cs:12:14:12:17 | this access | -| Assignments.cs:12:9:12:17 | ... = ... | Assignments.cs:14:9:14:36 | ...; | -| Assignments.cs:12:9:12:17 | call to operator + | Assignments.cs:12:9:12:17 | ... = ... | +| Assignments.cs:12:9:12:17 | ... += ... | Assignments.cs:14:9:14:36 | ...; | | Assignments.cs:12:9:12:18 | ...; | Assignments.cs:12:9:12:9 | access to local variable a | -| Assignments.cs:12:14:12:17 | this access | Assignments.cs:12:9:12:17 | call to operator + | +| Assignments.cs:12:14:12:17 | this access | Assignments.cs:12:9:12:17 | ... += ... | | Assignments.cs:14:9:14:13 | access to event Event | Assignments.cs:14:9:14:35 | ... += ... | | Assignments.cs:14:9:14:13 | this access | Assignments.cs:14:18:14:35 | (...) => ... | | Assignments.cs:14:9:14:35 | ... += ... | Assignments.cs:3:10:3:10 | exit M (normal) | @@ -1058,22 +1025,16 @@ dominance | ConditionalAccess.cs:52:9:52:28 | access to property StringProp | ConditionalAccess.cs:52:18:52:38 | ... = ... | | ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:9:52:10 | access to parameter ca | | ConditionalAccess.cs:52:32:52:38 | "World" | ConditionalAccess.cs:52:9:52:28 | access to property StringProp | -| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:20 | access to field IntField | | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:25:53:25 | 1 | -| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:30 | ...; | -| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:12:53:25 | ... = ... | | ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | -| ConditionalAccess.cs:53:12:53:25 | ... - ... | ConditionalAccess.cs:53:9:53:20 | access to field IntField | -| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:12:53:25 | ... - ... | -| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | -| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | +| ConditionalAccess.cs:53:12:53:25 | ... -= ... | ConditionalAccess.cs:54:9:54:30 | ...; | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:12:53:25 | ... -= ... | | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:27:54:29 | "!" | -| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:12:54:29 | ... = ... | | ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | -| ConditionalAccess.cs:54:12:54:29 | ... + ... | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | -| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:12:54:29 | ... + ... | +| ConditionalAccess.cs:54:12:54:29 | ... += ... | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:12:54:29 | ... += ... | | ConditionalAccess.cs:60:26:60:38 | enter CommaJoinWith | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | | ConditionalAccess.cs:60:26:60:38 | exit CommaJoinWith (normal) | ConditionalAccess.cs:60:26:60:38 | exit CommaJoinWith | | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | ConditionalAccess.cs:60:75:60:78 | ", " | @@ -1295,9 +1256,8 @@ dominance | Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:106:13:106:20 | ...; | | Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:107:9:109:24 | if (...) ... | | Conditions.cs:106:13:106:13 | access to local variable x | Conditions.cs:106:18:106:19 | "" | -| Conditions.cs:106:13:106:19 | ... + ... | Conditions.cs:106:13:106:19 | ... = ... | | Conditions.cs:106:13:106:20 | ...; | Conditions.cs:106:13:106:13 | access to local variable x | -| Conditions.cs:106:18:106:19 | "" | Conditions.cs:106:13:106:19 | ... + ... | +| Conditions.cs:106:18:106:19 | "" | Conditions.cs:106:13:106:19 | ... += ... | | Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:107:13:107:13 | access to local variable x | | Conditions.cs:107:13:107:13 | access to local variable x | Conditions.cs:107:13:107:20 | access to property Length | | Conditions.cs:107:13:107:20 | access to property Length | Conditions.cs:107:24:107:24 | 0 | @@ -1309,9 +1269,8 @@ dominance | Conditions.cs:108:18:108:18 | access to parameter b | Conditions.cs:108:17:108:18 | [false] !... | | Conditions.cs:108:18:108:18 | access to parameter b | Conditions.cs:108:17:108:18 | [true] !... | | Conditions.cs:109:17:109:17 | access to local variable x | Conditions.cs:109:22:109:23 | "" | -| Conditions.cs:109:17:109:23 | ... + ... | Conditions.cs:109:17:109:23 | ... = ... | | Conditions.cs:109:17:109:24 | ...; | Conditions.cs:109:17:109:17 | access to local variable x | -| Conditions.cs:109:22:109:23 | "" | Conditions.cs:109:17:109:23 | ... + ... | +| Conditions.cs:109:22:109:23 | "" | Conditions.cs:109:17:109:23 | ... += ... | | Conditions.cs:110:9:110:17 | return ...; | Conditions.cs:102:12:102:13 | exit M8 (normal) | | Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:110:9:110:17 | return ...; | | Conditions.cs:113:10:113:11 | enter M9 | Conditions.cs:114:5:124:5 | {...} | @@ -1939,11 +1898,10 @@ dominance | Finally.cs:271:13:271:35 | ...; | Finally.cs:271:31:271:33 | "3" | | Finally.cs:271:31:271:33 | "3" | Finally.cs:271:13:271:34 | call to method WriteLine | | Finally.cs:272:13:272:13 | access to parameter i | Finally.cs:272:18:272:18 | 3 | -| Finally.cs:272:13:272:18 | ... + ... | Finally.cs:272:13:272:18 | ... = ... | -| Finally.cs:272:13:272:18 | ... = ... | Finally.cs:263:10:263:12 | exit M13 (abnormal) | -| Finally.cs:272:13:272:18 | ... = ... | Finally.cs:263:10:263:12 | exit M13 (normal) | +| Finally.cs:272:13:272:18 | ... += ... | Finally.cs:263:10:263:12 | exit M13 (abnormal) | +| Finally.cs:272:13:272:18 | ... += ... | Finally.cs:263:10:263:12 | exit M13 (normal) | | 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 | ... + ... | +| 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 | 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 | @@ -3819,14 +3777,11 @@ dominance | cflow.cs:209:5:222:5 | {...} | cflow.cs:210:9:221:36 | do ... while (...); | | cflow.cs:210:9:221:36 | do ... while (...); | cflow.cs:211:9:221:9 | {...} | | cflow.cs:211:9:221:9 | {...} | cflow.cs:212:13:212:25 | ...; | -| cflow.cs:212:13:212:17 | access to field Field | cflow.cs:212:13:212:24 | ... = ... | | cflow.cs:212:13:212:17 | access to field Field | cflow.cs:212:22:212:24 | "a" | | cflow.cs:212:13:212:17 | this access | cflow.cs:212:13:212:17 | access to field Field | -| cflow.cs:212:13:212:17 | this access | cflow.cs:212:13:212:17 | this access | -| cflow.cs:212:13:212:24 | ... + ... | cflow.cs:212:13:212:17 | access to field Field | -| cflow.cs:212:13:212:24 | ... = ... | cflow.cs:213:13:216:13 | if (...) ... | +| cflow.cs:212:13:212:24 | ... += ... | cflow.cs:213:13:216:13 | if (...) ... | | cflow.cs:212:13:212:25 | ...; | cflow.cs:212:13:212:17 | this access | -| cflow.cs:212:22:212:24 | "a" | cflow.cs:212:13:212:24 | ... + ... | +| cflow.cs:212:22:212:24 | "a" | cflow.cs:212:13:212:24 | ... += ... | | cflow.cs:213:13:216:13 | if (...) ... | cflow.cs:213:17:213:21 | this access | | cflow.cs:213:17:213:21 | access to field Field | cflow.cs:213:17:213:28 | access to property Length | | cflow.cs:213:17:213:21 | this access | cflow.cs:213:17:213:21 | access to field Field | @@ -3856,14 +3811,11 @@ dominance | cflow.cs:226:57:226:59 | "a" | cflow.cs:226:62:226:63 | 10 | | cflow.cs:226:62:226:63 | 10 | cflow.cs:226:27:226:64 | call to method Repeat | | cflow.cs:227:9:237:9 | {...} | cflow.cs:228:13:228:23 | ...; | -| cflow.cs:228:13:228:17 | access to field Field | cflow.cs:228:13:228:22 | ... = ... | | cflow.cs:228:13:228:17 | access to field Field | cflow.cs:228:22:228:22 | access to local variable x | | cflow.cs:228:13:228:17 | this access | cflow.cs:228:13:228:17 | access to field Field | -| cflow.cs:228:13:228:17 | this access | cflow.cs:228:13:228:17 | this access | -| cflow.cs:228:13:228:22 | ... + ... | cflow.cs:228:13:228:17 | access to field Field | -| cflow.cs:228:13:228:22 | ... = ... | cflow.cs:229:13:232:13 | if (...) ... | +| cflow.cs:228:13:228:22 | ... += ... | cflow.cs:229:13:232:13 | if (...) ... | | cflow.cs:228:13:228:23 | ...; | cflow.cs:228:13:228:17 | this access | -| cflow.cs:228:22:228:22 | access to local variable x | cflow.cs:228:13:228:22 | ... + ... | +| cflow.cs:228:22:228:22 | access to local variable x | cflow.cs:228:13:228:22 | ... += ... | | cflow.cs:229:13:232:13 | if (...) ... | cflow.cs:229:17:229:21 | this access | | cflow.cs:229:17:229:21 | access to field Field | cflow.cs:229:17:229:28 | access to property Length | | cflow.cs:229:17:229:21 | this access | cflow.cs:229:17:229:21 | access to field Field | @@ -4138,75 +4090,52 @@ postDominance | AccessorCalls.cs:39:9:39:20 | ...; | AccessorCalls.cs:38:9:38:21 | ...++ | | AccessorCalls.cs:39:16:39:16 | 0 | AccessorCalls.cs:39:9:39:14 | access to field x | | AccessorCalls.cs:42:10:42:11 | exit M5 | AccessorCalls.cs:42:10:42:11 | exit M5 (normal) | -| AccessorCalls.cs:42:10:42:11 | exit M5 (normal) | AccessorCalls.cs:46:9:46:26 | ... = ... | +| AccessorCalls.cs:42:10:42:11 | exit M5 (normal) | AccessorCalls.cs:46:9:46:26 | ... += ... | | AccessorCalls.cs:43:5:47:5 | {...} | AccessorCalls.cs:42:10:42:11 | enter M5 | -| AccessorCalls.cs:44:9:44:12 | this access | AccessorCalls.cs:44:9:44:12 | this access | | AccessorCalls.cs:44:9:44:12 | this access | AccessorCalls.cs:44:9:44:33 | ...; | | AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:44:9:44:12 | this access | -| AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:44:9:44:32 | ... + ... | -| AccessorCalls.cs:44:9:44:32 | ... + ... | AccessorCalls.cs:44:23:44:32 | access to field Field | -| AccessorCalls.cs:44:9:44:32 | ... = ... | AccessorCalls.cs:44:9:44:18 | access to field Field | +| AccessorCalls.cs:44:9:44:32 | ... += ... | AccessorCalls.cs:44:23:44:32 | access to field Field | | AccessorCalls.cs:44:9:44:33 | ...; | AccessorCalls.cs:43:5:47:5 | {...} | | AccessorCalls.cs:44:23:44:26 | this access | AccessorCalls.cs:44:9:44:18 | access to field Field | | AccessorCalls.cs:44:23:44:32 | access to field Field | AccessorCalls.cs:44:23:44:26 | this access | -| AccessorCalls.cs:45:9:45:12 | this access | AccessorCalls.cs:45:9:45:12 | this access | | AccessorCalls.cs:45:9:45:12 | this access | AccessorCalls.cs:45:9:45:31 | ...; | | AccessorCalls.cs:45:9:45:17 | access to property Prop | AccessorCalls.cs:45:9:45:12 | this access | -| AccessorCalls.cs:45:9:45:17 | access to property Prop | AccessorCalls.cs:45:9:45:30 | ... + ... | -| AccessorCalls.cs:45:9:45:30 | ... + ... | AccessorCalls.cs:45:22:45:30 | access to property Prop | -| AccessorCalls.cs:45:9:45:30 | ... = ... | AccessorCalls.cs:45:9:45:17 | access to property Prop | -| AccessorCalls.cs:45:9:45:31 | ...; | AccessorCalls.cs:44:9:44:32 | ... = ... | +| AccessorCalls.cs:45:9:45:30 | ... += ... | AccessorCalls.cs:45:22:45:30 | access to property Prop | +| AccessorCalls.cs:45:9:45:31 | ...; | AccessorCalls.cs:44:9:44:32 | ... += ... | | AccessorCalls.cs:45:22:45:25 | this access | AccessorCalls.cs:45:9:45:17 | access to property Prop | | AccessorCalls.cs:45:22:45:30 | access to property Prop | AccessorCalls.cs:45:22:45:25 | this access | | AccessorCalls.cs:46:9:46:12 | this access | AccessorCalls.cs:46:9:46:27 | ...; | -| AccessorCalls.cs:46:9:46:12 | this access | AccessorCalls.cs:46:14:46:14 | 0 | -| AccessorCalls.cs:46:9:46:15 | access to indexer | AccessorCalls.cs:46:9:46:26 | ... + ... | | AccessorCalls.cs:46:9:46:15 | access to indexer | AccessorCalls.cs:46:14:46:14 | 0 | -| AccessorCalls.cs:46:9:46:26 | ... + ... | AccessorCalls.cs:46:20:46:26 | access to indexer | -| AccessorCalls.cs:46:9:46:26 | ... = ... | AccessorCalls.cs:46:9:46:15 | access to indexer | -| AccessorCalls.cs:46:9:46:27 | ...; | AccessorCalls.cs:45:9:45:30 | ... = ... | -| AccessorCalls.cs:46:14:46:14 | 0 | AccessorCalls.cs:46:9:46:12 | this access | +| AccessorCalls.cs:46:9:46:26 | ... += ... | AccessorCalls.cs:46:20:46:26 | access to indexer | +| AccessorCalls.cs:46:9:46:27 | ...; | AccessorCalls.cs:45:9:45:30 | ... += ... | | AccessorCalls.cs:46:14:46:14 | 0 | AccessorCalls.cs:46:9:46:12 | this access | | AccessorCalls.cs:46:20:46:23 | this access | AccessorCalls.cs:46:9:46:15 | access to indexer | | AccessorCalls.cs:46:20:46:26 | access to indexer | AccessorCalls.cs:46:25:46:25 | 0 | | AccessorCalls.cs:46:25:46:25 | 0 | AccessorCalls.cs:46:20:46:23 | this access | | AccessorCalls.cs:49:10:49:11 | exit M6 | AccessorCalls.cs:49:10:49:11 | exit M6 (normal) | -| AccessorCalls.cs:49:10:49:11 | exit M6 (normal) | AccessorCalls.cs:53:9:53:30 | ... = ... | +| AccessorCalls.cs:49:10:49:11 | exit M6 (normal) | AccessorCalls.cs:53:9:53:30 | ... += ... | | AccessorCalls.cs:50:5:54:5 | {...} | AccessorCalls.cs:49:10:49:11 | enter M6 | -| AccessorCalls.cs:51:9:51:12 | this access | AccessorCalls.cs:51:9:51:14 | access to field x | | AccessorCalls.cs:51:9:51:12 | this access | AccessorCalls.cs:51:9:51:37 | ...; | | AccessorCalls.cs:51:9:51:14 | access to field x | AccessorCalls.cs:51:9:51:12 | this access | -| AccessorCalls.cs:51:9:51:14 | access to field x | AccessorCalls.cs:51:9:51:12 | this access | | AccessorCalls.cs:51:9:51:20 | access to field Field | AccessorCalls.cs:51:9:51:14 | access to field x | -| AccessorCalls.cs:51:9:51:20 | access to field Field | AccessorCalls.cs:51:9:51:36 | ... + ... | -| AccessorCalls.cs:51:9:51:36 | ... + ... | AccessorCalls.cs:51:25:51:36 | access to field Field | -| AccessorCalls.cs:51:9:51:36 | ... = ... | AccessorCalls.cs:51:9:51:20 | access to field Field | +| AccessorCalls.cs:51:9:51:36 | ... += ... | AccessorCalls.cs:51:25:51:36 | access to field Field | | AccessorCalls.cs:51:9:51:37 | ...; | AccessorCalls.cs:50:5:54:5 | {...} | | AccessorCalls.cs:51:25:51:28 | this access | AccessorCalls.cs:51:9:51:20 | access to field Field | | AccessorCalls.cs:51:25:51:30 | access to field x | AccessorCalls.cs:51:25:51:28 | this access | | AccessorCalls.cs:51:25:51:36 | access to field Field | AccessorCalls.cs:51:25:51:30 | access to field x | -| AccessorCalls.cs:52:9:52:12 | this access | AccessorCalls.cs:52:9:52:14 | access to field x | | AccessorCalls.cs:52:9:52:12 | this access | AccessorCalls.cs:52:9:52:35 | ...; | | AccessorCalls.cs:52:9:52:14 | access to field x | AccessorCalls.cs:52:9:52:12 | this access | -| AccessorCalls.cs:52:9:52:14 | access to field x | AccessorCalls.cs:52:9:52:12 | this access | | AccessorCalls.cs:52:9:52:19 | access to property Prop | AccessorCalls.cs:52:9:52:14 | access to field x | -| AccessorCalls.cs:52:9:52:19 | access to property Prop | AccessorCalls.cs:52:9:52:34 | ... + ... | -| AccessorCalls.cs:52:9:52:34 | ... + ... | AccessorCalls.cs:52:24:52:34 | access to property Prop | -| AccessorCalls.cs:52:9:52:34 | ... = ... | AccessorCalls.cs:52:9:52:19 | access to property Prop | -| AccessorCalls.cs:52:9:52:35 | ...; | AccessorCalls.cs:51:9:51:36 | ... = ... | +| AccessorCalls.cs:52:9:52:34 | ... += ... | AccessorCalls.cs:52:24:52:34 | access to property Prop | +| AccessorCalls.cs:52:9:52:35 | ...; | AccessorCalls.cs:51:9:51:36 | ... += ... | | AccessorCalls.cs:52:24:52:27 | this access | AccessorCalls.cs:52:9:52:19 | access to property Prop | | AccessorCalls.cs:52:24:52:29 | access to field x | AccessorCalls.cs:52:24:52:27 | this access | | AccessorCalls.cs:52:24:52:34 | access to property Prop | AccessorCalls.cs:52:24:52:29 | access to field x | | AccessorCalls.cs:53:9:53:12 | this access | AccessorCalls.cs:53:9:53:31 | ...; | -| AccessorCalls.cs:53:9:53:12 | this access | AccessorCalls.cs:53:16:53:16 | 0 | | AccessorCalls.cs:53:9:53:14 | access to field x | AccessorCalls.cs:53:9:53:12 | this access | -| AccessorCalls.cs:53:9:53:14 | access to field x | AccessorCalls.cs:53:9:53:12 | this access | -| AccessorCalls.cs:53:9:53:17 | access to indexer | AccessorCalls.cs:53:9:53:30 | ... + ... | | AccessorCalls.cs:53:9:53:17 | access to indexer | AccessorCalls.cs:53:16:53:16 | 0 | -| AccessorCalls.cs:53:9:53:30 | ... + ... | AccessorCalls.cs:53:22:53:30 | access to indexer | -| AccessorCalls.cs:53:9:53:30 | ... = ... | AccessorCalls.cs:53:9:53:17 | access to indexer | -| AccessorCalls.cs:53:9:53:31 | ...; | AccessorCalls.cs:52:9:52:34 | ... = ... | -| AccessorCalls.cs:53:16:53:16 | 0 | AccessorCalls.cs:53:9:53:14 | access to field x | +| AccessorCalls.cs:53:9:53:30 | ... += ... | AccessorCalls.cs:53:22:53:30 | access to indexer | +| AccessorCalls.cs:53:9:53:31 | ...; | AccessorCalls.cs:52:9:52:34 | ... += ... | | AccessorCalls.cs:53:16:53:16 | 0 | AccessorCalls.cs:53:9:53:14 | access to field x | | AccessorCalls.cs:53:22:53:25 | this access | AccessorCalls.cs:53:9:53:17 | access to indexer | | AccessorCalls.cs:53:22:53:27 | access to field x | AccessorCalls.cs:53:22:53:25 | this access | @@ -4282,29 +4211,22 @@ postDominance | AccessorCalls.cs:70:9:70:19 | dynamic access to member MaybeProp | AccessorCalls.cs:70:9:70:9 | access to local variable d | | AccessorCalls.cs:70:9:70:21 | dynamic call to operator ++ | AccessorCalls.cs:70:9:70:19 | dynamic access to member MaybeProp | | AccessorCalls.cs:70:9:70:22 | ...; | AccessorCalls.cs:69:9:69:35 | ... = ... | -| AccessorCalls.cs:71:9:71:9 | access to local variable d | AccessorCalls.cs:71:9:71:9 | access to local variable d | | AccessorCalls.cs:71:9:71:9 | access to local variable d | AccessorCalls.cs:71:9:71:26 | ...; | | AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | AccessorCalls.cs:71:9:71:9 | access to local variable d | -| AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | AccessorCalls.cs:71:9:71:25 | dynamic call to operator + | -| AccessorCalls.cs:71:9:71:25 | ... = ... | AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | -| AccessorCalls.cs:71:9:71:25 | dynamic call to operator + | AccessorCalls.cs:71:25:71:25 | access to parameter e | +| AccessorCalls.cs:71:9:71:25 | ... += ... | AccessorCalls.cs:71:25:71:25 | access to parameter e | | AccessorCalls.cs:71:9:71:26 | ...; | AccessorCalls.cs:70:9:70:21 | dynamic call to operator ++ | | AccessorCalls.cs:71:25:71:25 | access to parameter e | AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | | AccessorCalls.cs:72:9:72:9 | access to local variable d | AccessorCalls.cs:72:9:72:21 | ...; | -| AccessorCalls.cs:72:9:72:9 | access to local variable d | AccessorCalls.cs:72:11:72:11 | 0 | -| AccessorCalls.cs:72:9:72:12 | dynamic access to element | AccessorCalls.cs:72:9:72:20 | dynamic call to operator + | | AccessorCalls.cs:72:9:72:12 | dynamic access to element | AccessorCalls.cs:72:11:72:11 | 0 | -| AccessorCalls.cs:72:9:72:20 | ... = ... | AccessorCalls.cs:72:9:72:12 | dynamic access to element | -| AccessorCalls.cs:72:9:72:20 | dynamic call to operator + | AccessorCalls.cs:72:17:72:20 | dynamic access to element | -| AccessorCalls.cs:72:9:72:21 | ...; | AccessorCalls.cs:71:9:71:25 | ... = ... | -| AccessorCalls.cs:72:11:72:11 | 0 | AccessorCalls.cs:72:9:72:9 | access to local variable d | +| AccessorCalls.cs:72:9:72:20 | ... += ... | AccessorCalls.cs:72:17:72:20 | dynamic access to element | +| AccessorCalls.cs:72:9:72:21 | ...; | AccessorCalls.cs:71:9:71:25 | ... += ... | | AccessorCalls.cs:72:11:72:11 | 0 | AccessorCalls.cs:72:9:72:9 | access to local variable d | | AccessorCalls.cs:72:17:72:17 | access to local variable d | AccessorCalls.cs:72:9:72:12 | dynamic access to element | | AccessorCalls.cs:72:17:72:20 | dynamic access to element | AccessorCalls.cs:72:19:72:19 | 1 | | AccessorCalls.cs:72:19:72:19 | 1 | AccessorCalls.cs:72:17:72:17 | access to local variable d | | AccessorCalls.cs:73:9:73:44 | (..., ...) | AccessorCalls.cs:73:35:73:43 | (..., ...) | | AccessorCalls.cs:73:9:73:83 | ... = ... | AccessorCalls.cs:73:39:73:42 | dynamic access to element | -| AccessorCalls.cs:73:9:73:84 | ...; | AccessorCalls.cs:72:9:72:20 | ... = ... | +| AccessorCalls.cs:73:9:73:84 | ...; | AccessorCalls.cs:72:9:72:20 | ... += ... | | AccessorCalls.cs:73:10:73:10 | access to local variable d | AccessorCalls.cs:73:9:73:84 | ...; | | AccessorCalls.cs:73:10:73:21 | dynamic access to member MaybeProp1 | AccessorCalls.cs:73:48:73:83 | (..., ...) | | AccessorCalls.cs:73:24:73:27 | this access | AccessorCalls.cs:73:10:73:10 | access to local variable d | @@ -4730,31 +4652,28 @@ postDominance | Assignments.cs:5:13:5:17 | Int32 x = ... | Assignments.cs:5:17:5:17 | 0 | | Assignments.cs:5:17:5:17 | 0 | Assignments.cs:5:9:5:18 | ... ...; | | Assignments.cs:6:9:6:9 | access to local variable x | Assignments.cs:6:9:6:15 | ...; | -| Assignments.cs:6:9:6:14 | ... + ... | Assignments.cs:6:14:6:14 | 1 | -| Assignments.cs:6:9:6:14 | ... = ... | Assignments.cs:6:9:6:14 | ... + ... | +| Assignments.cs:6:9:6:14 | ... += ... | Assignments.cs:6:14:6:14 | 1 | | Assignments.cs:6:9:6:15 | ...; | Assignments.cs:5:13:5:17 | Int32 x = ... | | Assignments.cs:6:14:6:14 | 1 | Assignments.cs:6:9:6:9 | access to local variable x | -| Assignments.cs:8:9:8:22 | ... ...; | Assignments.cs:6:9:6:14 | ... = ... | +| Assignments.cs:8:9:8:22 | ... ...; | Assignments.cs:6:9:6:14 | ... += ... | | Assignments.cs:8:17:8:21 | dynamic d = ... | Assignments.cs:8:21:8:21 | (...) ... | | Assignments.cs:8:21:8:21 | 0 | Assignments.cs:8:9:8:22 | ... ...; | | Assignments.cs:8:21:8:21 | (...) ... | Assignments.cs:8:21:8:21 | 0 | | Assignments.cs:9:9:9:9 | access to local variable d | Assignments.cs:9:9:9:15 | ...; | -| Assignments.cs:9:9:9:14 | ... = ... | Assignments.cs:9:9:9:14 | dynamic call to operator - | -| Assignments.cs:9:9:9:14 | dynamic call to operator - | Assignments.cs:9:14:9:14 | 2 | +| Assignments.cs:9:9:9:14 | ... -= ... | Assignments.cs:9:14:9:14 | 2 | | Assignments.cs:9:9:9:15 | ...; | Assignments.cs:8:17:8:21 | dynamic d = ... | | Assignments.cs:9:14:9:14 | 2 | Assignments.cs:9:9:9:9 | access to local variable d | -| Assignments.cs:11:9:11:34 | ... ...; | Assignments.cs:9:9:9:14 | ... = ... | +| Assignments.cs:11:9:11:34 | ... ...; | Assignments.cs:9:9:9:14 | ... -= ... | | Assignments.cs:11:13:11:33 | Assignments a = ... | Assignments.cs:11:17:11:33 | object creation of type Assignments | | Assignments.cs:11:17:11:33 | object creation of type Assignments | Assignments.cs:11:9:11:34 | ... ...; | | Assignments.cs:12:9:12:9 | access to local variable a | Assignments.cs:12:9:12:18 | ...; | -| Assignments.cs:12:9:12:17 | ... = ... | Assignments.cs:12:9:12:17 | call to operator + | -| Assignments.cs:12:9:12:17 | call to operator + | Assignments.cs:12:14:12:17 | this access | +| Assignments.cs:12:9:12:17 | ... += ... | Assignments.cs:12:14:12:17 | this access | | Assignments.cs:12:9:12:18 | ...; | Assignments.cs:11:13:11:33 | Assignments a = ... | | Assignments.cs:12:14:12:17 | this access | Assignments.cs:12:9:12:9 | access to local variable a | | Assignments.cs:14:9:14:13 | access to event Event | Assignments.cs:14:18:14:35 | (...) => ... | | Assignments.cs:14:9:14:13 | this access | Assignments.cs:14:9:14:36 | ...; | | Assignments.cs:14:9:14:35 | ... += ... | Assignments.cs:14:9:14:13 | access to event Event | -| Assignments.cs:14:9:14:36 | ...; | Assignments.cs:12:9:12:17 | ... = ... | +| Assignments.cs:14:9:14:36 | ...; | Assignments.cs:12:9:12:17 | ... += ... | | Assignments.cs:14:18:14:35 | (...) => ... | Assignments.cs:14:9:14:13 | this access | | Assignments.cs:14:18:14:35 | exit (...) => ... | Assignments.cs:14:18:14:35 | exit (...) => ... (normal) | | Assignments.cs:14:18:14:35 | exit (...) => ... (normal) | Assignments.cs:14:33:14:35 | {...} | @@ -5022,8 +4941,7 @@ postDominance | ConditionalAccess.cs:43:9:43:11 | exit set_Item (normal) | ConditionalAccess.cs:43:13:43:15 | {...} | | ConditionalAccess.cs:43:13:43:15 | {...} | ConditionalAccess.cs:43:9:43:11 | enter set_Item | | ConditionalAccess.cs:46:10:46:11 | exit M9 | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | -| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | -| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:54:12:54:29 | ... = ... | +| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:54:12:54:29 | ... += ... | | ConditionalAccess.cs:47:5:55:5 | {...} | ConditionalAccess.cs:46:10:46:11 | enter M9 | | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | ConditionalAccess.cs:48:9:48:26 | ...; | | ConditionalAccess.cs:48:9:48:20 | access to field IntField | ConditionalAccess.cs:48:24:48:25 | 42 | @@ -5052,20 +4970,15 @@ postDominance | ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:51:18:51:31 | ... = ... | | ConditionalAccess.cs:52:18:52:38 | ... = ... | ConditionalAccess.cs:52:9:52:28 | access to property StringProp | | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:26 | ...; | -| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:12:53:25 | ... - ... | | ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:52:9:52:10 | access to parameter ca | | ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:52:9:52:16 | access to property Prop | | ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:52:18:52:38 | ... = ... | -| ConditionalAccess.cs:53:12:53:25 | ... - ... | ConditionalAccess.cs:53:25:53:25 | 1 | -| ConditionalAccess.cs:53:12:53:25 | ... = ... | ConditionalAccess.cs:53:9:53:20 | access to field IntField | +| ConditionalAccess.cs:53:12:53:25 | ... -= ... | ConditionalAccess.cs:53:25:53:25 | 1 | | ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | | ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:9:53:20 | access to field IntField | | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:30 | ...; | -| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:12:54:29 | ... + ... | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:53:12:53:25 | ... = ... | -| ConditionalAccess.cs:54:12:54:29 | ... + ... | ConditionalAccess.cs:54:27:54:29 | "!" | -| ConditionalAccess.cs:54:12:54:29 | ... = ... | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:53:12:53:25 | ... -= ... | +| ConditionalAccess.cs:54:12:54:29 | ... += ... | ConditionalAccess.cs:54:27:54:29 | "!" | | ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | | ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | | ConditionalAccess.cs:60:26:60:38 | exit CommaJoinWith | ConditionalAccess.cs:60:26:60:38 | exit CommaJoinWith (normal) | @@ -5287,25 +5200,23 @@ postDominance | Conditions.cs:105:9:106:20 | if (...) ... | Conditions.cs:104:13:104:28 | String x = ... | | Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:105:9:106:20 | if (...) ... | | Conditions.cs:106:13:106:13 | access to local variable x | Conditions.cs:106:13:106:20 | ...; | -| Conditions.cs:106:13:106:19 | ... + ... | Conditions.cs:106:18:106:19 | "" | -| Conditions.cs:106:13:106:19 | ... = ... | Conditions.cs:106:13:106:19 | ... + ... | +| Conditions.cs:106:13:106:19 | ... += ... | Conditions.cs:106:18:106:19 | "" | | Conditions.cs:106:18:106:19 | "" | Conditions.cs:106:13:106:13 | access to local variable x | | Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:105:13:105:13 | access to parameter b | -| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:106:13:106:19 | ... = ... | +| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:106:13:106:19 | ... += ... | | Conditions.cs:107:13:107:13 | access to local variable x | Conditions.cs:107:9:109:24 | if (...) ... | | Conditions.cs:107:13:107:20 | access to property Length | Conditions.cs:107:13:107:13 | access to local variable x | | Conditions.cs:107:13:107:24 | ... > ... | Conditions.cs:107:24:107:24 | 0 | | Conditions.cs:107:24:107:24 | 0 | Conditions.cs:107:13:107:20 | access to property Length | | Conditions.cs:108:18:108:18 | access to parameter b | Conditions.cs:108:13:109:24 | if (...) ... | | Conditions.cs:109:17:109:17 | access to local variable x | Conditions.cs:109:17:109:24 | ...; | -| Conditions.cs:109:17:109:23 | ... + ... | Conditions.cs:109:22:109:23 | "" | -| Conditions.cs:109:17:109:23 | ... = ... | Conditions.cs:109:17:109:23 | ... + ... | +| Conditions.cs:109:17:109:23 | ... += ... | Conditions.cs:109:22:109:23 | "" | | Conditions.cs:109:17:109:24 | ...; | Conditions.cs:108:17:108:18 | [true] !... | | Conditions.cs:109:22:109:23 | "" | Conditions.cs:109:17:109:17 | access to local variable x | | Conditions.cs:110:9:110:17 | return ...; | Conditions.cs:110:16:110:16 | access to local variable x | | Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:107:13:107:24 | ... > ... | | Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:108:17:108:18 | [false] !... | -| Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:109:17:109:23 | ... = ... | +| Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:109:17:109:23 | ... += ... | | Conditions.cs:113:10:113:11 | exit M9 | Conditions.cs:113:10:113:11 | exit M9 (normal) | | Conditions.cs:113:10:113:11 | exit M9 (normal) | Conditions.cs:116:25:116:39 | ... < ... | | Conditions.cs:114:5:124:5 | {...} | Conditions.cs:113:10:113:11 | enter M9 | @@ -5890,7 +5801,7 @@ postDominance | Finally.cs:260:9:260:33 | call to method WriteLine | Finally.cs:260:27:260:32 | "Done" | | Finally.cs:260:9:260:34 | ...; | Finally.cs:258:13:258:46 | call to method WriteLine | | Finally.cs:260:27:260:32 | "Done" | Finally.cs:260:9:260:34 | ...; | -| Finally.cs:263:10:263:12 | exit M13 (normal) | Finally.cs:272:13:272:18 | ... = ... | +| Finally.cs:263:10:263:12 | exit M13 (normal) | Finally.cs:272:13:272:18 | ... += ... | | Finally.cs:264:5:274:5 | {...} | Finally.cs:263:10:263:12 | enter M13 | | Finally.cs:265:9:273:9 | try {...} ... | Finally.cs:264:5:274:5 | {...} | | Finally.cs:266:9:268:9 | {...} | Finally.cs:265:9:273:9 | try {...} ... | @@ -5902,8 +5813,7 @@ postDominance | Finally.cs:271:13:271:35 | ...; | Finally.cs:270:9:273:9 | {...} | | Finally.cs:271:31:271:33 | "3" | Finally.cs:271:13:271:35 | ...; | | Finally.cs:272:13:272:13 | access to parameter i | Finally.cs:272:13:272:19 | ...; | -| Finally.cs:272:13:272:18 | ... + ... | Finally.cs:272:18:272:18 | 3 | -| Finally.cs:272:13:272:18 | ... = ... | Finally.cs:272:13:272:18 | ... + ... | +| Finally.cs:272:13:272:18 | ... += ... | Finally.cs:272:18:272:18 | 3 | | 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 | call to method | @@ -7720,14 +7630,11 @@ postDominance | cflow.cs:210:9:221:36 | do ... while (...); | cflow.cs:209:5:222:5 | {...} | | cflow.cs:211:9:221:9 | {...} | cflow.cs:210:9:221:36 | do ... while (...); | | cflow.cs:212:13:212:17 | access to field Field | cflow.cs:212:13:212:17 | this access | -| cflow.cs:212:13:212:17 | access to field Field | cflow.cs:212:13:212:24 | ... + ... | -| cflow.cs:212:13:212:17 | this access | cflow.cs:212:13:212:17 | this access | | cflow.cs:212:13:212:17 | this access | cflow.cs:212:13:212:25 | ...; | -| cflow.cs:212:13:212:24 | ... + ... | cflow.cs:212:22:212:24 | "a" | -| cflow.cs:212:13:212:24 | ... = ... | cflow.cs:212:13:212:17 | access to field Field | +| cflow.cs:212:13:212:24 | ... += ... | cflow.cs:212:22:212:24 | "a" | | cflow.cs:212:13:212:25 | ...; | cflow.cs:211:9:221:9 | {...} | | cflow.cs:212:22:212:24 | "a" | cflow.cs:212:13:212:17 | access to field Field | -| cflow.cs:213:13:216:13 | if (...) ... | cflow.cs:212:13:212:24 | ... = ... | +| cflow.cs:213:13:216:13 | if (...) ... | cflow.cs:212:13:212:24 | ... += ... | | cflow.cs:213:17:213:21 | access to field Field | cflow.cs:213:17:213:21 | this access | | cflow.cs:213:17:213:21 | this access | cflow.cs:213:13:216:13 | if (...) ... | | cflow.cs:213:17:213:28 | access to property Length | cflow.cs:213:17:213:21 | access to field Field | @@ -7756,14 +7663,11 @@ postDominance | cflow.cs:226:62:226:63 | 10 | cflow.cs:226:57:226:59 | "a" | | cflow.cs:227:9:237:9 | {...} | cflow.cs:226:22:226:22 | String x | | cflow.cs:228:13:228:17 | access to field Field | cflow.cs:228:13:228:17 | this access | -| cflow.cs:228:13:228:17 | access to field Field | cflow.cs:228:13:228:22 | ... + ... | -| cflow.cs:228:13:228:17 | this access | cflow.cs:228:13:228:17 | this access | | cflow.cs:228:13:228:17 | this access | cflow.cs:228:13:228:23 | ...; | -| cflow.cs:228:13:228:22 | ... + ... | cflow.cs:228:22:228:22 | access to local variable x | -| cflow.cs:228:13:228:22 | ... = ... | cflow.cs:228:13:228:17 | access to field Field | +| cflow.cs:228:13:228:22 | ... += ... | cflow.cs:228:22:228:22 | access to local variable x | | cflow.cs:228:13:228:23 | ...; | cflow.cs:227:9:237:9 | {...} | | cflow.cs:228:22:228:22 | access to local variable x | cflow.cs:228:13:228:17 | access to field Field | -| cflow.cs:229:13:232:13 | if (...) ... | cflow.cs:228:13:228:22 | ... = ... | +| cflow.cs:229:13:232:13 | if (...) ... | cflow.cs:228:13:228:22 | ... += ... | | cflow.cs:229:17:229:21 | access to field Field | cflow.cs:229:17:229:21 | this access | | cflow.cs:229:17:229:21 | this access | cflow.cs:229:13:232:13 | if (...) ... | | cflow.cs:229:17:229:28 | access to property Length | cflow.cs:229:17:229:21 | access to field Field | @@ -9077,7 +8981,6 @@ blockDominance | ConditionalAccess.cs:42:9:42:11 | enter get_Item | ConditionalAccess.cs:42:9:42:11 | enter get_Item | | ConditionalAccess.cs:43:9:43:11 | enter set_Item | ConditionalAccess.cs:43:9:43:11 | enter set_Item | | ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:46:10:46:11 | enter M9 | -| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | | ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:48:24:48:25 | 42 | | ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:49:9:49:33 | ...; | | ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:49:26:49:32 | "Hello" | @@ -9089,17 +8992,12 @@ blockDominance | ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:52:9:52:16 | access to property Prop | | ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:52:9:52:39 | ...; | | ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:52:32:52:38 | "World" | -| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | | ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:53:9:53:20 | access to field IntField | | ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:53:9:53:26 | ...; | | ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:53:25:53:25 | 1 | -| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | | ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | -| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:54:9:54:30 | ...; | | ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:54:27:54:29 | "!" | -| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | | ConditionalAccess.cs:48:24:48:25 | 42 | ConditionalAccess.cs:48:24:48:25 | 42 | -| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | | ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:49:9:49:33 | ...; | | ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:49:26:49:32 | "Hello" | | ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:50:9:50:24 | ...; | @@ -9110,16 +9008,12 @@ blockDominance | ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:52:9:52:16 | access to property Prop | | ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:52:9:52:39 | ...; | | ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:52:32:52:38 | "World" | -| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | | ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:53:9:53:20 | access to field IntField | | ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:53:9:53:26 | ...; | | ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:53:25:53:25 | 1 | -| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | | ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | -| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:54:9:54:30 | ...; | | ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:54:27:54:29 | "!" | | ConditionalAccess.cs:49:26:49:32 | "Hello" | ConditionalAccess.cs:49:26:49:32 | "Hello" | -| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | | ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:50:9:50:24 | ...; | | ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:50:13:50:13 | 0 | | ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:51:9:51:16 | access to property Prop | @@ -9128,71 +9022,47 @@ blockDominance | ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:52:9:52:16 | access to property Prop | | ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:52:9:52:39 | ...; | | ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:52:32:52:38 | "World" | -| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | | ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:53:9:53:20 | access to field IntField | | ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:53:9:53:26 | ...; | | ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:53:25:53:25 | 1 | -| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | | ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | -| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:54:9:54:30 | ...; | | ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:54:27:54:29 | "!" | | ConditionalAccess.cs:50:13:50:13 | 0 | ConditionalAccess.cs:50:13:50:13 | 0 | | ConditionalAccess.cs:51:9:51:16 | access to property Prop | ConditionalAccess.cs:51:9:51:16 | access to property Prop | | ConditionalAccess.cs:51:9:51:16 | access to property Prop | ConditionalAccess.cs:51:30:51:31 | 84 | -| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | | ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:51:9:51:16 | access to property Prop | | ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:51:9:51:32 | ...; | | ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:51:30:51:31 | 84 | | ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:52:9:52:16 | access to property Prop | | ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:52:9:52:39 | ...; | | ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:52:32:52:38 | "World" | -| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | | ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:53:9:53:20 | access to field IntField | | ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:53:9:53:26 | ...; | | ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:53:25:53:25 | 1 | -| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | | ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | -| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:54:9:54:30 | ...; | | ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:54:27:54:29 | "!" | | ConditionalAccess.cs:51:30:51:31 | 84 | ConditionalAccess.cs:51:30:51:31 | 84 | | ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:52:9:52:16 | access to property Prop | | ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:52:32:52:38 | "World" | -| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | | ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:9:52:16 | access to property Prop | | ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:9:52:39 | ...; | | ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:32:52:38 | "World" | -| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | | ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:53:9:53:20 | access to field IntField | | ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:53:9:53:26 | ...; | | ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:53:25:53:25 | 1 | -| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | | ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | -| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:54:9:54:30 | ...; | | ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:54:27:54:29 | "!" | | ConditionalAccess.cs:52:32:52:38 | "World" | ConditionalAccess.cs:52:32:52:38 | "World" | -| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | -| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:20 | access to field IntField | -| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:25:53:25 | 1 | | ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:9:53:20 | access to field IntField | -| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | -| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | | ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:20 | access to field IntField | | ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:26 | ...; | | ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:25:53:25 | 1 | -| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | | ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | -| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:54:9:54:30 | ...; | | ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:54:27:54:29 | "!" | | ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:25:53:25 | 1 | -| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | -| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | -| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:27:54:29 | "!" | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:54:27:54:29 | "!" | | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:30 | ...; | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:27:54:29 | "!" | | ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:27:54:29 | "!" | | ConditionalAccess.cs:60:26:60:38 | enter CommaJoinWith | ConditionalAccess.cs:60:26:60:38 | enter CommaJoinWith | | Conditions.cs:1:7:1:16 | enter Conditions | Conditions.cs:1:7:1:16 | enter Conditions | @@ -13005,27 +12875,6 @@ postBlockDominance | ConditionalAccess.cs:42:9:42:11 | enter get_Item | ConditionalAccess.cs:42:9:42:11 | enter get_Item | | ConditionalAccess.cs:43:9:43:11 | enter set_Item | ConditionalAccess.cs:43:9:43:11 | enter set_Item | | ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:46:10:46:11 | enter M9 | -| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:46:10:46:11 | enter M9 | -| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | -| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:48:24:48:25 | 42 | -| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:49:9:49:33 | ...; | -| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:49:26:49:32 | "Hello" | -| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:50:9:50:24 | ...; | -| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:50:13:50:13 | 0 | -| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:51:9:51:16 | access to property Prop | -| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:51:9:51:32 | ...; | -| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:51:30:51:31 | 84 | -| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:52:9:52:16 | access to property Prop | -| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:52:9:52:39 | ...; | -| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:52:32:52:38 | "World" | -| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | -| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:53:9:53:20 | access to field IntField | -| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:53:9:53:26 | ...; | -| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:53:25:53:25 | 1 | -| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | -| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | -| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:54:9:54:30 | ...; | -| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:54:27:54:29 | "!" | | ConditionalAccess.cs:48:24:48:25 | 42 | ConditionalAccess.cs:48:24:48:25 | 42 | | ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:46:10:46:11 | enter M9 | | ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:48:24:48:25 | 42 | @@ -13058,7 +12907,6 @@ postBlockDominance | ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:51:30:51:31 | 84 | | ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:9:52:39 | ...; | | ConditionalAccess.cs:52:32:52:38 | "World" | ConditionalAccess.cs:52:32:52:38 | "World" | -| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | | ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:9:53:20 | access to field IntField | | ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:46:10:46:11 | enter M9 | | ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:48:24:48:25 | 42 | @@ -13073,29 +12921,37 @@ postBlockDominance | ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:52:9:52:39 | ...; | | ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:52:32:52:38 | "World" | | ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:26 | ...; | -| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:46:10:46:11 | enter M9 | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:48:24:48:25 | 42 | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:49:9:49:33 | ...; | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:49:26:49:32 | "Hello" | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:50:9:50:24 | ...; | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:50:13:50:13 | 0 | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:51:9:51:16 | access to property Prop | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:51:9:51:32 | ...; | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:51:30:51:31 | 84 | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:52:9:52:16 | access to property Prop | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:52:9:52:39 | ...; | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:52:32:52:38 | "World" | | ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:9:53:20 | access to field IntField | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:9:53:26 | ...; | | ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:25:53:25 | 1 | -| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:46:10:46:11 | enter M9 | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:48:24:48:25 | 42 | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:49:9:49:33 | ...; | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:49:26:49:32 | "Hello" | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:50:9:50:24 | ...; | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:50:13:50:13 | 0 | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:51:9:51:16 | access to property Prop | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:51:9:51:32 | ...; | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:51:30:51:31 | 84 | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:52:9:52:16 | access to property Prop | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:52:9:52:39 | ...; | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:52:32:52:38 | "World" | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:53:9:53:20 | access to field IntField | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:53:9:53:26 | ...; | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:53:25:53:25 | 1 | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:30 | ...; | -| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:46:10:46:11 | enter M9 | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:48:24:48:25 | 42 | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:49:9:49:33 | ...; | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:49:26:49:32 | "Hello" | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:50:9:50:24 | ...; | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:50:13:50:13 | 0 | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:51:9:51:16 | access to property Prop | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:51:9:51:32 | ...; | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:51:30:51:31 | 84 | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:52:9:52:16 | access to property Prop | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:52:9:52:39 | ...; | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:52:32:52:38 | "World" | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:53:9:53:20 | access to field IntField | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:53:9:53:26 | ...; | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:53:25:53:25 | 1 | | ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | | ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:27:54:29 | "!" | | ConditionalAccess.cs:60:26:60:38 | enter CommaJoinWith | ConditionalAccess.cs:60:26:60:38 | enter CommaJoinWith | diff --git a/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected b/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected index 8f48cd46fc3..99f8c25b49e 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected @@ -140,32 +140,22 @@ nodeEnclosing | AccessorCalls.cs:42:10:42:11 | exit M5 (normal) | AccessorCalls.cs:42:10:42:11 | M5 | | AccessorCalls.cs:43:5:47:5 | {...} | AccessorCalls.cs:42:10:42:11 | M5 | | AccessorCalls.cs:44:9:44:12 | this access | AccessorCalls.cs:42:10:42:11 | M5 | -| AccessorCalls.cs:44:9:44:12 | this access | AccessorCalls.cs:42:10:42:11 | M5 | | AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:42:10:42:11 | M5 | -| AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:42:10:42:11 | M5 | -| AccessorCalls.cs:44:9:44:32 | ... + ... | AccessorCalls.cs:42:10:42:11 | M5 | -| AccessorCalls.cs:44:9:44:32 | ... = ... | AccessorCalls.cs:42:10:42:11 | M5 | +| AccessorCalls.cs:44:9:44:32 | ... += ... | AccessorCalls.cs:42:10:42:11 | M5 | | AccessorCalls.cs:44:9:44:33 | ...; | AccessorCalls.cs:42:10:42:11 | M5 | | AccessorCalls.cs:44:23:44:26 | this access | AccessorCalls.cs:42:10:42:11 | M5 | | AccessorCalls.cs:44:23:44:32 | access to field Field | AccessorCalls.cs:42:10:42:11 | M5 | | AccessorCalls.cs:45:9:45:12 | this access | AccessorCalls.cs:42:10:42:11 | M5 | -| AccessorCalls.cs:45:9:45:12 | this access | AccessorCalls.cs:42:10:42:11 | M5 | | AccessorCalls.cs:45:9:45:17 | access to property Prop | AccessorCalls.cs:42:10:42:11 | M5 | -| AccessorCalls.cs:45:9:45:17 | access to property Prop | AccessorCalls.cs:42:10:42:11 | M5 | -| AccessorCalls.cs:45:9:45:30 | ... + ... | AccessorCalls.cs:42:10:42:11 | M5 | -| AccessorCalls.cs:45:9:45:30 | ... = ... | AccessorCalls.cs:42:10:42:11 | M5 | +| AccessorCalls.cs:45:9:45:30 | ... += ... | AccessorCalls.cs:42:10:42:11 | M5 | | AccessorCalls.cs:45:9:45:31 | ...; | AccessorCalls.cs:42:10:42:11 | M5 | | AccessorCalls.cs:45:22:45:25 | this access | AccessorCalls.cs:42:10:42:11 | M5 | | AccessorCalls.cs:45:22:45:30 | access to property Prop | AccessorCalls.cs:42:10:42:11 | M5 | | AccessorCalls.cs:46:9:46:12 | this access | AccessorCalls.cs:42:10:42:11 | M5 | -| AccessorCalls.cs:46:9:46:12 | this access | AccessorCalls.cs:42:10:42:11 | M5 | | AccessorCalls.cs:46:9:46:15 | access to indexer | AccessorCalls.cs:42:10:42:11 | M5 | -| AccessorCalls.cs:46:9:46:15 | access to indexer | AccessorCalls.cs:42:10:42:11 | M5 | -| AccessorCalls.cs:46:9:46:26 | ... + ... | AccessorCalls.cs:42:10:42:11 | M5 | -| AccessorCalls.cs:46:9:46:26 | ... = ... | AccessorCalls.cs:42:10:42:11 | M5 | +| AccessorCalls.cs:46:9:46:26 | ... += ... | AccessorCalls.cs:42:10:42:11 | M5 | | AccessorCalls.cs:46:9:46:27 | ...; | AccessorCalls.cs:42:10:42:11 | M5 | | AccessorCalls.cs:46:14:46:14 | 0 | AccessorCalls.cs:42:10:42:11 | M5 | -| AccessorCalls.cs:46:14:46:14 | 0 | AccessorCalls.cs:42:10:42:11 | M5 | | AccessorCalls.cs:46:20:46:23 | this access | AccessorCalls.cs:42:10:42:11 | M5 | | AccessorCalls.cs:46:20:46:26 | access to indexer | AccessorCalls.cs:42:10:42:11 | M5 | | AccessorCalls.cs:46:25:46:25 | 0 | AccessorCalls.cs:42:10:42:11 | M5 | @@ -174,40 +164,27 @@ nodeEnclosing | AccessorCalls.cs:49:10:49:11 | exit M6 (normal) | AccessorCalls.cs:49:10:49:11 | M6 | | AccessorCalls.cs:50:5:54:5 | {...} | AccessorCalls.cs:49:10:49:11 | M6 | | AccessorCalls.cs:51:9:51:12 | this access | AccessorCalls.cs:49:10:49:11 | M6 | -| AccessorCalls.cs:51:9:51:12 | this access | AccessorCalls.cs:49:10:49:11 | M6 | -| AccessorCalls.cs:51:9:51:14 | access to field x | AccessorCalls.cs:49:10:49:11 | M6 | | AccessorCalls.cs:51:9:51:14 | access to field x | AccessorCalls.cs:49:10:49:11 | M6 | | AccessorCalls.cs:51:9:51:20 | access to field Field | AccessorCalls.cs:49:10:49:11 | M6 | -| AccessorCalls.cs:51:9:51:20 | access to field Field | AccessorCalls.cs:49:10:49:11 | M6 | -| AccessorCalls.cs:51:9:51:36 | ... + ... | AccessorCalls.cs:49:10:49:11 | M6 | -| AccessorCalls.cs:51:9:51:36 | ... = ... | AccessorCalls.cs:49:10:49:11 | M6 | +| AccessorCalls.cs:51:9:51:36 | ... += ... | AccessorCalls.cs:49:10:49:11 | M6 | | AccessorCalls.cs:51:9:51:37 | ...; | AccessorCalls.cs:49:10:49:11 | M6 | | AccessorCalls.cs:51:25:51:28 | this access | AccessorCalls.cs:49:10:49:11 | M6 | | AccessorCalls.cs:51:25:51:30 | access to field x | AccessorCalls.cs:49:10:49:11 | M6 | | AccessorCalls.cs:51:25:51:36 | access to field Field | AccessorCalls.cs:49:10:49:11 | M6 | | AccessorCalls.cs:52:9:52:12 | this access | AccessorCalls.cs:49:10:49:11 | M6 | -| AccessorCalls.cs:52:9:52:12 | this access | AccessorCalls.cs:49:10:49:11 | M6 | -| AccessorCalls.cs:52:9:52:14 | access to field x | AccessorCalls.cs:49:10:49:11 | M6 | | AccessorCalls.cs:52:9:52:14 | access to field x | AccessorCalls.cs:49:10:49:11 | M6 | | AccessorCalls.cs:52:9:52:19 | access to property Prop | AccessorCalls.cs:49:10:49:11 | M6 | -| AccessorCalls.cs:52:9:52:19 | access to property Prop | AccessorCalls.cs:49:10:49:11 | M6 | -| AccessorCalls.cs:52:9:52:34 | ... + ... | AccessorCalls.cs:49:10:49:11 | M6 | -| AccessorCalls.cs:52:9:52:34 | ... = ... | AccessorCalls.cs:49:10:49:11 | M6 | +| AccessorCalls.cs:52:9:52:34 | ... += ... | AccessorCalls.cs:49:10:49:11 | M6 | | AccessorCalls.cs:52:9:52:35 | ...; | AccessorCalls.cs:49:10:49:11 | M6 | | AccessorCalls.cs:52:24:52:27 | this access | AccessorCalls.cs:49:10:49:11 | M6 | | AccessorCalls.cs:52:24:52:29 | access to field x | AccessorCalls.cs:49:10:49:11 | M6 | | AccessorCalls.cs:52:24:52:34 | access to property Prop | AccessorCalls.cs:49:10:49:11 | M6 | | AccessorCalls.cs:53:9:53:12 | this access | AccessorCalls.cs:49:10:49:11 | M6 | -| AccessorCalls.cs:53:9:53:12 | this access | AccessorCalls.cs:49:10:49:11 | M6 | -| AccessorCalls.cs:53:9:53:14 | access to field x | AccessorCalls.cs:49:10:49:11 | M6 | | AccessorCalls.cs:53:9:53:14 | access to field x | AccessorCalls.cs:49:10:49:11 | M6 | | AccessorCalls.cs:53:9:53:17 | access to indexer | AccessorCalls.cs:49:10:49:11 | M6 | -| AccessorCalls.cs:53:9:53:17 | access to indexer | AccessorCalls.cs:49:10:49:11 | M6 | -| AccessorCalls.cs:53:9:53:30 | ... + ... | AccessorCalls.cs:49:10:49:11 | M6 | -| AccessorCalls.cs:53:9:53:30 | ... = ... | AccessorCalls.cs:49:10:49:11 | M6 | +| AccessorCalls.cs:53:9:53:30 | ... += ... | AccessorCalls.cs:49:10:49:11 | M6 | | AccessorCalls.cs:53:9:53:31 | ...; | AccessorCalls.cs:49:10:49:11 | M6 | | AccessorCalls.cs:53:16:53:16 | 0 | AccessorCalls.cs:49:10:49:11 | M6 | -| AccessorCalls.cs:53:16:53:16 | 0 | AccessorCalls.cs:49:10:49:11 | M6 | | AccessorCalls.cs:53:22:53:25 | this access | AccessorCalls.cs:49:10:49:11 | M6 | | AccessorCalls.cs:53:22:53:27 | access to field x | AccessorCalls.cs:49:10:49:11 | M6 | | AccessorCalls.cs:53:22:53:30 | access to indexer | AccessorCalls.cs:49:10:49:11 | M6 | @@ -286,22 +263,15 @@ nodeEnclosing | AccessorCalls.cs:70:9:70:21 | dynamic call to operator ++ | AccessorCalls.cs:66:10:66:11 | M9 | | AccessorCalls.cs:70:9:70:22 | ...; | AccessorCalls.cs:66:10:66:11 | M9 | | AccessorCalls.cs:71:9:71:9 | access to local variable d | AccessorCalls.cs:66:10:66:11 | M9 | -| AccessorCalls.cs:71:9:71:9 | access to local variable d | AccessorCalls.cs:66:10:66:11 | M9 | | AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | AccessorCalls.cs:66:10:66:11 | M9 | -| AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | AccessorCalls.cs:66:10:66:11 | M9 | -| AccessorCalls.cs:71:9:71:25 | ... = ... | AccessorCalls.cs:66:10:66:11 | M9 | -| AccessorCalls.cs:71:9:71:25 | dynamic call to operator + | AccessorCalls.cs:66:10:66:11 | M9 | +| AccessorCalls.cs:71:9:71:25 | ... += ... | AccessorCalls.cs:66:10:66:11 | M9 | | AccessorCalls.cs:71:9:71:26 | ...; | AccessorCalls.cs:66:10:66:11 | M9 | | AccessorCalls.cs:71:25:71:25 | access to parameter e | AccessorCalls.cs:66:10:66:11 | M9 | | AccessorCalls.cs:72:9:72:9 | access to local variable d | AccessorCalls.cs:66:10:66:11 | M9 | -| AccessorCalls.cs:72:9:72:9 | access to local variable d | AccessorCalls.cs:66:10:66:11 | M9 | | AccessorCalls.cs:72:9:72:12 | dynamic access to element | AccessorCalls.cs:66:10:66:11 | M9 | -| AccessorCalls.cs:72:9:72:12 | dynamic access to element | AccessorCalls.cs:66:10:66:11 | M9 | -| AccessorCalls.cs:72:9:72:20 | ... = ... | AccessorCalls.cs:66:10:66:11 | M9 | -| AccessorCalls.cs:72:9:72:20 | dynamic call to operator + | AccessorCalls.cs:66:10:66:11 | M9 | +| AccessorCalls.cs:72:9:72:20 | ... += ... | AccessorCalls.cs:66:10:66:11 | M9 | | AccessorCalls.cs:72:9:72:21 | ...; | AccessorCalls.cs:66:10:66:11 | M9 | | AccessorCalls.cs:72:11:72:11 | 0 | AccessorCalls.cs:66:10:66:11 | M9 | -| AccessorCalls.cs:72:11:72:11 | 0 | AccessorCalls.cs:66:10:66:11 | M9 | | AccessorCalls.cs:72:17:72:17 | access to local variable d | AccessorCalls.cs:66:10:66:11 | M9 | | AccessorCalls.cs:72:17:72:20 | dynamic access to element | AccessorCalls.cs:66:10:66:11 | M9 | | AccessorCalls.cs:72:19:72:19 | 1 | AccessorCalls.cs:66:10:66:11 | M9 | @@ -803,8 +773,7 @@ nodeEnclosing | Assignments.cs:5:13:5:17 | Int32 x = ... | Assignments.cs:3:10:3:10 | M | | Assignments.cs:5:17:5:17 | 0 | Assignments.cs:3:10:3:10 | M | | Assignments.cs:6:9:6:9 | access to local variable x | Assignments.cs:3:10:3:10 | M | -| Assignments.cs:6:9:6:14 | ... + ... | Assignments.cs:3:10:3:10 | M | -| Assignments.cs:6:9:6:14 | ... = ... | Assignments.cs:3:10:3:10 | M | +| Assignments.cs:6:9:6:14 | ... += ... | Assignments.cs:3:10:3:10 | M | | Assignments.cs:6:9:6:15 | ...; | Assignments.cs:3:10:3:10 | M | | Assignments.cs:6:14:6:14 | 1 | Assignments.cs:3:10:3:10 | M | | Assignments.cs:8:9:8:22 | ... ...; | Assignments.cs:3:10:3:10 | M | @@ -812,16 +781,14 @@ nodeEnclosing | Assignments.cs:8:21:8:21 | 0 | Assignments.cs:3:10:3:10 | M | | Assignments.cs:8:21:8:21 | (...) ... | Assignments.cs:3:10:3:10 | M | | Assignments.cs:9:9:9:9 | access to local variable d | Assignments.cs:3:10:3:10 | M | -| Assignments.cs:9:9:9:14 | ... = ... | Assignments.cs:3:10:3:10 | M | -| Assignments.cs:9:9:9:14 | dynamic call to operator - | Assignments.cs:3:10:3:10 | M | +| Assignments.cs:9:9:9:14 | ... -= ... | Assignments.cs:3:10:3:10 | M | | Assignments.cs:9:9:9:15 | ...; | Assignments.cs:3:10:3:10 | M | | Assignments.cs:9:14:9:14 | 2 | Assignments.cs:3:10:3:10 | M | | Assignments.cs:11:9:11:34 | ... ...; | Assignments.cs:3:10:3:10 | M | | Assignments.cs:11:13:11:33 | Assignments a = ... | Assignments.cs:3:10:3:10 | M | | Assignments.cs:11:17:11:33 | object creation of type Assignments | Assignments.cs:3:10:3:10 | M | | Assignments.cs:12:9:12:9 | access to local variable a | Assignments.cs:3:10:3:10 | M | -| Assignments.cs:12:9:12:17 | ... = ... | Assignments.cs:3:10:3:10 | M | -| Assignments.cs:12:9:12:17 | call to operator + | Assignments.cs:3:10:3:10 | M | +| Assignments.cs:12:9:12:17 | ... += ... | Assignments.cs:3:10:3:10 | M | | Assignments.cs:12:9:12:18 | ...; | Assignments.cs:3:10:3:10 | M | | Assignments.cs:12:14:12:17 | this access | Assignments.cs:3:10:3:10 | M | | Assignments.cs:14:9:14:13 | access to event Event | Assignments.cs:3:10:3:10 | M | @@ -1165,20 +1132,14 @@ nodeEnclosing | ConditionalAccess.cs:52:18:52:38 | ... = ... | ConditionalAccess.cs:46:10:46:11 | M9 | | ConditionalAccess.cs:52:32:52:38 | "World" | ConditionalAccess.cs:46:10:46:11 | M9 | | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | M9 | -| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | M9 | -| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:46:10:46:11 | M9 | | ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:46:10:46:11 | M9 | | ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 | -| ConditionalAccess.cs:53:12:53:25 | ... - ... | ConditionalAccess.cs:46:10:46:11 | M9 | -| ConditionalAccess.cs:53:12:53:25 | ... = ... | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:53:12:53:25 | ... -= ... | ConditionalAccess.cs:46:10:46:11 | M9 | | ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:46:10:46:11 | M9 | | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | M9 | -| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | M9 | -| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:46:10:46:11 | M9 | | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:46:10:46:11 | M9 | | ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 | -| ConditionalAccess.cs:54:12:54:29 | ... + ... | ConditionalAccess.cs:46:10:46:11 | M9 | -| ConditionalAccess.cs:54:12:54:29 | ... = ... | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:54:12:54:29 | ... += ... | ConditionalAccess.cs:46:10:46:11 | M9 | | ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:46:10:46:11 | M9 | | ConditionalAccess.cs:60:26:60:38 | enter CommaJoinWith | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith | | ConditionalAccess.cs:60:26:60:38 | exit CommaJoinWith | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith | @@ -1412,8 +1373,7 @@ nodeEnclosing | Conditions.cs:105:9:106:20 | if (...) ... | Conditions.cs:102:12:102:13 | M8 | | Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:102:12:102:13 | M8 | | Conditions.cs:106:13:106:13 | access to local variable x | Conditions.cs:102:12:102:13 | M8 | -| Conditions.cs:106:13:106:19 | ... + ... | Conditions.cs:102:12:102:13 | M8 | -| Conditions.cs:106:13:106:19 | ... = ... | Conditions.cs:102:12:102:13 | M8 | +| Conditions.cs:106:13:106:19 | ... += ... | Conditions.cs:102:12:102:13 | M8 | | Conditions.cs:106:13:106:20 | ...; | Conditions.cs:102:12:102:13 | M8 | | Conditions.cs:106:18:106:19 | "" | Conditions.cs:102:12:102:13 | M8 | | Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:102:12:102:13 | M8 | @@ -1426,8 +1386,7 @@ nodeEnclosing | Conditions.cs:108:17:108:18 | [true] !... | Conditions.cs:102:12:102:13 | M8 | | Conditions.cs:108:18:108:18 | access to parameter b | Conditions.cs:102:12:102:13 | M8 | | Conditions.cs:109:17:109:17 | access to local variable x | Conditions.cs:102:12:102:13 | M8 | -| Conditions.cs:109:17:109:23 | ... + ... | Conditions.cs:102:12:102:13 | M8 | -| Conditions.cs:109:17:109:23 | ... = ... | Conditions.cs:102:12:102:13 | M8 | +| Conditions.cs:109:17:109:23 | ... += ... | Conditions.cs:102:12:102:13 | M8 | | Conditions.cs:109:17:109:24 | ...; | Conditions.cs:102:12:102:13 | M8 | | Conditions.cs:109:22:109:23 | "" | Conditions.cs:102:12:102:13 | M8 | | Conditions.cs:110:9:110:17 | return ...; | Conditions.cs:102:12:102:13 | M8 | @@ -2131,8 +2090,7 @@ nodeEnclosing | Finally.cs:271:13:271:35 | ...; | Finally.cs:263:10:263:12 | M13 | | Finally.cs:271:31:271:33 | "3" | Finally.cs:263:10:263:12 | M13 | | Finally.cs:272:13:272:13 | access to parameter i | Finally.cs:263:10:263:12 | M13 | -| Finally.cs:272:13:272:18 | ... + ... | Finally.cs:263:10:263:12 | M13 | -| Finally.cs:272:13:272:18 | ... = ... | Finally.cs:263:10:263:12 | M13 | +| Finally.cs:272:13:272:18 | ... += ... | Finally.cs:263:10:263:12 | M13 | | 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 | @@ -4204,11 +4162,8 @@ nodeEnclosing | cflow.cs:210:9:221:36 | do ... while (...); | cflow.cs:208:10:208:11 | Do | | cflow.cs:211:9:221:9 | {...} | cflow.cs:208:10:208:11 | Do | | cflow.cs:212:13:212:17 | access to field Field | cflow.cs:208:10:208:11 | Do | -| cflow.cs:212:13:212:17 | access to field Field | cflow.cs:208:10:208:11 | Do | | cflow.cs:212:13:212:17 | this access | cflow.cs:208:10:208:11 | Do | -| cflow.cs:212:13:212:17 | this access | cflow.cs:208:10:208:11 | Do | -| cflow.cs:212:13:212:24 | ... + ... | cflow.cs:208:10:208:11 | Do | -| cflow.cs:212:13:212:24 | ... = ... | cflow.cs:208:10:208:11 | Do | +| cflow.cs:212:13:212:24 | ... += ... | cflow.cs:208:10:208:11 | Do | | cflow.cs:212:13:212:25 | ...; | cflow.cs:208:10:208:11 | Do | | cflow.cs:212:22:212:24 | "a" | cflow.cs:208:10:208:11 | Do | | cflow.cs:213:13:216:13 | if (...) ... | cflow.cs:208:10:208:11 | Do | @@ -4243,11 +4198,8 @@ nodeEnclosing | cflow.cs:226:62:226:63 | 10 | cflow.cs:224:10:224:16 | Foreach | | cflow.cs:227:9:237:9 | {...} | cflow.cs:224:10:224:16 | Foreach | | cflow.cs:228:13:228:17 | access to field Field | cflow.cs:224:10:224:16 | Foreach | -| cflow.cs:228:13:228:17 | access to field Field | cflow.cs:224:10:224:16 | Foreach | | cflow.cs:228:13:228:17 | this access | cflow.cs:224:10:224:16 | Foreach | -| cflow.cs:228:13:228:17 | this access | cflow.cs:224:10:224:16 | Foreach | -| cflow.cs:228:13:228:22 | ... + ... | cflow.cs:224:10:224:16 | Foreach | -| cflow.cs:228:13:228:22 | ... = ... | cflow.cs:224:10:224:16 | Foreach | +| cflow.cs:228:13:228:22 | ... += ... | cflow.cs:224:10:224:16 | Foreach | | cflow.cs:228:13:228:23 | ...; | cflow.cs:224:10:224:16 | Foreach | | cflow.cs:228:22:228:22 | access to local variable x | cflow.cs:224:10:224:16 | Foreach | | cflow.cs:229:13:232:13 | if (...) ... | cflow.cs:224:10:224:16 | Foreach | @@ -4666,7 +4618,6 @@ blockEnclosing | ConditionalAccess.cs:42:9:42:11 | enter get_Item | ConditionalAccess.cs:42:9:42:11 | get_Item | | ConditionalAccess.cs:43:9:43:11 | enter set_Item | ConditionalAccess.cs:43:9:43:11 | set_Item | | ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:46:10:46:11 | M9 | -| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:46:10:46:11 | M9 | | ConditionalAccess.cs:48:24:48:25 | 42 | ConditionalAccess.cs:46:10:46:11 | M9 | | ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 | | ConditionalAccess.cs:49:26:49:32 | "Hello" | ConditionalAccess.cs:46:10:46:11 | M9 | @@ -4678,13 +4629,10 @@ blockEnclosing | ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:46:10:46:11 | M9 | | ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 | | ConditionalAccess.cs:52:32:52:38 | "World" | ConditionalAccess.cs:46:10:46:11 | M9 | -| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | M9 | | ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:46:10:46:11 | M9 | | ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 | | ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:46:10:46:11 | M9 | -| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | M9 | | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:46:10:46:11 | M9 | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 | | ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:46:10:46:11 | M9 | | ConditionalAccess.cs:60:26:60:38 | enter CommaJoinWith | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith | | Conditions.cs:1:7:1:16 | enter Conditions | Conditions.cs:1:7:1:16 | Conditions | diff --git a/csharp/ql/test/library-tests/controlflow/graph/EntryElement.expected b/csharp/ql/test/library-tests/controlflow/graph/EntryElement.expected index 410916afabd..248562dbc83 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/EntryElement.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/EntryElement.expected @@ -109,77 +109,48 @@ | AccessorCalls.cs:39:16:39:16 | 0 | AccessorCalls.cs:39:16:39:16 | 0 | | AccessorCalls.cs:43:5:47:5 | {...} | AccessorCalls.cs:43:5:47:5 | {...} | | AccessorCalls.cs:44:9:44:12 | this access | AccessorCalls.cs:44:9:44:12 | this access | -| AccessorCalls.cs:44:9:44:12 | this access | AccessorCalls.cs:44:9:44:12 | this access | | AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:44:9:44:12 | this access | -| AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:44:9:44:12 | this access | -| AccessorCalls.cs:44:9:44:32 | ... + ... | AccessorCalls.cs:44:9:44:12 | this access | | AccessorCalls.cs:44:9:44:32 | ... += ... | AccessorCalls.cs:44:9:44:12 | this access | -| AccessorCalls.cs:44:9:44:32 | ... = ... | AccessorCalls.cs:44:9:44:12 | this access | | AccessorCalls.cs:44:9:44:33 | ...; | AccessorCalls.cs:44:9:44:33 | ...; | | AccessorCalls.cs:44:23:44:26 | this access | AccessorCalls.cs:44:23:44:26 | this access | | AccessorCalls.cs:44:23:44:32 | access to field Field | AccessorCalls.cs:44:23:44:26 | this access | | AccessorCalls.cs:45:9:45:12 | this access | AccessorCalls.cs:45:9:45:12 | this access | -| AccessorCalls.cs:45:9:45:12 | this access | AccessorCalls.cs:45:9:45:12 | this access | | AccessorCalls.cs:45:9:45:17 | access to property Prop | AccessorCalls.cs:45:9:45:12 | this access | -| AccessorCalls.cs:45:9:45:17 | access to property Prop | AccessorCalls.cs:45:9:45:12 | this access | -| AccessorCalls.cs:45:9:45:30 | ... + ... | AccessorCalls.cs:45:9:45:12 | this access | | AccessorCalls.cs:45:9:45:30 | ... += ... | AccessorCalls.cs:45:9:45:12 | this access | -| AccessorCalls.cs:45:9:45:30 | ... = ... | AccessorCalls.cs:45:9:45:12 | this access | | AccessorCalls.cs:45:9:45:31 | ...; | AccessorCalls.cs:45:9:45:31 | ...; | | AccessorCalls.cs:45:22:45:25 | this access | AccessorCalls.cs:45:22:45:25 | this access | | AccessorCalls.cs:45:22:45:30 | access to property Prop | AccessorCalls.cs:45:22:45:25 | this access | | AccessorCalls.cs:46:9:46:12 | this access | AccessorCalls.cs:46:9:46:12 | this access | -| AccessorCalls.cs:46:9:46:12 | this access | AccessorCalls.cs:46:9:46:12 | this access | | AccessorCalls.cs:46:9:46:15 | access to indexer | AccessorCalls.cs:46:9:46:12 | this access | -| AccessorCalls.cs:46:9:46:15 | access to indexer | AccessorCalls.cs:46:9:46:12 | this access | -| AccessorCalls.cs:46:9:46:26 | ... + ... | AccessorCalls.cs:46:9:46:12 | this access | | AccessorCalls.cs:46:9:46:26 | ... += ... | AccessorCalls.cs:46:9:46:12 | this access | -| AccessorCalls.cs:46:9:46:26 | ... = ... | AccessorCalls.cs:46:9:46:12 | this access | | AccessorCalls.cs:46:9:46:27 | ...; | AccessorCalls.cs:46:9:46:27 | ...; | | AccessorCalls.cs:46:14:46:14 | 0 | AccessorCalls.cs:46:14:46:14 | 0 | -| AccessorCalls.cs:46:14:46:14 | 0 | AccessorCalls.cs:46:14:46:14 | 0 | | AccessorCalls.cs:46:20:46:23 | this access | AccessorCalls.cs:46:20:46:23 | this access | | AccessorCalls.cs:46:20:46:26 | access to indexer | AccessorCalls.cs:46:20:46:23 | this access | | AccessorCalls.cs:46:25:46:25 | 0 | AccessorCalls.cs:46:25:46:25 | 0 | | AccessorCalls.cs:50:5:54:5 | {...} | AccessorCalls.cs:50:5:54:5 | {...} | | AccessorCalls.cs:51:9:51:12 | this access | AccessorCalls.cs:51:9:51:12 | this access | -| AccessorCalls.cs:51:9:51:12 | this access | AccessorCalls.cs:51:9:51:12 | this access | -| AccessorCalls.cs:51:9:51:14 | access to field x | AccessorCalls.cs:51:9:51:12 | this access | | AccessorCalls.cs:51:9:51:14 | access to field x | AccessorCalls.cs:51:9:51:12 | this access | | AccessorCalls.cs:51:9:51:20 | access to field Field | AccessorCalls.cs:51:9:51:12 | this access | -| AccessorCalls.cs:51:9:51:20 | access to field Field | AccessorCalls.cs:51:9:51:12 | this access | -| AccessorCalls.cs:51:9:51:36 | ... + ... | AccessorCalls.cs:51:9:51:12 | this access | | AccessorCalls.cs:51:9:51:36 | ... += ... | AccessorCalls.cs:51:9:51:12 | this access | -| AccessorCalls.cs:51:9:51:36 | ... = ... | AccessorCalls.cs:51:9:51:12 | this access | | AccessorCalls.cs:51:9:51:37 | ...; | AccessorCalls.cs:51:9:51:37 | ...; | | AccessorCalls.cs:51:25:51:28 | this access | AccessorCalls.cs:51:25:51:28 | this access | | AccessorCalls.cs:51:25:51:30 | access to field x | AccessorCalls.cs:51:25:51:28 | this access | | AccessorCalls.cs:51:25:51:36 | access to field Field | AccessorCalls.cs:51:25:51:28 | this access | | AccessorCalls.cs:52:9:52:12 | this access | AccessorCalls.cs:52:9:52:12 | this access | -| AccessorCalls.cs:52:9:52:12 | this access | AccessorCalls.cs:52:9:52:12 | this access | -| AccessorCalls.cs:52:9:52:14 | access to field x | AccessorCalls.cs:52:9:52:12 | this access | | AccessorCalls.cs:52:9:52:14 | access to field x | AccessorCalls.cs:52:9:52:12 | this access | | AccessorCalls.cs:52:9:52:19 | access to property Prop | AccessorCalls.cs:52:9:52:12 | this access | -| AccessorCalls.cs:52:9:52:19 | access to property Prop | AccessorCalls.cs:52:9:52:12 | this access | -| AccessorCalls.cs:52:9:52:34 | ... + ... | AccessorCalls.cs:52:9:52:12 | this access | | AccessorCalls.cs:52:9:52:34 | ... += ... | AccessorCalls.cs:52:9:52:12 | this access | -| AccessorCalls.cs:52:9:52:34 | ... = ... | AccessorCalls.cs:52:9:52:12 | this access | | AccessorCalls.cs:52:9:52:35 | ...; | AccessorCalls.cs:52:9:52:35 | ...; | | AccessorCalls.cs:52:24:52:27 | this access | AccessorCalls.cs:52:24:52:27 | this access | | AccessorCalls.cs:52:24:52:29 | access to field x | AccessorCalls.cs:52:24:52:27 | this access | | AccessorCalls.cs:52:24:52:34 | access to property Prop | AccessorCalls.cs:52:24:52:27 | this access | | AccessorCalls.cs:53:9:53:12 | this access | AccessorCalls.cs:53:9:53:12 | this access | -| AccessorCalls.cs:53:9:53:12 | this access | AccessorCalls.cs:53:9:53:12 | this access | -| AccessorCalls.cs:53:9:53:14 | access to field x | AccessorCalls.cs:53:9:53:12 | this access | | AccessorCalls.cs:53:9:53:14 | access to field x | AccessorCalls.cs:53:9:53:12 | this access | | AccessorCalls.cs:53:9:53:17 | access to indexer | AccessorCalls.cs:53:9:53:12 | this access | -| AccessorCalls.cs:53:9:53:17 | access to indexer | AccessorCalls.cs:53:9:53:12 | this access | -| AccessorCalls.cs:53:9:53:30 | ... + ... | AccessorCalls.cs:53:9:53:12 | this access | | AccessorCalls.cs:53:9:53:30 | ... += ... | AccessorCalls.cs:53:9:53:12 | this access | -| AccessorCalls.cs:53:9:53:30 | ... = ... | AccessorCalls.cs:53:9:53:12 | this access | | AccessorCalls.cs:53:9:53:31 | ...; | AccessorCalls.cs:53:9:53:31 | ...; | | AccessorCalls.cs:53:16:53:16 | 0 | AccessorCalls.cs:53:16:53:16 | 0 | -| AccessorCalls.cs:53:16:53:16 | 0 | AccessorCalls.cs:53:16:53:16 | 0 | | AccessorCalls.cs:53:22:53:25 | this access | AccessorCalls.cs:53:22:53:25 | this access | | AccessorCalls.cs:53:22:53:27 | access to field x | AccessorCalls.cs:53:22:53:25 | this access | | AccessorCalls.cs:53:22:53:30 | access to indexer | AccessorCalls.cs:53:22:53:25 | this access | @@ -249,24 +220,15 @@ | AccessorCalls.cs:70:9:70:21 | dynamic call to operator ++ | AccessorCalls.cs:70:9:70:9 | access to local variable d | | AccessorCalls.cs:70:9:70:22 | ...; | AccessorCalls.cs:70:9:70:22 | ...; | | AccessorCalls.cs:71:9:71:9 | access to local variable d | AccessorCalls.cs:71:9:71:9 | access to local variable d | -| AccessorCalls.cs:71:9:71:9 | access to local variable d | AccessorCalls.cs:71:9:71:9 | access to local variable d | -| AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | AccessorCalls.cs:71:9:71:9 | access to local variable d | | AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | AccessorCalls.cs:71:9:71:9 | access to local variable d | | AccessorCalls.cs:71:9:71:25 | ... += ... | AccessorCalls.cs:71:9:71:9 | access to local variable d | -| AccessorCalls.cs:71:9:71:25 | ... = ... | AccessorCalls.cs:71:9:71:9 | access to local variable d | -| AccessorCalls.cs:71:9:71:25 | dynamic call to operator + | AccessorCalls.cs:71:9:71:9 | access to local variable d | | AccessorCalls.cs:71:9:71:26 | ...; | AccessorCalls.cs:71:9:71:26 | ...; | | AccessorCalls.cs:71:25:71:25 | access to parameter e | AccessorCalls.cs:71:25:71:25 | access to parameter e | | AccessorCalls.cs:72:9:72:9 | access to local variable d | AccessorCalls.cs:72:9:72:9 | access to local variable d | -| AccessorCalls.cs:72:9:72:9 | access to local variable d | AccessorCalls.cs:72:9:72:9 | access to local variable d | -| AccessorCalls.cs:72:9:72:12 | dynamic access to element | AccessorCalls.cs:72:9:72:9 | access to local variable d | | AccessorCalls.cs:72:9:72:12 | dynamic access to element | AccessorCalls.cs:72:9:72:9 | access to local variable d | | AccessorCalls.cs:72:9:72:20 | ... += ... | AccessorCalls.cs:72:9:72:9 | access to local variable d | -| AccessorCalls.cs:72:9:72:20 | ... = ... | AccessorCalls.cs:72:9:72:9 | access to local variable d | -| AccessorCalls.cs:72:9:72:20 | dynamic call to operator + | AccessorCalls.cs:72:9:72:9 | access to local variable d | | AccessorCalls.cs:72:9:72:21 | ...; | AccessorCalls.cs:72:9:72:21 | ...; | | AccessorCalls.cs:72:11:72:11 | 0 | AccessorCalls.cs:72:11:72:11 | 0 | -| AccessorCalls.cs:72:11:72:11 | 0 | AccessorCalls.cs:72:11:72:11 | 0 | | AccessorCalls.cs:72:17:72:17 | access to local variable d | AccessorCalls.cs:72:17:72:17 | access to local variable d | | AccessorCalls.cs:72:17:72:20 | dynamic access to element | AccessorCalls.cs:72:17:72:17 | access to local variable d | | AccessorCalls.cs:72:19:72:19 | 1 | AccessorCalls.cs:72:19:72:19 | 1 | @@ -689,9 +651,7 @@ | Assignments.cs:5:13:5:17 | Int32 x = ... | Assignments.cs:5:17:5:17 | 0 | | Assignments.cs:5:17:5:17 | 0 | Assignments.cs:5:17:5:17 | 0 | | Assignments.cs:6:9:6:9 | access to local variable x | Assignments.cs:6:9:6:9 | access to local variable x | -| Assignments.cs:6:9:6:14 | ... + ... | Assignments.cs:6:9:6:9 | access to local variable x | | Assignments.cs:6:9:6:14 | ... += ... | Assignments.cs:6:9:6:9 | access to local variable x | -| Assignments.cs:6:9:6:14 | ... = ... | Assignments.cs:6:9:6:9 | access to local variable x | | Assignments.cs:6:9:6:15 | ...; | Assignments.cs:6:9:6:15 | ...; | | Assignments.cs:6:14:6:14 | 1 | Assignments.cs:6:14:6:14 | 1 | | Assignments.cs:8:9:8:22 | ... ...; | Assignments.cs:8:9:8:22 | ... ...; | @@ -700,8 +660,6 @@ | Assignments.cs:8:21:8:21 | (...) ... | Assignments.cs:8:21:8:21 | 0 | | Assignments.cs:9:9:9:9 | access to local variable d | Assignments.cs:9:9:9:9 | access to local variable d | | Assignments.cs:9:9:9:14 | ... -= ... | Assignments.cs:9:9:9:9 | access to local variable d | -| Assignments.cs:9:9:9:14 | ... = ... | Assignments.cs:9:9:9:9 | access to local variable d | -| Assignments.cs:9:9:9:14 | dynamic call to operator - | Assignments.cs:9:9:9:9 | access to local variable d | | Assignments.cs:9:9:9:15 | ...; | Assignments.cs:9:9:9:15 | ...; | | Assignments.cs:9:14:9:14 | 2 | Assignments.cs:9:14:9:14 | 2 | | Assignments.cs:11:9:11:34 | ... ...; | Assignments.cs:11:9:11:34 | ... ...; | @@ -709,8 +667,6 @@ | Assignments.cs:11:17:11:33 | object creation of type Assignments | Assignments.cs:11:17:11:33 | object creation of type Assignments | | Assignments.cs:12:9:12:9 | access to local variable a | Assignments.cs:12:9:12:9 | access to local variable a | | Assignments.cs:12:9:12:17 | ... += ... | Assignments.cs:12:9:12:9 | access to local variable a | -| Assignments.cs:12:9:12:17 | ... = ... | Assignments.cs:12:9:12:9 | access to local variable a | -| Assignments.cs:12:9:12:17 | call to operator + | Assignments.cs:12:9:12:9 | access to local variable a | | Assignments.cs:12:9:12:18 | ...; | Assignments.cs:12:9:12:18 | ...; | | Assignments.cs:12:14:12:17 | this access | Assignments.cs:12:14:12:17 | this access | | Assignments.cs:14:9:14:13 | access to event Event | Assignments.cs:14:9:14:13 | this access | @@ -966,22 +922,14 @@ | ConditionalAccess.cs:52:18:52:38 | ... = ... | ConditionalAccess.cs:52:9:52:10 | access to parameter ca | | ConditionalAccess.cs:52:32:52:38 | "World" | ConditionalAccess.cs:52:32:52:38 | "World" | | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | -| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | -| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | | ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | | ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:26 | ...; | -| ConditionalAccess.cs:53:12:53:25 | ... - ... | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | | ConditionalAccess.cs:53:12:53:25 | ... -= ... | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | -| ConditionalAccess.cs:53:12:53:25 | ... = ... | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | | ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:25:53:25 | 1 | | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | -| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | -| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | | ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:30 | ...; | -| ConditionalAccess.cs:54:12:54:29 | ... + ... | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | | ConditionalAccess.cs:54:12:54:29 | ... += ... | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | -| ConditionalAccess.cs:54:12:54:29 | ... = ... | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | | ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:27:54:29 | "!" | | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | | ConditionalAccess.cs:60:70:60:78 | ... + ... | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | @@ -1180,9 +1128,7 @@ | Conditions.cs:105:9:106:20 | if (...) ... | Conditions.cs:105:9:106:20 | if (...) ... | | Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:105:13:105:13 | access to parameter b | | Conditions.cs:106:13:106:13 | access to local variable x | Conditions.cs:106:13:106:13 | access to local variable x | -| Conditions.cs:106:13:106:19 | ... + ... | Conditions.cs:106:13:106:13 | access to local variable x | | Conditions.cs:106:13:106:19 | ... += ... | Conditions.cs:106:13:106:13 | access to local variable x | -| Conditions.cs:106:13:106:19 | ... = ... | Conditions.cs:106:13:106:13 | access to local variable x | | Conditions.cs:106:13:106:20 | ...; | Conditions.cs:106:13:106:20 | ...; | | Conditions.cs:106:18:106:19 | "" | Conditions.cs:106:18:106:19 | "" | | Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:107:9:109:24 | if (...) ... | @@ -1194,9 +1140,7 @@ | Conditions.cs:108:17:108:18 | !... | Conditions.cs:108:18:108:18 | access to parameter b | | Conditions.cs:108:18:108:18 | access to parameter b | Conditions.cs:108:18:108:18 | access to parameter b | | Conditions.cs:109:17:109:17 | access to local variable x | Conditions.cs:109:17:109:17 | access to local variable x | -| Conditions.cs:109:17:109:23 | ... + ... | Conditions.cs:109:17:109:17 | access to local variable x | | Conditions.cs:109:17:109:23 | ... += ... | Conditions.cs:109:17:109:17 | access to local variable x | -| Conditions.cs:109:17:109:23 | ... = ... | Conditions.cs:109:17:109:17 | access to local variable x | | Conditions.cs:109:17:109:24 | ...; | Conditions.cs:109:17:109:24 | ...; | | Conditions.cs:109:22:109:23 | "" | Conditions.cs:109:22:109:23 | "" | | Conditions.cs:110:9:110:17 | return ...; | Conditions.cs:110:16:110:16 | access to local variable x | @@ -1776,9 +1720,7 @@ | Finally.cs:271:13:271:35 | ...; | Finally.cs:271:13:271:35 | ...; | | Finally.cs:271:31:271:33 | "3" | Finally.cs:271:31:271:33 | "3" | | Finally.cs:272:13:272:13 | access to parameter i | Finally.cs:272:13:272:13 | access to parameter i | -| Finally.cs:272:13:272:18 | ... + ... | Finally.cs:272:13:272:13 | access to parameter i | | Finally.cs:272:13:272:18 | ... += ... | Finally.cs:272:13:272:13 | access to parameter i | -| Finally.cs:272:13:272:18 | ... = ... | Finally.cs:272:13:272:13 | access to parameter i | | 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 | @@ -3417,12 +3359,8 @@ | cflow.cs:210:9:221:36 | do ... while (...); | cflow.cs:210:9:221:36 | do ... while (...); | | cflow.cs:211:9:221:9 | {...} | cflow.cs:211:9:221:9 | {...} | | cflow.cs:212:13:212:17 | access to field Field | cflow.cs:212:13:212:17 | this access | -| cflow.cs:212:13:212:17 | access to field Field | cflow.cs:212:13:212:17 | this access | | cflow.cs:212:13:212:17 | this access | cflow.cs:212:13:212:17 | this access | -| cflow.cs:212:13:212:17 | this access | cflow.cs:212:13:212:17 | this access | -| cflow.cs:212:13:212:24 | ... + ... | cflow.cs:212:13:212:17 | this access | | cflow.cs:212:13:212:24 | ... += ... | cflow.cs:212:13:212:17 | this access | -| cflow.cs:212:13:212:24 | ... = ... | cflow.cs:212:13:212:17 | this access | | cflow.cs:212:13:212:25 | ...; | cflow.cs:212:13:212:25 | ...; | | cflow.cs:212:22:212:24 | "a" | cflow.cs:212:22:212:24 | "a" | | cflow.cs:213:13:216:13 | if (...) ... | cflow.cs:213:13:216:13 | if (...) ... | @@ -3454,12 +3392,8 @@ | cflow.cs:226:62:226:63 | 10 | cflow.cs:226:62:226:63 | 10 | | cflow.cs:227:9:237:9 | {...} | cflow.cs:227:9:237:9 | {...} | | cflow.cs:228:13:228:17 | access to field Field | cflow.cs:228:13:228:17 | this access | -| cflow.cs:228:13:228:17 | access to field Field | cflow.cs:228:13:228:17 | this access | | cflow.cs:228:13:228:17 | this access | cflow.cs:228:13:228:17 | this access | -| cflow.cs:228:13:228:17 | this access | cflow.cs:228:13:228:17 | this access | -| cflow.cs:228:13:228:22 | ... + ... | cflow.cs:228:13:228:17 | this access | | cflow.cs:228:13:228:22 | ... += ... | cflow.cs:228:13:228:17 | this access | -| cflow.cs:228:13:228:22 | ... = ... | cflow.cs:228:13:228:17 | this access | | cflow.cs:228:13:228:23 | ...; | cflow.cs:228:13:228:23 | ...; | | cflow.cs:228:22:228:22 | access to local variable x | cflow.cs:228:22:228:22 | access to local variable x | | cflow.cs:229:13:232:13 | if (...) ... | cflow.cs:229:13:232:13 | if (...) ... | diff --git a/csharp/ql/test/library-tests/controlflow/graph/ExitElement.expected b/csharp/ql/test/library-tests/controlflow/graph/ExitElement.expected index a6794112ebd..602dd8c2a52 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/ExitElement.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/ExitElement.expected @@ -107,78 +107,49 @@ | AccessorCalls.cs:39:9:39:19 | ...++ | AccessorCalls.cs:39:9:39:19 | ...++ | normal | | AccessorCalls.cs:39:9:39:20 | ...; | AccessorCalls.cs:39:9:39:19 | ...++ | normal | | AccessorCalls.cs:39:16:39:16 | 0 | AccessorCalls.cs:39:16:39:16 | 0 | normal | -| AccessorCalls.cs:43:5:47:5 | {...} | AccessorCalls.cs:46:9:46:26 | ... = ... | normal | +| AccessorCalls.cs:43:5:47:5 | {...} | AccessorCalls.cs:46:9:46:26 | ... += ... | normal | | AccessorCalls.cs:44:9:44:12 | this access | AccessorCalls.cs:44:9:44:12 | this access | normal | -| AccessorCalls.cs:44:9:44:12 | this access | AccessorCalls.cs:44:9:44:12 | this access | normal | -| AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:44:9:44:12 | this access | normal | | AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:44:9:44:18 | access to field Field | normal | -| AccessorCalls.cs:44:9:44:32 | ... + ... | AccessorCalls.cs:44:9:44:32 | ... + ... | normal | -| AccessorCalls.cs:44:9:44:32 | ... += ... | AccessorCalls.cs:44:9:44:32 | ... = ... | normal | -| AccessorCalls.cs:44:9:44:32 | ... = ... | AccessorCalls.cs:44:9:44:32 | ... = ... | normal | -| AccessorCalls.cs:44:9:44:33 | ...; | AccessorCalls.cs:44:9:44:32 | ... = ... | normal | +| AccessorCalls.cs:44:9:44:32 | ... += ... | AccessorCalls.cs:44:9:44:32 | ... += ... | normal | +| AccessorCalls.cs:44:9:44:33 | ...; | AccessorCalls.cs:44:9:44:32 | ... += ... | normal | | AccessorCalls.cs:44:23:44:26 | this access | AccessorCalls.cs:44:23:44:26 | this access | normal | | AccessorCalls.cs:44:23:44:32 | access to field Field | AccessorCalls.cs:44:23:44:32 | access to field Field | normal | | AccessorCalls.cs:45:9:45:12 | this access | AccessorCalls.cs:45:9:45:12 | this access | normal | -| AccessorCalls.cs:45:9:45:12 | this access | AccessorCalls.cs:45:9:45:12 | this access | normal | -| AccessorCalls.cs:45:9:45:17 | access to property Prop | AccessorCalls.cs:45:9:45:12 | this access | normal | | AccessorCalls.cs:45:9:45:17 | access to property Prop | AccessorCalls.cs:45:9:45:17 | access to property Prop | normal | -| AccessorCalls.cs:45:9:45:30 | ... + ... | AccessorCalls.cs:45:9:45:30 | ... + ... | normal | -| AccessorCalls.cs:45:9:45:30 | ... += ... | AccessorCalls.cs:45:9:45:30 | ... = ... | normal | -| AccessorCalls.cs:45:9:45:30 | ... = ... | AccessorCalls.cs:45:9:45:30 | ... = ... | normal | -| AccessorCalls.cs:45:9:45:31 | ...; | AccessorCalls.cs:45:9:45:30 | ... = ... | normal | +| AccessorCalls.cs:45:9:45:30 | ... += ... | AccessorCalls.cs:45:9:45:30 | ... += ... | normal | +| AccessorCalls.cs:45:9:45:31 | ...; | AccessorCalls.cs:45:9:45:30 | ... += ... | normal | | AccessorCalls.cs:45:22:45:25 | this access | AccessorCalls.cs:45:22:45:25 | this access | normal | | AccessorCalls.cs:45:22:45:30 | access to property Prop | AccessorCalls.cs:45:22:45:30 | access to property Prop | normal | | AccessorCalls.cs:46:9:46:12 | this access | AccessorCalls.cs:46:9:46:12 | this access | normal | -| AccessorCalls.cs:46:9:46:12 | this access | AccessorCalls.cs:46:9:46:12 | this access | normal | | AccessorCalls.cs:46:9:46:15 | access to indexer | AccessorCalls.cs:46:9:46:15 | access to indexer | normal | -| AccessorCalls.cs:46:9:46:15 | access to indexer | AccessorCalls.cs:46:14:46:14 | 0 | normal | -| AccessorCalls.cs:46:9:46:26 | ... + ... | AccessorCalls.cs:46:9:46:26 | ... + ... | normal | -| AccessorCalls.cs:46:9:46:26 | ... += ... | AccessorCalls.cs:46:9:46:26 | ... = ... | normal | -| AccessorCalls.cs:46:9:46:26 | ... = ... | AccessorCalls.cs:46:9:46:26 | ... = ... | normal | -| AccessorCalls.cs:46:9:46:27 | ...; | AccessorCalls.cs:46:9:46:26 | ... = ... | normal | -| AccessorCalls.cs:46:14:46:14 | 0 | AccessorCalls.cs:46:14:46:14 | 0 | normal | +| AccessorCalls.cs:46:9:46:26 | ... += ... | AccessorCalls.cs:46:9:46:26 | ... += ... | normal | +| AccessorCalls.cs:46:9:46:27 | ...; | AccessorCalls.cs:46:9:46:26 | ... += ... | normal | | AccessorCalls.cs:46:14:46:14 | 0 | AccessorCalls.cs:46:14:46:14 | 0 | normal | | AccessorCalls.cs:46:20:46:23 | this access | AccessorCalls.cs:46:20:46:23 | this access | normal | | AccessorCalls.cs:46:20:46:26 | access to indexer | AccessorCalls.cs:46:20:46:26 | access to indexer | normal | | AccessorCalls.cs:46:25:46:25 | 0 | AccessorCalls.cs:46:25:46:25 | 0 | normal | -| AccessorCalls.cs:50:5:54:5 | {...} | AccessorCalls.cs:53:9:53:30 | ... = ... | normal | -| AccessorCalls.cs:51:9:51:12 | this access | AccessorCalls.cs:51:9:51:12 | this access | normal | +| AccessorCalls.cs:50:5:54:5 | {...} | AccessorCalls.cs:53:9:53:30 | ... += ... | normal | | AccessorCalls.cs:51:9:51:12 | this access | AccessorCalls.cs:51:9:51:12 | this access | normal | | AccessorCalls.cs:51:9:51:14 | access to field x | AccessorCalls.cs:51:9:51:14 | access to field x | normal | -| AccessorCalls.cs:51:9:51:14 | access to field x | AccessorCalls.cs:51:9:51:14 | access to field x | normal | -| AccessorCalls.cs:51:9:51:20 | access to field Field | AccessorCalls.cs:51:9:51:14 | access to field x | normal | | AccessorCalls.cs:51:9:51:20 | access to field Field | AccessorCalls.cs:51:9:51:20 | access to field Field | normal | -| AccessorCalls.cs:51:9:51:36 | ... + ... | AccessorCalls.cs:51:9:51:36 | ... + ... | normal | -| AccessorCalls.cs:51:9:51:36 | ... += ... | AccessorCalls.cs:51:9:51:36 | ... = ... | normal | -| AccessorCalls.cs:51:9:51:36 | ... = ... | AccessorCalls.cs:51:9:51:36 | ... = ... | normal | -| AccessorCalls.cs:51:9:51:37 | ...; | AccessorCalls.cs:51:9:51:36 | ... = ... | normal | +| AccessorCalls.cs:51:9:51:36 | ... += ... | AccessorCalls.cs:51:9:51:36 | ... += ... | normal | +| AccessorCalls.cs:51:9:51:37 | ...; | AccessorCalls.cs:51:9:51:36 | ... += ... | normal | | AccessorCalls.cs:51:25:51:28 | this access | AccessorCalls.cs:51:25:51:28 | this access | normal | | AccessorCalls.cs:51:25:51:30 | access to field x | AccessorCalls.cs:51:25:51:30 | access to field x | normal | | AccessorCalls.cs:51:25:51:36 | access to field Field | AccessorCalls.cs:51:25:51:36 | access to field Field | normal | | AccessorCalls.cs:52:9:52:12 | this access | AccessorCalls.cs:52:9:52:12 | this access | normal | -| AccessorCalls.cs:52:9:52:12 | this access | AccessorCalls.cs:52:9:52:12 | this access | normal | | AccessorCalls.cs:52:9:52:14 | access to field x | AccessorCalls.cs:52:9:52:14 | access to field x | normal | -| AccessorCalls.cs:52:9:52:14 | access to field x | AccessorCalls.cs:52:9:52:14 | access to field x | normal | -| AccessorCalls.cs:52:9:52:19 | access to property Prop | AccessorCalls.cs:52:9:52:14 | access to field x | normal | | AccessorCalls.cs:52:9:52:19 | access to property Prop | AccessorCalls.cs:52:9:52:19 | access to property Prop | normal | -| AccessorCalls.cs:52:9:52:34 | ... + ... | AccessorCalls.cs:52:9:52:34 | ... + ... | normal | -| AccessorCalls.cs:52:9:52:34 | ... += ... | AccessorCalls.cs:52:9:52:34 | ... = ... | normal | -| AccessorCalls.cs:52:9:52:34 | ... = ... | AccessorCalls.cs:52:9:52:34 | ... = ... | normal | -| AccessorCalls.cs:52:9:52:35 | ...; | AccessorCalls.cs:52:9:52:34 | ... = ... | normal | +| AccessorCalls.cs:52:9:52:34 | ... += ... | AccessorCalls.cs:52:9:52:34 | ... += ... | normal | +| AccessorCalls.cs:52:9:52:35 | ...; | AccessorCalls.cs:52:9:52:34 | ... += ... | normal | | AccessorCalls.cs:52:24:52:27 | this access | AccessorCalls.cs:52:24:52:27 | this access | normal | | AccessorCalls.cs:52:24:52:29 | access to field x | AccessorCalls.cs:52:24:52:29 | access to field x | normal | | AccessorCalls.cs:52:24:52:34 | access to property Prop | AccessorCalls.cs:52:24:52:34 | access to property Prop | normal | | AccessorCalls.cs:53:9:53:12 | this access | AccessorCalls.cs:53:9:53:12 | this access | normal | -| AccessorCalls.cs:53:9:53:12 | this access | AccessorCalls.cs:53:9:53:12 | this access | normal | -| AccessorCalls.cs:53:9:53:14 | access to field x | AccessorCalls.cs:53:9:53:14 | access to field x | normal | | AccessorCalls.cs:53:9:53:14 | access to field x | AccessorCalls.cs:53:9:53:14 | access to field x | normal | | AccessorCalls.cs:53:9:53:17 | access to indexer | AccessorCalls.cs:53:9:53:17 | access to indexer | normal | -| AccessorCalls.cs:53:9:53:17 | access to indexer | AccessorCalls.cs:53:16:53:16 | 0 | normal | -| AccessorCalls.cs:53:9:53:30 | ... + ... | AccessorCalls.cs:53:9:53:30 | ... + ... | normal | -| AccessorCalls.cs:53:9:53:30 | ... += ... | AccessorCalls.cs:53:9:53:30 | ... = ... | normal | -| AccessorCalls.cs:53:9:53:30 | ... = ... | AccessorCalls.cs:53:9:53:30 | ... = ... | normal | -| AccessorCalls.cs:53:9:53:31 | ...; | AccessorCalls.cs:53:9:53:30 | ... = ... | normal | -| AccessorCalls.cs:53:16:53:16 | 0 | AccessorCalls.cs:53:16:53:16 | 0 | normal | +| AccessorCalls.cs:53:9:53:30 | ... += ... | AccessorCalls.cs:53:9:53:30 | ... += ... | normal | +| AccessorCalls.cs:53:9:53:31 | ...; | AccessorCalls.cs:53:9:53:30 | ... += ... | normal | | AccessorCalls.cs:53:16:53:16 | 0 | AccessorCalls.cs:53:16:53:16 | 0 | normal | | AccessorCalls.cs:53:22:53:25 | this access | AccessorCalls.cs:53:22:53:25 | this access | normal | | AccessorCalls.cs:53:22:53:27 | access to field x | AccessorCalls.cs:53:22:53:27 | access to field x | normal | @@ -249,23 +220,14 @@ | AccessorCalls.cs:70:9:70:21 | dynamic call to operator ++ | AccessorCalls.cs:70:9:70:21 | dynamic call to operator ++ | normal | | AccessorCalls.cs:70:9:70:22 | ...; | AccessorCalls.cs:70:9:70:21 | dynamic call to operator ++ | normal | | AccessorCalls.cs:71:9:71:9 | access to local variable d | AccessorCalls.cs:71:9:71:9 | access to local variable d | normal | -| AccessorCalls.cs:71:9:71:9 | access to local variable d | AccessorCalls.cs:71:9:71:9 | access to local variable d | normal | -| AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | AccessorCalls.cs:71:9:71:9 | access to local variable d | normal | | AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | normal | -| AccessorCalls.cs:71:9:71:25 | ... += ... | AccessorCalls.cs:71:9:71:25 | ... = ... | normal | -| AccessorCalls.cs:71:9:71:25 | ... = ... | AccessorCalls.cs:71:9:71:25 | ... = ... | normal | -| AccessorCalls.cs:71:9:71:25 | dynamic call to operator + | AccessorCalls.cs:71:9:71:25 | dynamic call to operator + | normal | -| AccessorCalls.cs:71:9:71:26 | ...; | AccessorCalls.cs:71:9:71:25 | ... = ... | normal | +| AccessorCalls.cs:71:9:71:25 | ... += ... | AccessorCalls.cs:71:9:71:25 | ... += ... | normal | +| AccessorCalls.cs:71:9:71:26 | ...; | AccessorCalls.cs:71:9:71:25 | ... += ... | normal | | AccessorCalls.cs:71:25:71:25 | access to parameter e | AccessorCalls.cs:71:25:71:25 | access to parameter e | normal | | AccessorCalls.cs:72:9:72:9 | access to local variable d | AccessorCalls.cs:72:9:72:9 | access to local variable d | normal | -| AccessorCalls.cs:72:9:72:9 | access to local variable d | AccessorCalls.cs:72:9:72:9 | access to local variable d | normal | | AccessorCalls.cs:72:9:72:12 | dynamic access to element | AccessorCalls.cs:72:9:72:12 | dynamic access to element | normal | -| AccessorCalls.cs:72:9:72:12 | dynamic access to element | AccessorCalls.cs:72:11:72:11 | 0 | normal | -| AccessorCalls.cs:72:9:72:20 | ... += ... | AccessorCalls.cs:72:9:72:20 | ... = ... | normal | -| AccessorCalls.cs:72:9:72:20 | ... = ... | AccessorCalls.cs:72:9:72:20 | ... = ... | normal | -| AccessorCalls.cs:72:9:72:20 | dynamic call to operator + | AccessorCalls.cs:72:9:72:20 | dynamic call to operator + | normal | -| AccessorCalls.cs:72:9:72:21 | ...; | AccessorCalls.cs:72:9:72:20 | ... = ... | normal | -| AccessorCalls.cs:72:11:72:11 | 0 | AccessorCalls.cs:72:11:72:11 | 0 | normal | +| AccessorCalls.cs:72:9:72:20 | ... += ... | AccessorCalls.cs:72:9:72:20 | ... += ... | normal | +| AccessorCalls.cs:72:9:72:21 | ...; | AccessorCalls.cs:72:9:72:20 | ... += ... | normal | | AccessorCalls.cs:72:11:72:11 | 0 | AccessorCalls.cs:72:11:72:11 | 0 | normal | | AccessorCalls.cs:72:17:72:17 | access to local variable d | AccessorCalls.cs:72:17:72:17 | access to local variable d | normal | | AccessorCalls.cs:72:17:72:20 | dynamic access to element | AccessorCalls.cs:72:17:72:20 | dynamic access to element | normal | @@ -788,29 +750,23 @@ | Assignments.cs:5:13:5:17 | Int32 x = ... | Assignments.cs:5:13:5:17 | Int32 x = ... | normal | | Assignments.cs:5:17:5:17 | 0 | Assignments.cs:5:17:5:17 | 0 | normal | | Assignments.cs:6:9:6:9 | access to local variable x | Assignments.cs:6:9:6:9 | access to local variable x | normal | -| Assignments.cs:6:9:6:14 | ... + ... | Assignments.cs:6:9:6:14 | ... + ... | normal | -| Assignments.cs:6:9:6:14 | ... += ... | Assignments.cs:6:9:6:14 | ... = ... | normal | -| Assignments.cs:6:9:6:14 | ... = ... | Assignments.cs:6:9:6:14 | ... = ... | normal | -| Assignments.cs:6:9:6:15 | ...; | Assignments.cs:6:9:6:14 | ... = ... | normal | +| Assignments.cs:6:9:6:14 | ... += ... | Assignments.cs:6:9:6:14 | ... += ... | normal | +| Assignments.cs:6:9:6:15 | ...; | Assignments.cs:6:9:6:14 | ... += ... | normal | | Assignments.cs:6:14:6:14 | 1 | Assignments.cs:6:14:6:14 | 1 | normal | | Assignments.cs:8:9:8:22 | ... ...; | Assignments.cs:8:17:8:21 | dynamic d = ... | normal | | Assignments.cs:8:17:8:21 | dynamic d = ... | Assignments.cs:8:17:8:21 | dynamic d = ... | normal | | Assignments.cs:8:21:8:21 | 0 | Assignments.cs:8:21:8:21 | 0 | normal | | Assignments.cs:8:21:8:21 | (...) ... | Assignments.cs:8:21:8:21 | (...) ... | normal | | Assignments.cs:9:9:9:9 | access to local variable d | Assignments.cs:9:9:9:9 | access to local variable d | normal | -| Assignments.cs:9:9:9:14 | ... -= ... | Assignments.cs:9:9:9:14 | ... = ... | normal | -| Assignments.cs:9:9:9:14 | ... = ... | Assignments.cs:9:9:9:14 | ... = ... | normal | -| Assignments.cs:9:9:9:14 | dynamic call to operator - | Assignments.cs:9:9:9:14 | dynamic call to operator - | normal | -| Assignments.cs:9:9:9:15 | ...; | Assignments.cs:9:9:9:14 | ... = ... | normal | +| Assignments.cs:9:9:9:14 | ... -= ... | Assignments.cs:9:9:9:14 | ... -= ... | normal | +| Assignments.cs:9:9:9:15 | ...; | Assignments.cs:9:9:9:14 | ... -= ... | normal | | Assignments.cs:9:14:9:14 | 2 | Assignments.cs:9:14:9:14 | 2 | normal | | Assignments.cs:11:9:11:34 | ... ...; | Assignments.cs:11:13:11:33 | Assignments a = ... | normal | | Assignments.cs:11:13:11:33 | Assignments a = ... | Assignments.cs:11:13:11:33 | Assignments a = ... | normal | | Assignments.cs:11:17:11:33 | object creation of type Assignments | Assignments.cs:11:17:11:33 | object creation of type Assignments | normal | | Assignments.cs:12:9:12:9 | access to local variable a | Assignments.cs:12:9:12:9 | access to local variable a | normal | -| Assignments.cs:12:9:12:17 | ... += ... | Assignments.cs:12:9:12:17 | ... = ... | normal | -| Assignments.cs:12:9:12:17 | ... = ... | Assignments.cs:12:9:12:17 | ... = ... | normal | -| Assignments.cs:12:9:12:17 | call to operator + | Assignments.cs:12:9:12:17 | call to operator + | normal | -| Assignments.cs:12:9:12:18 | ...; | Assignments.cs:12:9:12:17 | ... = ... | normal | +| Assignments.cs:12:9:12:17 | ... += ... | Assignments.cs:12:9:12:17 | ... += ... | normal | +| Assignments.cs:12:9:12:18 | ...; | Assignments.cs:12:9:12:17 | ... += ... | normal | | Assignments.cs:12:14:12:17 | this access | Assignments.cs:12:14:12:17 | this access | normal | | Assignments.cs:14:9:14:13 | access to event Event | Assignments.cs:14:9:14:13 | this access | normal | | Assignments.cs:14:9:14:13 | this access | Assignments.cs:14:9:14:13 | this access | normal | @@ -1120,8 +1076,7 @@ | ConditionalAccess.cs:42:15:42:26 | return ...; | ConditionalAccess.cs:42:15:42:26 | return ...; | return | | ConditionalAccess.cs:42:22:42:25 | null | ConditionalAccess.cs:42:22:42:25 | null | normal | | ConditionalAccess.cs:43:13:43:15 | {...} | ConditionalAccess.cs:43:13:43:15 | {...} | normal | -| ConditionalAccess.cs:47:5:55:5 | {...} | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | null | -| ConditionalAccess.cs:47:5:55:5 | {...} | ConditionalAccess.cs:54:12:54:29 | ... = ... | normal | +| ConditionalAccess.cs:47:5:55:5 | {...} | ConditionalAccess.cs:54:12:54:29 | ... += ... | normal | | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | non-null | | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | null | | ConditionalAccess.cs:48:9:48:20 | access to field IntField | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | non-null | @@ -1181,36 +1136,18 @@ | ConditionalAccess.cs:52:18:52:38 | ... = ... | ConditionalAccess.cs:52:18:52:38 | ... = ... | normal | | ConditionalAccess.cs:52:32:52:38 | "World" | ConditionalAccess.cs:52:32:52:38 | "World" | normal | | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | non-null | -| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | non-null | | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | null | -| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | null | -| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | non-null | -| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | null | | ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | null | | ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:9:53:20 | access to field IntField | normal | -| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | null | -| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:12:53:25 | ... = ... | normal | -| ConditionalAccess.cs:53:12:53:25 | ... - ... | ConditionalAccess.cs:53:12:53:25 | ... - ... | normal | -| ConditionalAccess.cs:53:12:53:25 | ... -= ... | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | null | -| ConditionalAccess.cs:53:12:53:25 | ... -= ... | ConditionalAccess.cs:53:12:53:25 | ... = ... | normal | -| ConditionalAccess.cs:53:12:53:25 | ... = ... | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | null | -| ConditionalAccess.cs:53:12:53:25 | ... = ... | ConditionalAccess.cs:53:12:53:25 | ... = ... | normal | +| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:12:53:25 | ... -= ... | normal | +| ConditionalAccess.cs:53:12:53:25 | ... -= ... | ConditionalAccess.cs:53:12:53:25 | ... -= ... | normal | | ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:25:53:25 | 1 | normal | | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | non-null | -| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | non-null | | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | null | -| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | null | -| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | non-null | -| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | null | | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | null | | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | normal | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | null | -| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:12:54:29 | ... = ... | normal | -| ConditionalAccess.cs:54:12:54:29 | ... + ... | ConditionalAccess.cs:54:12:54:29 | ... + ... | normal | -| ConditionalAccess.cs:54:12:54:29 | ... += ... | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | null | -| ConditionalAccess.cs:54:12:54:29 | ... += ... | ConditionalAccess.cs:54:12:54:29 | ... = ... | normal | -| ConditionalAccess.cs:54:12:54:29 | ... = ... | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | null | -| ConditionalAccess.cs:54:12:54:29 | ... = ... | ConditionalAccess.cs:54:12:54:29 | ... = ... | normal | +| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:12:54:29 | ... += ... | normal | +| ConditionalAccess.cs:54:12:54:29 | ... += ... | ConditionalAccess.cs:54:12:54:29 | ... += ... | normal | | ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:27:54:29 | "!" | normal | | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | normal | | ConditionalAccess.cs:60:70:60:78 | ... + ... | ConditionalAccess.cs:60:70:60:78 | ... + ... | normal | @@ -1458,34 +1395,30 @@ | Conditions.cs:104:17:104:17 | access to parameter b | Conditions.cs:104:17:104:17 | access to parameter b | normal | | Conditions.cs:104:17:104:28 | call to method ToString | Conditions.cs:104:17:104:28 | call to method ToString | normal | | Conditions.cs:105:9:106:20 | if (...) ... | Conditions.cs:105:13:105:13 | access to parameter b | false | -| Conditions.cs:105:9:106:20 | if (...) ... | Conditions.cs:106:13:106:19 | ... = ... | normal | +| Conditions.cs:105:9:106:20 | if (...) ... | Conditions.cs:106:13:106:19 | ... += ... | normal | | Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:105:13:105:13 | access to parameter b | false | | Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:105:13:105:13 | access to parameter b | true | | Conditions.cs:106:13:106:13 | access to local variable x | Conditions.cs:106:13:106:13 | access to local variable x | normal | -| Conditions.cs:106:13:106:19 | ... + ... | Conditions.cs:106:13:106:19 | ... + ... | normal | -| Conditions.cs:106:13:106:19 | ... += ... | Conditions.cs:106:13:106:19 | ... = ... | normal | -| Conditions.cs:106:13:106:19 | ... = ... | Conditions.cs:106:13:106:19 | ... = ... | normal | -| Conditions.cs:106:13:106:20 | ...; | Conditions.cs:106:13:106:19 | ... = ... | normal | +| Conditions.cs:106:13:106:19 | ... += ... | Conditions.cs:106:13:106:19 | ... += ... | normal | +| Conditions.cs:106:13:106:20 | ...; | Conditions.cs:106:13:106:19 | ... += ... | normal | | Conditions.cs:106:18:106:19 | "" | Conditions.cs:106:18:106:19 | "" | normal | | Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:107:13:107:24 | ... > ... | false | | Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:108:17:108:18 | !... | false | -| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:109:17:109:23 | ... = ... | normal | +| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:109:17:109:23 | ... += ... | normal | | Conditions.cs:107:13:107:13 | access to local variable x | Conditions.cs:107:13:107:13 | access to local variable x | normal | | Conditions.cs:107:13:107:20 | access to property Length | Conditions.cs:107:13:107:20 | access to property Length | normal | | Conditions.cs:107:13:107:24 | ... > ... | Conditions.cs:107:13:107:24 | ... > ... | false | | Conditions.cs:107:13:107:24 | ... > ... | Conditions.cs:107:13:107:24 | ... > ... | true | | Conditions.cs:107:24:107:24 | 0 | Conditions.cs:107:24:107:24 | 0 | normal | | Conditions.cs:108:13:109:24 | if (...) ... | Conditions.cs:108:17:108:18 | !... | false | -| Conditions.cs:108:13:109:24 | if (...) ... | Conditions.cs:109:17:109:23 | ... = ... | normal | +| Conditions.cs:108:13:109:24 | if (...) ... | Conditions.cs:109:17:109:23 | ... += ... | normal | | Conditions.cs:108:17:108:18 | !... | Conditions.cs:108:17:108:18 | !... | false | | Conditions.cs:108:17:108:18 | !... | Conditions.cs:108:17:108:18 | !... | true | | Conditions.cs:108:18:108:18 | access to parameter b | Conditions.cs:108:18:108:18 | access to parameter b | false | | Conditions.cs:108:18:108:18 | access to parameter b | Conditions.cs:108:18:108:18 | access to parameter b | true | | Conditions.cs:109:17:109:17 | access to local variable x | Conditions.cs:109:17:109:17 | access to local variable x | normal | -| Conditions.cs:109:17:109:23 | ... + ... | Conditions.cs:109:17:109:23 | ... + ... | normal | -| Conditions.cs:109:17:109:23 | ... += ... | Conditions.cs:109:17:109:23 | ... = ... | normal | -| Conditions.cs:109:17:109:23 | ... = ... | Conditions.cs:109:17:109:23 | ... = ... | normal | -| Conditions.cs:109:17:109:24 | ...; | Conditions.cs:109:17:109:23 | ... = ... | normal | +| Conditions.cs:109:17:109:23 | ... += ... | Conditions.cs:109:17:109:23 | ... += ... | normal | +| Conditions.cs:109:17:109:24 | ...; | Conditions.cs:109:17:109:23 | ... += ... | normal | | Conditions.cs:109:22:109:23 | "" | Conditions.cs:109:22:109:23 | "" | normal | | Conditions.cs:110:9:110:17 | return ...; | Conditions.cs:110:9:110:17 | return ...; | return | | Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:110:16:110:16 | access to local variable x | normal | @@ -2405,10 +2338,10 @@ | Finally.cs:260:9:260:33 | call to method WriteLine | Finally.cs:260:9:260:33 | call to method WriteLine | normal | | Finally.cs:260:9:260:34 | ...; | Finally.cs:260:9:260:33 | call to method WriteLine | normal | | Finally.cs:260:27:260:32 | "Done" | Finally.cs:260:27:260:32 | "Done" | normal | -| Finally.cs:264:5:274:5 | {...} | Finally.cs:272:13:272:18 | ... = ... | normal | -| Finally.cs:264:5:274:5 | {...} | Finally.cs:272:13:272:18 | ... = ... | throw(Exception) [normal] (0) | -| Finally.cs:265:9:273:9 | try {...} ... | Finally.cs:272:13:272:18 | ... = ... | normal | -| Finally.cs:265:9:273:9 | try {...} ... | Finally.cs:272:13:272:18 | ... = ... | throw(Exception) [normal] (0) | +| Finally.cs:264:5:274:5 | {...} | Finally.cs:272:13:272:18 | ... += ... | normal | +| Finally.cs:264:5:274:5 | {...} | Finally.cs:272:13:272:18 | ... += ... | throw(Exception) [normal] (0) | +| Finally.cs:265:9:273:9 | try {...} ... | Finally.cs:272:13:272:18 | ... += ... | normal | +| Finally.cs:265:9:273:9 | try {...} ... | Finally.cs:272:13:272:18 | ... += ... | throw(Exception) [normal] (0) | | Finally.cs:266:9:268:9 | {...} | Finally.cs:267:13:267:34 | call to method WriteLine | normal | | Finally.cs:266:9:268:9 | {...} | Finally.cs:267:13:267:34 | call to method WriteLine | throw(Exception) | | Finally.cs:267:13:267:34 | call to method WriteLine | Finally.cs:267:13:267:34 | call to method WriteLine | normal | @@ -2416,15 +2349,13 @@ | Finally.cs:267:13:267:35 | ...; | Finally.cs:267:13:267:34 | call to method WriteLine | normal | | Finally.cs:267:13:267:35 | ...; | Finally.cs:267:13:267:34 | call to method WriteLine | throw(Exception) | | Finally.cs:267:31:267:33 | "1" | Finally.cs:267:31:267:33 | "1" | normal | -| Finally.cs:270:9:273:9 | {...} | Finally.cs:272:13:272:18 | ... = ... | normal | +| Finally.cs:270:9:273:9 | {...} | Finally.cs:272:13:272:18 | ... += ... | normal | | Finally.cs:271:13:271:34 | call to method WriteLine | Finally.cs:271:13:271:34 | call to method WriteLine | normal | | Finally.cs:271:13:271:35 | ...; | Finally.cs:271:13:271:34 | call to method WriteLine | normal | | Finally.cs:271:31:271:33 | "3" | Finally.cs:271:31:271:33 | "3" | normal | | Finally.cs:272:13:272:13 | access to parameter i | Finally.cs:272:13:272:13 | access to parameter i | normal | -| Finally.cs:272:13:272:18 | ... + ... | Finally.cs:272:13:272:18 | ... + ... | normal | -| Finally.cs:272:13:272:18 | ... += ... | Finally.cs:272:13:272:18 | ... = ... | normal | -| Finally.cs:272:13:272:18 | ... = ... | Finally.cs:272:13:272:18 | ... = ... | normal | -| Finally.cs:272:13:272:19 | ...; | Finally.cs:272:13:272:18 | ... = ... | normal | +| Finally.cs:272:13:272:18 | ... += ... | Finally.cs:272:13:272:18 | ... += ... | normal | +| 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 | @@ -4403,13 +4334,9 @@ | cflow.cs:211:9:221:9 | {...} | cflow.cs:217:17:217:32 | ... < ... | false | | cflow.cs:211:9:221:9 | {...} | cflow.cs:219:17:219:22 | break; | break | | cflow.cs:212:13:212:17 | access to field Field | cflow.cs:212:13:212:17 | access to field Field | normal | -| cflow.cs:212:13:212:17 | access to field Field | cflow.cs:212:13:212:17 | this access | normal | | cflow.cs:212:13:212:17 | this access | cflow.cs:212:13:212:17 | this access | normal | -| cflow.cs:212:13:212:17 | this access | cflow.cs:212:13:212:17 | this access | normal | -| cflow.cs:212:13:212:24 | ... + ... | cflow.cs:212:13:212:24 | ... + ... | normal | -| cflow.cs:212:13:212:24 | ... += ... | cflow.cs:212:13:212:24 | ... = ... | normal | -| cflow.cs:212:13:212:24 | ... = ... | cflow.cs:212:13:212:24 | ... = ... | normal | -| cflow.cs:212:13:212:25 | ...; | cflow.cs:212:13:212:24 | ... = ... | normal | +| cflow.cs:212:13:212:24 | ... += ... | cflow.cs:212:13:212:24 | ... += ... | normal | +| cflow.cs:212:13:212:25 | ...; | cflow.cs:212:13:212:24 | ... += ... | normal | | cflow.cs:212:22:212:24 | "a" | cflow.cs:212:22:212:24 | "a" | normal | | cflow.cs:213:13:216:13 | if (...) ... | cflow.cs:213:17:213:32 | ... > ... | false | | cflow.cs:213:13:216:13 | if (...) ... | cflow.cs:215:17:215:25 | continue; | continue | @@ -4449,13 +4376,9 @@ | cflow.cs:227:9:237:9 | {...} | cflow.cs:233:17:233:32 | ... < ... | false | | cflow.cs:227:9:237:9 | {...} | cflow.cs:235:17:235:22 | break; | break | | cflow.cs:228:13:228:17 | access to field Field | cflow.cs:228:13:228:17 | access to field Field | normal | -| cflow.cs:228:13:228:17 | access to field Field | cflow.cs:228:13:228:17 | this access | normal | | cflow.cs:228:13:228:17 | this access | cflow.cs:228:13:228:17 | this access | normal | -| cflow.cs:228:13:228:17 | this access | cflow.cs:228:13:228:17 | this access | normal | -| cflow.cs:228:13:228:22 | ... + ... | cflow.cs:228:13:228:22 | ... + ... | normal | -| cflow.cs:228:13:228:22 | ... += ... | cflow.cs:228:13:228:22 | ... = ... | normal | -| cflow.cs:228:13:228:22 | ... = ... | cflow.cs:228:13:228:22 | ... = ... | normal | -| cflow.cs:228:13:228:23 | ...; | cflow.cs:228:13:228:22 | ... = ... | normal | +| cflow.cs:228:13:228:22 | ... += ... | cflow.cs:228:13:228:22 | ... += ... | normal | +| cflow.cs:228:13:228:23 | ...; | cflow.cs:228:13:228:22 | ... += ... | normal | | cflow.cs:228:22:228:22 | access to local variable x | cflow.cs:228:22:228:22 | access to local variable x | normal | | cflow.cs:229:13:232:13 | if (...) ... | cflow.cs:229:17:229:32 | ... > ... | false | | cflow.cs:229:13:232:13 | if (...) ... | cflow.cs:231:17:231:25 | continue; | continue | diff --git a/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected b/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected index 4ce98d5096f..544bc1bd776 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected @@ -128,77 +128,54 @@ | AccessorCalls.cs:42:10:42:11 | enter M5 | AccessorCalls.cs:43:5:47:5 | {...} | | | AccessorCalls.cs:42:10:42:11 | exit M5 (normal) | AccessorCalls.cs:42:10:42:11 | exit M5 | | | AccessorCalls.cs:43:5:47:5 | {...} | AccessorCalls.cs:44:9:44:33 | ...; | | -| AccessorCalls.cs:44:9:44:12 | this access | AccessorCalls.cs:44:9:44:12 | this access | | | AccessorCalls.cs:44:9:44:12 | this access | AccessorCalls.cs:44:9:44:18 | access to field Field | | -| AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:44:9:44:32 | ... = ... | | | AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:44:23:44:26 | this access | | -| AccessorCalls.cs:44:9:44:32 | ... + ... | AccessorCalls.cs:44:9:44:18 | access to field Field | | -| AccessorCalls.cs:44:9:44:32 | ... = ... | AccessorCalls.cs:45:9:45:31 | ...; | | +| AccessorCalls.cs:44:9:44:32 | ... += ... | AccessorCalls.cs:45:9:45:31 | ...; | | | AccessorCalls.cs:44:9:44:33 | ...; | AccessorCalls.cs:44:9:44:12 | this access | | | AccessorCalls.cs:44:23:44:26 | this access | AccessorCalls.cs:44:23:44:32 | access to field Field | | -| AccessorCalls.cs:44:23:44:32 | access to field Field | AccessorCalls.cs:44:9:44:32 | ... + ... | | -| AccessorCalls.cs:45:9:45:12 | this access | AccessorCalls.cs:45:9:45:12 | this access | | +| AccessorCalls.cs:44:23:44:32 | access to field Field | AccessorCalls.cs:44:9:44:32 | ... += ... | | | AccessorCalls.cs:45:9:45:12 | this access | AccessorCalls.cs:45:9:45:17 | access to property Prop | | -| AccessorCalls.cs:45:9:45:17 | access to property Prop | AccessorCalls.cs:45:9:45:30 | ... = ... | | | AccessorCalls.cs:45:9:45:17 | access to property Prop | AccessorCalls.cs:45:22:45:25 | this access | | -| AccessorCalls.cs:45:9:45:30 | ... + ... | AccessorCalls.cs:45:9:45:17 | access to property Prop | | -| AccessorCalls.cs:45:9:45:30 | ... = ... | AccessorCalls.cs:46:9:46:27 | ...; | | +| AccessorCalls.cs:45:9:45:30 | ... += ... | AccessorCalls.cs:46:9:46:27 | ...; | | | AccessorCalls.cs:45:9:45:31 | ...; | AccessorCalls.cs:45:9:45:12 | this access | | | AccessorCalls.cs:45:22:45:25 | this access | AccessorCalls.cs:45:22:45:30 | access to property Prop | | -| AccessorCalls.cs:45:22:45:30 | access to property Prop | AccessorCalls.cs:45:9:45:30 | ... + ... | | +| AccessorCalls.cs:45:22:45:30 | access to property Prop | AccessorCalls.cs:45:9:45:30 | ... += ... | | | AccessorCalls.cs:46:9:46:12 | this access | AccessorCalls.cs:46:14:46:14 | 0 | | -| AccessorCalls.cs:46:9:46:12 | this access | AccessorCalls.cs:46:14:46:14 | 0 | | -| AccessorCalls.cs:46:9:46:15 | access to indexer | AccessorCalls.cs:46:9:46:26 | ... = ... | | | AccessorCalls.cs:46:9:46:15 | access to indexer | AccessorCalls.cs:46:20:46:23 | this access | | -| AccessorCalls.cs:46:9:46:26 | ... + ... | AccessorCalls.cs:46:9:46:15 | access to indexer | | -| AccessorCalls.cs:46:9:46:26 | ... = ... | AccessorCalls.cs:42:10:42:11 | exit M5 (normal) | | +| AccessorCalls.cs:46:9:46:26 | ... += ... | AccessorCalls.cs:42:10:42:11 | exit M5 (normal) | | | AccessorCalls.cs:46:9:46:27 | ...; | AccessorCalls.cs:46:9:46:12 | this access | | -| AccessorCalls.cs:46:14:46:14 | 0 | AccessorCalls.cs:46:9:46:12 | this access | | | AccessorCalls.cs:46:14:46:14 | 0 | AccessorCalls.cs:46:9:46:15 | access to indexer | | | AccessorCalls.cs:46:20:46:23 | this access | AccessorCalls.cs:46:25:46:25 | 0 | | -| AccessorCalls.cs:46:20:46:26 | access to indexer | AccessorCalls.cs:46:9:46:26 | ... + ... | | +| AccessorCalls.cs:46:20:46:26 | access to indexer | AccessorCalls.cs:46:9:46:26 | ... += ... | | | AccessorCalls.cs:46:25:46:25 | 0 | AccessorCalls.cs:46:20:46:26 | access to indexer | | | AccessorCalls.cs:49:10:49:11 | enter M6 | AccessorCalls.cs:50:5:54:5 | {...} | | | AccessorCalls.cs:49:10:49:11 | exit M6 (normal) | AccessorCalls.cs:49:10:49:11 | exit M6 | | | AccessorCalls.cs:50:5:54:5 | {...} | AccessorCalls.cs:51:9:51:37 | ...; | | | AccessorCalls.cs:51:9:51:12 | this access | AccessorCalls.cs:51:9:51:14 | access to field x | | -| AccessorCalls.cs:51:9:51:12 | this access | AccessorCalls.cs:51:9:51:14 | access to field x | | -| AccessorCalls.cs:51:9:51:14 | access to field x | AccessorCalls.cs:51:9:51:12 | this access | | | AccessorCalls.cs:51:9:51:14 | access to field x | AccessorCalls.cs:51:9:51:20 | access to field Field | | -| AccessorCalls.cs:51:9:51:20 | access to field Field | AccessorCalls.cs:51:9:51:36 | ... = ... | | | AccessorCalls.cs:51:9:51:20 | access to field Field | AccessorCalls.cs:51:25:51:28 | this access | | -| AccessorCalls.cs:51:9:51:36 | ... + ... | AccessorCalls.cs:51:9:51:20 | access to field Field | | -| AccessorCalls.cs:51:9:51:36 | ... = ... | AccessorCalls.cs:52:9:52:35 | ...; | | +| AccessorCalls.cs:51:9:51:36 | ... += ... | AccessorCalls.cs:52:9:52:35 | ...; | | | AccessorCalls.cs:51:9:51:37 | ...; | AccessorCalls.cs:51:9:51:12 | this access | | | AccessorCalls.cs:51:25:51:28 | this access | AccessorCalls.cs:51:25:51:30 | access to field x | | | AccessorCalls.cs:51:25:51:30 | access to field x | AccessorCalls.cs:51:25:51:36 | access to field Field | | -| AccessorCalls.cs:51:25:51:36 | access to field Field | AccessorCalls.cs:51:9:51:36 | ... + ... | | +| AccessorCalls.cs:51:25:51:36 | access to field Field | AccessorCalls.cs:51:9:51:36 | ... += ... | | | AccessorCalls.cs:52:9:52:12 | this access | AccessorCalls.cs:52:9:52:14 | access to field x | | -| AccessorCalls.cs:52:9:52:12 | this access | AccessorCalls.cs:52:9:52:14 | access to field x | | -| AccessorCalls.cs:52:9:52:14 | access to field x | AccessorCalls.cs:52:9:52:12 | this access | | | AccessorCalls.cs:52:9:52:14 | access to field x | AccessorCalls.cs:52:9:52:19 | access to property Prop | | -| AccessorCalls.cs:52:9:52:19 | access to property Prop | AccessorCalls.cs:52:9:52:34 | ... = ... | | | AccessorCalls.cs:52:9:52:19 | access to property Prop | AccessorCalls.cs:52:24:52:27 | this access | | -| AccessorCalls.cs:52:9:52:34 | ... + ... | AccessorCalls.cs:52:9:52:19 | access to property Prop | | -| AccessorCalls.cs:52:9:52:34 | ... = ... | AccessorCalls.cs:53:9:53:31 | ...; | | +| AccessorCalls.cs:52:9:52:34 | ... += ... | AccessorCalls.cs:53:9:53:31 | ...; | | | AccessorCalls.cs:52:9:52:35 | ...; | AccessorCalls.cs:52:9:52:12 | this access | | | AccessorCalls.cs:52:24:52:27 | this access | AccessorCalls.cs:52:24:52:29 | access to field x | | | AccessorCalls.cs:52:24:52:29 | access to field x | AccessorCalls.cs:52:24:52:34 | access to property Prop | | -| AccessorCalls.cs:52:24:52:34 | access to property Prop | AccessorCalls.cs:52:9:52:34 | ... + ... | | -| AccessorCalls.cs:53:9:53:12 | this access | AccessorCalls.cs:53:9:53:14 | access to field x | | +| AccessorCalls.cs:52:24:52:34 | access to property Prop | AccessorCalls.cs:52:9:52:34 | ... += ... | | | AccessorCalls.cs:53:9:53:12 | this access | AccessorCalls.cs:53:9:53:14 | access to field x | | | AccessorCalls.cs:53:9:53:14 | access to field x | AccessorCalls.cs:53:16:53:16 | 0 | | -| AccessorCalls.cs:53:9:53:14 | access to field x | AccessorCalls.cs:53:16:53:16 | 0 | | -| AccessorCalls.cs:53:9:53:17 | access to indexer | AccessorCalls.cs:53:9:53:30 | ... = ... | | | AccessorCalls.cs:53:9:53:17 | access to indexer | AccessorCalls.cs:53:22:53:25 | this access | | -| AccessorCalls.cs:53:9:53:30 | ... + ... | AccessorCalls.cs:53:9:53:17 | access to indexer | | -| AccessorCalls.cs:53:9:53:30 | ... = ... | AccessorCalls.cs:49:10:49:11 | exit M6 (normal) | | +| AccessorCalls.cs:53:9:53:30 | ... += ... | AccessorCalls.cs:49:10:49:11 | exit M6 (normal) | | | AccessorCalls.cs:53:9:53:31 | ...; | AccessorCalls.cs:53:9:53:12 | this access | | -| AccessorCalls.cs:53:16:53:16 | 0 | AccessorCalls.cs:53:9:53:12 | this access | | | AccessorCalls.cs:53:16:53:16 | 0 | AccessorCalls.cs:53:9:53:17 | access to indexer | | | AccessorCalls.cs:53:22:53:25 | this access | AccessorCalls.cs:53:22:53:27 | access to field x | | | AccessorCalls.cs:53:22:53:27 | access to field x | AccessorCalls.cs:53:29:53:29 | 0 | | -| AccessorCalls.cs:53:22:53:30 | access to indexer | AccessorCalls.cs:53:9:53:30 | ... + ... | | +| AccessorCalls.cs:53:22:53:30 | access to indexer | AccessorCalls.cs:53:9:53:30 | ... += ... | | | AccessorCalls.cs:53:29:53:29 | 0 | AccessorCalls.cs:53:22:53:30 | access to indexer | | | AccessorCalls.cs:56:10:56:11 | enter M7 | AccessorCalls.cs:57:5:59:5 | {...} | | | AccessorCalls.cs:56:10:56:11 | exit M7 (normal) | AccessorCalls.cs:56:10:56:11 | exit M7 | | @@ -270,25 +247,18 @@ | AccessorCalls.cs:70:9:70:19 | dynamic access to member MaybeProp | AccessorCalls.cs:70:9:70:21 | dynamic call to operator ++ | | | AccessorCalls.cs:70:9:70:21 | dynamic call to operator ++ | AccessorCalls.cs:71:9:71:26 | ...; | | | AccessorCalls.cs:70:9:70:22 | ...; | AccessorCalls.cs:70:9:70:9 | access to local variable d | | -| AccessorCalls.cs:71:9:71:9 | access to local variable d | AccessorCalls.cs:71:9:71:9 | access to local variable d | | | AccessorCalls.cs:71:9:71:9 | access to local variable d | AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | | -| AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | AccessorCalls.cs:71:9:71:25 | ... = ... | | | AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | AccessorCalls.cs:71:25:71:25 | access to parameter e | | -| AccessorCalls.cs:71:9:71:25 | ... = ... | AccessorCalls.cs:72:9:72:21 | ...; | | -| AccessorCalls.cs:71:9:71:25 | dynamic call to operator + | AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | | +| AccessorCalls.cs:71:9:71:25 | ... += ... | AccessorCalls.cs:72:9:72:21 | ...; | | | AccessorCalls.cs:71:9:71:26 | ...; | AccessorCalls.cs:71:9:71:9 | access to local variable d | | -| AccessorCalls.cs:71:25:71:25 | access to parameter e | AccessorCalls.cs:71:9:71:25 | dynamic call to operator + | | +| AccessorCalls.cs:71:25:71:25 | access to parameter e | AccessorCalls.cs:71:9:71:25 | ... += ... | | | AccessorCalls.cs:72:9:72:9 | access to local variable d | AccessorCalls.cs:72:11:72:11 | 0 | | -| AccessorCalls.cs:72:9:72:9 | access to local variable d | AccessorCalls.cs:72:11:72:11 | 0 | | -| AccessorCalls.cs:72:9:72:12 | dynamic access to element | AccessorCalls.cs:72:9:72:20 | ... = ... | | | AccessorCalls.cs:72:9:72:12 | dynamic access to element | AccessorCalls.cs:72:17:72:17 | access to local variable d | | -| AccessorCalls.cs:72:9:72:20 | ... = ... | AccessorCalls.cs:73:9:73:84 | ...; | | -| AccessorCalls.cs:72:9:72:20 | dynamic call to operator + | AccessorCalls.cs:72:9:72:12 | dynamic access to element | | +| AccessorCalls.cs:72:9:72:20 | ... += ... | AccessorCalls.cs:73:9:73:84 | ...; | | | AccessorCalls.cs:72:9:72:21 | ...; | AccessorCalls.cs:72:9:72:9 | access to local variable d | | -| AccessorCalls.cs:72:11:72:11 | 0 | AccessorCalls.cs:72:9:72:9 | access to local variable d | | | AccessorCalls.cs:72:11:72:11 | 0 | AccessorCalls.cs:72:9:72:12 | dynamic access to element | | | AccessorCalls.cs:72:17:72:17 | access to local variable d | AccessorCalls.cs:72:19:72:19 | 1 | | -| AccessorCalls.cs:72:17:72:20 | dynamic access to element | AccessorCalls.cs:72:9:72:20 | dynamic call to operator + | | +| AccessorCalls.cs:72:17:72:20 | dynamic access to element | AccessorCalls.cs:72:9:72:20 | ... += ... | | | AccessorCalls.cs:72:19:72:19 | 1 | AccessorCalls.cs:72:17:72:20 | dynamic access to element | | | AccessorCalls.cs:73:9:73:44 | (..., ...) | AccessorCalls.cs:73:49:73:49 | access to local variable d | | | AccessorCalls.cs:73:9:73:83 | ... = ... | AccessorCalls.cs:66:10:66:11 | exit M9 (normal) | | @@ -819,27 +789,24 @@ | Assignments.cs:5:13:5:17 | Int32 x = ... | Assignments.cs:6:9:6:15 | ...; | | | Assignments.cs:5:17:5:17 | 0 | Assignments.cs:5:13:5:17 | Int32 x = ... | | | Assignments.cs:6:9:6:9 | access to local variable x | Assignments.cs:6:14:6:14 | 1 | | -| Assignments.cs:6:9:6:14 | ... + ... | Assignments.cs:6:9:6:14 | ... = ... | | -| Assignments.cs:6:9:6:14 | ... = ... | Assignments.cs:8:9:8:22 | ... ...; | | +| Assignments.cs:6:9:6:14 | ... += ... | Assignments.cs:8:9:8:22 | ... ...; | | | Assignments.cs:6:9:6:15 | ...; | Assignments.cs:6:9:6:9 | access to local variable x | | -| Assignments.cs:6:14:6:14 | 1 | Assignments.cs:6:9:6:14 | ... + ... | | +| Assignments.cs:6:14:6:14 | 1 | Assignments.cs:6:9:6:14 | ... += ... | | | Assignments.cs:8:9:8:22 | ... ...; | Assignments.cs:8:21:8:21 | 0 | | | Assignments.cs:8:17:8:21 | dynamic d = ... | Assignments.cs:9:9:9:15 | ...; | | | Assignments.cs:8:21:8:21 | 0 | Assignments.cs:8:21:8:21 | (...) ... | | | Assignments.cs:8:21:8:21 | (...) ... | Assignments.cs:8:17:8:21 | dynamic d = ... | | | Assignments.cs:9:9:9:9 | access to local variable d | Assignments.cs:9:14:9:14 | 2 | | -| Assignments.cs:9:9:9:14 | ... = ... | Assignments.cs:11:9:11:34 | ... ...; | | -| Assignments.cs:9:9:9:14 | dynamic call to operator - | Assignments.cs:9:9:9:14 | ... = ... | | +| Assignments.cs:9:9:9:14 | ... -= ... | Assignments.cs:11:9:11:34 | ... ...; | | | Assignments.cs:9:9:9:15 | ...; | Assignments.cs:9:9:9:9 | access to local variable d | | -| Assignments.cs:9:14:9:14 | 2 | Assignments.cs:9:9:9:14 | dynamic call to operator - | | +| Assignments.cs:9:14:9:14 | 2 | Assignments.cs:9:9:9:14 | ... -= ... | | | Assignments.cs:11:9:11:34 | ... ...; | Assignments.cs:11:17:11:33 | object creation of type Assignments | | | Assignments.cs:11:13:11:33 | Assignments a = ... | Assignments.cs:12:9:12:18 | ...; | | | Assignments.cs:11:17:11:33 | object creation of type Assignments | Assignments.cs:11:13:11:33 | Assignments a = ... | | | Assignments.cs:12:9:12:9 | access to local variable a | Assignments.cs:12:14:12:17 | this access | | -| Assignments.cs:12:9:12:17 | ... = ... | Assignments.cs:14:9:14:36 | ...; | | -| Assignments.cs:12:9:12:17 | call to operator + | Assignments.cs:12:9:12:17 | ... = ... | | +| Assignments.cs:12:9:12:17 | ... += ... | Assignments.cs:14:9:14:36 | ...; | | | Assignments.cs:12:9:12:18 | ...; | Assignments.cs:12:9:12:9 | access to local variable a | | -| Assignments.cs:12:14:12:17 | this access | Assignments.cs:12:9:12:17 | call to operator + | | +| Assignments.cs:12:14:12:17 | this access | Assignments.cs:12:9:12:17 | ... += ... | | | Assignments.cs:14:9:14:13 | access to event Event | Assignments.cs:14:9:14:35 | ... += ... | | | Assignments.cs:14:9:14:13 | this access | Assignments.cs:14:18:14:35 | (...) => ... | | | Assignments.cs:14:9:14:35 | ... += ... | Assignments.cs:3:10:3:10 | exit M (normal) | | @@ -1187,26 +1154,18 @@ | ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:9:52:10 | access to parameter ca | | | ConditionalAccess.cs:52:18:52:38 | ... = ... | ConditionalAccess.cs:53:9:53:26 | ...; | | | ConditionalAccess.cs:52:32:52:38 | "World" | ConditionalAccess.cs:52:9:52:28 | access to property StringProp | | -| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | non-null | | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:20 | access to field IntField | non-null | | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:25:53:25 | 1 | null | -| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:30 | ...; | null | -| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:12:53:25 | ... = ... | | | ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:25:53:25 | 1 | | | ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | | -| ConditionalAccess.cs:53:12:53:25 | ... - ... | ConditionalAccess.cs:53:9:53:20 | access to field IntField | | -| ConditionalAccess.cs:53:12:53:25 | ... = ... | ConditionalAccess.cs:54:9:54:30 | ...; | | -| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:12:53:25 | ... - ... | | -| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | null | -| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | non-null | +| ConditionalAccess.cs:53:12:53:25 | ... -= ... | ConditionalAccess.cs:54:9:54:30 | ...; | | +| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:12:53:25 | ... -= ... | | | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | non-null | | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:27:54:29 | "!" | null | -| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:12:54:29 | ... = ... | | | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:27:54:29 | "!" | | | ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | | -| ConditionalAccess.cs:54:12:54:29 | ... + ... | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | | -| ConditionalAccess.cs:54:12:54:29 | ... = ... | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | | -| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:12:54:29 | ... + ... | | +| ConditionalAccess.cs:54:12:54:29 | ... += ... | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | | +| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:12:54:29 | ... += ... | | | ConditionalAccess.cs:60:26:60:38 | enter CommaJoinWith | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | | | ConditionalAccess.cs:60:26:60:38 | exit CommaJoinWith (normal) | ConditionalAccess.cs:60:26:60:38 | exit CommaJoinWith | | | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | ConditionalAccess.cs:60:75:60:78 | ", " | | @@ -1453,10 +1412,9 @@ | Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:106:13:106:20 | ...; | true | | Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:107:9:109:24 | if (...) ... | false | | Conditions.cs:106:13:106:13 | access to local variable x | Conditions.cs:106:18:106:19 | "" | | -| Conditions.cs:106:13:106:19 | ... + ... | Conditions.cs:106:13:106:19 | ... = ... | | -| Conditions.cs:106:13:106:19 | ... = ... | Conditions.cs:107:9:109:24 | if (...) ... | | +| Conditions.cs:106:13:106:19 | ... += ... | Conditions.cs:107:9:109:24 | if (...) ... | | | Conditions.cs:106:13:106:20 | ...; | Conditions.cs:106:13:106:13 | access to local variable x | | -| Conditions.cs:106:18:106:19 | "" | Conditions.cs:106:13:106:19 | ... + ... | | +| Conditions.cs:106:18:106:19 | "" | Conditions.cs:106:13:106:19 | ... += ... | | | Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:107:13:107:13 | access to local variable x | | | Conditions.cs:107:13:107:13 | access to local variable x | Conditions.cs:107:13:107:20 | access to property Length | | | Conditions.cs:107:13:107:20 | access to property Length | Conditions.cs:107:24:107:24 | 0 | | @@ -1469,10 +1427,9 @@ | Conditions.cs:108:18:108:18 | access to parameter b | Conditions.cs:108:17:108:18 | [false] !... | true | | Conditions.cs:108:18:108:18 | access to parameter b | Conditions.cs:108:17:108:18 | [true] !... | false | | Conditions.cs:109:17:109:17 | access to local variable x | Conditions.cs:109:22:109:23 | "" | | -| Conditions.cs:109:17:109:23 | ... + ... | Conditions.cs:109:17:109:23 | ... = ... | | -| Conditions.cs:109:17:109:23 | ... = ... | Conditions.cs:110:16:110:16 | access to local variable x | | +| Conditions.cs:109:17:109:23 | ... += ... | Conditions.cs:110:16:110:16 | access to local variable x | | | Conditions.cs:109:17:109:24 | ...; | Conditions.cs:109:17:109:17 | access to local variable x | | -| Conditions.cs:109:22:109:23 | "" | Conditions.cs:109:17:109:23 | ... + ... | | +| Conditions.cs:109:22:109:23 | "" | Conditions.cs:109:17:109:23 | ... += ... | | | Conditions.cs:110:9:110:17 | return ...; | Conditions.cs:102:12:102:13 | exit M8 (normal) | return | | Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:110:9:110:17 | return ...; | | | Conditions.cs:113:10:113:11 | enter M9 | Conditions.cs:114:5:124:5 | {...} | | @@ -2205,11 +2162,10 @@ | Finally.cs:271:13:271:35 | ...; | Finally.cs:271:31:271:33 | "3" | | | Finally.cs:271:31:271:33 | "3" | Finally.cs:271:13:271:34 | call to method WriteLine | | | Finally.cs:272:13:272:13 | access to parameter i | Finally.cs:272:18:272:18 | 3 | | -| Finally.cs:272:13:272:18 | ... + ... | Finally.cs:272:13:272:18 | ... = ... | | -| Finally.cs:272:13:272:18 | ... = ... | Finally.cs:263:10:263:12 | exit M13 (abnormal) | exception | -| Finally.cs:272:13:272:18 | ... = ... | Finally.cs:263:10:263:12 | exit M13 (normal) | | +| Finally.cs:272:13:272:18 | ... += ... | Finally.cs:263:10:263:12 | exit M13 (abnormal) | exception | +| Finally.cs:272:13:272:18 | ... += ... | Finally.cs:263:10:263:12 | exit M13 (normal) | | | 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 | ... + ... | | +| 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 | 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 | | @@ -4305,14 +4261,11 @@ | cflow.cs:209:5:222:5 | {...} | cflow.cs:210:9:221:36 | do ... while (...); | | | cflow.cs:210:9:221:36 | do ... while (...); | cflow.cs:211:9:221:9 | {...} | | | cflow.cs:211:9:221:9 | {...} | cflow.cs:212:13:212:25 | ...; | | -| cflow.cs:212:13:212:17 | access to field Field | cflow.cs:212:13:212:24 | ... = ... | | | cflow.cs:212:13:212:17 | access to field Field | cflow.cs:212:22:212:24 | "a" | | | cflow.cs:212:13:212:17 | this access | cflow.cs:212:13:212:17 | access to field Field | | -| cflow.cs:212:13:212:17 | this access | cflow.cs:212:13:212:17 | this access | | -| cflow.cs:212:13:212:24 | ... + ... | cflow.cs:212:13:212:17 | access to field Field | | -| cflow.cs:212:13:212:24 | ... = ... | cflow.cs:213:13:216:13 | if (...) ... | | +| cflow.cs:212:13:212:24 | ... += ... | cflow.cs:213:13:216:13 | if (...) ... | | | cflow.cs:212:13:212:25 | ...; | cflow.cs:212:13:212:17 | this access | | -| cflow.cs:212:22:212:24 | "a" | cflow.cs:212:13:212:24 | ... + ... | | +| cflow.cs:212:22:212:24 | "a" | cflow.cs:212:13:212:24 | ... += ... | | | cflow.cs:213:13:216:13 | if (...) ... | cflow.cs:213:17:213:21 | this access | | | cflow.cs:213:17:213:21 | access to field Field | cflow.cs:213:17:213:28 | access to property Length | | | cflow.cs:213:17:213:21 | this access | cflow.cs:213:17:213:21 | access to field Field | | @@ -4347,14 +4300,11 @@ | cflow.cs:226:57:226:59 | "a" | cflow.cs:226:62:226:63 | 10 | | | cflow.cs:226:62:226:63 | 10 | cflow.cs:226:27:226:64 | call to method Repeat | | | cflow.cs:227:9:237:9 | {...} | cflow.cs:228:13:228:23 | ...; | | -| cflow.cs:228:13:228:17 | access to field Field | cflow.cs:228:13:228:22 | ... = ... | | | cflow.cs:228:13:228:17 | access to field Field | cflow.cs:228:22:228:22 | access to local variable x | | | cflow.cs:228:13:228:17 | this access | cflow.cs:228:13:228:17 | access to field Field | | -| cflow.cs:228:13:228:17 | this access | cflow.cs:228:13:228:17 | this access | | -| cflow.cs:228:13:228:22 | ... + ... | cflow.cs:228:13:228:17 | access to field Field | | -| cflow.cs:228:13:228:22 | ... = ... | cflow.cs:229:13:232:13 | if (...) ... | | +| cflow.cs:228:13:228:22 | ... += ... | cflow.cs:229:13:232:13 | if (...) ... | | | cflow.cs:228:13:228:23 | ...; | cflow.cs:228:13:228:17 | this access | | -| cflow.cs:228:22:228:22 | access to local variable x | cflow.cs:228:13:228:22 | ... + ... | | +| cflow.cs:228:22:228:22 | access to local variable x | cflow.cs:228:13:228:22 | ... += ... | | | cflow.cs:229:13:232:13 | if (...) ... | cflow.cs:229:17:229:21 | this access | | | cflow.cs:229:17:229:21 | access to field Field | cflow.cs:229:17:229:28 | access to property Length | | | cflow.cs:229:17:229:21 | this access | cflow.cs:229:17:229:21 | access to field Field | | diff --git a/csharp/ql/test/library-tests/csharp11/PrintAst.expected b/csharp/ql/test/library-tests/csharp11/PrintAst.expected index 391c41540ec..cf501daa763 100644 --- a/csharp/ql/test/library-tests/csharp11/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp11/PrintAst.expected @@ -614,7 +614,7 @@ Operators.cs: # 12| 1: [UnaryMinusExpr] -... # 12| 0: [IntLiteral] 4 # 13| 5: [ExprStmt] ...; -# 13| 0: [AssignUnsighedRightShiftExpr] ... >>>= ... +# 13| 0: [AssignUnsignedRightShiftExpr] ... >>>= ... # 13| 0: [LocalVariableAccess] access to local variable z # 13| 1: [IntLiteral] 5 # 17| [Class] MyOperatorClass diff --git a/csharp/ql/test/library-tests/csharp11/operators.expected b/csharp/ql/test/library-tests/csharp11/operators.expected index 2c7bda6800d..177019a3ea0 100644 --- a/csharp/ql/test/library-tests/csharp11/operators.expected +++ b/csharp/ql/test/library-tests/csharp11/operators.expected @@ -1,8 +1,7 @@ binarybitwise | Operators.cs:7:18:7:25 | ... >>> ... | Operators.cs:7:18:7:19 | access to local variable x1 | Operators.cs:7:25:7:25 | 2 | >>> | UnsignedRightShiftExpr | | Operators.cs:10:18:10:25 | ... >>> ... | Operators.cs:10:18:10:19 | access to local variable y1 | Operators.cs:10:25:10:25 | 3 | >>> | UnsignedRightShiftExpr | -| Operators.cs:13:9:13:16 | ... >>> ... | Operators.cs:13:9:13:9 | access to local variable z | Operators.cs:13:16:13:16 | 5 | >>> | UnsignedRightShiftExpr | assignbitwise -| Operators.cs:13:9:13:16 | ... >>>= ... | Operators.cs:13:9:13:9 | access to local variable z | Operators.cs:13:16:13:16 | 5 | >>>= | AssignUnsighedRightShiftExpr | +| Operators.cs:13:9:13:16 | ... >>>= ... | Operators.cs:13:9:13:9 | access to local variable z | Operators.cs:13:16:13:16 | 5 | >>>= | AssignUnsignedRightShiftExpr | userdefined | Operators.cs:19:44:19:46 | >>> | op_UnsignedRightShift | UnsignedRightShiftOperator | diff --git a/csharp/ql/test/library-tests/csharp8/NullCoalescingAssignment.expected b/csharp/ql/test/library-tests/csharp8/NullCoalescingAssignment.expected index d388d2fdb7c..1b4f30ad6e7 100644 --- a/csharp/ql/test/library-tests/csharp8/NullCoalescingAssignment.expected +++ b/csharp/ql/test/library-tests/csharp8/NullCoalescingAssignment.expected @@ -1,5 +1,4 @@ nullcoalescing -| NullCoalescingAssignment.cs:8:9:8:18 | ... ?? ... | | NullableRefTypes.cs:94:17:94:25 | ... ?? ... | assignments -| NullCoalescingAssignment.cs:8:9:8:18 | ... ??= ... | NullCoalescingAssignment.cs:8:9:8:18 | ... = ... | +| NullCoalescingAssignment.cs:8:9:8:18 | ... ??= ... | diff --git a/csharp/ql/test/library-tests/csharp8/NullCoalescingAssignment.ql b/csharp/ql/test/library-tests/csharp8/NullCoalescingAssignment.ql index a3a8ca20e92..1a452274677 100644 --- a/csharp/ql/test/library-tests/csharp8/NullCoalescingAssignment.ql +++ b/csharp/ql/test/library-tests/csharp8/NullCoalescingAssignment.ql @@ -2,6 +2,4 @@ import csharp query predicate nullcoalescing(NullCoalescingExpr expr) { any() } -query predicate assignments(AssignCoalesceExpr expr, Expr expanded) { - expanded = expr.getExpandedAssignment() -} +query predicate assignments(AssignCoalesceExpr expr) { any() } diff --git a/csharp/ql/test/library-tests/csharp8/NullCoalescingControlFlow.expected b/csharp/ql/test/library-tests/csharp8/NullCoalescingControlFlow.expected index 2657c450d68..b8d360d1608 100644 --- a/csharp/ql/test/library-tests/csharp8/NullCoalescingControlFlow.expected +++ b/csharp/ql/test/library-tests/csharp8/NullCoalescingControlFlow.expected @@ -4,9 +4,8 @@ | NullCoalescingAssignment.cs:7:9:7:24 | ... ...; | NullCoalescingAssignment.cs:7:20:7:23 | null | semmle.label | successor | | NullCoalescingAssignment.cs:7:16:7:23 | Object o = ... | NullCoalescingAssignment.cs:8:9:8:19 | ...; | semmle.label | successor | | NullCoalescingAssignment.cs:7:20:7:23 | null | NullCoalescingAssignment.cs:7:16:7:23 | Object o = ... | semmle.label | successor | -| NullCoalescingAssignment.cs:8:9:8:9 | access to local variable o | NullCoalescingAssignment.cs:8:9:8:18 | ... ?? ... | semmle.label | non-null | +| NullCoalescingAssignment.cs:8:9:8:9 | access to local variable o | NullCoalescingAssignment.cs:8:9:8:18 | ... ??= ... | semmle.label | non-null | | NullCoalescingAssignment.cs:8:9:8:9 | access to local variable o | NullCoalescingAssignment.cs:8:15:8:18 | this access | semmle.label | null | -| NullCoalescingAssignment.cs:8:9:8:18 | ... = ... | NullCoalescingAssignment.cs:5:10:5:23 | exit NullCoalescing (normal) | semmle.label | successor | -| NullCoalescingAssignment.cs:8:9:8:18 | ... ?? ... | NullCoalescingAssignment.cs:8:9:8:18 | ... = ... | semmle.label | successor | +| NullCoalescingAssignment.cs:8:9:8:18 | ... ??= ... | NullCoalescingAssignment.cs:5:10:5:23 | exit NullCoalescing (normal) | semmle.label | successor | | NullCoalescingAssignment.cs:8:9:8:19 | ...; | NullCoalescingAssignment.cs:8:9:8:9 | access to local variable o | semmle.label | successor | -| NullCoalescingAssignment.cs:8:15:8:18 | this access | NullCoalescingAssignment.cs:8:9:8:18 | ... ?? ... | semmle.label | successor | +| NullCoalescingAssignment.cs:8:15:8:18 | this access | NullCoalescingAssignment.cs:8:9:8:18 | ... ??= ... | semmle.label | successor | diff --git a/csharp/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/csharp/ql/test/library-tests/dataflow/local/DataFlowStep.expected index 861e4c519a8..29533a67083 100644 --- a/csharp/ql/test/library-tests/dataflow/local/DataFlowStep.expected +++ b/csharp/ql/test/library-tests/dataflow/local/DataFlowStep.expected @@ -32,13 +32,14 @@ | LocalDataFlow.cs:59:13:59:25 | SSA def(sink1) | LocalDataFlow.cs:60:9:60:13 | access to local variable sink1 | | LocalDataFlow.cs:59:21:59:25 | "abc" | LocalDataFlow.cs:59:13:59:17 | access to local variable sink1 | | LocalDataFlow.cs:60:9:60:13 | access to local variable sink1 | LocalDataFlow.cs:60:9:60:22 | SSA def(sink1) | -| LocalDataFlow.cs:60:9:60:22 | ... + ... | LocalDataFlow.cs:60:9:60:13 | access to local variable sink1 | +| LocalDataFlow.cs:60:9:60:22 | ... += ... | LocalDataFlow.cs:60:9:60:13 | access to local variable sink1 | | LocalDataFlow.cs:60:9:60:22 | SSA def(sink1) | LocalDataFlow.cs:61:15:61:19 | access to local variable sink1 | +| LocalDataFlow.cs:60:18:60:22 | [post] access to local variable sink0 | LocalDataFlow.cs:168:20:168:24 | access to local variable sink0 | | LocalDataFlow.cs:60:18:60:22 | access to local variable sink0 | LocalDataFlow.cs:168:20:168:24 | access to local variable sink0 | | LocalDataFlow.cs:61:15:61:19 | [post] access to local variable sink1 | LocalDataFlow.cs:68:21:68:25 | access to local variable sink1 | | LocalDataFlow.cs:61:15:61:19 | access to local variable sink1 | LocalDataFlow.cs:68:21:68:25 | access to local variable sink1 | | LocalDataFlow.cs:64:9:64:16 | access to local variable nonSink0 | LocalDataFlow.cs:64:9:64:25 | SSA def(nonSink0) | -| LocalDataFlow.cs:64:9:64:25 | ... + ... | LocalDataFlow.cs:64:9:64:16 | access to local variable nonSink0 | +| LocalDataFlow.cs:64:9:64:25 | ... += ... | LocalDataFlow.cs:64:9:64:16 | access to local variable nonSink0 | | LocalDataFlow.cs:64:9:64:25 | SSA def(nonSink0) | LocalDataFlow.cs:65:15:65:22 | access to local variable nonSink0 | | LocalDataFlow.cs:65:15:65:22 | [post] access to local variable nonSink0 | LocalDataFlow.cs:72:20:72:27 | access to local variable nonSink0 | | LocalDataFlow.cs:65:15:65:22 | access to local variable nonSink0 | LocalDataFlow.cs:72:20:72:27 | access to local variable nonSink0 | diff --git a/csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected b/csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected index 0950638d830..4be5dcf1295 100644 --- a/csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected +++ b/csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected @@ -31,19 +31,20 @@ | LocalDataFlow.cs:59:13:59:17 | access to local variable sink1 | LocalDataFlow.cs:59:13:59:25 | SSA def(sink1) | | LocalDataFlow.cs:59:13:59:25 | SSA def(sink1) | LocalDataFlow.cs:60:9:60:13 | access to local variable sink1 | | LocalDataFlow.cs:59:21:59:25 | "abc" | LocalDataFlow.cs:59:13:59:17 | access to local variable sink1 | -| LocalDataFlow.cs:60:9:60:13 | access to local variable sink1 | LocalDataFlow.cs:60:9:60:22 | ... + ... | +| LocalDataFlow.cs:60:9:60:13 | access to local variable sink1 | LocalDataFlow.cs:60:9:60:22 | ... += ... | | LocalDataFlow.cs:60:9:60:13 | access to local variable sink1 | LocalDataFlow.cs:60:9:60:22 | SSA def(sink1) | -| LocalDataFlow.cs:60:9:60:22 | ... + ... | LocalDataFlow.cs:60:9:60:13 | access to local variable sink1 | +| LocalDataFlow.cs:60:9:60:22 | ... += ... | LocalDataFlow.cs:60:9:60:13 | access to local variable sink1 | | LocalDataFlow.cs:60:9:60:22 | SSA def(sink1) | LocalDataFlow.cs:61:15:61:19 | access to local variable sink1 | -| LocalDataFlow.cs:60:18:60:22 | access to local variable sink0 | LocalDataFlow.cs:60:9:60:22 | ... + ... | +| LocalDataFlow.cs:60:18:60:22 | [post] access to local variable sink0 | LocalDataFlow.cs:168:20:168:24 | access to local variable sink0 | +| LocalDataFlow.cs:60:18:60:22 | access to local variable sink0 | LocalDataFlow.cs:60:9:60:22 | ... += ... | | LocalDataFlow.cs:60:18:60:22 | access to local variable sink0 | LocalDataFlow.cs:168:20:168:24 | access to local variable sink0 | | LocalDataFlow.cs:61:15:61:19 | [post] access to local variable sink1 | LocalDataFlow.cs:68:21:68:25 | access to local variable sink1 | | LocalDataFlow.cs:61:15:61:19 | access to local variable sink1 | LocalDataFlow.cs:68:21:68:25 | access to local variable sink1 | -| LocalDataFlow.cs:64:9:64:16 | access to local variable nonSink0 | LocalDataFlow.cs:64:9:64:25 | ... + ... | +| LocalDataFlow.cs:64:9:64:16 | access to local variable nonSink0 | LocalDataFlow.cs:64:9:64:25 | ... += ... | | LocalDataFlow.cs:64:9:64:16 | access to local variable nonSink0 | LocalDataFlow.cs:64:9:64:25 | SSA def(nonSink0) | -| LocalDataFlow.cs:64:9:64:25 | ... + ... | LocalDataFlow.cs:64:9:64:16 | access to local variable nonSink0 | +| LocalDataFlow.cs:64:9:64:25 | ... += ... | LocalDataFlow.cs:64:9:64:16 | access to local variable nonSink0 | | LocalDataFlow.cs:64:9:64:25 | SSA def(nonSink0) | LocalDataFlow.cs:65:15:65:22 | access to local variable nonSink0 | -| LocalDataFlow.cs:64:21:64:25 | "abc" | LocalDataFlow.cs:64:9:64:25 | ... + ... | +| LocalDataFlow.cs:64:21:64:25 | "abc" | LocalDataFlow.cs:64:9:64:25 | ... += ... | | LocalDataFlow.cs:65:15:65:22 | [post] access to local variable nonSink0 | LocalDataFlow.cs:72:20:72:27 | access to local variable nonSink0 | | LocalDataFlow.cs:65:15:65:22 | access to local variable nonSink0 | LocalDataFlow.cs:72:20:72:27 | access to local variable nonSink0 | | LocalDataFlow.cs:68:13:68:17 | access to local variable sink5 | LocalDataFlow.cs:68:13:68:32 | SSA def(sink5) | diff --git a/csharp/ql/test/library-tests/dataflow/modulusanalysis/ModulusAnalysis.expected b/csharp/ql/test/library-tests/dataflow/modulusanalysis/ModulusAnalysis.expected index ac03ba8b8f3..bc1f2cad5c7 100644 --- a/csharp/ql/test/library-tests/dataflow/modulusanalysis/ModulusAnalysis.expected +++ b/csharp/ql/test/library-tests/dataflow/modulusanalysis/ModulusAnalysis.expected @@ -153,8 +153,7 @@ | ModulusAnalysis.cs:92:25:92:25 | access to local variable j | SSA phi(j) | 0 | 0 | | ModulusAnalysis.cs:92:29:92:31 | access to parameter cap | SSA param(cap) | 0 | 0 | | ModulusAnalysis.cs:92:34:92:34 | access to local variable j | SSA phi(j) | 0 | 0 | -| ModulusAnalysis.cs:92:34:92:39 | ... + ... | SSA phi(j) | 1 | 0 | -| ModulusAnalysis.cs:92:34:92:39 | ... = ... | SSA phi(j) | 1 | 0 | +| ModulusAnalysis.cs:92:34:92:39 | ... += ... | SSA phi(j) | 1 | 0 | | ModulusAnalysis.cs:92:39:92:39 | 1 | 0 | 1 | 0 | | ModulusAnalysis.cs:93:38:93:38 | access to local variable j | SSA phi(j) | 0 | 0 | | ModulusAnalysis.cs:95:22:95:22 | 0 | 0 | 0 | 0 | @@ -165,12 +164,9 @@ | ModulusAnalysis.cs:95:34:95:34 | access to local variable k | 0 | 0 | 3 | | ModulusAnalysis.cs:95:34:95:34 | access to local variable k | SSA def(k) | 0 | 3 | | ModulusAnalysis.cs:95:34:95:34 | access to local variable k | SSA phi(k) | 0 | 0 | -| ModulusAnalysis.cs:95:34:95:39 | ... + ... | 0 | 0 | 3 | -| ModulusAnalysis.cs:95:34:95:39 | ... + ... | SSA def(k) | 0 | 3 | -| ModulusAnalysis.cs:95:34:95:39 | ... + ... | SSA phi(k) | 3 | 0 | -| ModulusAnalysis.cs:95:34:95:39 | ... = ... | 0 | 0 | 3 | -| ModulusAnalysis.cs:95:34:95:39 | ... = ... | SSA def(k) | 0 | 3 | -| ModulusAnalysis.cs:95:34:95:39 | ... = ... | SSA phi(k) | 3 | 0 | +| ModulusAnalysis.cs:95:34:95:39 | ... += ... | 0 | 0 | 3 | +| ModulusAnalysis.cs:95:34:95:39 | ... += ... | SSA def(k) | 0 | 3 | +| ModulusAnalysis.cs:95:34:95:39 | ... += ... | SSA phi(k) | 3 | 0 | | ModulusAnalysis.cs:95:39:95:39 | 3 | 0 | 3 | 0 | | ModulusAnalysis.cs:96:38:96:38 | access to local variable k | 0 | 0 | 3 | | ModulusAnalysis.cs:96:38:96:38 | access to local variable k | SSA def(k) | 0 | 3 | diff --git a/csharp/ql/test/library-tests/dataflow/nullcoalescing/NullCoalescing.cs b/csharp/ql/test/library-tests/dataflow/nullcoalescing/NullCoalescing.cs new file mode 100644 index 00000000000..7231d1e1265 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/nullcoalescing/NullCoalescing.cs @@ -0,0 +1,35 @@ +public class NullCoalescing +{ + public void M1() + { + var i = Source(1); + int? x = null; + x = x ?? i; + Sink(x); // $ hasValueFlow=1 + } + + public void M2() + { + var i = Source(2); + int? x = null; + x ??= i; + Sink(x); // $ hasValueFlow=2 + } + + public void M3(int? x) + { + var i = Source(3); + x = x ?? i; + Sink(x); // $ hasValueFlow=3 + } + + public void M4(int? x) + { + var i = Source(4); + x ??= i; + Sink(x); // $ hasValueFlow=4 + } + + public static void Sink(object o) { } + static T Source(object source) => throw null; +} diff --git a/csharp/ql/test/library-tests/dataflow/nullcoalescing/nullCoalescingFlow.expected b/csharp/ql/test/library-tests/dataflow/nullcoalescing/nullCoalescingFlow.expected new file mode 100644 index 00000000000..8894ec7006f --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/nullcoalescing/nullCoalescingFlow.expected @@ -0,0 +1,70 @@ +models +edges +| NullCoalescing.cs:5:13:5:13 | access to local variable i : Nullable | NullCoalescing.cs:7:9:7:9 | access to local variable x : Nullable | provenance | | +| NullCoalescing.cs:5:13:5:13 | access to local variable i : Nullable | NullCoalescing.cs:7:9:7:9 | access to local variable x : Nullable | provenance | | +| NullCoalescing.cs:5:17:5:31 | call to method Source> : Nullable | NullCoalescing.cs:5:13:5:13 | access to local variable i : Nullable | provenance | | +| NullCoalescing.cs:5:17:5:31 | call to method Source> : Nullable | NullCoalescing.cs:5:13:5:13 | access to local variable i : Nullable | provenance | | +| NullCoalescing.cs:7:9:7:9 | access to local variable x : Nullable | NullCoalescing.cs:8:14:8:14 | (...) ... | provenance | | +| NullCoalescing.cs:7:9:7:9 | access to local variable x : Nullable | NullCoalescing.cs:8:14:8:14 | (...) ... | provenance | | +| NullCoalescing.cs:13:13:13:13 | access to local variable i : Nullable | NullCoalescing.cs:15:9:15:9 | access to local variable x : Nullable | provenance | | +| NullCoalescing.cs:13:13:13:13 | access to local variable i : Nullable | NullCoalescing.cs:15:9:15:9 | access to local variable x : Nullable | provenance | | +| NullCoalescing.cs:13:17:13:31 | call to method Source> : Nullable | NullCoalescing.cs:13:13:13:13 | access to local variable i : Nullable | provenance | | +| NullCoalescing.cs:13:17:13:31 | call to method Source> : Nullable | NullCoalescing.cs:13:13:13:13 | access to local variable i : Nullable | provenance | | +| NullCoalescing.cs:15:9:15:9 | access to local variable x : Nullable | NullCoalescing.cs:16:14:16:14 | (...) ... | provenance | | +| NullCoalescing.cs:15:9:15:9 | access to local variable x : Nullable | NullCoalescing.cs:16:14:16:14 | (...) ... | provenance | | +| NullCoalescing.cs:21:13:21:13 | access to local variable i : Nullable | NullCoalescing.cs:22:9:22:9 | access to parameter x : Nullable | provenance | | +| NullCoalescing.cs:21:13:21:13 | access to local variable i : Nullable | NullCoalescing.cs:22:9:22:9 | access to parameter x : Nullable | provenance | | +| NullCoalescing.cs:21:17:21:31 | call to method Source> : Nullable | NullCoalescing.cs:21:13:21:13 | access to local variable i : Nullable | provenance | | +| NullCoalescing.cs:21:17:21:31 | call to method Source> : Nullable | NullCoalescing.cs:21:13:21:13 | access to local variable i : Nullable | provenance | | +| NullCoalescing.cs:22:9:22:9 | access to parameter x : Nullable | NullCoalescing.cs:23:14:23:14 | (...) ... | provenance | | +| NullCoalescing.cs:22:9:22:9 | access to parameter x : Nullable | NullCoalescing.cs:23:14:23:14 | (...) ... | provenance | | +| NullCoalescing.cs:28:13:28:13 | access to local variable i : Nullable | NullCoalescing.cs:29:9:29:9 | access to parameter x : Nullable | provenance | | +| NullCoalescing.cs:28:13:28:13 | access to local variable i : Nullable | NullCoalescing.cs:29:9:29:9 | access to parameter x : Nullable | provenance | | +| NullCoalescing.cs:28:17:28:31 | call to method Source> : Nullable | NullCoalescing.cs:28:13:28:13 | access to local variable i : Nullable | provenance | | +| NullCoalescing.cs:28:17:28:31 | call to method Source> : Nullable | NullCoalescing.cs:28:13:28:13 | access to local variable i : Nullable | provenance | | +| NullCoalescing.cs:29:9:29:9 | access to parameter x : Nullable | NullCoalescing.cs:30:14:30:14 | (...) ... | provenance | | +| NullCoalescing.cs:29:9:29:9 | access to parameter x : Nullable | NullCoalescing.cs:30:14:30:14 | (...) ... | provenance | | +nodes +| NullCoalescing.cs:5:13:5:13 | access to local variable i : Nullable | semmle.label | access to local variable i : Nullable | +| NullCoalescing.cs:5:13:5:13 | access to local variable i : Nullable | semmle.label | access to local variable i : Nullable | +| NullCoalescing.cs:5:17:5:31 | call to method Source> : Nullable | semmle.label | call to method Source> : Nullable | +| NullCoalescing.cs:5:17:5:31 | call to method Source> : Nullable | semmle.label | call to method Source> : Nullable | +| NullCoalescing.cs:7:9:7:9 | access to local variable x : Nullable | semmle.label | access to local variable x : Nullable | +| NullCoalescing.cs:7:9:7:9 | access to local variable x : Nullable | semmle.label | access to local variable x : Nullable | +| NullCoalescing.cs:8:14:8:14 | (...) ... | semmle.label | (...) ... | +| NullCoalescing.cs:8:14:8:14 | (...) ... | semmle.label | (...) ... | +| NullCoalescing.cs:13:13:13:13 | access to local variable i : Nullable | semmle.label | access to local variable i : Nullable | +| NullCoalescing.cs:13:13:13:13 | access to local variable i : Nullable | semmle.label | access to local variable i : Nullable | +| NullCoalescing.cs:13:17:13:31 | call to method Source> : Nullable | semmle.label | call to method Source> : Nullable | +| NullCoalescing.cs:13:17:13:31 | call to method Source> : Nullable | semmle.label | call to method Source> : Nullable | +| NullCoalescing.cs:15:9:15:9 | access to local variable x : Nullable | semmle.label | access to local variable x : Nullable | +| NullCoalescing.cs:15:9:15:9 | access to local variable x : Nullable | semmle.label | access to local variable x : Nullable | +| NullCoalescing.cs:16:14:16:14 | (...) ... | semmle.label | (...) ... | +| NullCoalescing.cs:16:14:16:14 | (...) ... | semmle.label | (...) ... | +| NullCoalescing.cs:21:13:21:13 | access to local variable i : Nullable | semmle.label | access to local variable i : Nullable | +| NullCoalescing.cs:21:13:21:13 | access to local variable i : Nullable | semmle.label | access to local variable i : Nullable | +| NullCoalescing.cs:21:17:21:31 | call to method Source> : Nullable | semmle.label | call to method Source> : Nullable | +| NullCoalescing.cs:21:17:21:31 | call to method Source> : Nullable | semmle.label | call to method Source> : Nullable | +| NullCoalescing.cs:22:9:22:9 | access to parameter x : Nullable | semmle.label | access to parameter x : Nullable | +| NullCoalescing.cs:22:9:22:9 | access to parameter x : Nullable | semmle.label | access to parameter x : Nullable | +| NullCoalescing.cs:23:14:23:14 | (...) ... | semmle.label | (...) ... | +| NullCoalescing.cs:23:14:23:14 | (...) ... | semmle.label | (...) ... | +| NullCoalescing.cs:28:13:28:13 | access to local variable i : Nullable | semmle.label | access to local variable i : Nullable | +| NullCoalescing.cs:28:13:28:13 | access to local variable i : Nullable | semmle.label | access to local variable i : Nullable | +| NullCoalescing.cs:28:17:28:31 | call to method Source> : Nullable | semmle.label | call to method Source> : Nullable | +| NullCoalescing.cs:28:17:28:31 | call to method Source> : Nullable | semmle.label | call to method Source> : Nullable | +| NullCoalescing.cs:29:9:29:9 | access to parameter x : Nullable | semmle.label | access to parameter x : Nullable | +| NullCoalescing.cs:29:9:29:9 | access to parameter x : Nullable | semmle.label | access to parameter x : Nullable | +| NullCoalescing.cs:30:14:30:14 | (...) ... | semmle.label | (...) ... | +| NullCoalescing.cs:30:14:30:14 | (...) ... | semmle.label | (...) ... | +subpaths +testFailures +#select +| NullCoalescing.cs:8:14:8:14 | (...) ... | NullCoalescing.cs:5:17:5:31 | call to method Source> : Nullable | NullCoalescing.cs:8:14:8:14 | (...) ... | $@ | NullCoalescing.cs:5:17:5:31 | call to method Source> : Nullable | call to method Source> : Nullable | +| NullCoalescing.cs:8:14:8:14 | (...) ... | NullCoalescing.cs:5:17:5:31 | call to method Source> : Nullable | NullCoalescing.cs:8:14:8:14 | (...) ... | $@ | NullCoalescing.cs:5:17:5:31 | call to method Source> : Nullable | call to method Source> : Nullable | +| NullCoalescing.cs:16:14:16:14 | (...) ... | NullCoalescing.cs:13:17:13:31 | call to method Source> : Nullable | NullCoalescing.cs:16:14:16:14 | (...) ... | $@ | NullCoalescing.cs:13:17:13:31 | call to method Source> : Nullable | call to method Source> : Nullable | +| NullCoalescing.cs:16:14:16:14 | (...) ... | NullCoalescing.cs:13:17:13:31 | call to method Source> : Nullable | NullCoalescing.cs:16:14:16:14 | (...) ... | $@ | NullCoalescing.cs:13:17:13:31 | call to method Source> : Nullable | call to method Source> : Nullable | +| NullCoalescing.cs:23:14:23:14 | (...) ... | NullCoalescing.cs:21:17:21:31 | call to method Source> : Nullable | NullCoalescing.cs:23:14:23:14 | (...) ... | $@ | NullCoalescing.cs:21:17:21:31 | call to method Source> : Nullable | call to method Source> : Nullable | +| NullCoalescing.cs:23:14:23:14 | (...) ... | NullCoalescing.cs:21:17:21:31 | call to method Source> : Nullable | NullCoalescing.cs:23:14:23:14 | (...) ... | $@ | NullCoalescing.cs:21:17:21:31 | call to method Source> : Nullable | call to method Source> : Nullable | +| NullCoalescing.cs:30:14:30:14 | (...) ... | NullCoalescing.cs:28:17:28:31 | call to method Source> : Nullable | NullCoalescing.cs:30:14:30:14 | (...) ... | $@ | NullCoalescing.cs:28:17:28:31 | call to method Source> : Nullable | call to method Source> : Nullable | +| NullCoalescing.cs:30:14:30:14 | (...) ... | NullCoalescing.cs:28:17:28:31 | call to method Source> : Nullable | NullCoalescing.cs:30:14:30:14 | (...) ... | $@ | NullCoalescing.cs:28:17:28:31 | call to method Source> : Nullable | call to method Source> : Nullable | diff --git a/csharp/ql/test/library-tests/dataflow/nullcoalescing/nullCoalescingFlow.ql b/csharp/ql/test/library-tests/dataflow/nullcoalescing/nullCoalescingFlow.ql new file mode 100644 index 00000000000..9ab95f59caf --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/nullcoalescing/nullCoalescingFlow.ql @@ -0,0 +1,12 @@ +/** + * @kind path-problem + */ + +import csharp +import utils.test.InlineFlowTest +import DefaultFlowTest +import PathGraph + +from PathNode source, PathNode sink +where flowPath(source, sink) +select sink, source, sink, "$@", source, source.toString() diff --git a/csharp/ql/test/library-tests/dataflow/signanalysis/SignAnalysis.expected b/csharp/ql/test/library-tests/dataflow/signanalysis/SignAnalysis.expected index 9f87bf59eeb..4dce60d9c2d 100644 --- a/csharp/ql/test/library-tests/dataflow/signanalysis/SignAnalysis.expected +++ b/csharp/ql/test/library-tests/dataflow/signanalysis/SignAnalysis.expected @@ -52,8 +52,7 @@ | SignAnalysis.cs:80:13:80:17 | ... = ... | strictlyNegative | | SignAnalysis.cs:80:17:80:17 | access to parameter i | strictlyNegative | | SignAnalysis.cs:81:13:81:13 | access to local variable x | strictlyNegative | -| SignAnalysis.cs:81:13:81:18 | ... + ... | strictlyNegative | -| SignAnalysis.cs:81:13:81:18 | ... = ... | strictlyNegative | +| SignAnalysis.cs:81:13:81:18 | ... += ... | strictlyNegative | | SignAnalysis.cs:81:18:81:18 | access to parameter i | strictlyNegative | | SignAnalysis.cs:82:38:82:38 | access to local variable x | strictlyNegative | | SignAnalysis.cs:87:21:87:21 | access to parameter i | strictlyNegative | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/DefAdjacentRead.expected b/csharp/ql/test/library-tests/dataflow/ssa/DefAdjacentRead.expected index 13036f0f0ae..9246392b662 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/DefAdjacentRead.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/DefAdjacentRead.expected @@ -46,7 +46,7 @@ | DefUse.cs:89:13:89:14 | x3 | DefUse.cs:89:13:89:18 | Int32 x3 = ... | DefUse.cs:92:15:92:16 | access to local variable x3 | | DefUse.cs:89:13:89:14 | x3 | DefUse.cs:92:15:92:16 | access to local variable x3 | DefUse.cs:94:13:94:14 | access to local variable x3 | | DefUse.cs:90:13:90:14 | x4 | DefUse.cs:93:15:93:16 | access to local variable x4 | DefUse.cs:95:13:95:14 | access to local variable x4 | -| DefUse.cs:97:13:97:14 | x5 | DefUse.cs:104:9:104:15 | ... = ... | DefUse.cs:105:13:105:14 | access to local variable x5 | +| DefUse.cs:97:13:97:14 | x5 | DefUse.cs:104:9:104:15 | ... += ... | DefUse.cs:105:13:105:14 | access to local variable x5 | | DefUse.cs:118:45:118:45 | i | DefUse.cs:118:45:118:45 | i | DefUse.cs:118:65:118:65 | access to parameter i | | DefUse.cs:120:17:120:21 | Field | DefUse.cs:53:9:53:17 | ... = ... | DefUse.cs:54:13:54:17 | access to field Field | | DefUse.cs:122:16:122:21 | Field2 | DefUse.cs:63:9:63:18 | ... = ... | DefUse.cs:64:13:64:18 | access to field Field2 | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected index 4bbe88295ed..923d62a96ec 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected @@ -76,7 +76,7 @@ | DefUse.cs:97:13:97:18 | SSA def(x5) | DefUse.cs:97:13:97:18 | Int32 x5 = ... | | DefUse.cs:98:16:98:17 | SSA phi(x5) | DefUse.cs:98:16:98:17 | access to local variable x5 | | DefUse.cs:101:13:101:23 | SSA def(x5) | DefUse.cs:101:13:101:23 | ... = ... | -| DefUse.cs:104:9:104:15 | SSA def(x5) | DefUse.cs:104:9:104:15 | ... = ... | +| DefUse.cs:104:9:104:15 | SSA def(x5) | DefUse.cs:104:9:104:15 | ... += ... | | DefUse.cs:114:47:114:52 | SSA def(i) | DefUse.cs:114:47:114:52 | ... = ... | | DefUse.cs:116:47:116:51 | SSA def(i) | DefUse.cs:116:47:116:51 | ... = ... | | DefUse.cs:118:45:118:45 | SSA param(i) | DefUse.cs:118:45:118:45 | i | @@ -245,7 +245,7 @@ | Test.cs:14:17:14:19 | SSA def(x) | Test.cs:14:17:14:19 | ++... | | Test.cs:15:13:15:17 | SSA def(z) | Test.cs:15:13:15:17 | ... = ... | | Test.cs:19:13:19:17 | SSA def(y) | Test.cs:19:13:19:17 | ... = ... | -| Test.cs:20:13:20:18 | SSA def(y) | Test.cs:20:13:20:18 | ... = ... | +| Test.cs:20:13:20:18 | SSA def(y) | Test.cs:20:13:20:18 | ... += ... | | Test.cs:21:13:21:22 | SSA def(this.field) | Test.cs:21:13:21:22 | ... = ... | | Test.cs:22:13:22:17 | SSA def(z) | Test.cs:22:13:22:17 | ... = ... | | Test.cs:24:9:24:15 | SSA phi(this.field) | Test.cs:24:9:24:15 | ...; | @@ -255,16 +255,16 @@ | Test.cs:25:16:25:16 | SSA phi(param1) | Test.cs:25:16:25:16 | access to local variable x | | Test.cs:25:16:25:16 | SSA phi(y) | Test.cs:25:16:25:16 | access to local variable x | | Test.cs:27:17:27:24 | SSA def(param1) | Test.cs:27:17:27:24 | ...++ | -| Test.cs:31:13:31:18 | SSA def(y) | Test.cs:31:13:31:18 | ... = ... | +| Test.cs:31:13:31:18 | SSA def(y) | Test.cs:31:13:31:18 | ... -= ... | | Test.cs:33:9:33:19 | SSA phi(param1) | Test.cs:33:9:33:19 | ...; | | Test.cs:34:18:34:22 | SSA def(i) | Test.cs:34:18:34:22 | Int32 i = ... | | Test.cs:34:25:34:25 | SSA phi(i) | Test.cs:34:25:34:25 | access to local variable i | | Test.cs:34:25:34:25 | SSA phi(x) | Test.cs:34:25:34:25 | access to local variable i | | Test.cs:34:33:34:35 | SSA def(i) | Test.cs:34:33:34:35 | ...++ | -| Test.cs:36:13:36:18 | SSA def(x) | Test.cs:36:13:36:18 | ... = ... | +| Test.cs:36:13:36:18 | SSA def(x) | Test.cs:36:13:36:18 | ... += ... | | Test.cs:39:9:42:9 | SSA phi(param1) | Test.cs:39:9:42:9 | foreach (... ... in ...) ... | | Test.cs:39:22:39:22 | SSA def(w) | Test.cs:39:22:39:22 | Int32 w | -| Test.cs:41:13:41:23 | SSA def(param1) | Test.cs:41:13:41:23 | ... = ... | +| Test.cs:41:13:41:23 | SSA def(param1) | Test.cs:41:13:41:23 | ... += ... | | Test.cs:46:10:46:10 | SSA entry def(this.field) | Test.cs:46:10:46:10 | g | | Test.cs:46:16:46:18 | SSA param(in) | Test.cs:46:16:46:18 | in | | Test.cs:50:13:50:20 | SSA def(out) | Test.cs:50:13:50:20 | ... = ... | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaExplicitDef.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaExplicitDef.expected index a8bcd3e4daf..8582dd1cf6e 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaExplicitDef.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaExplicitDef.expected @@ -47,7 +47,7 @@ | DefUse.cs:90:13:90:14 | x4 | DefUse.cs:93:15:93:16 | SSA def(x4) | DefUse.cs:93:15:93:16 | access to local variable x4 | | DefUse.cs:97:13:97:14 | x5 | DefUse.cs:97:13:97:18 | SSA def(x5) | DefUse.cs:97:13:97:18 | Int32 x5 = ... | | DefUse.cs:97:13:97:14 | x5 | DefUse.cs:101:13:101:23 | SSA def(x5) | DefUse.cs:101:13:101:23 | ... = ... | -| DefUse.cs:97:13:97:14 | x5 | DefUse.cs:104:9:104:15 | SSA def(x5) | DefUse.cs:104:9:104:15 | ... = ... | +| DefUse.cs:97:13:97:14 | x5 | DefUse.cs:104:9:104:15 | SSA def(x5) | DefUse.cs:104:9:104:15 | ... += ... | | DefUse.cs:114:42:114:42 | i | DefUse.cs:114:47:114:52 | SSA def(i) | DefUse.cs:114:47:114:52 | ... = ... | | DefUse.cs:116:42:116:42 | i | DefUse.cs:116:47:116:51 | SSA def(i) | DefUse.cs:116:47:116:51 | ... = ... | | DefUse.cs:118:45:118:45 | i | DefUse.cs:118:68:118:72 | SSA def(i) | DefUse.cs:118:68:118:72 | ... = ... | @@ -117,17 +117,17 @@ | Properties.cs:78:9:78:15 | this.xs | Properties.cs:81:9:81:22 | SSA def(this.xs) | Properties.cs:81:9:81:22 | ... = ... | | Properties.cs:78:9:78:15 | this.xs | Properties.cs:83:9:83:22 | SSA def(this.xs) | Properties.cs:83:9:83:22 | ... = ... | | Test.cs:5:15:5:20 | param1 | Test.cs:27:17:27:24 | SSA def(param1) | Test.cs:27:17:27:24 | ...++ | -| Test.cs:5:15:5:20 | param1 | Test.cs:41:13:41:23 | SSA def(param1) | Test.cs:41:13:41:23 | ... = ... | +| Test.cs:5:15:5:20 | param1 | Test.cs:41:13:41:23 | SSA def(param1) | Test.cs:41:13:41:23 | ... += ... | | Test.cs:7:9:7:13 | this.field | Test.cs:7:9:7:17 | SSA def(this.field) | Test.cs:7:9:7:17 | ... = ... | | Test.cs:7:9:7:13 | this.field | Test.cs:21:13:21:22 | SSA def(this.field) | Test.cs:21:13:21:22 | ... = ... | | Test.cs:8:13:8:13 | x | Test.cs:8:13:8:17 | SSA def(x) | Test.cs:8:13:8:17 | Int32 x = ... | | Test.cs:8:13:8:13 | x | Test.cs:13:13:13:15 | SSA def(x) | Test.cs:13:13:13:15 | ...++ | | Test.cs:8:13:8:13 | x | Test.cs:14:17:14:19 | SSA def(x) | Test.cs:14:17:14:19 | ++... | -| Test.cs:8:13:8:13 | x | Test.cs:36:13:36:18 | SSA def(x) | Test.cs:36:13:36:18 | ... = ... | +| Test.cs:8:13:8:13 | x | Test.cs:36:13:36:18 | SSA def(x) | Test.cs:36:13:36:18 | ... += ... | | Test.cs:9:13:9:13 | y | Test.cs:14:13:14:19 | SSA def(y) | Test.cs:14:13:14:19 | ... = ... | | Test.cs:9:13:9:13 | y | Test.cs:19:13:19:17 | SSA def(y) | Test.cs:19:13:19:17 | ... = ... | -| Test.cs:9:13:9:13 | y | Test.cs:20:13:20:18 | SSA def(y) | Test.cs:20:13:20:18 | ... = ... | -| Test.cs:9:13:9:13 | y | Test.cs:31:13:31:18 | SSA def(y) | Test.cs:31:13:31:18 | ... = ... | +| Test.cs:9:13:9:13 | y | Test.cs:20:13:20:18 | SSA def(y) | Test.cs:20:13:20:18 | ... += ... | +| Test.cs:9:13:9:13 | y | Test.cs:31:13:31:18 | SSA def(y) | Test.cs:31:13:31:18 | ... -= ... | | Test.cs:10:13:10:13 | z | Test.cs:15:13:15:17 | SSA def(z) | Test.cs:15:13:15:17 | ... = ... | | Test.cs:10:13:10:13 | z | Test.cs:22:13:22:17 | SSA def(z) | Test.cs:22:13:22:17 | ... = ... | | Test.cs:34:18:34:18 | i | Test.cs:34:18:34:22 | SSA def(i) | Test.cs:34:18:34:22 | Int32 i = ... | diff --git a/csharp/ql/test/library-tests/dispatch/CallContext.expected b/csharp/ql/test/library-tests/dispatch/CallContext.expected index 2ef2223ebd7..09fe22783aa 100644 --- a/csharp/ql/test/library-tests/dispatch/CallContext.expected +++ b/csharp/ql/test/library-tests/dispatch/CallContext.expected @@ -20,12 +20,12 @@ mayBenefitFromCallContext | ViableCallable.cs:245:9:245:15 | call to method M | | ViableCallable.cs:294:9:294:15 | call to method M | | ViableCallable.cs:297:9:297:20 | call to method M | -| ViableCallable.cs:425:9:425:18 | call to method M | -| ViableCallable.cs:469:9:469:30 | call to method M2 | -| ViableCallable.cs:475:9:475:30 | call to method M2 | -| ViableCallable.cs:577:18:577:22 | call to operator / | -| ViableCallable.cs:580:26:580:30 | call to operator checked / | -| ViableCallable.cs:586:9:586:15 | call to method M12 | -| ViableCallable.cs:619:9:619:13 | call to method M | -| ViableCallable.cs:683:9:683:16 | call to method M | -| ViableCallable.cs:687:9:687:16 | call to method M | +| ViableCallable.cs:426:9:426:18 | call to method M | +| ViableCallable.cs:470:9:470:30 | call to method M2 | +| ViableCallable.cs:476:9:476:30 | call to method M2 | +| ViableCallable.cs:578:18:578:22 | call to operator / | +| ViableCallable.cs:581:26:581:30 | call to operator checked / | +| ViableCallable.cs:587:9:587:15 | call to method M12 | +| ViableCallable.cs:620:9:620:13 | call to method M | +| ViableCallable.cs:684:9:684:16 | call to method M | +| ViableCallable.cs:688:9:688:16 | call to method M | diff --git a/csharp/ql/test/library-tests/dispatch/CallGraph.expected b/csharp/ql/test/library-tests/dispatch/CallGraph.expected index e7ebca868ba..8c93277cb54 100644 --- a/csharp/ql/test/library-tests/dispatch/CallGraph.expected +++ b/csharp/ql/test/library-tests/dispatch/CallGraph.expected @@ -219,62 +219,62 @@ | ViableCallable.cs:308:17:308:19 | Run | ViableCallable.cs:286:24:286:28 | M`1 | | ViableCallable.cs:308:17:308:19 | Run | ViableCallable.cs:303:26:303:30 | M`1 | | ViableCallable.cs:361:17:361:19 | Run | ViableCallable.cs:359:10:359:10 | M | -| ViableCallable.cs:361:17:361:19 | Run | ViableCallable.cs:375:5:375:7 | C11 | -| ViableCallable.cs:389:10:389:16 | Run`1 | ViableCallable.cs:385:33:385:33 | M | -| ViableCallable.cs:395:10:395:17 | Run2`1 | ViableCallable.cs:389:10:389:16 | Run | -| ViableCallable.cs:400:10:400:13 | Run3 | ViableCallable.cs:395:10:395:17 | Run2 | -| ViableCallable.cs:422:10:422:12 | Run | ViableCallable.cs:213:21:213:27 | Mock | -| ViableCallable.cs:422:10:422:12 | Run | ViableCallable.cs:410:36:410:40 | M`1 | -| ViableCallable.cs:422:10:422:12 | Run | ViableCallable.cs:416:53:416:57 | M`1 | -| ViableCallable.cs:422:10:422:12 | Run | ViableCallable.cs:418:42:418:46 | M`1 | -| ViableCallable.cs:444:22:444:26 | M2`1 | ViableCallable.cs:469:14:469:29 | (...) => ... | -| ViableCallable.cs:444:22:444:26 | M2`1 | ViableCallable.cs:475:14:475:29 | (...) => ... | -| ViableCallable.cs:449:10:449:11 | M1 | ViableCallable.cs:443:23:443:24 | M1 | -| ViableCallable.cs:449:10:449:11 | M1 | ViableCallable.cs:458:23:458:27 | M2`1 | -| ViableCallable.cs:458:23:458:27 | M2`1 | ViableCallable.cs:455:17:455:23 | (...) => ... | -| ViableCallable.cs:458:23:458:27 | M2`1 | ViableCallable.cs:463:14:463:20 | (...) => ... | -| ViableCallable.cs:458:23:458:27 | M2`1 | ViableCallable.cs:469:14:469:29 | (...) => ... | -| ViableCallable.cs:458:23:458:27 | M2`1 | ViableCallable.cs:475:14:475:29 | (...) => ... | -| ViableCallable.cs:460:10:460:14 | M3`1 | ViableCallable.cs:458:23:458:27 | M2`1 | -| ViableCallable.cs:466:10:466:14 | M4`1 | ViableCallable.cs:444:22:444:26 | M2`1 | -| ViableCallable.cs:466:10:466:14 | M4`1 | ViableCallable.cs:458:23:458:27 | M2`1 | -| ViableCallable.cs:472:10:472:14 | M5`1 | ViableCallable.cs:444:22:444:26 | M2`1 | -| ViableCallable.cs:472:10:472:14 | M5`1 | ViableCallable.cs:458:23:458:27 | M2`1 | -| ViableCallable.cs:489:10:489:12 | Run | ViableCallable.cs:482:10:482:11 | M2 | -| ViableCallable.cs:489:10:489:12 | Run | ViableCallable.cs:487:17:487:18 | M1 | -| ViableCallable.cs:506:10:506:12 | Run | ViableCallable.cs:501:32:501:32 | + | -| ViableCallable.cs:506:10:506:12 | Run | ViableCallable.cs:502:40:502:40 | checked + | -| ViableCallable.cs:506:10:506:12 | Run | ViableCallable.cs:503:28:503:35 | explicit conversion | -| ViableCallable.cs:506:10:506:12 | Run | ViableCallable.cs:504:28:504:35 | checked explicit conversion | -| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:528:39:528:39 | checked - | -| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:530:31:530:31 | * | -| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:531:39:531:39 | checked * | -| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:533:31:533:31 | / | -| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:534:39:534:39 | checked / | -| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:538:18:538:20 | M12 | -| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:540:18:540:20 | M13 | -| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:545:32:545:32 | + | -| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:546:40:546:40 | checked + | -| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:548:32:548:32 | - | -| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:550:32:550:32 | / | -| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:551:40:551:40 | checked / | -| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:553:17:553:19 | M11 | -| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:554:17:554:19 | M12 | -| ViableCallable.cs:610:17:610:23 | Run1`1 | ViableCallable.cs:602:21:602:21 | M | -| ViableCallable.cs:616:17:616:23 | Run2`1 | ViableCallable.cs:602:21:602:21 | M | -| ViableCallable.cs:616:17:616:23 | Run2`1 | ViableCallable.cs:607:21:607:21 | M | -| ViableCallable.cs:657:17:657:20 | Run1 | ViableCallable.cs:635:21:635:21 | M | -| ViableCallable.cs:657:17:657:20 | Run1 | ViableCallable.cs:637:21:637:21 | M | -| ViableCallable.cs:668:17:668:20 | Run2 | ViableCallable.cs:651:21:651:21 | M | -| ViableCallable.cs:668:17:668:20 | Run2 | ViableCallable.cs:654:21:654:21 | M | -| ViableCallable.cs:679:17:679:20 | Run3 | ViableCallable.cs:635:21:635:21 | M | -| ViableCallable.cs:679:17:679:20 | Run3 | ViableCallable.cs:637:21:637:21 | M | -| ViableCallable.cs:679:17:679:20 | Run3 | ViableCallable.cs:646:21:646:21 | M | -| ViableCallable.cs:679:17:679:20 | Run3 | ViableCallable.cs:648:21:648:21 | M | -| ViableCallable.cs:711:17:711:20 | Run1 | ViableCallable.cs:704:24:704:31 | Partial1 | -| ViableCallable.cs:711:17:711:20 | Run1 | ViableCallable.cs:705:42:705:44 | get_Property | -| ViableCallable.cs:711:17:711:20 | Run1 | ViableCallable.cs:705:63:705:65 | set_Property | -| ViableCallable.cs:711:17:711:20 | Run1 | ViableCallable.cs:707:49:707:51 | get_Item | -| ViableCallable.cs:711:17:711:20 | Run1 | ViableCallable.cs:707:70:707:72 | set_Item | -| ViableCallable.cs:711:17:711:20 | Run1 | ViableCallable.cs:708:51:708:53 | add_Event | -| ViableCallable.cs:711:17:711:20 | Run1 | ViableCallable.cs:708:59:708:64 | remove_Event | +| ViableCallable.cs:361:17:361:19 | Run | ViableCallable.cs:376:5:376:7 | C11 | +| ViableCallable.cs:390:10:390:16 | Run`1 | ViableCallable.cs:386:33:386:33 | M | +| ViableCallable.cs:396:10:396:17 | Run2`1 | ViableCallable.cs:390:10:390:16 | Run | +| ViableCallable.cs:401:10:401:13 | Run3 | ViableCallable.cs:396:10:396:17 | Run2 | +| ViableCallable.cs:423:10:423:12 | Run | ViableCallable.cs:213:21:213:27 | Mock | +| ViableCallable.cs:423:10:423:12 | Run | ViableCallable.cs:411:36:411:40 | M`1 | +| ViableCallable.cs:423:10:423:12 | Run | ViableCallable.cs:417:53:417:57 | M`1 | +| ViableCallable.cs:423:10:423:12 | Run | ViableCallable.cs:419:42:419:46 | M`1 | +| ViableCallable.cs:445:22:445:26 | M2`1 | ViableCallable.cs:470:14:470:29 | (...) => ... | +| ViableCallable.cs:445:22:445:26 | M2`1 | ViableCallable.cs:476:14:476:29 | (...) => ... | +| ViableCallable.cs:450:10:450:11 | M1 | ViableCallable.cs:444:23:444:24 | M1 | +| ViableCallable.cs:450:10:450:11 | M1 | ViableCallable.cs:459:23:459:27 | M2`1 | +| ViableCallable.cs:459:23:459:27 | M2`1 | ViableCallable.cs:456:17:456:23 | (...) => ... | +| ViableCallable.cs:459:23:459:27 | M2`1 | ViableCallable.cs:464:14:464:20 | (...) => ... | +| ViableCallable.cs:459:23:459:27 | M2`1 | ViableCallable.cs:470:14:470:29 | (...) => ... | +| ViableCallable.cs:459:23:459:27 | M2`1 | ViableCallable.cs:476:14:476:29 | (...) => ... | +| ViableCallable.cs:461:10:461:14 | M3`1 | ViableCallable.cs:459:23:459:27 | M2`1 | +| ViableCallable.cs:467:10:467:14 | M4`1 | ViableCallable.cs:445:22:445:26 | M2`1 | +| ViableCallable.cs:467:10:467:14 | M4`1 | ViableCallable.cs:459:23:459:27 | M2`1 | +| ViableCallable.cs:473:10:473:14 | M5`1 | ViableCallable.cs:445:22:445:26 | M2`1 | +| ViableCallable.cs:473:10:473:14 | M5`1 | ViableCallable.cs:459:23:459:27 | M2`1 | +| ViableCallable.cs:490:10:490:12 | Run | ViableCallable.cs:483:10:483:11 | M2 | +| ViableCallable.cs:490:10:490:12 | Run | ViableCallable.cs:488:17:488:18 | M1 | +| ViableCallable.cs:507:10:507:12 | Run | ViableCallable.cs:502:32:502:32 | + | +| ViableCallable.cs:507:10:507:12 | Run | ViableCallable.cs:503:40:503:40 | checked + | +| ViableCallable.cs:507:10:507:12 | Run | ViableCallable.cs:504:28:504:35 | explicit conversion | +| ViableCallable.cs:507:10:507:12 | Run | ViableCallable.cs:505:28:505:35 | checked explicit conversion | +| ViableCallable.cs:557:10:557:15 | Run`1 | ViableCallable.cs:529:39:529:39 | checked - | +| ViableCallable.cs:557:10:557:15 | Run`1 | ViableCallable.cs:531:31:531:31 | * | +| ViableCallable.cs:557:10:557:15 | Run`1 | ViableCallable.cs:532:39:532:39 | checked * | +| ViableCallable.cs:557:10:557:15 | Run`1 | ViableCallable.cs:534:31:534:31 | / | +| ViableCallable.cs:557:10:557:15 | Run`1 | ViableCallable.cs:535:39:535:39 | checked / | +| ViableCallable.cs:557:10:557:15 | Run`1 | ViableCallable.cs:539:18:539:20 | M12 | +| ViableCallable.cs:557:10:557:15 | Run`1 | ViableCallable.cs:541:18:541:20 | M13 | +| ViableCallable.cs:557:10:557:15 | Run`1 | ViableCallable.cs:546:32:546:32 | + | +| ViableCallable.cs:557:10:557:15 | Run`1 | ViableCallable.cs:547:40:547:40 | checked + | +| ViableCallable.cs:557:10:557:15 | Run`1 | ViableCallable.cs:549:32:549:32 | - | +| ViableCallable.cs:557:10:557:15 | Run`1 | ViableCallable.cs:551:32:551:32 | / | +| ViableCallable.cs:557:10:557:15 | Run`1 | ViableCallable.cs:552:40:552:40 | checked / | +| ViableCallable.cs:557:10:557:15 | Run`1 | ViableCallable.cs:554:17:554:19 | M11 | +| ViableCallable.cs:557:10:557:15 | Run`1 | ViableCallable.cs:555:17:555:19 | M12 | +| ViableCallable.cs:611:17:611:23 | Run1`1 | ViableCallable.cs:603:21:603:21 | M | +| ViableCallable.cs:617:17:617:23 | Run2`1 | ViableCallable.cs:603:21:603:21 | M | +| ViableCallable.cs:617:17:617:23 | Run2`1 | ViableCallable.cs:608:21:608:21 | M | +| ViableCallable.cs:658:17:658:20 | Run1 | ViableCallable.cs:636:21:636:21 | M | +| ViableCallable.cs:658:17:658:20 | Run1 | ViableCallable.cs:638:21:638:21 | M | +| ViableCallable.cs:669:17:669:20 | Run2 | ViableCallable.cs:652:21:652:21 | M | +| ViableCallable.cs:669:17:669:20 | Run2 | ViableCallable.cs:655:21:655:21 | M | +| ViableCallable.cs:680:17:680:20 | Run3 | ViableCallable.cs:636:21:636:21 | M | +| ViableCallable.cs:680:17:680:20 | Run3 | ViableCallable.cs:638:21:638:21 | M | +| ViableCallable.cs:680:17:680:20 | Run3 | ViableCallable.cs:647:21:647:21 | M | +| ViableCallable.cs:680:17:680:20 | Run3 | ViableCallable.cs:649:21:649:21 | M | +| ViableCallable.cs:712:17:712:20 | Run1 | ViableCallable.cs:705:24:705:31 | Partial1 | +| ViableCallable.cs:712:17:712:20 | Run1 | ViableCallable.cs:706:42:706:44 | get_Property | +| ViableCallable.cs:712:17:712:20 | Run1 | ViableCallable.cs:706:63:706:65 | set_Property | +| ViableCallable.cs:712:17:712:20 | Run1 | ViableCallable.cs:708:49:708:51 | get_Item | +| ViableCallable.cs:712:17:712:20 | Run1 | ViableCallable.cs:708:70:708:72 | set_Item | +| ViableCallable.cs:712:17:712:20 | Run1 | ViableCallable.cs:709:51:709:53 | add_Event | +| ViableCallable.cs:712:17:712:20 | Run1 | ViableCallable.cs:709:59:709:64 | remove_Event | diff --git a/csharp/ql/test/library-tests/dispatch/GetADynamicTarget.expected b/csharp/ql/test/library-tests/dispatch/GetADynamicTarget.expected index 84dc17b073a..82376653095 100644 --- a/csharp/ql/test/library-tests/dispatch/GetADynamicTarget.expected +++ b/csharp/ql/test/library-tests/dispatch/GetADynamicTarget.expected @@ -467,61 +467,61 @@ | ViableCallable.cs:311:9:311:15 | call to method M | C7`1.M(T1, T3) | | ViableCallable.cs:314:9:314:20 | call to method M | C7`1.M(T1, T3) | | ViableCallable.cs:317:9:317:20 | call to method M | C6.M(T1, T3) | -| ViableCallable.cs:367:9:367:14 | dynamic call to method M | C11.M(dynamic) | -| ViableCallable.cs:369:9:369:18 | dynamic object creation of type C11 | C11.C11(C11) | -| ViableCallable.cs:392:9:392:13 | call to method M | C12+C13.M() | -| ViableCallable.cs:397:9:397:14 | call to method Run | C12.Run(T2) | -| ViableCallable.cs:402:9:402:23 | call to method Run2 | C12.Run2(C13) | -| ViableCallable.cs:425:9:425:18 | call to method M | C15+A1.M() | -| ViableCallable.cs:425:9:425:18 | call to method M | C15+A4.M() | -| ViableCallable.cs:425:9:425:18 | call to method M | C15+A5.M() | -| ViableCallable.cs:429:9:429:19 | call to method M | C15+A1.M() | -| ViableCallable.cs:433:9:433:21 | call to method M | C15+A4.M() | -| ViableCallable.cs:435:13:435:37 | call to method Mock | ViableCallable.Mock() | -| ViableCallable.cs:437:9:437:21 | call to method M | C15+A4.M() | -| ViableCallable.cs:437:9:437:21 | call to method M | C15+A5.M() | -| ViableCallable.cs:452:9:452:19 | call to method M1 | C16.M1(string) | -| ViableCallable.cs:455:9:455:24 | call to method M2 | C17.M2(Func) | -| ViableCallable.cs:463:9:463:21 | call to method M2 | C17.M2(Func) | -| ViableCallable.cs:469:9:469:30 | call to method M2 | C16.M2(Func) | -| ViableCallable.cs:469:9:469:30 | call to method M2 | C17.M2(Func) | -| ViableCallable.cs:475:9:475:30 | call to method M2 | C16.M2(Func) | -| ViableCallable.cs:475:9:475:30 | call to method M2 | C17.M2(Func) | -| ViableCallable.cs:492:9:492:14 | call to method M1 | C18.M1() | -| ViableCallable.cs:495:9:495:14 | call to method M2 | I2.M2() | -| ViableCallable.cs:509:18:509:22 | call to operator + | C19.+(C19, C19) | -| ViableCallable.cs:512:26:512:30 | call to operator checked + | C19.checked +(C19, C19) | -| ViableCallable.cs:515:18:515:23 | call to operator explicit conversion | C19.explicit conversion(C19) | -| ViableCallable.cs:518:26:518:31 | call to operator checked explicit conversion | C19.checked explicit conversion(C19) | -| ViableCallable.cs:559:18:559:22 | call to operator + | C20.+(C20, C20) | -| ViableCallable.cs:562:26:562:30 | call to operator checked + | C20.checked +(C20, C20) | -| ViableCallable.cs:565:18:565:22 | call to operator - | C20.-(C20, C20) | -| ViableCallable.cs:568:26:568:30 | call to operator checked - | I3.checked -(T, T) | -| ViableCallable.cs:571:18:571:22 | call to operator * | I3.*(T, T) | -| ViableCallable.cs:574:26:574:30 | call to operator checked * | I3.checked *(T, T) | -| ViableCallable.cs:577:18:577:22 | call to operator / | C20./(C20, C20) | -| ViableCallable.cs:577:18:577:22 | call to operator / | I3./(T, T) | -| ViableCallable.cs:580:26:580:30 | call to operator checked / | C20.checked /(C20, C20) | -| ViableCallable.cs:580:26:580:30 | call to operator checked / | I3.checked /(T, T) | -| ViableCallable.cs:583:9:583:15 | call to method M11 | C20.M11() | -| ViableCallable.cs:586:9:586:15 | call to method M12 | C20.M12() | -| ViableCallable.cs:586:9:586:15 | call to method M12 | I3.M12() | -| ViableCallable.cs:589:9:589:15 | call to method M13 | I3.M13() | -| ViableCallable.cs:613:9:613:13 | call to method M | C21+A1.M() | -| ViableCallable.cs:619:9:619:13 | call to method M | C21+A1.M() | -| ViableCallable.cs:619:9:619:13 | call to method M | C21+A2.M() | -| ViableCallable.cs:661:9:661:16 | call to method M | C22+TestOverloadResolution1.M(Int32[]) | -| ViableCallable.cs:665:9:665:16 | call to method M | C22+TestOverloadResolution1.M(List) | -| ViableCallable.cs:672:9:672:16 | call to method M | C22+TestOverloadResolution2.M(ReadOnlySpan) | -| ViableCallable.cs:676:9:676:16 | call to method M | C22+TestOverloadResolution2.M(IEnumerable) | -| ViableCallable.cs:683:9:683:16 | call to method M | C22+TestOverloadResolution1.M(Int32[]) | -| ViableCallable.cs:683:9:683:16 | call to method M | C22+TestOverloadResolution2.M(Int32[]) | -| ViableCallable.cs:687:9:687:16 | call to method M | C22+TestOverloadResolution1.M(List) | -| ViableCallable.cs:687:9:687:16 | call to method M | C22+TestOverloadResolution2.M(List) | -| ViableCallable.cs:716:9:716:18 | access to property Property | C23+Partial1.set_Property(object) | -| ViableCallable.cs:719:13:719:22 | access to property Property | C23+Partial1.get_Property() | -| ViableCallable.cs:722:9:722:12 | access to indexer | C23+Partial1.set_Item(int, object) | -| ViableCallable.cs:725:13:725:16 | access to indexer | C23+Partial1.get_Item(int) | -| ViableCallable.cs:728:9:728:15 | access to event Event | C23+Partial1.add_Event(EventHandler) | -| ViableCallable.cs:731:9:731:15 | access to event Event | C23+Partial1.remove_Event(EventHandler) | -| ViableCallable.cs:734:18:734:43 | object creation of type Partial1 | C23+Partial1.Partial1(object) | +| ViableCallable.cs:368:9:368:14 | dynamic call to method M | C11.M(dynamic) | +| ViableCallable.cs:370:9:370:18 | dynamic object creation of type C11 | C11.C11(C11) | +| ViableCallable.cs:393:9:393:13 | call to method M | C12+C13.M() | +| ViableCallable.cs:398:9:398:14 | call to method Run | C12.Run(T2) | +| ViableCallable.cs:403:9:403:23 | call to method Run2 | C12.Run2(C13) | +| ViableCallable.cs:426:9:426:18 | call to method M | C15+A1.M() | +| ViableCallable.cs:426:9:426:18 | call to method M | C15+A4.M() | +| ViableCallable.cs:426:9:426:18 | call to method M | C15+A5.M() | +| ViableCallable.cs:430:9:430:19 | call to method M | C15+A1.M() | +| ViableCallable.cs:434:9:434:21 | call to method M | C15+A4.M() | +| ViableCallable.cs:436:13:436:37 | call to method Mock | ViableCallable.Mock() | +| ViableCallable.cs:438:9:438:21 | call to method M | C15+A4.M() | +| ViableCallable.cs:438:9:438:21 | call to method M | C15+A5.M() | +| ViableCallable.cs:453:9:453:19 | call to method M1 | C16.M1(string) | +| ViableCallable.cs:456:9:456:24 | call to method M2 | C17.M2(Func) | +| ViableCallable.cs:464:9:464:21 | call to method M2 | C17.M2(Func) | +| ViableCallable.cs:470:9:470:30 | call to method M2 | C16.M2(Func) | +| ViableCallable.cs:470:9:470:30 | call to method M2 | C17.M2(Func) | +| ViableCallable.cs:476:9:476:30 | call to method M2 | C16.M2(Func) | +| ViableCallable.cs:476:9:476:30 | call to method M2 | C17.M2(Func) | +| ViableCallable.cs:493:9:493:14 | call to method M1 | C18.M1() | +| ViableCallable.cs:496:9:496:14 | call to method M2 | I2.M2() | +| ViableCallable.cs:510:18:510:22 | call to operator + | C19.+(C19, C19) | +| ViableCallable.cs:513:26:513:30 | call to operator checked + | C19.checked +(C19, C19) | +| ViableCallable.cs:516:18:516:23 | call to operator explicit conversion | C19.explicit conversion(C19) | +| ViableCallable.cs:519:26:519:31 | call to operator checked explicit conversion | C19.checked explicit conversion(C19) | +| ViableCallable.cs:560:18:560:22 | call to operator + | C20.+(C20, C20) | +| ViableCallable.cs:563:26:563:30 | call to operator checked + | C20.checked +(C20, C20) | +| ViableCallable.cs:566:18:566:22 | call to operator - | C20.-(C20, C20) | +| ViableCallable.cs:569:26:569:30 | call to operator checked - | I3.checked -(T, T) | +| ViableCallable.cs:572:18:572:22 | call to operator * | I3.*(T, T) | +| ViableCallable.cs:575:26:575:30 | call to operator checked * | I3.checked *(T, T) | +| ViableCallable.cs:578:18:578:22 | call to operator / | C20./(C20, C20) | +| ViableCallable.cs:578:18:578:22 | call to operator / | I3./(T, T) | +| ViableCallable.cs:581:26:581:30 | call to operator checked / | C20.checked /(C20, C20) | +| ViableCallable.cs:581:26:581:30 | call to operator checked / | I3.checked /(T, T) | +| ViableCallable.cs:584:9:584:15 | call to method M11 | C20.M11() | +| ViableCallable.cs:587:9:587:15 | call to method M12 | C20.M12() | +| ViableCallable.cs:587:9:587:15 | call to method M12 | I3.M12() | +| ViableCallable.cs:590:9:590:15 | call to method M13 | I3.M13() | +| ViableCallable.cs:614:9:614:13 | call to method M | C21+A1.M() | +| ViableCallable.cs:620:9:620:13 | call to method M | C21+A1.M() | +| ViableCallable.cs:620:9:620:13 | call to method M | C21+A2.M() | +| ViableCallable.cs:662:9:662:16 | call to method M | C22+TestOverloadResolution1.M(Int32[]) | +| ViableCallable.cs:666:9:666:16 | call to method M | C22+TestOverloadResolution1.M(List) | +| ViableCallable.cs:673:9:673:16 | call to method M | C22+TestOverloadResolution2.M(ReadOnlySpan) | +| ViableCallable.cs:677:9:677:16 | call to method M | C22+TestOverloadResolution2.M(IEnumerable) | +| ViableCallable.cs:684:9:684:16 | call to method M | C22+TestOverloadResolution1.M(Int32[]) | +| ViableCallable.cs:684:9:684:16 | call to method M | C22+TestOverloadResolution2.M(Int32[]) | +| ViableCallable.cs:688:9:688:16 | call to method M | C22+TestOverloadResolution1.M(List) | +| ViableCallable.cs:688:9:688:16 | call to method M | C22+TestOverloadResolution2.M(List) | +| ViableCallable.cs:717:9:717:18 | access to property Property | C23+Partial1.set_Property(object) | +| ViableCallable.cs:720:13:720:22 | access to property Property | C23+Partial1.get_Property() | +| ViableCallable.cs:723:9:723:12 | access to indexer | C23+Partial1.set_Item(int, object) | +| ViableCallable.cs:726:13:726:16 | access to indexer | C23+Partial1.get_Item(int) | +| ViableCallable.cs:729:9:729:15 | access to event Event | C23+Partial1.add_Event(EventHandler) | +| ViableCallable.cs:732:9:732:15 | access to event Event | C23+Partial1.remove_Event(EventHandler) | +| ViableCallable.cs:735:18:735:43 | object creation of type Partial1 | C23+Partial1.Partial1(object) | diff --git a/csharp/ql/test/library-tests/dispatch/ViableCallable.cs b/csharp/ql/test/library-tests/dispatch/ViableCallable.cs index dee8d9b0d1d..61dfef7444c 100644 --- a/csharp/ql/test/library-tests/dispatch/ViableCallable.cs +++ b/csharp/ql/test/library-tests/dispatch/ViableCallable.cs @@ -362,6 +362,7 @@ public class C11 { dynamic d = this; int x = 0; + // Viable callables: int.+ x += 42; // Viable callables: C11.M() d.M(x); diff --git a/csharp/ql/test/library-tests/dispatch/viableCallable.expected b/csharp/ql/test/library-tests/dispatch/viableCallable.expected index c4abbbd2e58..8791bd0ae41 100644 --- a/csharp/ql/test/library-tests/dispatch/viableCallable.expected +++ b/csharp/ql/test/library-tests/dispatch/viableCallable.expected @@ -271,35 +271,36 @@ | ViableCallable.cs:311:9:311:15 | call to method M | M`1 | C7`1 | | ViableCallable.cs:314:9:314:20 | call to method M | M`1 | C7`1 | | ViableCallable.cs:317:9:317:20 | call to method M | M`1 | C6`2 | -| ViableCallable.cs:367:9:367:14 | dynamic call to method M | M | C11 | -| ViableCallable.cs:369:9:369:18 | dynamic object creation of type C11 | C11 | C11 | -| ViableCallable.cs:392:9:392:13 | call to method M | M | C13 | -| ViableCallable.cs:425:9:425:18 | call to method M | M`1 | A1 | -| ViableCallable.cs:425:9:425:18 | call to method M | M`1 | A4 | -| ViableCallable.cs:425:9:425:18 | call to method M | M`1 | A5 | -| ViableCallable.cs:427:13:427:20 | object creation of type A3 | A3 | A3 | -| ViableCallable.cs:429:9:429:19 | call to method M | M`1 | A1 | -| ViableCallable.cs:431:13:431:20 | object creation of type A4 | A4 | A4 | -| ViableCallable.cs:433:9:433:21 | call to method M | M`1 | A4 | -| ViableCallable.cs:437:9:437:21 | call to method M | M`1 | A4 | -| ViableCallable.cs:437:9:437:21 | call to method M | M`1 | A5 | -| ViableCallable.cs:492:9:492:14 | call to method M1 | M1 | C18 | -| ViableCallable.cs:495:9:495:14 | call to method M2 | M2 | I2 | -| ViableCallable.cs:509:18:509:22 | call to operator + | + | C19 | -| ViableCallable.cs:512:26:512:30 | call to operator checked + | checked + | C19 | -| ViableCallable.cs:515:18:515:23 | call to operator explicit conversion | explicit conversion | C19 | -| ViableCallable.cs:518:26:518:31 | call to operator checked explicit conversion | checked explicit conversion | C19 | -| ViableCallable.cs:559:18:559:22 | call to operator + | + | C20 | -| ViableCallable.cs:562:26:562:30 | call to operator checked + | checked + | C20 | -| ViableCallable.cs:565:18:565:22 | call to operator - | - | C20 | -| ViableCallable.cs:568:26:568:30 | call to operator checked - | checked - | I3`1 | -| ViableCallable.cs:571:18:571:22 | call to operator * | * | I3`1 | -| ViableCallable.cs:574:26:574:30 | call to operator checked * | checked * | I3`1 | -| ViableCallable.cs:577:18:577:22 | call to operator / | / | C20 | -| ViableCallable.cs:577:18:577:22 | call to operator / | / | I3`1 | -| ViableCallable.cs:580:26:580:30 | call to operator checked / | checked / | C20 | -| ViableCallable.cs:580:26:580:30 | call to operator checked / | checked / | I3`1 | -| ViableCallable.cs:583:9:583:15 | call to method M11 | M11 | C20 | -| ViableCallable.cs:586:9:586:15 | call to method M12 | M12 | C20 | -| ViableCallable.cs:586:9:586:15 | call to method M12 | M12 | I3`1 | -| ViableCallable.cs:589:9:589:15 | call to method M13 | M13 | I3`1 | +| ViableCallable.cs:366:9:366:15 | ... += ... | + | Int32 | +| ViableCallable.cs:368:9:368:14 | dynamic call to method M | M | C11 | +| ViableCallable.cs:370:9:370:18 | dynamic object creation of type C11 | C11 | C11 | +| ViableCallable.cs:393:9:393:13 | call to method M | M | C13 | +| ViableCallable.cs:426:9:426:18 | call to method M | M`1 | A1 | +| ViableCallable.cs:426:9:426:18 | call to method M | M`1 | A4 | +| ViableCallable.cs:426:9:426:18 | call to method M | M`1 | A5 | +| ViableCallable.cs:428:13:428:20 | object creation of type A3 | A3 | A3 | +| ViableCallable.cs:430:9:430:19 | call to method M | M`1 | A1 | +| ViableCallable.cs:432:13:432:20 | object creation of type A4 | A4 | A4 | +| ViableCallable.cs:434:9:434:21 | call to method M | M`1 | A4 | +| ViableCallable.cs:438:9:438:21 | call to method M | M`1 | A4 | +| ViableCallable.cs:438:9:438:21 | call to method M | M`1 | A5 | +| ViableCallable.cs:493:9:493:14 | call to method M1 | M1 | C18 | +| ViableCallable.cs:496:9:496:14 | call to method M2 | M2 | I2 | +| ViableCallable.cs:510:18:510:22 | call to operator + | + | C19 | +| ViableCallable.cs:513:26:513:30 | call to operator checked + | checked + | C19 | +| ViableCallable.cs:516:18:516:23 | call to operator explicit conversion | explicit conversion | C19 | +| ViableCallable.cs:519:26:519:31 | call to operator checked explicit conversion | checked explicit conversion | C19 | +| ViableCallable.cs:560:18:560:22 | call to operator + | + | C20 | +| ViableCallable.cs:563:26:563:30 | call to operator checked + | checked + | C20 | +| ViableCallable.cs:566:18:566:22 | call to operator - | - | C20 | +| ViableCallable.cs:569:26:569:30 | call to operator checked - | checked - | I3`1 | +| ViableCallable.cs:572:18:572:22 | call to operator * | * | I3`1 | +| ViableCallable.cs:575:26:575:30 | call to operator checked * | checked * | I3`1 | +| ViableCallable.cs:578:18:578:22 | call to operator / | / | C20 | +| ViableCallable.cs:578:18:578:22 | call to operator / | / | I3`1 | +| ViableCallable.cs:581:26:581:30 | call to operator checked / | checked / | C20 | +| ViableCallable.cs:581:26:581:30 | call to operator checked / | checked / | I3`1 | +| ViableCallable.cs:584:9:584:15 | call to method M11 | M11 | C20 | +| ViableCallable.cs:587:9:587:15 | call to method M12 | M12 | C20 | +| ViableCallable.cs:587:9:587:15 | call to method M12 | M12 | I3`1 | +| ViableCallable.cs:590:9:590:15 | call to method M13 | M13 | I3`1 | diff --git a/csharp/ql/test/library-tests/dynamic/DynamicOperatorCall.expected b/csharp/ql/test/library-tests/dynamic/DynamicOperatorCall.expected index 6c0a054c84a..6e98bffaf6f 100644 --- a/csharp/ql/test/library-tests/dynamic/DynamicOperatorCall.expected +++ b/csharp/ql/test/library-tests/dynamic/DynamicOperatorCall.expected @@ -1,6 +1,6 @@ | dynamic.cs:35:13:35:14 | dynamic call to operator - | - | 0 | dynamic.cs:35:14:35:14 | access to local variable d | | dynamic.cs:36:13:36:17 | dynamic call to operator + | + | 0 | dynamic.cs:36:13:36:13 | access to local variable d | | dynamic.cs:36:13:36:17 | dynamic call to operator + | + | 1 | dynamic.cs:36:17:36:17 | access to local variable d | -| dynamic.cs:37:9:37:14 | dynamic call to operator + | + | 0 | dynamic.cs:37:9:37:9 | access to local variable d | -| dynamic.cs:37:9:37:14 | dynamic call to operator + | + | 1 | dynamic.cs:37:14:37:14 | access to local variable d | +| dynamic.cs:37:9:37:14 | ... += ... | + | 0 | dynamic.cs:37:9:37:9 | access to local variable d | +| dynamic.cs:37:9:37:14 | ... += ... | + | 1 | dynamic.cs:37:14:37:14 | access to local variable d | | dynamic.cs:47:9:47:11 | dynamic call to operator ++ | ++ | 0 | dynamic.cs:47:9:47:9 | access to local variable d | diff --git a/csharp/ql/test/library-tests/dynamic/PrintAst.expected b/csharp/ql/test/library-tests/dynamic/PrintAst.expected index 3bde4d42d86..3526e0b6bf5 100644 --- a/csharp/ql/test/library-tests/dynamic/PrintAst.expected +++ b/csharp/ql/test/library-tests/dynamic/PrintAst.expected @@ -105,12 +105,12 @@ dynamic.cs: # 35| 15: [ExprStmt] ...; # 35| 0: [AssignExpr] ... = ... # 35| 0: [LocalVariableAccess] access to local variable d -# 35| 1: [DynamicOperatorCall] dynamic call to operator - +# 35| 1: [OperatorCall] dynamic call to operator - # 35| 0: [LocalVariableAccess] access to local variable d # 36| 16: [ExprStmt] ...; # 36| 0: [AssignExpr] ... = ... # 36| 0: [LocalVariableAccess] access to local variable d -# 36| 1: [DynamicOperatorCall] dynamic call to operator + +# 36| 1: [OperatorCall] dynamic call to operator + # 36| 0: [LocalVariableAccess] access to local variable d # 36| 1: [LocalVariableAccess] access to local variable d # 37| 17: [ExprStmt] ...; @@ -141,7 +141,7 @@ dynamic.cs: # 44| 0: [PostIncrExpr] ...++ # 44| 0: [LocalVariableAccess] access to local variable i # 47| 23: [ExprStmt] ...; -# 47| 0: [DynamicOperatorCall] dynamic call to operator ++ +# 47| 0: [OperatorCall] dynamic call to operator ++ # 47| 0: [LocalVariableAccess] access to local variable d # 50| 24: [ExprStmt] ...; # 50| 0: [PostIncrExpr] ...++ diff --git a/csharp/ql/test/library-tests/structuralcomparison/structuralComparison.expected b/csharp/ql/test/library-tests/structuralcomparison/structuralComparison.expected index d9b6636469a..1d15c2e6169 100644 --- a/csharp/ql/test/library-tests/structuralcomparison/structuralComparison.expected +++ b/csharp/ql/test/library-tests/structuralcomparison/structuralComparison.expected @@ -57,64 +57,64 @@ gvn | 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),false,Class) | -| StructuralComparison.cs:5:26:5:30 | ... = ... | ((kind:Expr(16),true,x) :: (0 :: (kind:Expr(63)))) | +| StructuralComparison.cs:5:26:5:30 | ... = ... | (0 :: ((kind:Expr(16),true,x) :: (kind:Expr(63)))) | | StructuralComparison.cs:5:30:5:30 | 0 | 0 | | StructuralComparison.cs:6:26:6:26 | access to field y | (kind:Expr(16),true,y) | | StructuralComparison.cs:6:26:6:26 | this access | (kind:Expr(12),false,Class) | -| StructuralComparison.cs:6:26:6:30 | ... = ... | ((kind:Expr(16),true,y) :: (1 :: (kind:Expr(63)))) | +| StructuralComparison.cs:6:26:6:30 | ... = ... | (1 :: ((kind:Expr(16),true,y) :: (kind:Expr(63)))) | | StructuralComparison.cs:6:30:6:30 | 1 | 1 | | StructuralComparison.cs:8:24:8:24 | 0 | 0 | | StructuralComparison.cs:9:29:9:29 | access to parameter a | (kind:Expr(15),false,a) | | StructuralComparison.cs:10:38:10:39 | access to parameter v1 | (kind:Expr(15),false,v1) | | StructuralComparison.cs:10:38:10:44 | ... + ... | ((kind:Expr(15),false,v2) :: ((kind:Expr(15),false,v1) :: (kind:Expr(44)))) | | StructuralComparison.cs:10:43:10:44 | access to parameter v2 | (kind:Expr(15),false,v2) | -| StructuralComparison.cs:14:5:17:5 | {...} | ((((kind:Expr(14),false,z2) :: (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: (kind:Expr(44)))) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: ((((kind:Expr(14),false,z1) :: (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: (kind:Expr(44)))) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: (kind:Stmt(1)))) | -| StructuralComparison.cs:15:9:15:23 | ... ...; | (((kind:Expr(14),false,z1) :: (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: (kind:Expr(44)))) :: (kind:Expr(83)))) :: (kind:Stmt(22))) | +| StructuralComparison.cs:14:5:17:5 | {...} | (((((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: (kind:Expr(44)))) :: ((kind:Expr(14),false,z2) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: (((((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: (kind:Expr(44)))) :: ((kind:Expr(14),false,z1) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: (kind:Stmt(1)))) | +| StructuralComparison.cs:15:9:15:23 | ... ...; | ((((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: (kind:Expr(44)))) :: ((kind:Expr(14),false,z1) :: (kind:Expr(83)))) :: (kind:Stmt(22))) | | StructuralComparison.cs:15:13:15:14 | access to local variable z1 | (kind:Expr(14),false,z1) | -| StructuralComparison.cs:15:13:15:22 | Int32 z1 = ... | ((kind:Expr(14),false,z1) :: (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: (kind:Expr(44)))) :: (kind:Expr(83)))) | +| StructuralComparison.cs:15:13:15:22 | Int32 z1 = ... | (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: (kind:Expr(44)))) :: ((kind:Expr(14),false,z1) :: (kind:Expr(83)))) | | StructuralComparison.cs:15:18:15:18 | access to field x | (kind:Expr(16),true,x) | | StructuralComparison.cs:15:18:15:18 | this access | (kind:Expr(12),false,Class) | | StructuralComparison.cs:15:18:15:22 | ... + ... | ((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: (kind:Expr(44)))) | | StructuralComparison.cs:15:22:15:22 | access to field y | (kind:Expr(16),true,y) | | StructuralComparison.cs:15:22:15:22 | this access | (kind:Expr(12),false,Class) | -| StructuralComparison.cs:16:9:16:23 | ... ...; | (((kind:Expr(14),false,z2) :: (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: (kind:Expr(44)))) :: (kind:Expr(83)))) :: (kind:Stmt(22))) | +| StructuralComparison.cs:16:9:16:23 | ... ...; | ((((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: (kind:Expr(44)))) :: ((kind:Expr(14),false,z2) :: (kind:Expr(83)))) :: (kind:Stmt(22))) | | StructuralComparison.cs:16:13:16:14 | access to local variable z2 | (kind:Expr(14),false,z2) | -| StructuralComparison.cs:16:13:16:22 | Int32 z2 = ... | ((kind:Expr(14),false,z2) :: (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: (kind:Expr(44)))) :: (kind:Expr(83)))) | +| StructuralComparison.cs:16:13:16:22 | Int32 z2 = ... | (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: (kind:Expr(44)))) :: ((kind:Expr(14),false,z2) :: (kind:Expr(83)))) | | StructuralComparison.cs:16:18:16:18 | access to field x | (kind:Expr(16),true,x) | | StructuralComparison.cs:16:18:16:18 | this access | (kind:Expr(12),false,Class) | | StructuralComparison.cs:16:18:16:22 | ... + ... | ((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: (kind:Expr(44)))) | | StructuralComparison.cs:16:22:16:22 | access to field y | (kind:Expr(16),true,y) | | StructuralComparison.cs:16:22:16:22 | this access | (kind:Expr(12),false,Class) | -| StructuralComparison.cs:20:5:29:5 | {...} | ((((kind:Expr(16),true,x) :: ((kind:Expr(16),true,y) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (kind:Stmt(2))) :: ((((kind:Expr(16),true,x) :: ((kind:Expr(16),true,y) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (kind:Stmt(2))) :: ((((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (kind:Stmt(2))) :: ((((kind:Expr(14),false,z7) :: ((((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (kind:Expr(44)))) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: ((((kind:Expr(14),false,z6) :: (((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M0)) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: ((((kind:Expr(14),false,z5) :: (((kind:Expr(16),true,y) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: ((((kind:Expr(14),false,z4) :: (((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: ((((kind:Expr(14),false,z3) :: (((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: (kind:Stmt(1)))))))))) | -| StructuralComparison.cs:21:9:21:23 | ... ...; | (((kind:Expr(14),false,z3) :: (((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: (kind:Expr(83)))) :: (kind:Stmt(22))) | +| StructuralComparison.cs:20:5:29:5 | {...} | ((((kind:Expr(16),true,x) :: ((kind:Expr(16),true,y) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (kind:Stmt(2))) :: ((((kind:Expr(16),true,x) :: ((kind:Expr(16),true,y) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (kind:Stmt(2))) :: ((((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (kind:Stmt(2))) :: ((((((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (kind:Expr(44)))) :: ((kind:Expr(14),false,z7) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: (((((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M0)) :: ((kind:Expr(14),false,z6) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: (((((kind:Expr(16),true,y) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: ((kind:Expr(14),false,z5) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: (((((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: ((kind:Expr(14),false,z4) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: (((((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: ((kind:Expr(14),false,z3) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: (kind:Stmt(1)))))))))) | +| StructuralComparison.cs:21:9:21:23 | ... ...; | ((((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: ((kind:Expr(14),false,z3) :: (kind:Expr(83)))) :: (kind:Stmt(22))) | | StructuralComparison.cs:21:13:21:14 | access to local variable z3 | (kind:Expr(14),false,z3) | -| StructuralComparison.cs:21:13:21:22 | Int32 z3 = ... | ((kind:Expr(14),false,z3) :: (((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: (kind:Expr(83)))) | +| StructuralComparison.cs:21:13:21:22 | Int32 z3 = ... | (((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: ((kind:Expr(14),false,z3) :: (kind:Expr(83)))) | | StructuralComparison.cs:21:18:21:22 | call to method M1 | ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) | | StructuralComparison.cs:21:18:21:22 | this access | (kind:Expr(12),false,Class) | | StructuralComparison.cs:21:21:21:21 | access to field x | (kind:Expr(16),true,x) | | StructuralComparison.cs:21:21:21:21 | this access | (kind:Expr(12),false,Class) | -| StructuralComparison.cs:22:9:22:23 | ... ...; | (((kind:Expr(14),false,z4) :: (((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: (kind:Expr(83)))) :: (kind:Stmt(22))) | +| StructuralComparison.cs:22:9:22:23 | ... ...; | ((((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: ((kind:Expr(14),false,z4) :: (kind:Expr(83)))) :: (kind:Stmt(22))) | | StructuralComparison.cs:22:13:22:14 | access to local variable z4 | (kind:Expr(14),false,z4) | -| StructuralComparison.cs:22:13:22:22 | Int32 z4 = ... | ((kind:Expr(14),false,z4) :: (((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: (kind:Expr(83)))) | +| StructuralComparison.cs:22:13:22:22 | Int32 z4 = ... | (((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: ((kind:Expr(14),false,z4) :: (kind:Expr(83)))) | | StructuralComparison.cs:22:18:22:22 | call to method M1 | ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) | | StructuralComparison.cs:22:18:22:22 | this access | (kind:Expr(12),false,Class) | | StructuralComparison.cs:22:21:22:21 | access to field x | (kind:Expr(16),true,x) | | StructuralComparison.cs:22:21:22:21 | this access | (kind:Expr(12),false,Class) | -| StructuralComparison.cs:23:9:23:23 | ... ...; | (((kind:Expr(14),false,z5) :: (((kind:Expr(16),true,y) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: (kind:Expr(83)))) :: (kind:Stmt(22))) | +| StructuralComparison.cs:23:9:23:23 | ... ...; | ((((kind:Expr(16),true,y) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: ((kind:Expr(14),false,z5) :: (kind:Expr(83)))) :: (kind:Stmt(22))) | | StructuralComparison.cs:23:13:23:14 | access to local variable z5 | (kind:Expr(14),false,z5) | -| StructuralComparison.cs:23:13:23:22 | Int32 z5 = ... | ((kind:Expr(14),false,z5) :: (((kind:Expr(16),true,y) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: (kind:Expr(83)))) | +| StructuralComparison.cs:23:13:23:22 | Int32 z5 = ... | (((kind:Expr(16),true,y) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: ((kind:Expr(14),false,z5) :: (kind:Expr(83)))) | | StructuralComparison.cs:23:18:23:22 | call to method M1 | ((kind:Expr(16),true,y) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) | | StructuralComparison.cs:23:18:23:22 | this access | (kind:Expr(12),false,Class) | | StructuralComparison.cs:23:21:23:21 | access to field y | (kind:Expr(16),true,y) | | StructuralComparison.cs:23:21:23:21 | this access | (kind:Expr(12),false,Class) | -| StructuralComparison.cs:24:9:24:22 | ... ...; | (((kind:Expr(14),false,z6) :: (((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M0)) :: (kind:Expr(83)))) :: (kind:Stmt(22))) | +| StructuralComparison.cs:24:9:24:22 | ... ...; | ((((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M0)) :: ((kind:Expr(14),false,z6) :: (kind:Expr(83)))) :: (kind:Stmt(22))) | | StructuralComparison.cs:24:13:24:14 | access to local variable z6 | (kind:Expr(14),false,z6) | -| StructuralComparison.cs:24:13:24:21 | Int32 z6 = ... | ((kind:Expr(14),false,z6) :: (((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M0)) :: (kind:Expr(83)))) | +| StructuralComparison.cs:24:13:24:21 | Int32 z6 = ... | (((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M0)) :: ((kind:Expr(14),false,z6) :: (kind:Expr(83)))) | | StructuralComparison.cs:24:18:24:21 | call to method M0 | ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M0)) | | StructuralComparison.cs:24:18:24:21 | this access | (kind:Expr(12),false,Class) | -| StructuralComparison.cs:25:9:25:37 | ... ...; | (((kind:Expr(14),false,z7) :: ((((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (kind:Expr(44)))) :: (kind:Expr(83)))) :: (kind:Stmt(22))) | +| StructuralComparison.cs:25:9:25:37 | ... ...; | (((((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (kind:Expr(44)))) :: ((kind:Expr(14),false,z7) :: (kind:Expr(83)))) :: (kind:Stmt(22))) | | StructuralComparison.cs:25:13:25:14 | access to local variable z7 | (kind:Expr(14),false,z7) | -| StructuralComparison.cs:25:13:25:36 | Int32 z7 = ... | ((kind:Expr(14),false,z7) :: ((((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (kind:Expr(44)))) :: (kind:Expr(83)))) | +| StructuralComparison.cs:25:13:25:36 | Int32 z7 = ... | ((((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (kind:Expr(44)))) :: ((kind:Expr(14),false,z7) :: (kind:Expr(83)))) | | StructuralComparison.cs:25:18:25:25 | call to method M2 | ((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) | | StructuralComparison.cs:25:18:25:25 | this access | (kind:Expr(12),false,Class) | | StructuralComparison.cs:25:18:25:36 | ... + ... | (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (kind:Expr(44)))) | @@ -157,35 +157,35 @@ gvn | 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))) | +| StructuralComparison.cs:41:5:45:5 | {...} | ((((kind:Expr(16),true,Field) :: ((kind:Expr(14),false,x3) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: ((((kind:Expr(16),true,Field) :: ((kind:Expr(14),false,x2) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: ((((kind:Expr(16),true,Field) :: ((kind:Expr(14),false,x1) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: (kind:Stmt(1))))) | +| StructuralComparison.cs:42:9:42:28 | ... ...; | (((kind:Expr(16),true,Field) :: ((kind:Expr(14),false,x1) :: (kind:Expr(83)))) :: (kind:Stmt(22))) | | StructuralComparison.cs:42:13:42:14 | access to local variable x1 | (kind:Expr(14),false,x1) | -| StructuralComparison.cs:42:13:42:27 | Int32 x1 = ... | ((kind:Expr(14),false,x1) :: ((kind:Expr(16),true,Field) :: (kind:Expr(83)))) | +| StructuralComparison.cs:42:13:42:27 | Int32 x1 = ... | ((kind:Expr(16),true,Field) :: ((kind:Expr(14),false,x1) :: (kind:Expr(83)))) | | StructuralComparison.cs:42:18:42:21 | base access | (kind:Expr(13),false,BaseClass) | | StructuralComparison.cs:42:18:42:27 | access to field Field | (kind:Expr(16),true,Field) | -| StructuralComparison.cs:43:9:43:23 | ... ...; | (((kind:Expr(14),false,x2) :: ((kind:Expr(16),true,Field) :: (kind:Expr(83)))) :: (kind:Stmt(22))) | +| StructuralComparison.cs:43:9:43:23 | ... ...; | (((kind:Expr(16),true,Field) :: ((kind:Expr(14),false,x2) :: (kind:Expr(83)))) :: (kind:Stmt(22))) | | StructuralComparison.cs:43:13:43:14 | access to local variable x2 | (kind:Expr(14),false,x2) | -| StructuralComparison.cs:43:13:43:22 | Int32 x2 = ... | ((kind:Expr(14),false,x2) :: ((kind:Expr(16),true,Field) :: (kind:Expr(83)))) | +| StructuralComparison.cs:43:13:43:22 | Int32 x2 = ... | ((kind:Expr(16),true,Field) :: ((kind:Expr(14),false,x2) :: (kind:Expr(83)))) | | StructuralComparison.cs:43:18:43:22 | access to field Field | (kind:Expr(16),true,Field) | | StructuralComparison.cs:43:18:43:22 | this access | (kind:Expr(12),false,DerivedClass) | -| StructuralComparison.cs:44:9:44:28 | ... ...; | (((kind:Expr(14),false,x3) :: ((kind:Expr(16),true,Field) :: (kind:Expr(83)))) :: (kind:Stmt(22))) | +| StructuralComparison.cs:44:9:44:28 | ... ...; | (((kind:Expr(16),true,Field) :: ((kind:Expr(14),false,x3) :: (kind:Expr(83)))) :: (kind:Stmt(22))) | | StructuralComparison.cs:44:13:44:14 | access to local variable x3 | (kind:Expr(14),false,x3) | -| StructuralComparison.cs:44:13:44:27 | Int32 x3 = ... | ((kind:Expr(14),false,x3) :: ((kind:Expr(16),true,Field) :: (kind:Expr(83)))) | +| StructuralComparison.cs:44:13:44:27 | Int32 x3 = ... | ((kind:Expr(16),true,Field) :: ((kind:Expr(14),false,x3) :: (kind:Expr(83)))) | | StructuralComparison.cs:44:18:44:21 | this access | (kind:Expr(12),false,DerivedClass) | | StructuralComparison.cs:44:18:44:27 | access to field Field | (kind:Expr(16),true,Field) | -| StructuralComparison.cs:48:5:52:5 | {...} | ((((kind:Expr(14),false,y3) :: ((kind:Expr(17),true,Prop) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: ((((kind:Expr(14),false,y2) :: ((kind:Expr(17),true,Prop) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: ((((kind:Expr(14),false,y1) :: ((kind:Expr(17),true,Prop) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: (kind:Stmt(1))))) | -| StructuralComparison.cs:49:9:49:27 | ... ...; | (((kind:Expr(14),false,y1) :: ((kind:Expr(17),true,Prop) :: (kind:Expr(83)))) :: (kind:Stmt(22))) | +| StructuralComparison.cs:48:5:52:5 | {...} | ((((kind:Expr(17),true,Prop) :: ((kind:Expr(14),false,y3) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: ((((kind:Expr(17),true,Prop) :: ((kind:Expr(14),false,y2) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: ((((kind:Expr(17),true,Prop) :: ((kind:Expr(14),false,y1) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: (kind:Stmt(1))))) | +| StructuralComparison.cs:49:9:49:27 | ... ...; | (((kind:Expr(17),true,Prop) :: ((kind:Expr(14),false,y1) :: (kind:Expr(83)))) :: (kind:Stmt(22))) | | StructuralComparison.cs:49:13:49:14 | access to local variable y1 | (kind:Expr(14),false,y1) | -| StructuralComparison.cs:49:13:49:26 | Object y1 = ... | ((kind:Expr(14),false,y1) :: ((kind:Expr(17),true,Prop) :: (kind:Expr(83)))) | +| StructuralComparison.cs:49:13:49:26 | Object y1 = ... | ((kind:Expr(17),true,Prop) :: ((kind:Expr(14),false,y1) :: (kind:Expr(83)))) | | StructuralComparison.cs:49:18:49:21 | base access | (kind:Expr(13),false,BaseClass) | | StructuralComparison.cs:49:18:49:26 | access to property Prop | (kind:Expr(17),true,Prop) | -| StructuralComparison.cs:50:9:50:22 | ... ...; | (((kind:Expr(14),false,y2) :: ((kind:Expr(17),true,Prop) :: (kind:Expr(83)))) :: (kind:Stmt(22))) | +| StructuralComparison.cs:50:9:50:22 | ... ...; | (((kind:Expr(17),true,Prop) :: ((kind:Expr(14),false,y2) :: (kind:Expr(83)))) :: (kind:Stmt(22))) | | StructuralComparison.cs:50:13:50:14 | access to local variable y2 | (kind:Expr(14),false,y2) | -| StructuralComparison.cs:50:13:50:21 | Object y2 = ... | ((kind:Expr(14),false,y2) :: ((kind:Expr(17),true,Prop) :: (kind:Expr(83)))) | +| StructuralComparison.cs:50:13:50:21 | Object y2 = ... | ((kind:Expr(17),true,Prop) :: ((kind:Expr(14),false,y2) :: (kind:Expr(83)))) | | StructuralComparison.cs:50:18:50:21 | access to property Prop | (kind:Expr(17),true,Prop) | | StructuralComparison.cs:50:18:50:21 | this access | (kind:Expr(12),false,DerivedClass) | -| StructuralComparison.cs:51:9:51:27 | ... ...; | (((kind:Expr(14),false,y3) :: ((kind:Expr(17),true,Prop) :: (kind:Expr(83)))) :: (kind:Stmt(22))) | +| StructuralComparison.cs:51:9:51:27 | ... ...; | (((kind:Expr(17),true,Prop) :: ((kind:Expr(14),false,y3) :: (kind:Expr(83)))) :: (kind:Stmt(22))) | | StructuralComparison.cs:51:13:51:14 | access to local variable y3 | (kind:Expr(14),false,y3) | -| StructuralComparison.cs:51:13:51:26 | Object y3 = ... | ((kind:Expr(14),false,y3) :: ((kind:Expr(17),true,Prop) :: (kind:Expr(83)))) | +| StructuralComparison.cs:51:13:51:26 | Object y3 = ... | ((kind:Expr(17),true,Prop) :: ((kind:Expr(14),false,y3) :: (kind:Expr(83)))) | | StructuralComparison.cs:51:18:51:21 | this access | (kind:Expr(12),false,DerivedClass) | | StructuralComparison.cs:51:18:51:26 | access to property Prop | (kind:Expr(17),true,Prop) | diff --git a/csharp/ql/test/query-tests/Concurrency/SynchSetUnsynchGet/SynchSetUnsynchGet.cs b/csharp/ql/test/query-tests/Concurrency/SynchSetUnsynchGet/SynchSetUnsynchGet.cs index 7d90bb69b5c..8b41604a9e6 100644 --- a/csharp/ql/test/query-tests/Concurrency/SynchSetUnsynchGet/SynchSetUnsynchGet.cs +++ b/csharp/ql/test/query-tests/Concurrency/SynchSetUnsynchGet/SynchSetUnsynchGet.cs @@ -89,4 +89,25 @@ class C1 lock (mutex) GoodProperty3 = value; } } + + // GOOD: both getter and setter are locked. + int? property2; + int? GoodProperty5 + { + get + { + lock (mutex) + { + property2 ??= 0; + return property2; + } + } + set + { + lock (mutex) + { + property2 = value; + } + } + } } diff --git a/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.expected b/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.expected index 6271d6276c7..2073fce06a7 100644 --- a/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.expected +++ b/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.expected @@ -1,7 +1,7 @@ | DeadStoreOfLocal.cs:12:13:12:20 | Int32 x = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:12:13:12:13 | x | x | | DeadStoreOfLocal.cs:19:21:19:25 | ... = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:18:13:18:13 | x | x | | DeadStoreOfLocal.cs:44:13:44:20 | Int32 x = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:44:13:44:13 | x | x | -| DeadStoreOfLocal.cs:50:9:50:14 | ... = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:49:13:49:13 | x | x | +| DeadStoreOfLocal.cs:50:9:50:14 | ... += ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:49:13:49:13 | x | x | | DeadStoreOfLocal.cs:56:9:56:11 | ...++ | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:55:13:55:13 | x | x | | DeadStoreOfLocal.cs:82:22:82:24 | String val | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:82:22:82:24 | val | val | | DeadStoreOfLocal.cs:101:13:101:37 | ... = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:94:40:94:44 | extra | extra | diff --git a/csharp/ql/test/query-tests/Language Abuse/UselessNullCoalescingExpression/UselessNullCoalescingExpression.cs b/csharp/ql/test/query-tests/Language Abuse/UselessNullCoalescingExpression/UselessNullCoalescingExpression.cs index ab8588d0255..f05782416fd 100644 --- a/csharp/ql/test/query-tests/Language Abuse/UselessNullCoalescingExpression/UselessNullCoalescingExpression.cs +++ b/csharp/ql/test/query-tests/Language Abuse/UselessNullCoalescingExpression/UselessNullCoalescingExpression.cs @@ -12,6 +12,8 @@ class Tests a = param ?? param; // BAD a = a ?? use(a); // BAD a = Field ?? this.Field; // BAD + a ??= a; // BAD + a ??= b = a; // BAD a = a ?? cache(ref a); // GOOD a = a ?? store(out a); // GOOD @@ -23,6 +25,7 @@ class Tests ?? a; // GOOD a = a ?? store(out a) ?? a; // GOOD + a ??= param; // GOOD } int? cache(ref int? a) diff --git a/csharp/ql/test/query-tests/Language Abuse/UselessNullCoalescingExpression/UselessNullCoalescingExpression.expected b/csharp/ql/test/query-tests/Language Abuse/UselessNullCoalescingExpression/UselessNullCoalescingExpression.expected index 2b68f731870..3f4af5b8210 100644 --- a/csharp/ql/test/query-tests/Language Abuse/UselessNullCoalescingExpression/UselessNullCoalescingExpression.expected +++ b/csharp/ql/test/query-tests/Language Abuse/UselessNullCoalescingExpression/UselessNullCoalescingExpression.expected @@ -4,3 +4,5 @@ | UselessNullCoalescingExpression.cs:12:13:12:26 | ... ?? ... | Both operands of this null-coalescing expression access the same variable or property. | | UselessNullCoalescingExpression.cs:13:13:13:23 | ... ?? ... | Both operands of this null-coalescing expression access the same variable or property. | | UselessNullCoalescingExpression.cs:14:13:14:31 | ... ?? ... | Both operands of this null-coalescing expression access the same variable or property. | +| UselessNullCoalescingExpression.cs:15:9:15:15 | ... ??= ... | Both operands of this null-coalescing expression access the same variable or property. | +| UselessNullCoalescingExpression.cs:16:9:16:19 | ... ??= ... | Both operands of this null-coalescing expression access the same variable or property. | diff --git a/csharp/ql/test/query-tests/WriteOnlyContainer/WriteOnlyContainer.cs b/csharp/ql/test/query-tests/WriteOnlyContainer/WriteOnlyContainer.cs index 97c33685a95..6d870cad08b 100644 --- a/csharp/ql/test/query-tests/WriteOnlyContainer/WriteOnlyContainer.cs +++ b/csharp/ql/test/query-tests/WriteOnlyContainer/WriteOnlyContainer.cs @@ -307,4 +307,10 @@ public class ContainerTest { Out(out var strings); // BAD: but allow for now (only C# 7 allows discards) } + + IList TestNullcoalescingInitializations() + { + var l = new List { 1, 2, 3 }; // GOOD: returned + return l ??= new List(); + } } From 96f55fbdf15fd1346df6ae97a9c504ddac24d1ae Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 23 Mar 2026 14:02:38 +0100 Subject: [PATCH 148/185] C#: Add operation types to the DB scheme. --- csharp/ql/lib/semmlecode.csharp.dbscheme | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/csharp/ql/lib/semmlecode.csharp.dbscheme b/csharp/ql/lib/semmlecode.csharp.dbscheme index 7763debea24..19b8cc3e2dc 100644 --- a/csharp/ql/lib/semmlecode.csharp.dbscheme +++ b/csharp/ql/lib/semmlecode.csharp.dbscheme @@ -1220,6 +1220,19 @@ case @expr.kind of @assign_op_expr = @assign_op_call_expr | @assign_event_expr | @assign_coalesce_expr; @assign_event_expr = @add_event_expr | @remove_event_expr; +@add_operation = @add_expr | @assign_add_expr; +@sub_operation = @sub_expr | @assign_sub_expr; +@mul_operation = @mul_expr | @assign_mul_expr; +@div_operation = @div_expr | @assign_div_expr; +@rem_operation = @rem_expr | @assign_rem_expr; +@and_operation = @bit_and_expr | @assign_and_expr; +@xor_operation = @bit_xor_expr | @assign_xor_expr; +@or_operation = @bit_or_expr | @assign_or_expr; +@lshift_operation = @lshift_expr | @assign_lshift_expr; +@rshift_operation = @rshift_expr | @assign_rshift_expr; +@urshift_operation = @urshift_expr | @assign_urshift_expr; +@null_coalescing_operation = @null_coalescing_expr | @assign_coalesce_expr; + @assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr | @assign_rem_expr @assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr From 3d2d09d0bc73b0700b9e735aac3876ec12f76aeb Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 23 Mar 2026 14:03:50 +0100 Subject: [PATCH 149/185] C#: Use the DB types and replace the abstract class implementation. --- .../code/csharp/exprs/ArithmeticOperation.qll | 16 +- .../semmle/code/csharp/exprs/Assignment.qll | 26 +-- .../code/csharp/exprs/BitwiseOperation.qll | 14 +- .../code/csharp/exprs/LogicalOperation.qll | 4 +- .../semmle/code/csharp/exprs/Operation.qll | 151 ++++++------------ 5 files changed, 80 insertions(+), 131 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/ArithmeticOperation.qll b/csharp/ql/lib/semmle/code/csharp/exprs/ArithmeticOperation.qll index f20bfba1589..193c48ed3a2 100644 --- a/csharp/ql/lib/semmle/code/csharp/exprs/ArithmeticOperation.qll +++ b/csharp/ql/lib/semmle/code/csharp/exprs/ArithmeticOperation.qll @@ -107,7 +107,7 @@ class BinaryArithmeticOperation extends ArithmeticOperation, BinaryOperation, @b /** * An addition operation, for example `x + y`. */ -class AddExpr extends BinaryArithmeticOperation, @add_expr { +class AddExpr extends BinaryArithmeticOperation, AddOperation, @add_expr { override string getOperator() { result = "+" } override string getAPrimaryQlClass() { result = "AddExpr" } @@ -116,7 +116,7 @@ class AddExpr extends BinaryArithmeticOperation, @add_expr { /** * A subtraction operation, for example `x - y`. */ -class SubExpr extends BinaryArithmeticOperation, @sub_expr { +class SubExpr extends BinaryArithmeticOperation, SubOperation, @sub_expr { override string getOperator() { result = "-" } override string getAPrimaryQlClass() { result = "SubExpr" } @@ -125,7 +125,7 @@ class SubExpr extends BinaryArithmeticOperation, @sub_expr { /** * A multiplication operation, for example `x * y`. */ -class MulExpr extends BinaryArithmeticOperation, @mul_expr { +class MulExpr extends BinaryArithmeticOperation, MulOperation, @mul_expr { override string getOperator() { result = "*" } override string getAPrimaryQlClass() { result = "MulExpr" } @@ -134,22 +134,16 @@ class MulExpr extends BinaryArithmeticOperation, @mul_expr { /** * A division operation, for example `x / y`. */ -class DivExpr extends BinaryArithmeticOperation, @div_expr { +class DivExpr extends BinaryArithmeticOperation, DivOperation, @div_expr { override string getOperator() { result = "/" } - /** Gets the numerator of this division operation. */ - Expr getNumerator() { result = this.getLeftOperand() } - - /** Gets the denominator of this division operation. */ - Expr getDenominator() { result = this.getRightOperand() } - override string getAPrimaryQlClass() { result = "DivExpr" } } /** * A remainder operation, for example `x % y`. */ -class RemExpr extends BinaryArithmeticOperation, @rem_expr { +class RemExpr extends BinaryArithmeticOperation, RemOperation, @rem_expr { override string getOperator() { result = "%" } override string getAPrimaryQlClass() { result = "RemExpr" } diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/Assignment.qll b/csharp/ql/lib/semmle/code/csharp/exprs/Assignment.qll index baf366be1ba..e751bddc670 100644 --- a/csharp/ql/lib/semmle/code/csharp/exprs/Assignment.qll +++ b/csharp/ql/lib/semmle/code/csharp/exprs/Assignment.qll @@ -99,7 +99,7 @@ class AssignArithmeticOperation extends AssignCallOperation, @assign_arith_expr /** * An addition assignment operation, for example `x += y`. */ -class AssignAddExpr extends AssignArithmeticOperation, @assign_add_expr { +class AssignAddExpr extends AssignArithmeticOperation, AddOperation, @assign_add_expr { override string getOperator() { result = "+=" } override string getAPrimaryQlClass() { result = "AssignAddExpr" } @@ -108,7 +108,7 @@ class AssignAddExpr extends AssignArithmeticOperation, @assign_add_expr { /** * A subtraction assignment operation, for example `x -= y`. */ -class AssignSubExpr extends AssignArithmeticOperation, @assign_sub_expr { +class AssignSubExpr extends AssignArithmeticOperation, SubOperation, @assign_sub_expr { override string getOperator() { result = "-=" } override string getAPrimaryQlClass() { result = "AssignSubExpr" } @@ -117,7 +117,7 @@ class AssignSubExpr extends AssignArithmeticOperation, @assign_sub_expr { /** * An multiplication assignment operation, for example `x *= y`. */ -class AssignMulExpr extends AssignArithmeticOperation, @assign_mul_expr { +class AssignMulExpr extends AssignArithmeticOperation, MulOperation, @assign_mul_expr { override string getOperator() { result = "*=" } override string getAPrimaryQlClass() { result = "AssignMulExpr" } @@ -126,7 +126,7 @@ class AssignMulExpr extends AssignArithmeticOperation, @assign_mul_expr { /** * An division assignment operation, for example `x /= y`. */ -class AssignDivExpr extends AssignArithmeticOperation, @assign_div_expr { +class AssignDivExpr extends AssignArithmeticOperation, DivOperation, @assign_div_expr { override string getOperator() { result = "/=" } override string getAPrimaryQlClass() { result = "AssignDivExpr" } @@ -135,7 +135,7 @@ class AssignDivExpr extends AssignArithmeticOperation, @assign_div_expr { /** * A remainder assignment operation, for example `x %= y`. */ -class AssignRemExpr extends AssignArithmeticOperation, @assign_rem_expr { +class AssignRemExpr extends AssignArithmeticOperation, RemOperation, @assign_rem_expr { override string getOperator() { result = "%=" } override string getAPrimaryQlClass() { result = "AssignRemExpr" } @@ -155,7 +155,7 @@ class AssignBitwiseOperation extends AssignCallOperation, @assign_bitwise_expr { /** * A bitwise-and assignment operation, for example `x &= y`. */ -class AssignAndExpr extends AssignBitwiseOperation, @assign_and_expr { +class AssignAndExpr extends AssignBitwiseOperation, BitwiseAndOperation, @assign_and_expr { override string getOperator() { result = "&=" } override string getAPrimaryQlClass() { result = "AssignAndExpr" } @@ -164,7 +164,7 @@ class AssignAndExpr extends AssignBitwiseOperation, @assign_and_expr { /** * A bitwise-or assignment operation, for example `x |= y`. */ -class AssignOrExpr extends AssignBitwiseOperation, @assign_or_expr { +class AssignOrExpr extends AssignBitwiseOperation, BitwiseOrOperation, @assign_or_expr { override string getOperator() { result = "|=" } override string getAPrimaryQlClass() { result = "AssignOrExpr" } @@ -173,7 +173,7 @@ class AssignOrExpr extends AssignBitwiseOperation, @assign_or_expr { /** * A bitwise exclusive-or assignment operation, for example `x ^= y`. */ -class AssignXorExpr extends AssignBitwiseOperation, @assign_xor_expr { +class AssignXorExpr extends AssignBitwiseOperation, BitwiseXorOperation, @assign_xor_expr { override string getOperator() { result = "^=" } override string getAPrimaryQlClass() { result = "AssignXorExpr" } @@ -182,7 +182,7 @@ class AssignXorExpr extends AssignBitwiseOperation, @assign_xor_expr { /** * A left-shift assignment operation, for example `x <<= y`. */ -class AssignLeftShiftExpr extends AssignBitwiseOperation, @assign_lshift_expr { +class AssignLeftShiftExpr extends AssignBitwiseOperation, LeftShiftOperation, @assign_lshift_expr { override string getOperator() { result = "<<=" } override string getAPrimaryQlClass() { result = "AssignLeftShiftExpr" } @@ -191,7 +191,7 @@ class AssignLeftShiftExpr extends AssignBitwiseOperation, @assign_lshift_expr { /** * A right-shift assignment operation, for example `x >>= y`. */ -class AssignRightShiftExpr extends AssignBitwiseOperation, @assign_rshift_expr { +class AssignRightShiftExpr extends AssignBitwiseOperation, RightShiftOperation, @assign_rshift_expr { override string getOperator() { result = ">>=" } override string getAPrimaryQlClass() { result = "AssignRightShiftExpr" } @@ -200,7 +200,9 @@ class AssignRightShiftExpr extends AssignBitwiseOperation, @assign_rshift_expr { /** * An unsigned right-shift assignment operation, for example `x >>>= y`. */ -class AssignUnsignedRightShiftExpr extends AssignBitwiseOperation, @assign_urshift_expr { +class AssignUnsignedRightShiftExpr extends AssignBitwiseOperation, UnsignedRightShiftOperation, + @assign_urshift_expr +{ override string getOperator() { result = ">>>=" } override string getAPrimaryQlClass() { result = "AssignUnsignedRightShiftExpr" } @@ -273,7 +275,7 @@ class RemoveEventExpr extends AddOrRemoveEventExpr, @remove_event_expr { /** * A null-coalescing assignment operation, for example `x ??= y`. */ -class AssignCoalesceExpr extends AssignOperation, @assign_coalesce_expr { +class AssignCoalesceExpr extends AssignOperation, NullCoalescingOperation, @assign_coalesce_expr { override string toString() { result = "... ??= ..." } override string getAPrimaryQlClass() { result = "AssignCoalesceExpr" } diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/BitwiseOperation.qll b/csharp/ql/lib/semmle/code/csharp/exprs/BitwiseOperation.qll index d818a1d08f8..14bb3d74e2b 100644 --- a/csharp/ql/lib/semmle/code/csharp/exprs/BitwiseOperation.qll +++ b/csharp/ql/lib/semmle/code/csharp/exprs/BitwiseOperation.qll @@ -41,7 +41,7 @@ class BinaryBitwiseOperation extends BitwiseOperation, BinaryOperation, @bin_bit /** * A left-shift operation, for example `x << y`. */ -class LeftShiftExpr extends BinaryBitwiseOperation, @lshift_expr { +class LeftShiftExpr extends BinaryBitwiseOperation, LeftShiftOperation, @lshift_expr { override string getOperator() { result = "<<" } override string getAPrimaryQlClass() { result = "LeftShiftExpr" } @@ -50,7 +50,7 @@ class LeftShiftExpr extends BinaryBitwiseOperation, @lshift_expr { /** * A right-shift operation, for example `x >> y`. */ -class RightShiftExpr extends BinaryBitwiseOperation, @rshift_expr { +class RightShiftExpr extends BinaryBitwiseOperation, RightShiftOperation, @rshift_expr { override string getOperator() { result = ">>" } override string getAPrimaryQlClass() { result = "RightShiftExpr" } @@ -59,7 +59,9 @@ class RightShiftExpr extends BinaryBitwiseOperation, @rshift_expr { /** * An unsigned right-shift operation, for example `x >>> y`. */ -class UnsignedRightShiftExpr extends BinaryBitwiseOperation, @urshift_expr { +class UnsignedRightShiftExpr extends BinaryBitwiseOperation, UnsignedRightShiftOperation, + @urshift_expr +{ override string getOperator() { result = ">>>" } override string getAPrimaryQlClass() { result = "UnsignedRightShiftExpr" } @@ -68,7 +70,7 @@ class UnsignedRightShiftExpr extends BinaryBitwiseOperation, @urshift_expr { /** * A bitwise-and operation, for example `x & y`. */ -class BitwiseAndExpr extends BinaryBitwiseOperation, @bit_and_expr { +class BitwiseAndExpr extends BinaryBitwiseOperation, BitwiseAndOperation, @bit_and_expr { override string getOperator() { result = "&" } override string getAPrimaryQlClass() { result = "BitwiseAndExpr" } @@ -77,7 +79,7 @@ class BitwiseAndExpr extends BinaryBitwiseOperation, @bit_and_expr { /** * A bitwise-or operation, for example `x | y`. */ -class BitwiseOrExpr extends BinaryBitwiseOperation, @bit_or_expr { +class BitwiseOrExpr extends BinaryBitwiseOperation, BitwiseOrOperation, @bit_or_expr { override string getOperator() { result = "|" } override string getAPrimaryQlClass() { result = "BitwiseOrExpr" } @@ -86,7 +88,7 @@ class BitwiseOrExpr extends BinaryBitwiseOperation, @bit_or_expr { /** * A bitwise exclusive-or operation, for example `x ^ y`. */ -class BitwiseXorExpr extends BinaryBitwiseOperation, @bit_xor_expr { +class BitwiseXorExpr extends BinaryBitwiseOperation, BitwiseXorOperation, @bit_xor_expr { override string getOperator() { result = "^" } override string getAPrimaryQlClass() { result = "BitwiseXorExpr" } diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/LogicalOperation.qll b/csharp/ql/lib/semmle/code/csharp/exprs/LogicalOperation.qll index e94d8ff93e7..4161f734c9b 100644 --- a/csharp/ql/lib/semmle/code/csharp/exprs/LogicalOperation.qll +++ b/csharp/ql/lib/semmle/code/csharp/exprs/LogicalOperation.qll @@ -65,7 +65,9 @@ class LogicalOrExpr extends BinaryLogicalOperation, @log_or_expr { * } * ``` */ -class NullCoalescingExpr extends BinaryLogicalOperation, @null_coalescing_expr { +class NullCoalescingExpr extends BinaryLogicalOperation, NullCoalescingOperation, + @null_coalescing_expr +{ override string getOperator() { result = "??" } override string getAPrimaryQlClass() { result = "NullCoalescingExpr" } diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/Operation.qll b/csharp/ql/lib/semmle/code/csharp/exprs/Operation.qll index 3310fe4de1a..1f816baea86 100644 --- a/csharp/ql/lib/semmle/code/csharp/exprs/Operation.qll +++ b/csharp/ql/lib/semmle/code/csharp/exprs/Operation.qll @@ -4,119 +4,68 @@ import Expr -/** A binary operation that involves a null-coalescing operation. */ -abstract private class NullCoalescingOperationImpl extends BinaryOperation { } +/** + * An addition operation, either `x + y` or `x += y`. + */ +class AddOperation extends BinaryOperation, @add_operation { } -final class NullCoalescingOperation = NullCoalescingOperationImpl; +/** + * A subtraction operation, either `x - y` or `x -= y`. + */ +class SubOperation extends BinaryOperation, @sub_operation { } -private class AddNullCoalescingExpr extends NullCoalescingOperationImpl instanceof NullCoalescingExpr -{ } +/** + * A multiplication operation, either `x * y` or `x *= y`. + */ +class MulOperation extends BinaryOperation, @mul_operation { } -private class AddAssignCoalesceExpr extends NullCoalescingOperationImpl instanceof AssignCoalesceExpr -{ } +/** + * A division operation, either `x / y` or `x /= y`. + */ +class DivOperation extends BinaryOperation, @div_operation { + /** Gets the numerator of this division operation. */ + Expr getNumerator() { result = this.getLeftOperand() } -/** A binary operations that involves an addition operation. */ -abstract private class AddOperationImpl extends BinaryOperation { } - -final class AddOperation = AddOperationImpl; - -private class AddAddExpr extends AddOperationImpl instanceof AddExpr { } - -private class AddAssignExpr extends AddOperationImpl instanceof AssignAddExpr { } - -/** A binary operation that involves a subtraction operation. */ -abstract private class SubOperationImpl extends BinaryOperation { } - -final class SubOperation = SubOperationImpl; - -private class AddSubExpr extends SubOperationImpl instanceof SubExpr { } - -private class AddSubAssignExpr extends SubOperationImpl instanceof AssignSubExpr { } - -/** A binary operation that involves a multiplication operation. */ -abstract private class MulOperationImpl extends BinaryOperation { } - -final class MulOperation = MulOperationImpl; - -private class AddMulExpr extends MulOperationImpl instanceof MulExpr { } - -private class AddMulAssignExpr extends MulOperationImpl instanceof AssignMulExpr { } - -/** A binary operation that involves a division operation. */ -abstract private class DivOperationImpl extends BinaryOperation { /** Gets the denominator of this division operation. */ Expr getDenominator() { result = this.getRightOperand() } } -final class DivOperation = DivOperationImpl; +/** + * A remainder operation, either `x % y` or `x %= y`. + */ +class RemOperation extends BinaryOperation, @rem_operation { } -private class AddDivExpr extends DivOperationImpl instanceof DivExpr { } +/** + * A bitwise-and operation, either `x & y` or `x &= y`. + */ +class BitwiseAndOperation extends BinaryOperation, @and_operation { } -private class AddDivAssignExpr extends DivOperationImpl instanceof AssignDivExpr { } +/** + * A bitwise-or operation, either `x | y` or `x |= y`. + */ +class BitwiseOrOperation extends BinaryOperation, @or_operation { } -/** A binary operation that involves a remainder operation. */ -abstract private class RemOperationImpl extends BinaryOperation { } +/** + * A bitwise exclusive-or operation, either `x ^ y` or `x ^= y`. + */ +class BitwiseXorOperation extends BinaryOperation, @xor_operation { } -final class RemOperation = RemOperationImpl; +/** + * A left-shift operation, either `x << y` or `x <<= y`. + */ +class LeftShiftOperation extends BinaryOperation, @lshift_operation { } -private class AddRemExpr extends RemOperationImpl instanceof RemExpr { } +/** + * A right-shift operation, either `x >> y` or `x >>= y`. + */ +class RightShiftOperation extends BinaryOperation, @rshift_operation { } -private class AddRemAssignExpr extends RemOperationImpl instanceof AssignRemExpr { } +/** + * An unsigned right-shift operation, either `x >>> y` or `x >>>= y`. + */ +class UnsignedRightShiftOperation extends BinaryOperation, @urshift_operation { } -/** A binary operation that involves a bitwise AND operation. */ -abstract private class BitwiseAndOperationImpl extends BinaryOperation { } - -final class BitwiseAndOperation = BitwiseAndOperationImpl; - -private class AddBitwiseAndExpr extends BitwiseAndOperationImpl instanceof BitwiseAndExpr { } - -private class AddAssignBitwiseAndExpr extends BitwiseAndOperationImpl instanceof AssignAndExpr { } - -/** A binary operation that involves a bitwise OR operation. */ -abstract private class BitwiseOrOperationImpl extends BinaryOperation { } - -final class BitwiseOrOperation = BitwiseOrOperationImpl; - -private class AddBitwiseOrExpr extends BitwiseOrOperationImpl instanceof BitwiseOrExpr { } - -private class AddAssignBitwiseOrExpr extends BitwiseOrOperationImpl instanceof AssignOrExpr { } - -/** A binary operation that involves a bitwise XOR operation. */ -abstract private class BitwiseXorOperationImpl extends BinaryOperation { } - -final class BitwiseXorOperation = BitwiseXorOperationImpl; - -private class AddBitwiseXorExpr extends BitwiseXorOperationImpl instanceof BitwiseXorExpr { } - -private class AddAssignBitwiseXorExpr extends BitwiseXorOperationImpl instanceof AssignXorExpr { } - -/** A binary operation that involves a left shift operation. */ -abstract private class LeftShiftOperationImpl extends BinaryOperation { } - -final class LeftShiftOperation = LeftShiftOperationImpl; - -private class AddLeftShiftExpr extends LeftShiftOperationImpl instanceof LeftShiftExpr { } - -private class AddAssignLeftShiftExpr extends LeftShiftOperationImpl instanceof AssignLeftShiftExpr { -} - -/** A binary operation that involves a right shift operation. */ -abstract private class RightShiftOperationImpl extends BinaryOperation { } - -final class RightShiftOperation = RightShiftOperationImpl; - -private class AddRightShiftExpr extends RightShiftOperationImpl instanceof RightShiftExpr { } - -private class AddAssignRightShiftExpr extends RightShiftOperationImpl instanceof AssignRightShiftExpr -{ } - -/** A binary operation that involves a unsigned right shift operation. */ -abstract private class UnsignedRightShiftOperationImpl extends BinaryOperation { } - -final class UnsignedRightShiftOperation = UnsignedRightShiftOperationImpl; - -private class AddUnsignedRightShiftExpr extends UnsignedRightShiftOperationImpl instanceof UnsignedRightShiftExpr -{ } - -private class AddAssignUnsignedRightShiftExpr extends UnsignedRightShiftOperationImpl instanceof AssignUnsignedRightShiftExpr -{ } +/** + * A null-coalescing operation, either `x ?? y` or `x ??= y`. + */ +class NullCoalescingOperation extends BinaryOperation, @null_coalescing_operation { } From a900fe8657990b9a9104d183b846298a354665b3 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 23 Mar 2026 14:55:24 +0100 Subject: [PATCH 150/185] C#: Adress review comments. --- csharp/ql/lib/semmle/code/csharp/exprs/Assignment.qll | 10 +++++++--- csharp/ql/lib/semmle/code/csharp/exprs/Call.qll | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/Assignment.qll b/csharp/ql/lib/semmle/code/csharp/exprs/Assignment.qll index e751bddc670..467149011d2 100644 --- a/csharp/ql/lib/semmle/code/csharp/exprs/Assignment.qll +++ b/csharp/ql/lib/semmle/code/csharp/exprs/Assignment.qll @@ -60,7 +60,7 @@ class AssignExpr extends Assignment, @simple_assign_expr { /** * An assignment operation. Either an arithmetic assignment operation - * (`AssignArithmeticOperation`), a bitwise assignment operation or + * (`AssignArithmeticOperation`), a bitwise assignment operation * (`AssignBitwiseOperation`), an event assignment (`AddOrRemoveEventExpr`), or * a null-coalescing assignment (`AssignCoalesceExpr`). */ @@ -81,10 +81,14 @@ class AssignOperation extends Assignment, @assign_op_expr { } /** - * An assignment operation that corresponds to an operator call, for example `x += y` corresponds to `x = x + y`. + * A compound assignment operation that implicitly invokes an operator. + * For example, `x += y` assigns the result of `x + y` to `x`. + * + * Either an arithmetic assignment operation (`AssignArithmeticOperation`) or a bitwise + * assignment operation (`AssignBitwiseOperation`). */ class AssignCallOperation extends AssignOperation, OperatorCall, @assign_op_call_expr { - override string toString() { result = "... " + this.getOperator() + " ..." } + override string toString() { result = AssignOperation.super.toString() } } /** diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll b/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll index 912cb23e06b..0d9e414a5c4 100644 --- a/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll +++ b/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll @@ -478,7 +478,7 @@ class ConstructorInitializer extends Call, @constructor_init_expr { } /** - * A call to a user-defined operator, for example `this + other` + * A call to an operator, for example `this + other` * on line 7 in * * ```csharp From d96e8cb70480a8fbeea2163ce5817a76a4ab04ca Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 23 Mar 2026 15:13:35 +0100 Subject: [PATCH 151/185] C#: Remove expr_parent_adjusted. --- csharp/ql/lib/semmle/code/csharp/ExprOrStmtParent.qll | 6 ------ 1 file changed, 6 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/ExprOrStmtParent.qll b/csharp/ql/lib/semmle/code/csharp/ExprOrStmtParent.qll index ae9ed04e018..8102b4a0288 100644 --- a/csharp/ql/lib/semmle/code/csharp/ExprOrStmtParent.qll +++ b/csharp/ql/lib/semmle/code/csharp/ExprOrStmtParent.qll @@ -118,12 +118,6 @@ private module Cached { i = 0 } - /** - * Use `expr_parent` instead. - */ - cached - deprecated predicate expr_parent_adjusted(Expr child, int i, ControlFlowElement parent) { none() } - private Expr getAChildExpr(ExprOrStmtParent parent) { result = parent.getAChildExpr() and not result = parent.(DeclarationWithGetSetAccessors).getExpressionBody() From ddc407257fbcca466b7114e7902208d8dc8fc7a0 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 24 Mar 2026 14:10:43 +0100 Subject: [PATCH 152/185] Rust: Type inference test --- .../type-inference/regressions.rs | 24 +++++++++++++++++++ .../type-inference/type-inference.expected | 23 ++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/rust/ql/test/library-tests/type-inference/regressions.rs b/rust/ql/test/library-tests/type-inference/regressions.rs index 37c61b2b7e7..df033a88976 100644 --- a/rust/ql/test/library-tests/type-inference/regressions.rs +++ b/rust/ql/test/library-tests/type-inference/regressions.rs @@ -106,3 +106,27 @@ mod regression3 { z } } + +mod regression4 { + trait MyTrait { + // MyTrait::m + fn m(self); + } + + impl MyTrait for &T { + // RefAsMyTrait::m + fn m(self) {} + } + + struct S(T); + + impl S { + fn call_m(self) + where + T: MyTrait, + { + let S(s) = self; + s.m(); // $ MISSING: target=MyTrait::m $ SPURIOUS: target=RefAsMyTrait::m + } + } +} 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 a25a9daf003..1e2c753b242 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -5083,6 +5083,15 @@ inferCertainType | regressions.rs:99:22:99:22 | x | | regressions.rs:99:18:99:19 | T2 | | regressions.rs:103:5:107:5 | { ... } | | regressions.rs:99:18:99:19 | T2 | | regressions.rs:104:33:104:33 | x | | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:113:14:113:17 | SelfParam | | regressions.rs:111:5:114:5 | Self [trait MyTrait] | +| regressions.rs:118:14:118:17 | SelfParam | | {EXTERNAL LOCATION} | & | +| regressions.rs:118:14:118:17 | SelfParam | TRef | regressions.rs:116:10:116:10 | T | +| regressions.rs:118:20:118:21 | { ... } | | {EXTERNAL LOCATION} | () | +| regressions.rs:124:19:124:22 | SelfParam | | regressions.rs:121:5:121:19 | S | +| regressions.rs:124:19:124:22 | SelfParam | T | regressions.rs:123:10:123:10 | T | +| regressions.rs:127:9:130:9 | { ... } | | {EXTERNAL LOCATION} | () | +| regressions.rs:128:24:128:27 | self | | regressions.rs:121:5:121:19 | S | +| regressions.rs:128:24:128:27 | self | T | regressions.rs:123:10:123:10 | T | inferType | associated_types.rs:5:15:5:18 | SelfParam | | associated_types.rs:1:1:2:21 | Wrapper | | associated_types.rs:5:15:5:18 | SelfParam | A | associated_types.rs:4:6:4:6 | A | @@ -15135,4 +15144,18 @@ inferType | regressions.rs:105:33:105:33 | y | T | regressions.rs:99:14:99:15 | T1 | | regressions.rs:105:33:105:33 | y | T | regressions.rs:99:18:99:19 | T2 | | regressions.rs:106:9:106:9 | z | | regressions.rs:99:18:99:19 | T2 | +| regressions.rs:113:14:113:17 | SelfParam | | regressions.rs:111:5:114:5 | Self [trait MyTrait] | +| regressions.rs:118:14:118:17 | SelfParam | | {EXTERNAL LOCATION} | & | +| regressions.rs:118:14:118:17 | SelfParam | TRef | regressions.rs:116:10:116:10 | T | +| regressions.rs:118:20:118:21 | { ... } | | {EXTERNAL LOCATION} | () | +| regressions.rs:124:19:124:22 | SelfParam | | regressions.rs:121:5:121:19 | S | +| regressions.rs:124:19:124:22 | SelfParam | T | regressions.rs:123:10:123:10 | T | +| regressions.rs:127:9:130:9 | { ... } | | {EXTERNAL LOCATION} | () | +| regressions.rs:128:17:128:20 | S(...) | | regressions.rs:121:5:121:19 | S | +| regressions.rs:128:17:128:20 | S(...) | T | regressions.rs:123:10:123:10 | T | +| regressions.rs:128:19:128:19 | s | | regressions.rs:123:10:123:10 | T | +| regressions.rs:128:24:128:27 | self | | regressions.rs:121:5:121:19 | S | +| regressions.rs:128:24:128:27 | self | T | regressions.rs:123:10:123:10 | T | +| regressions.rs:129:13:129:13 | s | | regressions.rs:123:10:123:10 | T | +| regressions.rs:129:13:129:17 | s.m() | | {EXTERNAL LOCATION} | () | testFailures From 8cb5380d847ad394e5c63220d2bee448daa3d7cb Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Tue, 24 Mar 2026 15:54:46 +0100 Subject: [PATCH 153/185] C++: Remove unused `find` predicate --- cpp/ql/src/Telemetry/DatabaseQuality.qll | 2 -- 1 file changed, 2 deletions(-) diff --git a/cpp/ql/src/Telemetry/DatabaseQuality.qll b/cpp/ql/src/Telemetry/DatabaseQuality.qll index be44a9431aa..04351052986 100644 --- a/cpp/ql/src/Telemetry/DatabaseQuality.qll +++ b/cpp/ql/src/Telemetry/DatabaseQuality.qll @@ -31,8 +31,6 @@ private class SourceExpr extends Expr { SourceExpr() { this.getFile() instanceof RelevantFile } } -predicate find(SourceExpr e) { not hasGoodType(e) } - private predicate hasGoodType(Expr e) { not e.getType() instanceof ErroneousType } module ExprTypeStats implements StatsSig { From bedfe1e7556da2fda49aa10e6fe6d23598ca29d3 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> Date: Tue, 24 Mar 2026 22:06:53 +0000 Subject: [PATCH 154/185] Apply suggestions from code review Co-authored-by: Geoffrey White <40627776+geoffw0@users.noreply.github.com> --- .../security/HardcodedCryptographicValueExtensions.qll | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll b/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll index 14482872443..7ac59c92c18 100644 --- a/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll @@ -134,11 +134,12 @@ module HardcodedCryptographicValue { /** * An externally modeled barrier for hard-coded cryptographic value vulnerabilities. * - * Note that a sanitizer with kind `credentials-key` will sanitize flow to - * all sinks, not just sinks with the same kind. + * Note that a barrier will block flow to all hard-coded cryptographic value + * sinks, regardless of the `kind` that is specified. For example a barrier of + * kind `credentials-key` will block flow to a sink of kind `credentials-iv`. */ private class ModelsAsDataBarrier extends Barrier { - ModelsAsDataBarrier() { exists(string kind | barrierNode(this, "credentials-" + kind)) } + ModelsAsDataBarrier() { exists(CryptographicValueKind kind | barrierNode(this, "credentials-" + kind)) } } /** From 6295f57a8733761cd3196023d6128ee2b362af3f Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 24 Mar 2026 12:58:26 +0100 Subject: [PATCH 155/185] Rust: Take additional type parameter constraints into account --- .../rust/elements/internal/TypeParamImpl.qll | 28 +++++- .../codeql/rust/internal/PathResolution.qll | 37 ++++++- .../internal/typeinference/FunctionType.qll | 99 ++++++++++++++++--- .../internal/typeinference/TypeInference.qll | 54 +++++++--- .../type-inference/regressions.rs | 2 +- .../test/utils-tests/modelgenerator/option.rs | 4 +- .../typeinference/internal/TypeInference.qll | 47 +++++++-- 7 files changed, 225 insertions(+), 46 deletions(-) diff --git a/rust/ql/lib/codeql/rust/elements/internal/TypeParamImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/TypeParamImpl.qll index 755c5399a20..bba95442f6a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/TypeParamImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/TypeParamImpl.qll @@ -32,7 +32,8 @@ module Impl { * Gets the `index`th type bound of this type parameter, if any. * * This includes type bounds directly on this type parameter and bounds from - * any `where` clauses for this type parameter. + * any `where` clauses for this type parameter, but restricted to `where` + * clauses from the item that declares this type parameter. */ TypeBound getTypeBound(int index) { result = @@ -43,13 +44,36 @@ module Impl { * Gets a type bound of this type parameter. * * This includes type bounds directly on this type parameter and bounds from - * any `where` clauses for this type parameter. + * any `where` clauses for this type parameter, but restricted to `where` + * clauses from the item that declares this type parameter. */ TypeBound getATypeBound() { result = this.getTypeBound(_) } /** Holds if this type parameter has at least one type bound. */ predicate hasTypeBound() { exists(this.getATypeBound()) } + /** + * Gets the `index`th additional type bound of this type parameter, + * which applies to `constrainingItem`, if any. + * + * For example, in + * + * ```rust + * impl SomeType where T: Clone { + * fn foo() where T: Debug { } + * } + * ``` + * + * The constraint `Debug` additionally applies to `T` in `foo`. + */ + TypeBound getAdditionalTypeBound(Item constrainingItem, int index) { + result = + rank[index + 1](int i, int j | + | + this.(TypeParamItemNode).getAdditionalTypeBoundAt(constrainingItem, i, j) order by i, j + ) + } + override string toAbbreviatedString() { result = this.getName().getText() } override string toStringImpl() { result = this.getName().getText() } diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index 76c15485bb9..c38e9bff91c 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -1162,21 +1162,39 @@ private Path getWherePredPath(WherePred wp) { result = wp.getTypeRepr().(PathTyp final class TypeParamItemNode extends NamedItemNode, TypeItemNode instanceof TypeParam { /** Gets a where predicate for this type parameter, if any */ pragma[nomagic] - private WherePred getAWherePred() { + private WherePred getAWherePred(ItemNode constrainingItem, boolean isAdditional) { exists(ItemNode declaringItem | + this = declaringItem.getTypeParam(_) and this = resolvePath(getWherePredPath(result)) and - result = declaringItem.getADescendant() and - this = declaringItem.getADescendant() + result = constrainingItem.getADescendant() + | + constrainingItem = declaringItem and + isAdditional = false + or + constrainingItem = declaringItem.getADescendant() and + isAdditional = true ) } pragma[nomagic] TypeBound getTypeBoundAt(int i, int j) { exists(TypeBoundList tbl | result = tbl.getBound(j) | - tbl = super.getTypeBoundList() and i = 0 + tbl = super.getTypeBoundList() and + i = 0 or exists(WherePred wp | - wp = this.getAWherePred() and + wp = this.getAWherePred(_, false) and + tbl = wp.getTypeBoundList() and + wp = any(WhereClause wc).getPredicate(i) + ) + ) + } + + pragma[nomagic] + TypeBound getAdditionalTypeBoundAt(Item constrainingItem, int i, int j) { + exists(TypeBoundList tbl | result = tbl.getBound(j) | + exists(WherePred wp | + wp = this.getAWherePred(constrainingItem, true) and tbl = wp.getTypeBoundList() and wp = any(WhereClause wc).getPredicate(i) ) @@ -1197,6 +1215,15 @@ final class TypeParamItemNode extends NamedItemNode, TypeItemNode instanceof Typ ItemNode resolveABound() { result = resolvePath(this.getABoundPath()) } + pragma[nomagic] + ItemNode resolveAdditionalBound(ItemNode constrainingItem) { + result = + resolvePath(this.getAdditionalTypeBoundAt(constrainingItem, _, _) + .getTypeRepr() + .(PathTypeRepr) + .getPath()) + } + override string getName() { result = TypeParam.super.getName().getText() } override Namespace getNamespace() { result.isType() } diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll index 26627450add..0816ce49c29 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll @@ -87,6 +87,7 @@ private newtype TAssocFunctionType = } bindingset[abs, constraint, tp] +pragma[inline_late] private Type getTraitConstraintTypeAt( TypeAbstraction abs, TypeMention constraint, TypeParameter tp, TypePath path ) { @@ -203,7 +204,7 @@ class AssocFunctionType extends MkAssocFunctionType { } pragma[nomagic] -Trait getALookupTrait(Type t) { +private Trait getALookupTrait(Type t) { result = t.(TypeParamTypeParameter).getTypeParam().(TypeParamItemNode).resolveABound() or result = t.(SelfTypeParameter).getTrait() @@ -213,23 +214,47 @@ Trait getALookupTrait(Type t) { result = t.(DynTraitType).getTrait() } -/** - * Gets the type obtained by substituting in relevant traits in which to do function - * lookup, or `t` itself when no such trait exist. - */ pragma[nomagic] -Type substituteLookupTraits(Type t) { +private Trait getAdditionalLookupTrait(ItemNode i, Type t) { + result = + t.(TypeParamTypeParameter) + .getTypeParam() + .(TypeParamItemNode) + .resolveAdditionalBound(i.getImmediateParent*()) +} + +bindingset[n, t] +pragma[inline_late] +Trait getALookupTrait(AstNode n, Type t) { + result = getALookupTrait(t) + or + result = getAdditionalLookupTrait(any(ItemNode i | n = i.getADescendant()), t) +} + +bindingset[i, t] +pragma[inline_late] +private Type substituteLookupTraits0(ItemNode i, Type t) { not exists(getALookupTrait(t)) and + not exists(getAdditionalLookupTrait(i, t)) and result = t or result = TTrait(getALookupTrait(t)) + or + result = TTrait(getAdditionalLookupTrait(i, t)) } /** - * Gets the `n`th `substituteLookupTraits` type for `t`, per some arbitrary order. + * Gets the type obtained by substituting in relevant traits in which to do function + * lookup, or `t` itself when no such trait exist, in the context of AST node `n`. */ +bindingset[n, t] +pragma[inline_late] +Type substituteLookupTraits(AstNode n, Type t) { + result = substituteLookupTraits0(any(ItemNode i | n = i.getADescendant()), t) +} + pragma[nomagic] -Type getNthLookupType(Type t, int n) { +private Type getNthLookupType(Type t, int n) { not exists(getALookupTrait(t)) and result = t and n = 0 @@ -244,24 +269,66 @@ Type getNthLookupType(Type t, int n) { } /** - * Gets the index of the last `substituteLookupTraits` type for `t`. + * Gets the `n`th `substituteLookupTraits` type for `t`, per some arbitrary order, + * in the context of AST node `node`. */ +bindingset[node, t] +pragma[inline_late] +Type getNthLookupType(AstNode node, Type t, int n) { + exists(ItemNode i | node = i.getADescendant() | + if exists(getAdditionalLookupTrait(i, t)) + then + result = + TTrait(rank[n + 1](Trait trait, int j | + trait = [getALookupTrait(t), getAdditionalLookupTrait(i, t)] and + j = idOfTypeParameterAstNode(trait) + | + trait order by j + )) + else result = getNthLookupType(t, n) + ) +} + pragma[nomagic] -int getLastLookupTypeIndex(Type t) { result = max(int n | exists(getNthLookupType(t, n))) } +private int getLastLookupTypeIndex(Type t) { result = max(int n | exists(getNthLookupType(t, n))) } + +/** + * Gets the index of the last `substituteLookupTraits` type for `t`, + * in the context of AST node `node`. + */ +bindingset[node, t] +pragma[inline_late] +int getLastLookupTypeIndex(AstNode node, Type t) { + if exists(getAdditionalLookupTrait(node, t)) + then result = max(int n | exists(getNthLookupType(node, t, n))) + else result = getLastLookupTypeIndex(t) +} + +signature class ArgSig { + /** Gets the type of this argument at `path`. */ + Type getTypeAt(TypePath path); + + /** Gets the enclosing item node of this argument. */ + ItemNode getEnclosingItemNode(); + + /** Gets a textual representation of this argument. */ + string toString(); + + /** Gets the location of this argument. */ + Location getLocation(); +} /** * A wrapper around `IsInstantiationOf` which ensures to substitute in lookup * traits when checking whether argument types are instantiations of function * types. */ -module ArgIsInstantiationOf< - HasTypeTreeSig Arg, IsInstantiationOfInputSig Input> -{ +module ArgIsInstantiationOf Input> { final private class ArgFinal = Arg; private class ArgSubst extends ArgFinal { Type getTypeAt(TypePath path) { - result = substituteLookupTraits(super.getTypeAt(path)) and + result = substituteLookupTraits0(this.getEnclosingItemNode(), super.getTypeAt(path)) and not result = TNeverType() and not result = TUnknownType() } @@ -318,6 +385,8 @@ signature module ArgsAreInstantiationsOfInputSig { Location getLocation(); + ItemNode getEnclosingItemNode(); + Type getArgType(FunctionPosition pos, TypePath path); predicate hasTargetCand(ImplOrTraitItemNode i, Function f); @@ -366,6 +435,8 @@ module ArgsAreInstantiationsOf { FunctionPosition getPos() { result = pos } + ItemNode getEnclosingItemNode() { result = call.getEnclosingItemNode() } + Location getLocation() { result = call.getLocation() } Type getTypeAt(TypePath path) { result = call.getArgType(pos, path) } diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll index 78e37681b9d..0f9afcd06bb 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll @@ -1589,7 +1589,7 @@ private module AssocFunctionResolution { Trait getATrait() { result = this.getTrait() or - result = getALookupTrait(getCallExprTypeQualifier(this, TypePath::nil(), _)) + result = getALookupTrait(this, getCallExprTypeQualifier(this, TypePath::nil(), _)) } predicate hasATrait() { exists(this.getATrait()) } @@ -1639,7 +1639,7 @@ private module AssocFunctionResolution { private predicate isRelevantSelfPos(FunctionPosition selfPos) { not this.hasReceiver() and exists(TypePath strippedTypePath, Type strippedType | - strippedType = substituteLookupTraits(this.getTypeAt(selfPos, strippedTypePath)) and + strippedType = substituteLookupTraits(this, this.getTypeAt(selfPos, strippedTypePath)) and strippedType != TNeverType() and strippedType != TUnknownType() | @@ -1803,7 +1803,7 @@ private module AssocFunctionResolution { this.hasNoCompatibleTargetNoBorrowToIndex(selfPos, derefChain, strippedTypePath, strippedType, n - 1) and exists(Type t | - t = getNthLookupType(strippedType, n) and + t = getNthLookupType(this, strippedType, n) and this.hasNoCompatibleTargetCheck(selfPos, derefChain, TNoBorrowKind(), strippedTypePath, t) ) } @@ -1816,7 +1816,7 @@ private module AssocFunctionResolution { predicate hasNoCompatibleTargetNoBorrow(FunctionPosition selfPos, DerefChain derefChain) { exists(Type strippedType | this.hasNoCompatibleTargetNoBorrowToIndex(selfPos, derefChain, _, strippedType, - getLastLookupTypeIndex(strippedType)) + getLastLookupTypeIndex(this, strippedType)) ) } @@ -1845,7 +1845,7 @@ private module AssocFunctionResolution { this.hasNoCompatibleNonBlanketTargetNoBorrowToIndex(selfPos, derefChain, strippedTypePath, strippedType, n - 1) and exists(Type t | - t = getNthLookupType(strippedType, n) and + t = getNthLookupType(this, strippedType, n) and this.hasNoCompatibleNonBlanketTargetCheck(selfPos, derefChain, TNoBorrowKind(), strippedTypePath, t) ) @@ -1861,7 +1861,7 @@ private module AssocFunctionResolution { ) { exists(Type strippedType | this.hasNoCompatibleNonBlanketTargetNoBorrowToIndex(selfPos, derefChain, _, strippedType, - getLastLookupTypeIndex(strippedType)) + getLastLookupTypeIndex(this, strippedType)) ) } @@ -1880,7 +1880,7 @@ private module AssocFunctionResolution { this.hasNoCompatibleTargetSharedBorrowToIndex(selfPos, derefChain, strippedTypePath, strippedType, n - 1) and exists(Type t | - t = getNthLookupType(strippedType, n) and + t = getNthLookupType(this, strippedType, n) and this.hasNoCompatibleNonBlanketLikeTargetCheck(selfPos, derefChain, TSomeBorrowKind(false), strippedTypePath, t) ) @@ -1895,7 +1895,7 @@ private module AssocFunctionResolution { predicate hasNoCompatibleTargetSharedBorrow(FunctionPosition selfPos, DerefChain derefChain) { exists(Type strippedType | this.hasNoCompatibleTargetSharedBorrowToIndex(selfPos, derefChain, _, strippedType, - getLastLookupTypeIndex(strippedType)) + getLastLookupTypeIndex(this, strippedType)) ) } @@ -1913,7 +1913,7 @@ private module AssocFunctionResolution { this.hasNoCompatibleTargetMutBorrowToIndex(selfPos, derefChain, strippedTypePath, strippedType, n - 1) and exists(Type t | - t = getNthLookupType(strippedType, n) and + t = getNthLookupType(this, strippedType, n) and this.hasNoCompatibleNonBlanketLikeTargetCheck(selfPos, derefChain, TSomeBorrowKind(true), strippedTypePath, t) ) @@ -1928,7 +1928,7 @@ private module AssocFunctionResolution { predicate hasNoCompatibleTargetMutBorrow(FunctionPosition selfPos, DerefChain derefChain) { exists(Type strippedType | this.hasNoCompatibleTargetMutBorrowToIndex(selfPos, derefChain, _, strippedType, - getLastLookupTypeIndex(strippedType)) + getLastLookupTypeIndex(this, strippedType)) ) } @@ -1947,7 +1947,7 @@ private module AssocFunctionResolution { this.hasNoCompatibleNonBlanketTargetSharedBorrowToIndex(selfPos, derefChain, strippedTypePath, strippedType, n - 1) and exists(Type t | - t = getNthLookupType(strippedType, n) and + t = getNthLookupType(this, strippedType, n) and this.hasNoCompatibleNonBlanketTargetCheck(selfPos, derefChain, TSomeBorrowKind(false), strippedTypePath, t) ) @@ -1964,7 +1964,7 @@ private module AssocFunctionResolution { ) { exists(Type strippedType | this.hasNoCompatibleNonBlanketTargetSharedBorrowToIndex(selfPos, derefChain, _, - strippedType, getLastLookupTypeIndex(strippedType)) + strippedType, getLastLookupTypeIndex(this, strippedType)) ) } @@ -1982,7 +1982,7 @@ private module AssocFunctionResolution { this.hasNoCompatibleNonBlanketTargetMutBorrowToIndex(selfPos, derefChain, strippedTypePath, strippedType, n - 1) and exists(Type t | - t = getNthLookupType(strippedType, n) and + t = getNthLookupType(this, strippedType, n) and this.hasNoCompatibleNonBlanketTargetCheck(selfPos, derefChain, TSomeBorrowKind(true), strippedTypePath, t) ) @@ -1999,7 +1999,7 @@ private module AssocFunctionResolution { ) { exists(Type strippedType | this.hasNoCompatibleNonBlanketTargetMutBorrowToIndex(selfPos, derefChain, _, strippedType, - getLastLookupTypeIndex(strippedType)) + getLastLookupTypeIndex(this, strippedType)) ) } @@ -2268,9 +2268,12 @@ private module AssocFunctionResolution { AssocFunctionCall getAssocFunctionCall() { result = afc_ } + ItemNode getEnclosingItemNode() { result.getADescendant() = afc_ } + Type getTypeAt(TypePath path) { result = - substituteLookupTraits(afc_.getANonPseudoSelfTypeAt(selfPos_, derefChain, borrow, path)) + substituteLookupTraits(afc_, + afc_.getANonPseudoSelfTypeAt(selfPos_, derefChain, borrow, path)) } pragma[nomagic] @@ -2404,7 +2407,7 @@ private module AssocFunctionResolution { CallDerefCand() { this = MkCallDerefCand(afc, selfPos, derefChain) } Type getTypeAt(TypePath path) { - result = substituteLookupTraits(afc.getSelfTypeAtNoBorrow(selfPos, derefChain, path)) and + result = substituteLookupTraits(afc, afc.getSelfTypeAtNoBorrow(selfPos, derefChain, path)) and result != TNeverType() and result != TUnknownType() } @@ -2641,6 +2644,8 @@ private module FunctionCallMatchingInput implements MatchingWithEnvironmentInput Declaration() { this = TFunctionDeclaration(i, f) } + FunctionDeclaration getFunction() { result = f } + predicate isAssocFunction(ImplOrTraitItemNode i_, Function f_) { i_ = i.asSome() and f_ = f @@ -2666,6 +2671,23 @@ private module FunctionCallMatchingInput implements MatchingWithEnvironmentInput Location getLocation() { result = f.getLocation() } } + pragma[nomagic] + private TypeMention getAdditionalTypeParameterConstraint(TypeParameter tp, Declaration decl) { + result = + tp.(TypeParamTypeParameter) + .getTypeParam() + .getAdditionalTypeBound(decl.getFunction(), _) + .getTypeRepr() + } + + bindingset[decl] + TypeMention getATypeParameterConstraint(TypeParameter tp, Declaration decl) { + result = Input2::getATypeParameterConstraint(tp) and + exists(decl) + or + result = getAdditionalTypeParameterConstraint(tp, decl) + } + class AccessEnvironment = string; bindingset[derefChain, borrow] diff --git a/rust/ql/test/library-tests/type-inference/regressions.rs b/rust/ql/test/library-tests/type-inference/regressions.rs index df033a88976..e1b47479f5d 100644 --- a/rust/ql/test/library-tests/type-inference/regressions.rs +++ b/rust/ql/test/library-tests/type-inference/regressions.rs @@ -126,7 +126,7 @@ mod regression4 { T: MyTrait, { let S(s) = self; - s.m(); // $ MISSING: target=MyTrait::m $ SPURIOUS: target=RefAsMyTrait::m + s.m(); // $ target=MyTrait::m } } } diff --git a/rust/ql/test/utils-tests/modelgenerator/option.rs b/rust/ql/test/utils-tests/modelgenerator/option.rs index fd5cd649c2c..701073564b1 100644 --- a/rust/ql/test/utils-tests/modelgenerator/option.rs +++ b/rust/ql/test/utils-tests/modelgenerator/option.rs @@ -416,7 +416,7 @@ impl MyOption<&T> { } } - // MISSING: summary=::cloned;Argument[self].Field[test::option::MyOption::MySome(0)].Reference;ReturnValue.Field[test::option::MyOption::MySome(0)];value;dfc-generated + // summary=::cloned;Argument[self].Field[test::option::MyOption::MySome(0)].Reference;ReturnValue.Field[test::option::MyOption::MySome(0)];value;dfc-generated pub fn cloned(self) -> MyOption where T: Clone, @@ -440,7 +440,7 @@ impl MyOption<&mut T> { } } - // MISSING: summary=::cloned;Argument[self].Field[test::option::MyOption::MySome(0)].Reference;ReturnValue.Field[test::option::MyOption::MySome(0)];value;dfc-generated + // summary=::cloned;Argument[self].Field[test::option::MyOption::MySome(0)].Reference;ReturnValue.Field[test::option::MyOption::MySome(0)];value;dfc-generated pub fn cloned(self) -> MyOption where T: Clone, diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index 7cd4dab479d..0b23b08aad6 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -1296,6 +1296,15 @@ module Make1 Input1> { Type getDeclaredType(DeclarationPosition dpos, TypePath path); } + /** + * Gets a type constraint on the type parameter `tp` that applies to `decl`, + * if any. + */ + bindingset[decl] + default TypeMention getATypeParameterConstraint(TypeParameter tp, Declaration decl) { + result = getATypeParameterConstraint(tp) + } + /** * A position inside an access. For example, the integer position of an * argument inside a method call. @@ -1643,6 +1652,24 @@ module Make1 Input1> { t = getTypeArgument(a, target, tp, path) } + /** + * Holds if the type parameter `constrainedTp` occurs in the declared type of + * `target` at `apos` and `pathToConstrained`, and there is a constraint + * `constraint` on `constrainedTp`. + */ + pragma[nomagic] + private predicate typeParameterHasConstraint( + Declaration target, AccessPosition apos, TypeParameter constrainedTp, + TypePath pathToConstrained, TypeMention constraint + ) { + exists(DeclarationPosition dpos | + accessDeclarationPositionMatch(apos, dpos) and + constrainedTp = target.getTypeParameter(_) and + constrainedTp = target.getDeclaredType(dpos, pathToConstrained) and + constraint = getATypeParameterConstraint(constrainedTp, target) + ) + } + /** * Holds if the declared type of `target` contains a type parameter at * `apos` and `pathToConstrained` that must satisfy `constraint` and `tp` @@ -1665,14 +1692,11 @@ module Make1 Input1> { Declaration target, AccessPosition apos, TypePath pathToConstrained, TypeMention constraint, TypePath pathToTp, TypeParameter tp ) { - exists(DeclarationPosition dpos, TypeParameter constrainedTp | - accessDeclarationPositionMatch(apos, dpos) and - constrainedTp = target.getTypeParameter(_) and - constraint = getATypeParameterConstraint(constrainedTp) and + exists(TypeParameter constrainedTp | + typeParameterHasConstraint(target, apos, constrainedTp, pathToConstrained, constraint) and tp = target.getTypeParameter(_) and tp = constraint.getTypeAt(pathToTp) and - constrainedTp != tp and - constrainedTp = target.getDeclaredType(dpos, pathToConstrained) + constrainedTp != tp ) } @@ -1799,6 +1823,15 @@ module Make1 Input1> { Type getDeclaredType(DeclarationPosition dpos, TypePath path); } + /** + * Gets a type constraint on the type parameter `tp` that applies to `decl`, + * if any. + */ + bindingset[decl] + default TypeMention getATypeParameterConstraint(TypeParameter tp, Declaration decl) { + result = getATypeParameterConstraint(tp) + } + /** * A position inside an access. For example, the integer position of an * argument inside a method call. @@ -1856,6 +1889,8 @@ module Make1 Input1> { private import codeql.util.Unit import Input + predicate getATypeParameterConstraint = Input::getATypeParameterConstraint/2; + class AccessEnvironment = Unit; final private class AccessFinal = Input::Access; From f25d7456da8067141c271899bcb8ac9c0cb82030 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 25 Mar 2026 10:05:04 +0000 Subject: [PATCH 156/185] Fix QL formatting --- .../security/HardcodedCryptographicValueExtensions.qll | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll b/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll index 7ac59c92c18..09e2505eb5c 100644 --- a/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll @@ -134,12 +134,14 @@ module HardcodedCryptographicValue { /** * An externally modeled barrier for hard-coded cryptographic value vulnerabilities. * - * Note that a barrier will block flow to all hard-coded cryptographic value - * sinks, regardless of the `kind` that is specified. For example a barrier of - * kind `credentials-key` will block flow to a sink of kind `credentials-iv`. + * Note that a barrier will block flow to all hard-coded cryptographic value + * sinks, regardless of the `kind` that is specified. For example a barrier of + * kind `credentials-key` will block flow to a sink of kind `credentials-iv`. */ private class ModelsAsDataBarrier extends Barrier { - ModelsAsDataBarrier() { exists(CryptographicValueKind kind | barrierNode(this, "credentials-" + kind)) } + ModelsAsDataBarrier() { + exists(CryptographicValueKind kind | barrierNode(this, "credentials-" + kind)) + } } /** From fba4a83dc81e66e71dc3adc111ed3994500921c5 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 25 Mar 2026 12:52:08 +0100 Subject: [PATCH 157/185] Rust: Include taint steps when generating flow models --- rust/ql/src/utils/modelgenerator/internal/CaptureModels.qll | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/rust/ql/src/utils/modelgenerator/internal/CaptureModels.qll b/rust/ql/src/utils/modelgenerator/internal/CaptureModels.qll index fb71423503d..8ec2f3354db 100644 --- a/rust/ql/src/utils/modelgenerator/internal/CaptureModels.qll +++ b/rust/ql/src/utils/modelgenerator/internal/CaptureModels.qll @@ -138,7 +138,10 @@ private module SummaryModelGeneratorInput implements SummaryModelGeneratorInputS Parameter asParameter(NodeExtended node) { result = node.asParameter() } - predicate isAdditionalContentFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { none() } + predicate isAdditionalContentFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { + RustTaintTracking::defaultAdditionalTaintStep(nodeFrom, nodeTo, _) and + not RustDataFlow::readStep(nodeFrom, _, nodeTo) + } predicate isField(DataFlow::ContentSet c) { c.(SingletonContentSet).getContent() instanceof FieldContent From 09a2dd4a2e539f505e11aa4e1ae79c6f4038f64f Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 25 Mar 2026 15:01:39 +0100 Subject: [PATCH 158/185] Update rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll index 0816ce49c29..d128875eda7 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll @@ -245,7 +245,7 @@ private Type substituteLookupTraits0(ItemNode i, Type t) { /** * Gets the type obtained by substituting in relevant traits in which to do function - * lookup, or `t` itself when no such trait exist, in the context of AST node `n`. + * lookup, or `t` itself when no such trait exists, in the context of AST node `n`. */ bindingset[n, t] pragma[inline_late] From 29acd6960f3f20b31d1853d84ad1e6b9947ed1c9 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 23 Mar 2026 16:52:41 +0100 Subject: [PATCH 159/185] C#: Add upgrade script. --- .../assignments.ql | 117 ++ .../old.dbscheme | 1489 ++++++++++++++++ .../semmlecode.csharp.dbscheme | 1504 +++++++++++++++++ .../upgrade.properties | 8 + 4 files changed, 3118 insertions(+) create mode 100644 csharp/ql/lib/upgrades/e73ca2c93df8aae162f1704edc4817a5cb330529/assignments.ql create mode 100644 csharp/ql/lib/upgrades/e73ca2c93df8aae162f1704edc4817a5cb330529/old.dbscheme create mode 100644 csharp/ql/lib/upgrades/e73ca2c93df8aae162f1704edc4817a5cb330529/semmlecode.csharp.dbscheme create mode 100644 csharp/ql/lib/upgrades/e73ca2c93df8aae162f1704edc4817a5cb330529/upgrade.properties diff --git a/csharp/ql/lib/upgrades/e73ca2c93df8aae162f1704edc4817a5cb330529/assignments.ql b/csharp/ql/lib/upgrades/e73ca2c93df8aae162f1704edc4817a5cb330529/assignments.ql new file mode 100644 index 00000000000..89e39a6e722 --- /dev/null +++ b/csharp/ql/lib/upgrades/e73ca2c93df8aae162f1704edc4817a5cb330529/assignments.ql @@ -0,0 +1,117 @@ +class Expr extends @expr { + string toString() { none() } +} + +class Location extends @location { + string toString() { none() } +} + +class ControlFlowElement extends @control_flow_element { + string toString() { none() } +} + +class TypeOrRef extends @type_or_ref { + string toString() { none() } +} + +class Callable extends @callable { + string toString() { none() } +} + +class Accessible extends @accessible { + string toString() { none() } +} + +predicate assignmentKind(int kind) { + // | 63 = @simple_assign_expr + // | 80 = @add_event_expr + // | 81 = @remove_event_expr + // | 83 = @local_var_decl_expr + kind = [63, 80, 81, 83] +} + +predicate compoundAssignmentKind(int kind) { + // | 64 = @assign_add_expr + // | 65 = @assign_sub_expr + // | 66 = @assign_mul_expr + // | 67 = @assign_div_expr + // | 68 = @assign_rem_expr + // | 69 = @assign_and_expr + // | 70 = @assign_xor_expr + // | 71 = @assign_or_expr + // | 72 = @assign_lshift_expr + // | 73 = @assign_rshift_expr + // | 119 = @assign_coalesce_expr + // | 134 = @assign_urshift_expr + kind = [64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 119, 134] +} + +class CompoundAssignmentExpr extends Expr { + CompoundAssignmentExpr() { + exists(int kind | compoundAssignmentKind(kind) | expressions(this, kind, _)) + } +} + +predicate isAssignment(Expr ass) { + exists(int kind | assignmentKind(kind) | + expressions(ass, kind, _) and + // Exclude assignments that are part of a compound assignment. These are handled seperatly. + not exists(CompoundAssignmentExpr e | expr_parent(ass, 2, e)) + ) +} + +Expr getOperatorCall(CompoundAssignmentExpr e) { + exists(Expr assignment | + expr_parent(assignment, 2, e) and + expr_parent(result, 0, assignment) + ) +} + +query predicate new_expressions(Expr e, int kind, TypeOrRef t) { + expressions(e, kind, t) and + // Remove the unused expanded assignment expressions. + not exists(CompoundAssignmentExpr parent, Expr assignment | expr_parent(assignment, 2, parent) | + e = assignment or + expr_parent(e, 0, assignment) or + expr_parent(e, 1, assignment) + ) +} + +query predicate new_expr_parent(Expr e, int child, ControlFlowElement parent) { + if isAssignment(parent) + then + // Swap children for assignments, local variable declarations and add/remove event. + child = 0 and expr_parent(e, 1, parent) + or + child = 1 and expr_parent(e, 0, parent) + else ( + // Case for compound assignments. The parent child relation is contracted. + exists(Expr op | op = getOperatorCall(parent) | expr_parent(e, child, op)) + or + // For other expressions (as long as they are included in the new expressions + // table), the parent child relation is unchanged. + expr_parent(e, child, parent) and + new_expressions(e, _, _) and + (not parent instanceof Expr or new_expressions(parent, _, _)) + ) +} + +query predicate new_expr_location(Expr e, Location loc) { + expr_location(e, loc) and new_expressions(e, _, _) +} + +query predicate new_expr_call(Expr e, Callable c) { + exists(Expr op | op = getOperatorCall(e) | expr_call(op, c)) + or + expr_call(e, c) and not e = getOperatorCall(_) +} + +query predicate new_dynamic_member_name(Expr e, string name) { + exists(Expr op | op = getOperatorCall(e) | dynamic_member_name(op, name)) + or + dynamic_member_name(e, name) and not e = getOperatorCall(_) +} + +query predicate new_expr_access(Expr e, Accessible a) { + expr_access(e, a) and new_expressions(e, _, _) +} diff --git a/csharp/ql/lib/upgrades/e73ca2c93df8aae162f1704edc4817a5cb330529/old.dbscheme b/csharp/ql/lib/upgrades/e73ca2c93df8aae162f1704edc4817a5cb330529/old.dbscheme new file mode 100644 index 00000000000..e73ca2c93df --- /dev/null +++ b/csharp/ql/lib/upgrades/e73ca2c93df8aae162f1704edc4817a5cb330529/old.dbscheme @@ -0,0 +1,1489 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | f1.cs + * 3 | f2.cs + * 4 | f3.cs + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile.rsp` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +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 ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +// Populated by the CSV extractor +externalData( + int id: @externalDataElement, + string path: string ref, + int column: int ref, + string value: string ref); + +sourceLocationPrefix( + string prefix: string ref); + +/* + * Overlay support + */ + +/** + * The CLI will automatically emit the tuple `databaseMetadata("isOverlay", "true")`, + * along with an `overlayChangedFiles` tuple for each new/modified/deleted file, + * when building an overlay database, and these can be used by the discard predicates. + */ +databaseMetadata( + string metadataKey : string ref, + string value : string ref +); + +overlayChangedFiles( + string path : string ref +); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints | @externalDataElement + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +@locatable = @declaration_with_accessors | @callable_accessor | @declaration_or_directive + | @diagnostic | @extractor_message | @preprocessor_directive | @attribute | @type_mention | @type_parameter_constraints + | @declaration_with_accessors | @callable_accessor | @operator | @method + | @constructor | @destructor | @field | @local_variable | @parameter | @stmt | @expr + | @xmllocatable | @commentline | @commentblock | @asp_element + +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); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type +| 34 = @inline_array_type +| 35 = @extension_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type | @void_type | @inline_array_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type | @extension_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extension_receiver_type( + unique int extension: @extension_type ref, + int receiver_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event | @operator; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type | @extension_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, params/array = 3, this = 4, in = 5, ref readonly = 6 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +@has_scoped_annotation = @local_scope_variable + +scoped_annotation( + int id: @has_scoped_annotation ref, + int kind: int ref // scoped ref = 1, scoped value = 2 + ); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @utf16_string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* C# 11.0 */ +| 131 = @list_pattern_expr +| 132 = @slice_pattern_expr +| 133 = @urshift_expr +| 134 = @assign_urshift_expr +| 135 = @utf8_string_literal_expr +/* C# 12.0 */ +| 136 = @collection_expr +| 137 = @spread_element_expr +| 138 = @interpolated_string_insert_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@string_literal_expr = @utf16_string_literal_expr | @utf8_string_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr | @urshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @assign_expr | @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/* Compiler generated */ + +compiler_generated(unique int id: @element ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); diff --git a/csharp/ql/lib/upgrades/e73ca2c93df8aae162f1704edc4817a5cb330529/semmlecode.csharp.dbscheme b/csharp/ql/lib/upgrades/e73ca2c93df8aae162f1704edc4817a5cb330529/semmlecode.csharp.dbscheme new file mode 100644 index 00000000000..19b8cc3e2dc --- /dev/null +++ b/csharp/ql/lib/upgrades/e73ca2c93df8aae162f1704edc4817a5cb330529/semmlecode.csharp.dbscheme @@ -0,0 +1,1504 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | f1.cs + * 3 | f2.cs + * 4 | f3.cs + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile.rsp` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +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 ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +// Populated by the CSV extractor +externalData( + int id: @externalDataElement, + string path: string ref, + int column: int ref, + string value: string ref); + +sourceLocationPrefix( + string prefix: string ref); + +/* + * Overlay support + */ + +/** + * The CLI will automatically emit the tuple `databaseMetadata("isOverlay", "true")`, + * along with an `overlayChangedFiles` tuple for each new/modified/deleted file, + * when building an overlay database, and these can be used by the discard predicates. + */ +databaseMetadata( + string metadataKey : string ref, + string value : string ref +); + +overlayChangedFiles( + string path : string ref +); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints | @externalDataElement + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +@locatable = @declaration_with_accessors | @callable_accessor | @declaration_or_directive + | @diagnostic | @extractor_message | @preprocessor_directive | @attribute | @type_mention | @type_parameter_constraints + | @declaration_with_accessors | @callable_accessor | @operator | @method + | @constructor | @destructor | @field | @local_variable | @parameter | @stmt | @expr + | @xmllocatable | @commentline | @commentblock | @asp_element + +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); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type +| 34 = @inline_array_type +| 35 = @extension_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type | @void_type | @inline_array_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type | @extension_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extension_receiver_type( + unique int extension: @extension_type ref, + int receiver_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event | @operator; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type | @extension_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, params/array = 3, this = 4, in = 5, ref readonly = 6 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +@has_scoped_annotation = @local_scope_variable + +scoped_annotation( + int id: @has_scoped_annotation ref, + int kind: int ref // scoped ref = 1, scoped value = 2 + ); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @utf16_string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* C# 11.0 */ +| 131 = @list_pattern_expr +| 132 = @slice_pattern_expr +| 133 = @urshift_expr +| 134 = @assign_urshift_expr +| 135 = @utf8_string_literal_expr +/* C# 12.0 */ +| 136 = @collection_expr +| 137 = @spread_element_expr +| 138 = @interpolated_string_insert_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@string_literal_expr = @utf16_string_literal_expr | @utf8_string_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_call_expr = @assign_arith_expr | @assign_bitwise_expr +@assign_op_expr = @assign_op_call_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@add_operation = @add_expr | @assign_add_expr; +@sub_operation = @sub_expr | @assign_sub_expr; +@mul_operation = @mul_expr | @assign_mul_expr; +@div_operation = @div_expr | @assign_div_expr; +@rem_operation = @rem_expr | @assign_rem_expr; +@and_operation = @bit_and_expr | @assign_and_expr; +@xor_operation = @bit_xor_expr | @assign_xor_expr; +@or_operation = @bit_or_expr | @assign_or_expr; +@lshift_operation = @lshift_expr | @assign_lshift_expr; +@rshift_operation = @rshift_expr | @assign_rshift_expr; +@urshift_operation = @urshift_expr | @assign_urshift_expr; +@null_coalescing_operation = @null_coalescing_expr | @assign_coalesce_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr | @urshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @assign_expr | @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@op_invoke_expr = @operator_invocation_expr | @assign_op_call_expr +@call = @method_invocation_expr | @constructor_init_expr | @op_invoke_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @op_invoke_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/* Compiler generated */ + +compiler_generated(unique int id: @element ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); diff --git a/csharp/ql/lib/upgrades/e73ca2c93df8aae162f1704edc4817a5cb330529/upgrade.properties b/csharp/ql/lib/upgrades/e73ca2c93df8aae162f1704edc4817a5cb330529/upgrade.properties new file mode 100644 index 00000000000..542231966ed --- /dev/null +++ b/csharp/ql/lib/upgrades/e73ca2c93df8aae162f1704edc4817a5cb330529/upgrade.properties @@ -0,0 +1,8 @@ +description: Add operation kinds for operations, cleanup expanded assignments and rotate assignment child expressions. +compatibility: partial +expr_parent.rel: run assignments.ql new_expr_parent +expressions.rel: run assignments.ql new_expressions +expr_location.rel: run assignments.ql new_expr_location +expr_call.rel: run assignments.ql new_expr_call +dynamic_member_name.rel: run assignments.ql new_dynamic_member_name +expr_access.rel: run assignments.ql new_expr_access From 147ac37feca3ef18e7bab5ac8928e446a3ce9661 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Tue, 24 Mar 2026 15:30:20 +0100 Subject: [PATCH 160/185] C#: Add downgrade script. --- .../assignments.ql | 178 ++ .../old.dbscheme | 1504 +++++++++++++++++ .../semmlecode.csharp.dbscheme | 1489 ++++++++++++++++ .../upgrade.properties | 8 + 4 files changed, 3179 insertions(+) create mode 100644 csharp/downgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/assignments.ql create mode 100644 csharp/downgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/old.dbscheme create mode 100644 csharp/downgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/semmlecode.csharp.dbscheme create mode 100644 csharp/downgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/upgrade.properties diff --git a/csharp/downgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/assignments.ql b/csharp/downgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/assignments.ql new file mode 100644 index 00000000000..14e2cea2af6 --- /dev/null +++ b/csharp/downgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/assignments.ql @@ -0,0 +1,178 @@ +class Expr extends @expr { + string toString() { none() } +} + +class Location extends @location { + string toString() { none() } +} + +newtype TAddedElement = + TAssignment(Expr e) or + TLhs(Expr e) or + TRhs(Expr e) + +module Fresh = QlBuiltins::NewEntity; + +class TNewExpr = @expr or Fresh::EntityId; + +class NewExpr extends TNewExpr { + string toString() { none() } +} + +class TNewControlFlowElement = @control_flow_element or Fresh::EntityId; + +class NewControlFlowElement extends TNewControlFlowElement { + string toString() { none() } +} + +class TypeOrRef extends @type_or_ref { + string toString() { none() } +} + +class Callable extends @callable { + string toString() { none() } +} + +class Accessible extends @accessible { + string toString() { none() } +} + +predicate assignmentKind(int kind) { + // | 63 = @simple_assign_expr + // | 80 = @add_event_expr + // | 81 = @remove_event_expr + // | 83 = @local_var_decl_expr + kind = [63, 80, 81, 83] +} + +predicate compoundAssignmentKind(int kind) { + // | 64 = @assign_add_expr + // | 65 = @assign_sub_expr + // | 66 = @assign_mul_expr + // | 67 = @assign_div_expr + // | 68 = @assign_rem_expr + // | 69 = @assign_and_expr + // | 70 = @assign_xor_expr + // | 71 = @assign_or_expr + // | 72 = @assign_lshift_expr + // | 73 = @assign_rshift_expr + // | 119 = @assign_coalesce_expr + // | 134 = @assign_urshift_expr + kind = [64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 119, 134] +} + +int getOperatorKindFromAssignmentKind(int kind) { + kind = 64 and result = 44 // @assign_add_expr -> @add_expr + or + kind = 65 and result = 45 // @assign_sub_expr -> @sub_expr + or + kind = 66 and result = 41 // @assign_mul_expr -> @mul_expr + or + kind = 67 and result = 42 // @assign_div_expr -> @div_expr + or + kind = 68 and result = 43 // @assign_rem_expr -> @rem_expr + or + kind = 69 and result = 54 // @assign_and_expr -> @bit_and_expr + or + kind = 70 and result = 55 // @assign_xor_expr -> @bit_xor_expr + or + kind = 71 and result = 56 // @assign_or_expr -> @bit_or_expr + or + kind = 72 and result = 46 // @assign_lshift_expr -> @lshift_expr + or + kind = 73 and result = 47 // @assign_rshift_expr -> @rshift_expr + or + kind = 119 and result = 61 // @assign_coalesce_expr -> @coalesce_expr + or + kind = 134 and result = 133 // @assign_urshift_expr -> @urshift_expr +} + +predicate isAssignment(Expr ass) { + exists(int kind | assignmentKind(kind) | expressions(ass, kind, _)) +} + +class CompoundAssignmentExpr extends Expr { + CompoundAssignmentExpr() { + exists(int kind | compoundAssignmentKind(kind) | expressions(this, kind, _)) + } +} + +query predicate new_expressions(NewExpr e, int kind, TypeOrRef t) { + expressions(e, kind, t) + or + // Introduce expanded expression nodes. + exists(CompoundAssignmentExpr compound, int kind0, Expr e1, int kind1 | + expressions(compound, kind0, t) and + compoundAssignmentKind(kind0) and + expressions(e1, kind1, _) and + expr_parent(e1, 0, compound) + | + Fresh::map(TAssignment(compound)) = e and kind = 63 + or + Fresh::map(TLhs(compound)) = e and kind = kind1 + or + Fresh::map(TRhs(compound)) = e and kind = getOperatorKindFromAssignmentKind(kind0) + ) +} + +query predicate new_expr_parent(NewExpr e, int child, NewControlFlowElement parent) { + if isAssignment(parent) + then + // Swap children for assignments, local variable declarations and add/remove event. + child = 0 and expr_parent(e, 1, parent) + or + child = 1 and expr_parent(e, 0, parent) + else ( + exists(CompoundAssignmentExpr compound | + Fresh::map(TAssignment(compound)) = e and child = 2 and parent = compound + or + Fresh::map(TLhs(compound)) = e and child = 1 and parent = Fresh::map(TAssignment(compound)) + or + Fresh::map(TRhs(compound)) = e and child = 0 and parent = Fresh::map(TAssignment(compound)) + or + expr_parent(e, child, compound) and parent = Fresh::map(TRhs(compound)) + ) + or + // Copy the expr_parent relation except for compound assignment edges. + expr_parent(e, child, parent) and not parent instanceof CompoundAssignmentExpr + ) +} + +query predicate new_expr_location(NewExpr e, Location loc) { + expr_location(e, loc) + or + exists(CompoundAssignmentExpr compound | + Fresh::map(TAssignment(compound)) = e and expr_location(compound, loc) + or + Fresh::map(TLhs(compound)) = e and + exists(Expr child | expr_location(child, loc) and expr_parent(child, 0, compound)) + or + Fresh::map(TRhs(compound)) = e and expr_location(compound, loc) + ) +} + +query predicate new_expr_call(NewExpr e, Callable c) { + expr_call(e, c) and not e instanceof CompoundAssignmentExpr + or + exists(CompoundAssignmentExpr compound | + Fresh::map(TRhs(compound)) = e and expr_call(compound, c) + ) +} + +query predicate new_dynamic_member_name(NewExpr e, string name) { + dynamic_member_name(e, name) and not e instanceof CompoundAssignmentExpr + or + exists(CompoundAssignmentExpr compound | + Fresh::map(TRhs(compound)) = e and dynamic_member_name(compound, name) + ) +} + +query predicate new_expr_access(NewExpr e, Accessible a) { + expr_access(e, a) + or + exists(CompoundAssignmentExpr compound, Expr access | + expr_parent(access, 0, compound) and + expr_access(access, a) and + Fresh::map(TLhs(compound)) = e + ) +} diff --git a/csharp/downgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/old.dbscheme b/csharp/downgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/old.dbscheme new file mode 100644 index 00000000000..19b8cc3e2dc --- /dev/null +++ b/csharp/downgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/old.dbscheme @@ -0,0 +1,1504 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | f1.cs + * 3 | f2.cs + * 4 | f3.cs + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile.rsp` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +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 ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +// Populated by the CSV extractor +externalData( + int id: @externalDataElement, + string path: string ref, + int column: int ref, + string value: string ref); + +sourceLocationPrefix( + string prefix: string ref); + +/* + * Overlay support + */ + +/** + * The CLI will automatically emit the tuple `databaseMetadata("isOverlay", "true")`, + * along with an `overlayChangedFiles` tuple for each new/modified/deleted file, + * when building an overlay database, and these can be used by the discard predicates. + */ +databaseMetadata( + string metadataKey : string ref, + string value : string ref +); + +overlayChangedFiles( + string path : string ref +); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints | @externalDataElement + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +@locatable = @declaration_with_accessors | @callable_accessor | @declaration_or_directive + | @diagnostic | @extractor_message | @preprocessor_directive | @attribute | @type_mention | @type_parameter_constraints + | @declaration_with_accessors | @callable_accessor | @operator | @method + | @constructor | @destructor | @field | @local_variable | @parameter | @stmt | @expr + | @xmllocatable | @commentline | @commentblock | @asp_element + +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); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type +| 34 = @inline_array_type +| 35 = @extension_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type | @void_type | @inline_array_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type | @extension_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extension_receiver_type( + unique int extension: @extension_type ref, + int receiver_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event | @operator; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type | @extension_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, params/array = 3, this = 4, in = 5, ref readonly = 6 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +@has_scoped_annotation = @local_scope_variable + +scoped_annotation( + int id: @has_scoped_annotation ref, + int kind: int ref // scoped ref = 1, scoped value = 2 + ); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @utf16_string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* C# 11.0 */ +| 131 = @list_pattern_expr +| 132 = @slice_pattern_expr +| 133 = @urshift_expr +| 134 = @assign_urshift_expr +| 135 = @utf8_string_literal_expr +/* C# 12.0 */ +| 136 = @collection_expr +| 137 = @spread_element_expr +| 138 = @interpolated_string_insert_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@string_literal_expr = @utf16_string_literal_expr | @utf8_string_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_call_expr = @assign_arith_expr | @assign_bitwise_expr +@assign_op_expr = @assign_op_call_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@add_operation = @add_expr | @assign_add_expr; +@sub_operation = @sub_expr | @assign_sub_expr; +@mul_operation = @mul_expr | @assign_mul_expr; +@div_operation = @div_expr | @assign_div_expr; +@rem_operation = @rem_expr | @assign_rem_expr; +@and_operation = @bit_and_expr | @assign_and_expr; +@xor_operation = @bit_xor_expr | @assign_xor_expr; +@or_operation = @bit_or_expr | @assign_or_expr; +@lshift_operation = @lshift_expr | @assign_lshift_expr; +@rshift_operation = @rshift_expr | @assign_rshift_expr; +@urshift_operation = @urshift_expr | @assign_urshift_expr; +@null_coalescing_operation = @null_coalescing_expr | @assign_coalesce_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr | @urshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @assign_expr | @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@op_invoke_expr = @operator_invocation_expr | @assign_op_call_expr +@call = @method_invocation_expr | @constructor_init_expr | @op_invoke_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @op_invoke_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/* Compiler generated */ + +compiler_generated(unique int id: @element ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); diff --git a/csharp/downgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/semmlecode.csharp.dbscheme b/csharp/downgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/semmlecode.csharp.dbscheme new file mode 100644 index 00000000000..e73ca2c93df --- /dev/null +++ b/csharp/downgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/semmlecode.csharp.dbscheme @@ -0,0 +1,1489 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | f1.cs + * 3 | f2.cs + * 4 | f3.cs + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile.rsp` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +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 ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +// Populated by the CSV extractor +externalData( + int id: @externalDataElement, + string path: string ref, + int column: int ref, + string value: string ref); + +sourceLocationPrefix( + string prefix: string ref); + +/* + * Overlay support + */ + +/** + * The CLI will automatically emit the tuple `databaseMetadata("isOverlay", "true")`, + * along with an `overlayChangedFiles` tuple for each new/modified/deleted file, + * when building an overlay database, and these can be used by the discard predicates. + */ +databaseMetadata( + string metadataKey : string ref, + string value : string ref +); + +overlayChangedFiles( + string path : string ref +); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints | @externalDataElement + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +@locatable = @declaration_with_accessors | @callable_accessor | @declaration_or_directive + | @diagnostic | @extractor_message | @preprocessor_directive | @attribute | @type_mention | @type_parameter_constraints + | @declaration_with_accessors | @callable_accessor | @operator | @method + | @constructor | @destructor | @field | @local_variable | @parameter | @stmt | @expr + | @xmllocatable | @commentline | @commentblock | @asp_element + +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); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type +| 34 = @inline_array_type +| 35 = @extension_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type | @void_type | @inline_array_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type | @extension_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extension_receiver_type( + unique int extension: @extension_type ref, + int receiver_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event | @operator; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type | @extension_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, params/array = 3, this = 4, in = 5, ref readonly = 6 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +@has_scoped_annotation = @local_scope_variable + +scoped_annotation( + int id: @has_scoped_annotation ref, + int kind: int ref // scoped ref = 1, scoped value = 2 + ); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @utf16_string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* C# 11.0 */ +| 131 = @list_pattern_expr +| 132 = @slice_pattern_expr +| 133 = @urshift_expr +| 134 = @assign_urshift_expr +| 135 = @utf8_string_literal_expr +/* C# 12.0 */ +| 136 = @collection_expr +| 137 = @spread_element_expr +| 138 = @interpolated_string_insert_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@string_literal_expr = @utf16_string_literal_expr | @utf8_string_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr | @urshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @assign_expr | @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/* Compiler generated */ + +compiler_generated(unique int id: @element ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); diff --git a/csharp/downgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/upgrade.properties b/csharp/downgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/upgrade.properties new file mode 100644 index 00000000000..41d57dd067b --- /dev/null +++ b/csharp/downgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/upgrade.properties @@ -0,0 +1,8 @@ +description: Remove operation kinds for operations, introduce expanded assignments and rotate assignment child expressions. +compatibility: partial +expr_parent.rel: run assignments.ql new_expr_parent +expressions.rel: run assignments.ql new_expressions +expr_location.rel: run assignments.ql new_expr_location +expr_call.rel: run assignments.ql new_expr_call +dynamic_member_name.rel: run assignments.ql new_dynamic_member_name +expr_access.rel: run assignments.ql new_expr_access From 94ad234a28b13efe08295d24d33363488f5f6ded Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Mar 2026 03:07:47 +0000 Subject: [PATCH 161/185] Bump rules_shell from 0.6.1 to 0.7.1 Bumps [rules_shell](https://github.com/bazel-contrib/rules_shell) from 0.6.1 to 0.7.1. - [Release notes](https://github.com/bazel-contrib/rules_shell/releases) - [Commits](https://github.com/bazel-contrib/rules_shell/compare/v0.6.1...v0.7.1) --- updated-dependencies: - dependency-name: rules_shell dependency-version: 0.7.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- MODULE.bazel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MODULE.bazel b/MODULE.bazel index 1ae9b94996f..d1aad277ed4 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -21,7 +21,7 @@ bazel_dep(name = "rules_java", version = "9.6.1") bazel_dep(name = "rules_pkg", version = "1.2.0") bazel_dep(name = "rules_nodejs", version = "6.7.3") bazel_dep(name = "rules_python", version = "1.9.0") -bazel_dep(name = "rules_shell", version = "0.6.1") +bazel_dep(name = "rules_shell", version = "0.7.1") bazel_dep(name = "bazel_skylib", version = "1.9.0") bazel_dep(name = "abseil-cpp", version = "20260107.1", repo_name = "absl") bazel_dep(name = "nlohmann_json", version = "3.11.3", repo_name = "json") From a402ce59f4dd20c300a799ff1b29f2eddb6a8eb7 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 26 Mar 2026 09:44:14 +0100 Subject: [PATCH 162/185] C#: Fix bad join in cs/coalesce-of-identical-expressions. --- .../UselessNullCoalescingExpression.ql | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/csharp/ql/src/Language Abuse/UselessNullCoalescingExpression.ql b/csharp/ql/src/Language Abuse/UselessNullCoalescingExpression.ql index 78e1ea365a5..0b2201570fb 100644 --- a/csharp/ql/src/Language Abuse/UselessNullCoalescingExpression.ql +++ b/csharp/ql/src/Language Abuse/UselessNullCoalescingExpression.ql @@ -15,13 +15,21 @@ import csharp import semmle.code.csharp.commons.StructuralComparison +pragma[nomagic] +private predicate relevant(Expr left, Expr right) { + exists(NullCoalescingOperation nce | + left = nce.getLeftOperand() and + right = nce.getRightOperand() + ) +} + pragma[noinline] private predicate same(AssignableAccess x, AssignableAccess y) { - exists(NullCoalescingOperation nc | - x = nc.getLeftOperand() and - y = nc.getRightOperand().getAChildExpr*() - ) and - sameGvn(x, y) + exists(Expr e | + relevant(x, e) and + y = e.getAChildExpr*() and + sameGvn(x, y) + ) } private predicate uselessNullCoalescingOperation(NullCoalescingOperation nce) { From a5f27b8f19beb33c6c5bfb6b55f3307eef11927a Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 26 Mar 2026 11:52:42 +0100 Subject: [PATCH 163/185] C#: Add change-note. --- csharp/ql/lib/change-notes/2026-03-26-expanded-assignments.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 csharp/ql/lib/change-notes/2026-03-26-expanded-assignments.md diff --git a/csharp/ql/lib/change-notes/2026-03-26-expanded-assignments.md b/csharp/ql/lib/change-notes/2026-03-26-expanded-assignments.md new file mode 100644 index 00000000000..159ab1ee3c6 --- /dev/null +++ b/csharp/ql/lib/change-notes/2026-03-26-expanded-assignments.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The extractor no longer synthesizes expanded forms of compound assignments. This may have a small impact on the results of queries that explicitly or implicitly rely on the expanded form of compound assignments. From 4748c4a4f572c0fb9d7d8a826654db28c9976d4d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 26 Mar 2026 12:31:21 +0000 Subject: [PATCH 164/185] Initial plan From a6377145ac11808edcc1862b2a329f517a74293a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 26 Mar 2026 12:38:19 +0000 Subject: [PATCH 165/185] Convert C++ CSV models from QL files to .model.yml data extensions Migrate ZeroMQ models from ZMQ.qll and getc-family source models from Gets.qll into new .model.yml files in the ext/ directory. Agent-Logs-Url: https://github.com/github/codeql/sessions/da8f5e5b-35f7-47a4-afa0-750616e3df5b Co-authored-by: owen-mc <62447351+owen-mc@users.noreply.github.com> --- .../2026-03-26-convert-csv-models-to-yml.md | 4 ++ cpp/ql/lib/ext/ZMQ.model.yml | 22 +++++++++ cpp/ql/lib/ext/getc.model.yml | 19 ++++++++ cpp/ql/lib/semmle/code/cpp/models/Models.qll | 1 - .../code/cpp/models/implementations/Gets.qll | 17 ------- .../code/cpp/models/implementations/ZMQ.qll | 45 ------------------- 6 files changed, 45 insertions(+), 63 deletions(-) create mode 100644 cpp/ql/lib/change-notes/2026-03-26-convert-csv-models-to-yml.md create mode 100644 cpp/ql/lib/ext/ZMQ.model.yml create mode 100644 cpp/ql/lib/ext/getc.model.yml delete mode 100644 cpp/ql/lib/semmle/code/cpp/models/implementations/ZMQ.qll diff --git a/cpp/ql/lib/change-notes/2026-03-26-convert-csv-models-to-yml.md b/cpp/ql/lib/change-notes/2026-03-26-convert-csv-models-to-yml.md new file mode 100644 index 00000000000..9fd99403bc4 --- /dev/null +++ b/cpp/ql/lib/change-notes/2026-03-26-convert-csv-models-to-yml.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* ZeroMQ and `getc`-family models have been migrated from inline CSV specifications in QL files to `.model.yml` data extension files in the `ext/` directory. diff --git a/cpp/ql/lib/ext/ZMQ.model.yml b/cpp/ql/lib/ext/ZMQ.model.yml new file mode 100644 index 00000000000..62c3bb1a3bf --- /dev/null +++ b/cpp/ql/lib/ext/ZMQ.model.yml @@ -0,0 +1,22 @@ +# ZeroMQ networking library models +extensions: + - addsTo: + pack: codeql/cpp-all + extensible: sourceModel + data: # namespace, type, subtypes, name, signature, ext, output, kind, provenance + - ["", "", False, "zmq_recv", "", "", "Argument[*1]", "remote", "manual"] + - ["", "", False, "zmq_recvmsg", "", "", "Argument[*1]", "remote", "manual"] + - ["", "", False, "zmq_msg_recv", "", "", "Argument[*0]", "remote", "manual"] + - addsTo: + pack: codeql/cpp-all + extensible: sinkModel + data: # namespace, type, subtypes, name, signature, ext, input, kind, provenance + - ["", "", False, "zmq_send", "", "", "Argument[*1]", "remote-sink", "manual"] + - ["", "", False, "zmq_sendmsg", "", "", "Argument[*1]", "remote-sink", "manual"] + - ["", "", False, "zmq_msg_send", "", "", "Argument[*0]", "remote-sink", "manual"] + - addsTo: + pack: codeql/cpp-all + extensible: summaryModel + data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance + - ["", "", False, "zmq_msg_init_data", "", "", "Argument[*1]", "Argument[*0]", "taint", "manual"] + - ["", "", False, "zmq_msg_data", "", "", "Argument[*0]", "ReturnValue[*]", "taint", "manual"] diff --git a/cpp/ql/lib/ext/getc.model.yml b/cpp/ql/lib/ext/getc.model.yml new file mode 100644 index 00000000000..43958205e0b --- /dev/null +++ b/cpp/ql/lib/ext/getc.model.yml @@ -0,0 +1,19 @@ +# Models for getc and similar character-reading functions +extensions: + - addsTo: + pack: codeql/cpp-all + extensible: sourceModel + data: # namespace, type, subtypes, name, signature, ext, output, kind, provenance + - ["", "", False, "getc", "", "", "ReturnValue", "remote", "manual"] + - ["", "", False, "getwc", "", "", "ReturnValue", "remote", "manual"] + - ["", "", False, "_getc_nolock", "", "", "ReturnValue", "remote", "manual"] + - ["", "", False, "_getwc_nolock", "", "", "ReturnValue", "remote", "manual"] + - ["", "", False, "getch", "", "", "ReturnValue", "local", "manual"] + - ["", "", False, "_getch", "", "", "ReturnValue", "local", "manual"] + - ["", "", False, "_getwch", "", "", "ReturnValue", "local", "manual"] + - ["", "", False, "_getch_nolock", "", "", "ReturnValue", "local", "manual"] + - ["", "", False, "_getwch_nolock", "", "", "ReturnValue", "local", "manual"] + - ["", "", False, "getchar", "", "", "ReturnValue", "local", "manual"] + - ["", "", False, "getwchar", "", "", "ReturnValue", "local", "manual"] + - ["", "", False, "_getchar_nolock", "", "", "ReturnValue", "local", "manual"] + - ["", "", False, "_getwchar_nolock", "", "", "ReturnValue", "local", "manual"] diff --git a/cpp/ql/lib/semmle/code/cpp/models/Models.qll b/cpp/ql/lib/semmle/code/cpp/models/Models.qll index 09f0a0df966..3ac08ee7aff 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/Models.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/Models.qll @@ -48,7 +48,6 @@ private import implementations.SqLite3 private import implementations.PostgreSql private import implementations.System private import implementations.StructuredExceptionHandling -private import implementations.ZMQ private import implementations.Win32CommandExecution private import implementations.CA2AEX private import implementations.CComBSTR diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Gets.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Gets.qll index b5d12083035..66d7730a818 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Gets.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Gets.qll @@ -113,20 +113,3 @@ private class GetsFunction extends DataFlowFunction, ArrayFunction, AliasFunctio override predicate hasArrayOutput(int bufParam) { bufParam = 0 } } -/** - * A model for `getc` and similar functions that are flow sources. - */ -private class GetcSource extends SourceModelCsv { - override predicate row(string row) { - row = - [ - ";;false;getc;;;ReturnValue;remote", ";;false;getwc;;;ReturnValue;remote", - ";;false;_getc_nolock;;;ReturnValue;remote", ";;false;_getwc_nolock;;;ReturnValue;remote", - ";;false;getch;;;ReturnValue;local", ";;false;_getch;;;ReturnValue;local", - ";;false;_getwch;;;ReturnValue;local", ";;false;_getch_nolock;;;ReturnValue;local", - ";;false;_getwch_nolock;;;ReturnValue;local", ";;false;getchar;;;ReturnValue;local", - ";;false;getwchar;;;ReturnValue;local", ";;false;_getchar_nolock;;;ReturnValue;local", - ";;false;_getwchar_nolock;;;ReturnValue;local", - ] - } -} diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/ZMQ.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/ZMQ.qll deleted file mode 100644 index 22f04cb9c82..00000000000 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/ZMQ.qll +++ /dev/null @@ -1,45 +0,0 @@ -/** - * Provides implementation classes modeling the ZeroMQ networking library. - */ - -import semmle.code.cpp.models.interfaces.FlowSource - -/** - * Remote flow sources. - */ -private class ZmqSource extends SourceModelCsv { - override predicate row(string row) { - row = - [ - ";;false;zmq_recv;;;Argument[*1];remote", ";;false;zmq_recvmsg;;;Argument[*1];remote", - ";;false;zmq_msg_recv;;;Argument[*0];remote", - ] - } -} - -/** - * Remote flow sinks. - */ -private class ZmqSinks extends SinkModelCsv { - override predicate row(string row) { - row = - [ - ";;false;zmq_send;;;Argument[*1];remote-sink", - ";;false;zmq_sendmsg;;;Argument[*1];remote-sink", - ";;false;zmq_msg_send;;;Argument[*0];remote-sink", - ] - } -} - -/** - * Flow steps. - */ -private class ZmqSummaries extends SummaryModelCsv { - override predicate row(string row) { - row = - [ - ";;false;zmq_msg_init_data;;;Argument[*1];Argument[*0];taint", - ";;false;zmq_msg_data;;;Argument[*0];ReturnValue[*];taint", - ] - } -} From 41bb349a9b1a67ef37de8e20075fa5eb9046ad8b Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 26 Mar 2026 14:34:54 +0100 Subject: [PATCH 166/185] C#: Improve the downgrade script. --- .../assignments.ql | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/csharp/downgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/assignments.ql b/csharp/downgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/assignments.ql index 14e2cea2af6..199385e830e 100644 --- a/csharp/downgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/assignments.ql +++ b/csharp/downgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/assignments.ql @@ -7,9 +7,9 @@ class Location extends @location { } newtype TAddedElement = - TAssignment(Expr e) or - TLhs(Expr e) or - TRhs(Expr e) + TAssignment(CompoundAssignmentExpr e) or + TLhs(CompoundAssignmentExpr e) or + TRhs(CompoundAssignmentExpr e) module Fresh = QlBuiltins::NewEntity; @@ -103,7 +103,6 @@ query predicate new_expressions(NewExpr e, int kind, TypeOrRef t) { // Introduce expanded expression nodes. exists(CompoundAssignmentExpr compound, int kind0, Expr e1, int kind1 | expressions(compound, kind0, t) and - compoundAssignmentKind(kind0) and expressions(e1, kind1, _) and expr_parent(e1, 0, compound) | From 6769f08f93b44b1b33a6829a91bfa9d5dba97d22 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 26 Mar 2026 14:10:15 +0000 Subject: [PATCH 167/185] Remove blank line at end of file --- cpp/ql/lib/semmle/code/cpp/models/implementations/Gets.qll | 1 - 1 file changed, 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Gets.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Gets.qll index 66d7730a818..c0e2c0c4538 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Gets.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Gets.qll @@ -112,4 +112,3 @@ private class GetsFunction extends DataFlowFunction, ArrayFunction, AliasFunctio override predicate hasArrayOutput(int bufParam) { bufParam = 0 } } - From 64a52ba07fbd722b37b47737c110914bfb4e9a6b Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 26 Mar 2026 14:53:33 +0000 Subject: [PATCH 168/185] Update test that uses zmq models --- .../semmle/tests/ExposedSystemData.expected | 61 ++++++++++--------- .../semmle/tests/ExposedSystemData.qlref | 3 +- 2 files changed, 35 insertions(+), 29 deletions(-) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/ExposedSystemData.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/ExposedSystemData.expected index 4ae072c6ce4..3958656bb4b 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/ExposedSystemData.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/ExposedSystemData.expected @@ -1,3 +1,24 @@ +#select +| tests2.cpp:63:13:63:26 | *call to getenv | tests2.cpp:63:13:63:26 | *call to getenv | tests2.cpp:63:13:63:26 | *call to getenv | This operation exposes system data from $@. | tests2.cpp:63:13:63:26 | *call to getenv | *call to getenv | +| tests2.cpp:64:13:64:26 | *call to getenv | tests2.cpp:64:13:64:26 | *call to getenv | tests2.cpp:64:13:64:26 | *call to getenv | This operation exposes system data from $@. | tests2.cpp:64:13:64:26 | *call to getenv | *call to getenv | +| tests2.cpp:65:13:65:30 | *call to getenv | tests2.cpp:65:13:65:30 | *call to getenv | tests2.cpp:65:13:65:30 | *call to getenv | This operation exposes system data from $@. | tests2.cpp:65:13:65:30 | *call to getenv | *call to getenv | +| tests2.cpp:66:13:66:34 | *call to getenv | tests2.cpp:66:13:66:34 | *call to getenv | tests2.cpp:66:13:66:34 | *call to getenv | This operation exposes system data from $@. | tests2.cpp:66:13:66:34 | *call to getenv | *call to getenv | +| tests2.cpp:80:14:80:34 | *call to mysql_get_client_info | tests2.cpp:80:14:80:34 | *call to mysql_get_client_info | tests2.cpp:80:14:80:34 | *call to mysql_get_client_info | This operation exposes system data from $@. | tests2.cpp:80:14:80:34 | *call to mysql_get_client_info | *call to mysql_get_client_info | +| tests2.cpp:81:14:81:19 | *buffer | tests2.cpp:78:18:78:38 | *call to mysql_get_client_info | tests2.cpp:81:14:81:19 | *buffer | This operation exposes system data from $@. | tests2.cpp:78:18:78:38 | *call to mysql_get_client_info | *call to mysql_get_client_info | +| tests2.cpp:82:14:82:20 | *global1 | tests2.cpp:50:23:50:43 | *call to mysql_get_client_info | tests2.cpp:82:14:82:20 | *global1 | This operation exposes system data from $@. | tests2.cpp:50:23:50:43 | *call to mysql_get_client_info | *call to mysql_get_client_info | +| tests2.cpp:93:14:93:17 | *str1 | tests2.cpp:91:42:91:45 | *str1 | tests2.cpp:93:14:93:17 | *str1 | This operation exposes system data from $@. | tests2.cpp:91:42:91:45 | *str1 | *str1 | +| tests2.cpp:102:14:102:15 | *pw | tests2.cpp:101:8:101:15 | *call to getpwuid | tests2.cpp:102:14:102:15 | *pw | This operation exposes system data from $@. | tests2.cpp:101:8:101:15 | *call to getpwuid | *call to getpwuid | +| tests2.cpp:111:14:111:19 | *ptr | tests2.cpp:109:12:109:17 | *call to getenv | tests2.cpp:111:14:111:19 | *ptr | This operation exposes system data from $@. | tests2.cpp:109:12:109:17 | *call to getenv | *call to getenv | +| tests2.cpp:138:23:138:34 | *message_data | tests2.cpp:134:17:134:22 | *call to getenv | tests2.cpp:138:23:138:34 | *message_data | This operation exposes system data from $@. | tests2.cpp:134:17:134:22 | *call to getenv | *call to getenv | +| tests2.cpp:144:33:144:40 | *& ... | tests2.cpp:134:17:134:22 | *call to getenv | tests2.cpp:144:33:144:40 | *& ... | This operation exposes system data from $@. | tests2.cpp:134:17:134:22 | *call to getenv | *call to getenv | +| tests2.cpp:147:20:147:27 | *& ... | tests2.cpp:134:17:134:22 | *call to getenv | tests2.cpp:147:20:147:27 | *& ... | This operation exposes system data from $@. | tests2.cpp:134:17:134:22 | *call to getenv | *call to getenv | +| tests2.cpp:155:32:155:39 | *& ... | tests2.cpp:134:17:134:22 | *call to getenv | tests2.cpp:155:32:155:39 | *& ... | This operation exposes system data from $@. | tests2.cpp:134:17:134:22 | *call to getenv | *call to getenv | +| tests2.cpp:158:20:158:27 | *& ... | tests2.cpp:134:17:134:22 | *call to getenv | tests2.cpp:158:20:158:27 | *& ... | This operation exposes system data from $@. | tests2.cpp:134:17:134:22 | *call to getenv | *call to getenv | +| tests_sockets.cpp:39:19:39:22 | *path | tests_sockets.cpp:26:15:26:20 | *call to getenv | tests_sockets.cpp:39:19:39:22 | *path | This operation exposes system data from $@. | tests_sockets.cpp:26:15:26:20 | *call to getenv | *call to getenv | +| tests_sockets.cpp:43:20:43:23 | *path | tests_sockets.cpp:26:15:26:20 | *call to getenv | tests_sockets.cpp:43:20:43:23 | *path | This operation exposes system data from $@. | tests_sockets.cpp:26:15:26:20 | *call to getenv | *call to getenv | +| tests_sockets.cpp:76:19:76:22 | *path | tests_sockets.cpp:63:15:63:20 | *call to getenv | tests_sockets.cpp:76:19:76:22 | *path | This operation exposes system data from $@. | tests_sockets.cpp:63:15:63:20 | *call to getenv | *call to getenv | +| tests_sockets.cpp:80:20:80:23 | *path | tests_sockets.cpp:63:15:63:20 | *call to getenv | tests_sockets.cpp:80:20:80:23 | *path | This operation exposes system data from $@. | tests_sockets.cpp:63:15:63:20 | *call to getenv | *call to getenv | +| tests_sysconf.cpp:39:19:39:25 | *pathbuf | tests_sysconf.cpp:36:21:36:27 | confstr output argument | tests_sysconf.cpp:39:19:39:25 | *pathbuf | This operation exposes system data from $@. | tests_sysconf.cpp:36:21:36:27 | confstr output argument | confstr output argument | edges | tests2.cpp:50:13:50:19 | **global1 | tests2.cpp:82:14:82:20 | *global1 | provenance | | | tests2.cpp:50:23:50:43 | *call to mysql_get_client_info | tests2.cpp:50:13:50:19 | **global1 | provenance | | @@ -12,16 +33,16 @@ edges | tests2.cpp:111:14:111:15 | *c1 [*ptr] | tests2.cpp:111:14:111:19 | *ptr | provenance | | | tests2.cpp:111:14:111:15 | *c1 [*ptr] | tests2.cpp:111:17:111:19 | *ptr | provenance | | | tests2.cpp:111:17:111:19 | *ptr | tests2.cpp:111:14:111:19 | *ptr | provenance | | -| tests2.cpp:120:5:120:21 | [summary param] *1 in zmq_msg_init_data | tests2.cpp:120:5:120:21 | [summary param] *0 in zmq_msg_init_data [Return] | provenance | | -| tests2.cpp:134:2:134:30 | *... = ... | tests2.cpp:138:23:138:34 | *message_data | provenance | | +| tests2.cpp:120:5:120:21 | [summary param] *1 in zmq_msg_init_data | tests2.cpp:120:5:120:21 | [summary param] *0 in zmq_msg_init_data [Return] | provenance | MaD:4 | +| tests2.cpp:134:2:134:30 | *... = ... | tests2.cpp:138:23:138:34 | *message_data | provenance | Sink:MaD:2 | | tests2.cpp:134:2:134:30 | *... = ... | tests2.cpp:143:34:143:45 | *message_data | provenance | | | tests2.cpp:134:17:134:22 | *call to getenv | tests2.cpp:134:2:134:30 | *... = ... | provenance | | -| tests2.cpp:143:24:143:31 | zmq_msg_init_data output argument | tests2.cpp:144:33:144:40 | *& ... | provenance | | -| tests2.cpp:143:24:143:31 | zmq_msg_init_data output argument | tests2.cpp:147:20:147:27 | *& ... | provenance | | -| tests2.cpp:143:24:143:31 | zmq_msg_init_data output argument | tests2.cpp:155:32:155:39 | *& ... | provenance | | -| tests2.cpp:143:24:143:31 | zmq_msg_init_data output argument | tests2.cpp:158:20:158:27 | *& ... | provenance | | +| tests2.cpp:143:24:143:31 | zmq_msg_init_data output argument | tests2.cpp:144:33:144:40 | *& ... | provenance | Sink:MaD:3 | +| tests2.cpp:143:24:143:31 | zmq_msg_init_data output argument | tests2.cpp:147:20:147:27 | *& ... | provenance | Sink:MaD:1 | +| tests2.cpp:143:24:143:31 | zmq_msg_init_data output argument | tests2.cpp:155:32:155:39 | *& ... | provenance | Sink:MaD:3 | +| tests2.cpp:143:24:143:31 | zmq_msg_init_data output argument | tests2.cpp:158:20:158:27 | *& ... | provenance | Sink:MaD:1 | | tests2.cpp:143:34:143:45 | *message_data | tests2.cpp:120:5:120:21 | [summary param] *1 in zmq_msg_init_data | provenance | | -| tests2.cpp:143:34:143:45 | *message_data | tests2.cpp:143:24:143:31 | zmq_msg_init_data output argument | provenance | | +| tests2.cpp:143:34:143:45 | *message_data | tests2.cpp:143:24:143:31 | zmq_msg_init_data output argument | provenance | MaD:4 | | tests_sockets.cpp:26:15:26:20 | *call to getenv | tests_sockets.cpp:26:15:26:20 | *call to getenv | provenance | | | tests_sockets.cpp:26:15:26:20 | *call to getenv | tests_sockets.cpp:39:19:39:22 | *path | provenance | | | tests_sockets.cpp:26:15:26:20 | *call to getenv | tests_sockets.cpp:43:20:43:23 | *path | provenance | | @@ -29,6 +50,11 @@ edges | tests_sockets.cpp:63:15:63:20 | *call to getenv | tests_sockets.cpp:76:19:76:22 | *path | provenance | | | tests_sockets.cpp:63:15:63:20 | *call to getenv | tests_sockets.cpp:80:20:80:23 | *path | provenance | | | tests_sysconf.cpp:36:21:36:27 | confstr output argument | tests_sysconf.cpp:39:19:39:25 | *pathbuf | provenance | | +models +| 1 | Sink: ; ; false; zmq_msg_send; ; ; Argument[*0]; remote-sink; manual | +| 2 | Sink: ; ; false; zmq_send; ; ; Argument[*1]; remote-sink; manual | +| 3 | Sink: ; ; false; zmq_sendmsg; ; ; Argument[*1]; remote-sink; manual | +| 4 | Summary: ; ; false; zmq_msg_init_data; ; ; Argument[*1]; Argument[*0]; taint; manual | nodes | tests2.cpp:50:13:50:19 | **global1 | semmle.label | **global1 | | tests2.cpp:50:23:50:43 | *call to mysql_get_client_info | semmle.label | *call to mysql_get_client_info | @@ -75,24 +101,3 @@ nodes | tests_sysconf.cpp:39:19:39:25 | *pathbuf | semmle.label | *pathbuf | subpaths | tests2.cpp:143:34:143:45 | *message_data | tests2.cpp:120:5:120:21 | [summary param] *1 in zmq_msg_init_data | tests2.cpp:120:5:120:21 | [summary param] *0 in zmq_msg_init_data [Return] | tests2.cpp:143:24:143:31 | zmq_msg_init_data output argument | -#select -| tests2.cpp:63:13:63:26 | *call to getenv | tests2.cpp:63:13:63:26 | *call to getenv | tests2.cpp:63:13:63:26 | *call to getenv | This operation exposes system data from $@. | tests2.cpp:63:13:63:26 | *call to getenv | *call to getenv | -| tests2.cpp:64:13:64:26 | *call to getenv | tests2.cpp:64:13:64:26 | *call to getenv | tests2.cpp:64:13:64:26 | *call to getenv | This operation exposes system data from $@. | tests2.cpp:64:13:64:26 | *call to getenv | *call to getenv | -| tests2.cpp:65:13:65:30 | *call to getenv | tests2.cpp:65:13:65:30 | *call to getenv | tests2.cpp:65:13:65:30 | *call to getenv | This operation exposes system data from $@. | tests2.cpp:65:13:65:30 | *call to getenv | *call to getenv | -| tests2.cpp:66:13:66:34 | *call to getenv | tests2.cpp:66:13:66:34 | *call to getenv | tests2.cpp:66:13:66:34 | *call to getenv | This operation exposes system data from $@. | tests2.cpp:66:13:66:34 | *call to getenv | *call to getenv | -| tests2.cpp:80:14:80:34 | *call to mysql_get_client_info | tests2.cpp:80:14:80:34 | *call to mysql_get_client_info | tests2.cpp:80:14:80:34 | *call to mysql_get_client_info | This operation exposes system data from $@. | tests2.cpp:80:14:80:34 | *call to mysql_get_client_info | *call to mysql_get_client_info | -| tests2.cpp:81:14:81:19 | *buffer | tests2.cpp:78:18:78:38 | *call to mysql_get_client_info | tests2.cpp:81:14:81:19 | *buffer | This operation exposes system data from $@. | tests2.cpp:78:18:78:38 | *call to mysql_get_client_info | *call to mysql_get_client_info | -| tests2.cpp:82:14:82:20 | *global1 | tests2.cpp:50:23:50:43 | *call to mysql_get_client_info | tests2.cpp:82:14:82:20 | *global1 | This operation exposes system data from $@. | tests2.cpp:50:23:50:43 | *call to mysql_get_client_info | *call to mysql_get_client_info | -| tests2.cpp:93:14:93:17 | *str1 | tests2.cpp:91:42:91:45 | *str1 | tests2.cpp:93:14:93:17 | *str1 | This operation exposes system data from $@. | tests2.cpp:91:42:91:45 | *str1 | *str1 | -| tests2.cpp:102:14:102:15 | *pw | tests2.cpp:101:8:101:15 | *call to getpwuid | tests2.cpp:102:14:102:15 | *pw | This operation exposes system data from $@. | tests2.cpp:101:8:101:15 | *call to getpwuid | *call to getpwuid | -| tests2.cpp:111:14:111:19 | *ptr | tests2.cpp:109:12:109:17 | *call to getenv | tests2.cpp:111:14:111:19 | *ptr | This operation exposes system data from $@. | tests2.cpp:109:12:109:17 | *call to getenv | *call to getenv | -| tests2.cpp:138:23:138:34 | *message_data | tests2.cpp:134:17:134:22 | *call to getenv | tests2.cpp:138:23:138:34 | *message_data | This operation exposes system data from $@. | tests2.cpp:134:17:134:22 | *call to getenv | *call to getenv | -| tests2.cpp:144:33:144:40 | *& ... | tests2.cpp:134:17:134:22 | *call to getenv | tests2.cpp:144:33:144:40 | *& ... | This operation exposes system data from $@. | tests2.cpp:134:17:134:22 | *call to getenv | *call to getenv | -| tests2.cpp:147:20:147:27 | *& ... | tests2.cpp:134:17:134:22 | *call to getenv | tests2.cpp:147:20:147:27 | *& ... | This operation exposes system data from $@. | tests2.cpp:134:17:134:22 | *call to getenv | *call to getenv | -| tests2.cpp:155:32:155:39 | *& ... | tests2.cpp:134:17:134:22 | *call to getenv | tests2.cpp:155:32:155:39 | *& ... | This operation exposes system data from $@. | tests2.cpp:134:17:134:22 | *call to getenv | *call to getenv | -| tests2.cpp:158:20:158:27 | *& ... | tests2.cpp:134:17:134:22 | *call to getenv | tests2.cpp:158:20:158:27 | *& ... | This operation exposes system data from $@. | tests2.cpp:134:17:134:22 | *call to getenv | *call to getenv | -| tests_sockets.cpp:39:19:39:22 | *path | tests_sockets.cpp:26:15:26:20 | *call to getenv | tests_sockets.cpp:39:19:39:22 | *path | This operation exposes system data from $@. | tests_sockets.cpp:26:15:26:20 | *call to getenv | *call to getenv | -| tests_sockets.cpp:43:20:43:23 | *path | tests_sockets.cpp:26:15:26:20 | *call to getenv | tests_sockets.cpp:43:20:43:23 | *path | This operation exposes system data from $@. | tests_sockets.cpp:26:15:26:20 | *call to getenv | *call to getenv | -| tests_sockets.cpp:76:19:76:22 | *path | tests_sockets.cpp:63:15:63:20 | *call to getenv | tests_sockets.cpp:76:19:76:22 | *path | This operation exposes system data from $@. | tests_sockets.cpp:63:15:63:20 | *call to getenv | *call to getenv | -| tests_sockets.cpp:80:20:80:23 | *path | tests_sockets.cpp:63:15:63:20 | *call to getenv | tests_sockets.cpp:80:20:80:23 | *path | This operation exposes system data from $@. | tests_sockets.cpp:63:15:63:20 | *call to getenv | *call to getenv | -| tests_sysconf.cpp:39:19:39:25 | *pathbuf | tests_sysconf.cpp:36:21:36:27 | confstr output argument | tests_sysconf.cpp:39:19:39:25 | *pathbuf | This operation exposes system data from $@. | tests_sysconf.cpp:36:21:36:27 | confstr output argument | confstr output argument | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/ExposedSystemData.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/ExposedSystemData.qlref index 0c88835bf1f..20c49dc2376 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/ExposedSystemData.qlref +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/ExposedSystemData.qlref @@ -1 +1,2 @@ -Security/CWE/CWE-497/ExposedSystemData.ql \ No newline at end of file +query: Security/CWE/CWE-497/ExposedSystemData.ql +postprocess: utils/test/PrettyPrintModels.ql From d69bcca68751fb1b5cbc3a0d719f65824b945c5c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 26 Mar 2026 15:07:39 +0000 Subject: [PATCH 169/185] Remove CSV model infrastructure from ExternalFlow.qll Remove SourceModelCsv, SinkModelCsv, SummaryModelCsv classes, single-argument CSV predicates, CSV parsing in MadInput, and CSV-specific validation checks. Simplify MadInput to only contain the namespace separator. Convert test models to .ext.yml format. Agent-Logs-Url: https://github.com/github/codeql/sessions/89ff81fe-5585-446d-99e2-6fe6966495c5 Co-authored-by: owen-mc <62447351+owen-mc@users.noreply.github.com> --- .../2026-03-26-convert-csv-models-to-yml.md | 4 +- .../semmle/code/cpp/dataflow/ExternalFlow.qll | 158 +----------------- .../models-as-data/testModels.ext.yml | 84 ++++++++++ .../dataflow/models-as-data/testModels.qll | 104 ------------ 4 files changed, 94 insertions(+), 256 deletions(-) create mode 100644 cpp/ql/test/library-tests/dataflow/models-as-data/testModels.ext.yml diff --git a/cpp/ql/lib/change-notes/2026-03-26-convert-csv-models-to-yml.md b/cpp/ql/lib/change-notes/2026-03-26-convert-csv-models-to-yml.md index 9fd99403bc4..1fcb2d6ac6c 100644 --- a/cpp/ql/lib/change-notes/2026-03-26-convert-csv-models-to-yml.md +++ b/cpp/ql/lib/change-notes/2026-03-26-convert-csv-models-to-yml.md @@ -1,4 +1,4 @@ --- -category: minorAnalysis +category: breaking --- -* ZeroMQ and `getc`-family models have been migrated from inline CSV specifications in QL files to `.model.yml` data extension files in the `ext/` directory. +* ZeroMQ and `getc`-family models have been migrated from inline CSV specifications in QL files to `.model.yml` data extension files in the `ext/` directory. The `SourceModelCsv`, `SinkModelCsv`, and `SummaryModelCsv` classes and the associated CSV parsing infrastructure have been removed from `ExternalFlow.qll`. New models should be added as `.model.yml` files in the `ext/` directory. diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll index 7cf3b937ac5..c960f39ec77 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll @@ -1,9 +1,10 @@ /** * INTERNAL use only. This is an experimental API subject to change without notice. * - * Provides classes and predicates for dealing with flow models specified in CSV format. + * Provides classes and predicates for dealing with flow models specified + * in data extension files. * - * The CSV specification has the following columns: + * The specification has the following columns: * - Sources: * `namespace; type; subtypes; name; signature; ext; output; kind` * - Sinks: @@ -104,117 +105,9 @@ private import internal.FlowSummaryImpl::Private private import internal.FlowSummaryImpl::Private::External 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. - * - * Extend this class to add additional source definitions. - */ -class SourceModelCsv extends Unit { - /** Holds if `row` specifies a source definition. */ - abstract predicate row(string row); -} - -/** - * A unit class for adding additional sink model rows. - * - * Extend this class to add additional sink definitions. - */ -class SinkModelCsv extends Unit { - /** Holds if `row` specifies a sink definition. */ - abstract predicate row(string row); -} - -/** - * A unit class for adding additional summary model rows. - * - * Extend this class to add additional flow summary definitions. - */ -class SummaryModelCsv extends Unit { - /** Holds if `row` specifies a summary definition. */ - abstract predicate row(string row); -} - -/** Holds if `row` is a source model. */ -predicate sourceModel(string row) { any(SourceModelCsv s).row(row) } - -/** Holds if `row` is a sink model. */ -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) } - 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, 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, 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, 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 = "::" } } @@ -250,7 +143,7 @@ predicate summaryModel( ) } -/** Provides a query predicate to check the CSV data for validation errors. */ +/** Provides a query predicate to check the data for validation errors. */ module CsvValidation { private string getInvalidModelInput() { exists(string pred, AccessPath input, string part | @@ -294,40 +187,6 @@ module CsvValidation { private module KindVal = SharedModelVal::KindValidation; - private string getInvalidModelSubtype() { - exists(string pred, string row | - sourceModel(row) and pred = "source" - or - sinkModel(row) and pred = "sink" - or - summaryModel(row) and pred = "summary" - | - exists(string b | - b = row.splitAt(";", 2) and - not b = ["true", "false"] and - result = "Invalid boolean \"" + b + "\" in " + pred + " model." - ) - ) - } - - private string getInvalidModelColumnCount() { - exists(string pred, string row, int expect | - sourceModel(row) and expect = 8 and pred = "source" - or - sinkModel(row) and expect = 8 and pred = "sink" - or - summaryModel(row) and expect = 9 and pred = "summary" - | - exists(int cols | - cols = 1 + max(int n | exists(row.splitAt(";", n))) and - cols != expect and - result = - "Wrong number of columns in " + pred + " model row, expected " + expect + ", got " + cols + - "." - ) - ) - } - private string getInvalidModelSignature() { exists(string pred, string namespace, string type, string name, string signature, string ext | sourceModel(namespace, type, _, name, signature, ext, _, _, _, _) and pred = "source" @@ -366,13 +225,12 @@ module CsvValidation { ) } - /** Holds if some row in a CSV-based flow model appears to contain typos. */ + /** Holds if some row in a MaD flow model appears to contain typos. */ query predicate invalidModelRow(string msg) { msg = [ getInvalidModelSignature(), getInvalidModelInput(), getInvalidModelOutput(), - getInvalidModelSubtype(), getInvalidModelColumnCount(), KindVal::getInvalidModelKind(), - getIncorrectConstructorSummaryOutput() + KindVal::getInvalidModelKind(), getIncorrectConstructorSummaryOutput() ] } } @@ -1026,7 +884,7 @@ private module Cached { } /** - * Holds if `node` is specified as a source with the given kind in a CSV flow + * Holds if `node` is specified as a source with the given kind in a MaD flow * model. */ cached @@ -1037,7 +895,7 @@ private module Cached { } /** - * Holds if `node` is specified as a sink with the given kind in a CSV flow + * Holds if `node` is specified as a sink with the given kind in a MaD flow * model. */ cached diff --git a/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.ext.yml b/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.ext.yml new file mode 100644 index 00000000000..bc2709d647b --- /dev/null +++ b/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.ext.yml @@ -0,0 +1,84 @@ +extensions: + - addsTo: + pack: codeql/cpp-all + extensible: sourceModel + data: # namespace, type, subtypes, name, signature, ext, output, kind, provenance + - ["", "", False, "localMadSource", "", "", "ReturnValue", "local", "manual"] + - ["", "", False, "remoteMadSource", "", "", "ReturnValue", "remote", "manual"] + - ["", "", False, "localMadSourceVoid", "", "", "ReturnValue", "local", "manual"] + - ["", "", False, "localMadSourceHasBody", "", "", "ReturnValue", "local", "manual"] + - ["", "", False, "remoteMadSourceIndirect", "", "", "ReturnValue[*]", "remote", "manual"] + - ["", "", False, "remoteMadSourceDoubleIndirect", "", "", "ReturnValue[**]", "remote", "manual"] + - ["", "", False, "remoteMadSourceIndirectArg0", "", "", "Argument[*0]", "remote", "manual"] + - ["", "", False, "remoteMadSourceIndirectArg1", "", "", "Argument[*1]", "remote", "manual"] + - ["", "", False, "remoteMadSourceVar", "", "", "", "remote", "manual"] + - ["", "", False, "remoteMadSourceVarIndirect", "", "", "*", "remote", "manual"] + - ["", "", False, "remoteMadSourceParam0", "", "", "Parameter[0]", "remote", "manual"] + - ["MyNamespace", "", False, "namespaceLocalMadSource", "", "", "ReturnValue", "local", "manual"] + - ["MyNamespace", "", False, "namespaceLocalMadSourceVar", "", "", "", "local", "manual"] + - ["MyNamespace::MyNamespace2", "", False, "namespace2LocalMadSource", "", "", "ReturnValue", "local", "manual"] + - ["", "MyClass", True, "memberRemoteMadSource", "", "", "ReturnValue", "remote", "manual"] + - ["", "MyClass", True, "memberRemoteMadSourceIndirectArg0", "", "", "Argument[*0]", "remote", "manual"] + - ["", "MyClass", True, "memberRemoteMadSourceVar", "", "", "", "remote", "manual"] + - ["", "MyClass", True, "subtypeRemoteMadSource1", "", "", "ReturnValue", "remote", "manual"] + - ["", "MyClass", False, "subtypeNonSource", "", "", "ReturnValue", "remote", "manual"] + - ["", "MyClass", True, "qualifierSource", "", "", "Argument[-1]", "remote", "manual"] + - ["", "MyClass", True, "qualifierFieldSource", "", "", "Argument[-1].val", "remote", "manual"] + - ["", "MyDerivedClass", False, "subtypeRemoteMadSource2", "", "", "ReturnValue", "remote", "manual"] + - addsTo: + pack: codeql/cpp-all + extensible: sinkModel + data: # namespace, type, subtypes, name, signature, ext, input, kind, provenance + - ["", "", False, "madSinkArg0", "", "", "Argument[0]", "test-sink", "manual"] + - ["", "", False, "madSinkArg1", "", "", "Argument[1]", "test-sink", "manual"] + - ["", "", False, "madSinkArg01", "", "", "Argument[0..1]", "test-sink", "manual"] + - ["", "", False, "madSinkArg02", "", "", "Argument[0,2]", "test-sink", "manual"] + - ["", "", False, "madSinkIndirectArg0", "", "", "Argument[*0]", "test-sink", "manual"] + - ["", "", False, "madSinkDoubleIndirectArg0", "", "", "Argument[**0]", "test-sink", "manual"] + - ["", "", False, "madSinkVar", "", "", "", "test-sink", "manual"] + - ["", "", False, "madSinkVarIndirect", "", "", "*", "test-sink", "manual"] + - ["", "", False, "madSinkParam0", "", "", "Parameter[0]", "test-sink", "manual"] + - ["", "MyClass", True, "memberMadSinkArg0", "", "", "Argument[0]", "test-sink", "manual"] + - ["", "MyClass", True, "memberMadSinkVar", "", "", "", "test-sink", "manual"] + - ["", "MyClass", True, "qualifierSink", "", "", "Argument[-1]", "test-sink", "manual"] + - ["", "MyClass", True, "qualifierArg0Sink", "", "", "Argument[-1..0]", "test-sink", "manual"] + - ["", "MyClass", True, "qualifierFieldSink", "", "", "Argument[-1].val", "test-sink", "manual"] + - ["MyNamespace", "MyClass", True, "namespaceMemberMadSinkArg0", "", "", "Argument[0]", "test-sink", "manual"] + - ["MyNamespace", "MyClass", True, "namespaceStaticMemberMadSinkArg0", "", "", "Argument[0]", "test-sink", "manual"] + - ["MyNamespace", "MyClass", True, "namespaceMemberMadSinkVar", "", "", "", "test-sink", "manual"] + - ["MyNamespace", "MyClass", True, "namespaceStaticMemberMadSinkVar", "", "", "", "test-sink", "manual"] + - addsTo: + pack: codeql/cpp-all + extensible: summaryModel + data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance + - ["", "", False, "madArg0ToReturn", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["", "", False, "madArg0ToReturnIndirect", "", "", "Argument[0]", "ReturnValue[*]", "taint", "manual"] + - ["", "", False, "madArg0ToReturnValueFlow", "", "", "Argument[0]", "ReturnValue", "value", "manual"] + - ["", "", False, "madArg0IndirectToReturn", "", "", "Argument[*0]", "ReturnValue", "taint", "manual"] + - ["", "", False, "madArg0DoubleIndirectToReturn", "", "", "Argument[**0]", "ReturnValue", "taint", "manual"] + - ["", "", False, "madArg0NotIndirectToReturn", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["", "", False, "madArg0ToArg1Indirect", "", "", "Argument[0]", "Argument[*1]", "taint", "manual"] + - ["", "", False, "madArg0IndirectToArg1Indirect", "", "", "Argument[*0]", "Argument[*1]", "taint", "manual"] + - ["", "", False, "madArgsComplex", "", "", "Argument[*0..1,2]", "ReturnValue", "taint", "manual"] + - ["", "", False, "madAndImplementedComplex", "", "", "Argument[2]", "ReturnValue", "taint", "manual"] + - ["", "", False, "madArgsAny", "", "", "Argument", "ReturnValue", "taint", "manual"] + - ["", "", False, "madArg0FieldToReturn", "", "", "Argument[0].Field[value]", "ReturnValue", "taint", "manual"] + - ["", "", False, "madArg0IndirectFieldToReturn", "", "", "Argument[*0].Field[value]", "ReturnValue", "taint", "manual"] + - ["", "", False, "madArg0FieldIndirectToReturn", "", "", "Argument[0].Field[*ptr]", "ReturnValue", "taint", "manual"] + - ["", "", False, "madArg0ToReturnField", "", "", "Argument[0]", "ReturnValue.Field[value]", "taint", "manual"] + - ["", "", False, "madArg0ToReturnIndirectField", "", "", "Argument[0]", "ReturnValue[*].Field[value]", "taint", "manual"] + - ["", "", False, "madArg0ToReturnFieldIndirect", "", "", "Argument[0]", "ReturnValue.Field[*ptr]", "taint", "manual"] + - ["", "", False, "madFieldToFieldVar", "", "", "Field[value]", "Field[value2]", "taint", "manual"] + - ["", "", False, "madFieldToIndirectFieldVar", "", "", "Field[value]", "Field[*ptr]", "taint", "manual"] + - ["", "", False, "madIndirectFieldToFieldVar", "", "", "", "Field[value]", "Field[value2]", "manual"] + - ["", "MyClass", True, "madArg0ToSelf", "", "", "Argument[0]", "Argument[-1]", "taint", "manual"] + - ["", "MyClass", True, "madSelfToReturn", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"] + - ["", "MyClass", True, "madArg0ToField", "", "", "Argument[0]", "Argument[-1].Field[val]", "taint", "manual"] + - ["", "MyClass", True, "madFieldToReturn", "", "", "Argument[-1].Field[val]", "ReturnValue", "taint", "manual"] + - ["MyNamespace", "MyClass", True, "namespaceMadSelfToReturn", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"] + - ["", "", False, "madCallArg0ReturnToReturn", "", "", "Argument[0].ReturnValue", "ReturnValue", "value", "manual"] + - ["", "", False, "madCallArg0ReturnToReturnFirst", "", "", "Argument[0].ReturnValue", "ReturnValue.Field[first]", "value", "manual"] + - ["", "", False, "madCallArg0WithValue", "", "", "Argument[1]", "Argument[0].Parameter[0]", "value", "manual"] + - ["", "", False, "madCallReturnValueIgnoreFunction", "", "", "Argument[1]", "ReturnValue", "value", "manual"] + - ["", "StructWithTypedefInParameter", True, "parameter_ref_to_return_ref", "(const T &)", "", "Argument[*0]", "ReturnValue[*]", "value", "manual"] + - ["", "", False, "receive_array", "(int[20])", "", "Argument[*0]", "ReturnValue", "taint", "manual"] diff --git a/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.qll b/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.qll index e8d1393fc4a..ee5197e1ff2 100644 --- a/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.qll +++ b/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.qll @@ -1,105 +1 @@ import semmle.code.cpp.security.FlowSources - -/** - * Models-as-data source models for this test. - */ -private class TestSources extends SourceModelCsv { - override predicate row(string row) { - row = - [ - ";;false;localMadSource;;;ReturnValue;local", - ";;false;remoteMadSource;;;ReturnValue;remote", - ";;false;localMadSourceVoid;;;ReturnValue;local", - ";;false;localMadSourceHasBody;;;ReturnValue;local", - ";;false;remoteMadSourceIndirect;;;ReturnValue[*];remote", - ";;false;remoteMadSourceDoubleIndirect;;;ReturnValue[**];remote", - ";;false;remoteMadSourceIndirectArg0;;;Argument[*0];remote", - ";;false;remoteMadSourceIndirectArg1;;;Argument[*1];remote", - ";;false;remoteMadSourceVar;;;;remote", - ";;false;remoteMadSourceVarIndirect;;;*;remote", // not correctly expressed - ";;false;remoteMadSourceParam0;;;Parameter[0];remote", - "MyNamespace;;false;namespaceLocalMadSource;;;ReturnValue;local", - "MyNamespace;;false;namespaceLocalMadSourceVar;;;;local", - "MyNamespace::MyNamespace2;;false;namespace2LocalMadSource;;;ReturnValue;local", - ";MyClass;true;memberRemoteMadSource;;;ReturnValue;remote", - ";MyClass;true;memberRemoteMadSourceIndirectArg0;;;Argument[*0];remote", - ";MyClass;true;memberRemoteMadSourceVar;;;;remote", - ";MyClass;true;subtypeRemoteMadSource1;;;ReturnValue;remote", - ";MyClass;false;subtypeNonSource;;;ReturnValue;remote", // the tests define this in MyDerivedClass, so it should *not* be recongized as a source - ";MyClass;true;qualifierSource;;;Argument[-1];remote", - ";MyClass;true;qualifierFieldSource;;;Argument[-1].val;remote", - ";MyDerivedClass;false;subtypeRemoteMadSource2;;;ReturnValue;remote", - ] - } -} - -/** - * Models-as-data sink models for this test. - */ -private class TestSinks extends SinkModelCsv { - override predicate row(string row) { - row = - [ - ";;false;madSinkArg0;;;Argument[0];test-sink", - ";;false;madSinkArg1;;;Argument[1];test-sink", - ";;false;madSinkArg01;;;Argument[0..1];test-sink", - ";;false;madSinkArg02;;;Argument[0,2];test-sink", - ";;false;madSinkIndirectArg0;;;Argument[*0];test-sink", - ";;false;madSinkDoubleIndirectArg0;;;Argument[**0];test-sink", - ";;false;madSinkVar;;;;test-sink", - ";;false;madSinkVarIndirect;;;*;test-sink", // not correctly expressed - ";;false;madSinkParam0;;;Parameter[0];test-sink", - ";MyClass;true;memberMadSinkArg0;;;Argument[0];test-sink", - ";MyClass;true;memberMadSinkVar;;;;test-sink", - ";MyClass;true;qualifierSink;;;Argument[-1];test-sink", - ";MyClass;true;qualifierArg0Sink;;;Argument[-1..0];test-sink", - ";MyClass;true;qualifierFieldSink;;;Argument[-1].val;test-sink", - "MyNamespace;MyClass;true;namespaceMemberMadSinkArg0;;;Argument[0];test-sink", - "MyNamespace;MyClass;true;namespaceStaticMemberMadSinkArg0;;;Argument[0];test-sink", - "MyNamespace;MyClass;true;namespaceMemberMadSinkVar;;;;test-sink", - "MyNamespace;MyClass;true;namespaceStaticMemberMadSinkVar;;;;test-sink", - ] - } -} - -/** - * Models-as-data summary models for this test. - */ -private class TestSummaries extends SummaryModelCsv { - override predicate row(string row) { - row = - [ - ";;false;madArg0ToReturn;;;Argument[0];ReturnValue;taint", - ";;false;madArg0ToReturnIndirect;;;Argument[0];ReturnValue[*];taint", - ";;false;madArg0ToReturnValueFlow;;;Argument[0];ReturnValue;value", - ";;false;madArg0IndirectToReturn;;;Argument[*0];ReturnValue;taint", - ";;false;madArg0DoubleIndirectToReturn;;;Argument[**0];ReturnValue;taint", - ";;false;madArg0NotIndirectToReturn;;;Argument[0];ReturnValue;taint", - ";;false;madArg0ToArg1Indirect;;;Argument[0];Argument[*1];taint", - ";;false;madArg0IndirectToArg1Indirect;;;Argument[*0];Argument[*1];taint", - ";;false;madArgsComplex;;;Argument[*0..1,2];ReturnValue;taint", - ";;false;madAndImplementedComplex;;;Argument[2];ReturnValue;taint", - ";;false;madArgsAny;;;Argument;ReturnValue;taint", // (syntax not supported) - ";;false;madArg0FieldToReturn;;;Argument[0].Field[value];ReturnValue;taint", - ";;false;madArg0IndirectFieldToReturn;;;Argument[*0].Field[value];ReturnValue;taint", - ";;false;madArg0FieldIndirectToReturn;;;Argument[0].Field[*ptr];ReturnValue;taint", - ";;false;madArg0ToReturnField;;;Argument[0];ReturnValue.Field[value];taint", - ";;false;madArg0ToReturnIndirectField;;;Argument[0];ReturnValue[*].Field[value];taint", - ";;false;madArg0ToReturnFieldIndirect;;;Argument[0];ReturnValue.Field[*ptr];taint", - ";;false;madFieldToFieldVar;;;Field[value];Field[value2];taint", - ";;false;madFieldToIndirectFieldVar;;;Field[value];Field[*ptr];taint", - ";;false;madIndirectFieldToFieldVar;;;;Field[value];Field[value2];taint", // not correctly expressed - ";MyClass;true;madArg0ToSelf;;;Argument[0];Argument[-1];taint", - ";MyClass;true;madSelfToReturn;;;Argument[-1];ReturnValue;taint", - ";MyClass;true;madArg0ToField;;;Argument[0];Argument[-1].Field[val];taint", - ";MyClass;true;madFieldToReturn;;;Argument[-1].Field[val];ReturnValue;taint", - "MyNamespace;MyClass;true;namespaceMadSelfToReturn;;;Argument[-1];ReturnValue;taint", - ";;false;madCallArg0ReturnToReturn;;;Argument[0].ReturnValue;ReturnValue;value", - ";;false;madCallArg0ReturnToReturnFirst;;;Argument[0].ReturnValue;ReturnValue.Field[first];value", - ";;false;madCallArg0WithValue;;;Argument[1];Argument[0].Parameter[0];value", - ";;false;madCallReturnValueIgnoreFunction;;;Argument[1];ReturnValue;value", - ";StructWithTypedefInParameter;true;parameter_ref_to_return_ref;(const T &);;Argument[*0];ReturnValue[*];value", - ";;false;receive_array;(int[20]);;Argument[*0];ReturnValue;taint" - ] - } -} From de4fe6d25cb6531733c736118f00533a1b2bfa0a Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 26 Mar 2026 15:27:05 +0000 Subject: [PATCH 170/185] Use inline expectations for query test --- .../semmle/tests/ExposedSystemData.qlref | 4 +- .../CWE/CWE-497/semmle/tests/tests2.cpp | 46 +++++++++---------- .../CWE-497/semmle/tests/tests_sockets.cpp | 20 ++++---- .../CWE-497/semmle/tests/tests_sysconf.cpp | 8 ++-- 4 files changed, 40 insertions(+), 38 deletions(-) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/ExposedSystemData.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/ExposedSystemData.qlref index 20c49dc2376..c6024387d34 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/ExposedSystemData.qlref +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/ExposedSystemData.qlref @@ -1,2 +1,4 @@ query: Security/CWE/CWE-497/ExposedSystemData.ql -postprocess: utils/test/PrettyPrintModels.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/tests2.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/tests2.cpp index c22d74b7a75..4167f6903af 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/tests2.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/tests2.cpp @@ -47,7 +47,7 @@ int val(); // --- test cases --- -const char *global1 = mysql_get_client_info(); +const char *global1 = mysql_get_client_info(); // $ Source const char *global2 = "abc"; void test7() @@ -55,15 +55,15 @@ void test7() int sock = socket(val(), val(), val()); // tests for a strict implementation of CWE-497 - std::cout << getenv("HOME"); // BAD: outputs HOME environment variable [NOT DETECTED] - std::cout << "PATH = " << getenv("PATH") << "."; // BAD: outputs PATH environment variable [NOT DETECTED] + std::cout << getenv("HOME"); // $ MISSING: Alert // outputs HOME environment variable + std::cout << "PATH = " << getenv("PATH") << "."; // $ MISSING: Alert // outputs PATH environment variable std::cout << "PATHPATHPATH"; // GOOD: not system data // tests for a more pragmatic implementation of CWE-497 - send(sock, getenv("HOME"), val(), val()); // BAD - send(sock, getenv("PATH"), val(), val()); // BAD - send(sock, getenv("USERNAME"), val(), val()); // BAD - send(sock, getenv("APP_PASSWORD"), val(), val()); // BAD + send(sock, getenv("HOME"), val(), val()); // $ Alert + send(sock, getenv("PATH"), val(), val()); // $ Alert + send(sock, getenv("USERNAME"), val(), val()); // $ Alert + send(sock, getenv("APP_PASSWORD"), val(), val()); // $ Alert send(sock, getenv("HARMLESS"), val(), val()); // GOOD: harmless information send(sock, "HOME", val(), val()); // GOOD: not system data send(sock, "PATH", val(), val()); // GOOD: not system data @@ -75,11 +75,11 @@ void test7() { char buffer[256]; - strcpy(buffer, mysql_get_client_info()); + strcpy(buffer, mysql_get_client_info()); // $ Source - send(sock, mysql_get_client_info(), val(), val()); // BAD - send(sock, buffer, val(), val()); // BAD - send(sock, global1, val(), val()); // BAD + send(sock, mysql_get_client_info(), val(), val()); // $ Alert + send(sock, buffer, val(), val()); // $ Alert + send(sock, global1, val(), val()); // $ Alert send(sock, global2, val(), val()); // GOOD: not system data } @@ -88,9 +88,9 @@ void test7() const char *str1 = "123456"; const char *str2 = "abcdef"; - mysql_real_connect(sock, val(), val(), str1, val(), val(), val(), val()); + mysql_real_connect(sock, val(), val(), str1, val(), val(), val(), val()); // $ Source - send(sock, str1, val(), val()); // BAD + send(sock, str1, val(), val()); // $ Alert send(sock, str2, val(), val()); // GOOD: not system data } @@ -98,17 +98,17 @@ void test7() { passwd *pw; - pw = getpwuid(val()); - send(sock, pw->pw_passwd, val(), val()); // BAD + pw = getpwuid(val()); // $ Source + send(sock, pw->pw_passwd, val(), val()); // $ Alert } // tests for containers { container c1, c2; - c1.ptr = getenv("MY_SECRET_TOKEN"); + c1.ptr = getenv("MY_SECRET_TOKEN"); // $ Source c2.ptr = ""; - send(sock, c1.ptr, val(), val()); // BAD + send(sock, c1.ptr, val(), val()); // $ Alert send(sock, c2.ptr, val(), val()); // GOOD: not system data } } @@ -131,20 +131,20 @@ void test_zmq(void *remoteSocket) size_t message_len; // prepare data - message_data = getenv("HOME"); + message_data = getenv("HOME"); // $ Source message_len = strlen(message_data) + 1; // send as data - if (zmq_send(socket, message_data, message_len, 0) >= 0) { // BAD: outputs HOME environment variable + if (zmq_send(socket, message_data, message_len, 0) >= 0) { // $ Alert: outputs HOME environment variable // ... } // send as message if (zmq_msg_init_data(&message, message_data, message_len, 0, 0)) { - if (zmq_sendmsg(remoteSocket, &message, message_len)) { // BAD: outputs HOME environment variable + if (zmq_sendmsg(remoteSocket, &message, message_len)) { // $ Alert: outputs HOME environment variable // ... } - if (zmq_msg_send(&message, remoteSocket, message_len)) { // BAD: outputs HOME environment variable + if (zmq_msg_send(&message, remoteSocket, message_len)) { // $ Alert: outputs HOME environment variable // ... } } @@ -152,10 +152,10 @@ void test_zmq(void *remoteSocket) // send as message (alternative path) if (zmq_msg_init_size(&message, message_len) == 0) { memcpy(zmq_msg_data(&message), message_data, message_len); - if (zmq_sendmsg(remoteSocket,&message, message_len)) { // BAD: outputs HOME environment variable + if (zmq_sendmsg(remoteSocket,&message, message_len)) { // $ Alert: outputs HOME environment variable // ... } - if (zmq_msg_send(&message, remoteSocket, message_len)) { // BAD: outputs HOME environment variable + if (zmq_msg_send(&message, remoteSocket, message_len)) { // $ Alert: outputs HOME environment variable // ... } } diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/tests_sockets.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/tests_sockets.cpp index e7e8d9fe89f..f5c47f1a9e6 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/tests_sockets.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/tests_sockets.cpp @@ -23,7 +23,7 @@ void test_sockets1() int sockfd; sockaddr addr_remote; char *msg = "Hello, world!"; - char *path = getenv("PATH"); + char *path = getenv("PATH"); // $ Source // create socket sockfd = socket(AF_INET, SOCK_STREAM, 0); @@ -36,11 +36,11 @@ void test_sockets1() // send something using 'send' if (send(sockfd, msg, strlen(msg) + 1, 0) < 0) return; // GOOD - if (send(sockfd, path, strlen(path) + 1, 0) < 0) return; // BAD - + if (send(sockfd, path, strlen(path) + 1, 0) < 0) return; // $ Alert + // send something using 'write' if (write(sockfd, msg, strlen(msg) + 1) < 0) return; // GOOD - if (write(sockfd, path, strlen(path) + 1) < 0) return; // BAD + if (write(sockfd, path, strlen(path) + 1) < 0) return; // $ Alert // clean up // ... @@ -49,9 +49,9 @@ void test_sockets1() int mksocket() { int fd; - + fd = socket(AF_INET, SOCK_STREAM, 0); - + return fd; } @@ -60,7 +60,7 @@ void test_sockets2() int sockfd; sockaddr addr_remote; char *msg = "Hello, world!"; - char *path = getenv("PATH"); + char *path = getenv("PATH"); // $ Source // create socket sockfd = mksocket(); @@ -73,11 +73,11 @@ void test_sockets2() // send something using 'send' if (send(sockfd, msg, strlen(msg) + 1, 0) < 0) return; // GOOD - if (send(sockfd, path, strlen(path) + 1, 0) < 0) return; // BAD - + if (send(sockfd, path, strlen(path) + 1, 0) < 0) return; // $ Alert + // send something using 'write' if (write(sockfd, msg, strlen(msg) + 1) < 0) return; // GOOD - if (write(sockfd, path, strlen(path) + 1) < 0) return; // BAD + if (write(sockfd, path, strlen(path) + 1) < 0) return; // $ Alert // clean up // ... diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/tests_sysconf.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/tests_sysconf.cpp index 0c0cbcc68d3..e0b4e7dc291 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/tests_sysconf.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/tests_sysconf.cpp @@ -21,7 +21,7 @@ void test_sc_1() int value = sysconf(_SC_CHILD_MAX); printf("_SC_CHILD_MAX = %i\n", _SC_CHILD_MAX); // GOOD - printf("_SC_CHILD_MAX = %i\n", value); // BAD [NOT DETECTED] + printf("_SC_CHILD_MAX = %i\n", value); // $ MISSING: Alert } void test_sc_2() @@ -33,9 +33,9 @@ void test_sc_2() pathbuf = (char *)malloc(n); if (pathbuf != NULL) { - confstr(_CS_PATH, pathbuf, n); + confstr(_CS_PATH, pathbuf, n); // $ Source - printf("path: %s", pathbuf); // BAD [NOT DETECTED] - write(get_fd(), pathbuf, strlen(pathbuf)); // BAD + printf("path: %s", pathbuf); // $ MISSING: Alert + write(get_fd(), pathbuf, strlen(pathbuf)); // $ Alert } } From 21ecf230ce7904894baa5bf4c95c8d79e648f489 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 26 Mar 2026 15:33:16 +0000 Subject: [PATCH 171/185] Small tweaks --- cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll | 4 ++-- .../library-tests/dataflow/external-models/validatemodels.ql | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll index c960f39ec77..8b71f140b01 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll @@ -4,7 +4,7 @@ * Provides classes and predicates for dealing with flow models specified * in data extension files. * - * The specification has the following columns: + * The extensible relations have the following columns: * - Sources: * `namespace; type; subtypes; name; signature; ext; output; kind` * - Sinks: @@ -144,7 +144,7 @@ predicate summaryModel( } /** Provides a query predicate to check the data for validation errors. */ -module CsvValidation { +module ModelValidation { private string getInvalidModelInput() { exists(string pred, AccessPath input, string part | sinkModel(_, _, _, _, _, _, input, _, _, _) and pred = "sink" diff --git a/cpp/ql/test/library-tests/dataflow/external-models/validatemodels.ql b/cpp/ql/test/library-tests/dataflow/external-models/validatemodels.ql index a162349b7cd..63e6520c56f 100644 --- a/cpp/ql/test/library-tests/dataflow/external-models/validatemodels.ql +++ b/cpp/ql/test/library-tests/dataflow/external-models/validatemodels.ql @@ -1,2 +1,2 @@ import cpp -import semmle.code.cpp.dataflow.ExternalFlow::CsvValidation +import semmle.code.cpp.dataflow.ExternalFlow::ModelValidation From 8a99ef45319b06db3da180d488eb9ec3c82f0b37 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 26 Mar 2026 16:39:27 +0000 Subject: [PATCH 172/185] Update csv model tests to use MaD --- .../models-as-data/FlowSummaryNode.ql | 20 -- .../models-as-data/SummaryCall.expected | 267 ---------------- .../dataflow/models-as-data/SummaryCall.ql | 9 - .../models-as-data/consistency.expected | 29 -- .../dataflow/models-as-data/consistency.ql | 2 - .../models-as-data/interpretElement.expected | 0 .../models-as-data/interpretElement.ql | 18 -- .../dataflow/models-as-data/taint.expected | 0 .../dataflow/models-as-data/taint.ql | 32 -- ...mmaryNode.expected => testModels.expected} | 298 ++++++++++++++++++ .../dataflow/models-as-data/testModels.ql | 74 +++++ .../dataflow/models-as-data/testModels.qll | 1 - 12 files changed, 372 insertions(+), 378 deletions(-) delete mode 100644 cpp/ql/test/library-tests/dataflow/models-as-data/FlowSummaryNode.ql delete mode 100644 cpp/ql/test/library-tests/dataflow/models-as-data/SummaryCall.expected delete mode 100644 cpp/ql/test/library-tests/dataflow/models-as-data/SummaryCall.ql delete mode 100644 cpp/ql/test/library-tests/dataflow/models-as-data/consistency.expected delete mode 100644 cpp/ql/test/library-tests/dataflow/models-as-data/consistency.ql delete mode 100644 cpp/ql/test/library-tests/dataflow/models-as-data/interpretElement.expected delete mode 100644 cpp/ql/test/library-tests/dataflow/models-as-data/interpretElement.ql delete mode 100644 cpp/ql/test/library-tests/dataflow/models-as-data/taint.expected delete mode 100644 cpp/ql/test/library-tests/dataflow/models-as-data/taint.ql rename cpp/ql/test/library-tests/dataflow/models-as-data/{FlowSummaryNode.expected => testModels.expected} (50%) create mode 100644 cpp/ql/test/library-tests/dataflow/models-as-data/testModels.ql delete mode 100644 cpp/ql/test/library-tests/dataflow/models-as-data/testModels.qll diff --git a/cpp/ql/test/library-tests/dataflow/models-as-data/FlowSummaryNode.ql b/cpp/ql/test/library-tests/dataflow/models-as-data/FlowSummaryNode.ql deleted file mode 100644 index 7b551515b46..00000000000 --- a/cpp/ql/test/library-tests/dataflow/models-as-data/FlowSummaryNode.ql +++ /dev/null @@ -1,20 +0,0 @@ -import testModels -private import semmle.code.cpp.ir.dataflow.internal.DataFlowPrivate -private import semmle.code.cpp.ir.dataflow.internal.DataFlowUtil -private import semmle.code.cpp.ir.dataflow.internal.DataFlowNodes - -string describe(DataFlow::Node n) { - n instanceof ParameterNode and result = "ParameterNode" - or - n instanceof PostUpdateNode and result = "PostUpdateNode" - or - n instanceof ArgumentNode and result = "ArgumentNode" - or - n instanceof ReturnNode and result = "ReturnNode" - or - n instanceof OutNode and result = "OutNode" -} - -from FlowSummaryNode n -select n, concat(describe(n), ", "), concat(n.getSummarizedCallable().toString(), ", "), - concat(n.getEnclosingCallable().toString(), ", ") diff --git a/cpp/ql/test/library-tests/dataflow/models-as-data/SummaryCall.expected b/cpp/ql/test/library-tests/dataflow/models-as-data/SummaryCall.expected deleted file mode 100644 index 54bd0ca489a..00000000000 --- a/cpp/ql/test/library-tests/dataflow/models-as-data/SummaryCall.expected +++ /dev/null @@ -1,267 +0,0 @@ -summaryCalls -| file://:0:0:0:0 | [summary] call to [summary param] 0 in madCallArg0ReturnToReturn in madCallArg0ReturnToReturn | -| file://:0:0:0:0 | [summary] call to [summary param] 0 in madCallArg0ReturnToReturnFirst in madCallArg0ReturnToReturnFirst | -| file://:0:0:0:0 | [summary] call to [summary param] 0 in madCallArg0WithValue in madCallArg0WithValue | -summarizedCallables -| tests.cpp:144:5:144:19 | madArg0ToReturn | -| tests.cpp:145:6:145:28 | madArg0ToReturnIndirect | -| tests.cpp:147:5:147:28 | madArg0ToReturnValueFlow | -| tests.cpp:148:5:148:27 | madArg0IndirectToReturn | -| tests.cpp:149:5:149:33 | madArg0DoubleIndirectToReturn | -| tests.cpp:150:5:150:30 | madArg0NotIndirectToReturn | -| tests.cpp:151:6:151:26 | madArg0ToArg1Indirect | -| tests.cpp:152:6:152:34 | madArg0IndirectToArg1Indirect | -| tests.cpp:153:5:153:18 | madArgsComplex | -| tests.cpp:154:5:154:14 | madArgsAny | -| tests.cpp:155:5:155:28 | madAndImplementedComplex | -| tests.cpp:160:5:160:24 | madArg0FieldToReturn | -| tests.cpp:161:5:161:32 | madArg0IndirectFieldToReturn | -| tests.cpp:162:5:162:32 | madArg0FieldIndirectToReturn | -| tests.cpp:163:13:163:32 | madArg0ToReturnField | -| tests.cpp:164:14:164:41 | madArg0ToReturnIndirectField | -| tests.cpp:165:13:165:40 | madArg0ToReturnFieldIndirect | -| tests.cpp:284:7:284:19 | madArg0ToSelf | -| tests.cpp:285:6:285:20 | madSelfToReturn | -| tests.cpp:287:7:287:20 | madArg0ToField | -| tests.cpp:288:6:288:21 | madFieldToReturn | -| tests.cpp:313:7:313:30 | namespaceMadSelfToReturn | -| tests.cpp:434:5:434:29 | madCallArg0ReturnToReturn | -| tests.cpp:435:9:435:38 | madCallArg0ReturnToReturnFirst | -| tests.cpp:436:6:436:25 | madCallArg0WithValue | -| tests.cpp:437:5:437:36 | madCallReturnValueIgnoreFunction | -| tests.cpp:459:5:459:31 | parameter_ref_to_return_ref | -| tests.cpp:471:5:471:17 | receive_array | -sourceCallables -| tests.cpp:3:5:3:10 | source | -| tests.cpp:4:6:4:14 | sourcePtr | -| tests.cpp:5:6:5:19 | sourceIndirect | -| tests.cpp:6:6:6:9 | sink | -| tests.cpp:6:15:6:17 | val | -| tests.cpp:7:6:7:9 | sink | -| tests.cpp:7:16:7:18 | ptr | -| tests.cpp:11:5:11:18 | localMadSource | -| tests.cpp:12:5:12:19 | remoteMadSource | -| tests.cpp:13:5:13:14 | notASource | -| tests.cpp:14:5:14:22 | localMadSourceVoid | -| tests.cpp:15:5:15:25 | localMadSourceHasBody | -| tests.cpp:16:6:16:28 | remoteMadSourceIndirect | -| tests.cpp:17:7:17:35 | remoteMadSourceDoubleIndirect | -| tests.cpp:18:6:18:32 | remoteMadSourceIndirectArg0 | -| tests.cpp:18:39:18:39 | x | -| tests.cpp:18:47:18:47 | y | -| tests.cpp:19:6:19:32 | remoteMadSourceIndirectArg1 | -| tests.cpp:19:39:19:39 | x | -| tests.cpp:19:47:19:47 | y | -| tests.cpp:20:5:20:22 | remoteMadSourceVar | -| tests.cpp:21:6:21:31 | remoteMadSourceVarIndirect | -| tests.cpp:24:6:24:28 | namespaceLocalMadSource | -| tests.cpp:25:6:25:31 | namespaceLocalMadSourceVar | -| tests.cpp:28:7:28:30 | namespace2LocalMadSource | -| tests.cpp:31:6:31:19 | localMadSource | -| tests.cpp:33:5:33:27 | namespaceLocalMadSource | -| tests.cpp:35:6:35:17 | test_sources | -| tests.cpp:50:6:50:6 | v | -| tests.cpp:51:7:51:16 | v_indirect | -| tests.cpp:52:6:52:13 | v_direct | -| tests.cpp:63:6:63:6 | a | -| tests.cpp:63:9:63:9 | b | -| tests.cpp:63:12:63:12 | c | -| tests.cpp:63:15:63:15 | d | -| tests.cpp:75:6:75:6 | e | -| tests.cpp:85:6:85:26 | remoteMadSourceParam0 | -| tests.cpp:85:32:85:32 | x | -| tests.cpp:92:6:92:16 | madSinkArg0 | -| tests.cpp:92:22:92:22 | x | -| tests.cpp:93:6:93:13 | notASink | -| tests.cpp:93:19:93:19 | x | -| tests.cpp:94:6:94:16 | madSinkArg1 | -| tests.cpp:94:22:94:22 | x | -| tests.cpp:94:29:94:29 | y | -| tests.cpp:95:6:95:17 | madSinkArg01 | -| tests.cpp:95:23:95:23 | x | -| tests.cpp:95:30:95:30 | y | -| tests.cpp:95:37:95:37 | z | -| tests.cpp:96:6:96:17 | madSinkArg02 | -| tests.cpp:96:23:96:23 | x | -| tests.cpp:96:30:96:30 | y | -| tests.cpp:96:37:96:37 | z | -| tests.cpp:97:6:97:24 | madSinkIndirectArg0 | -| tests.cpp:97:31:97:31 | x | -| tests.cpp:98:6:98:30 | madSinkDoubleIndirectArg0 | -| tests.cpp:98:38:98:38 | x | -| tests.cpp:99:5:99:14 | madSinkVar | -| tests.cpp:100:6:100:23 | madSinkVarIndirect | -| tests.cpp:102:6:102:15 | test_sinks | -| tests.cpp:116:6:116:6 | a | -| tests.cpp:117:7:117:11 | a_ptr | -| tests.cpp:132:6:132:18 | madSinkParam0 | -| tests.cpp:132:24:132:24 | x | -| tests.cpp:138:8:138:8 | operator= | -| tests.cpp:138:8:138:8 | operator= | -| tests.cpp:138:8:138:18 | MyContainer | -| tests.cpp:139:6:139:10 | value | -| tests.cpp:140:6:140:11 | value2 | -| tests.cpp:141:7:141:9 | ptr | -| tests.cpp:144:5:144:19 | madArg0ToReturn | -| tests.cpp:144:25:144:25 | x | -| tests.cpp:145:6:145:28 | madArg0ToReturnIndirect | -| tests.cpp:145:34:145:34 | x | -| tests.cpp:146:5:146:15 | notASummary | -| tests.cpp:146:21:146:21 | x | -| tests.cpp:147:5:147:28 | madArg0ToReturnValueFlow | -| tests.cpp:147:34:147:34 | x | -| tests.cpp:148:5:148:27 | madArg0IndirectToReturn | -| tests.cpp:148:34:148:34 | x | -| tests.cpp:149:5:149:33 | madArg0DoubleIndirectToReturn | -| tests.cpp:149:41:149:41 | x | -| tests.cpp:150:5:150:30 | madArg0NotIndirectToReturn | -| tests.cpp:150:37:150:37 | x | -| tests.cpp:151:6:151:26 | madArg0ToArg1Indirect | -| tests.cpp:151:32:151:32 | x | -| tests.cpp:151:40:151:40 | y | -| tests.cpp:152:6:152:34 | madArg0IndirectToArg1Indirect | -| tests.cpp:152:47:152:47 | x | -| tests.cpp:152:55:152:55 | y | -| tests.cpp:153:5:153:18 | madArgsComplex | -| tests.cpp:153:25:153:25 | a | -| tests.cpp:153:33:153:33 | b | -| tests.cpp:153:40:153:40 | c | -| tests.cpp:153:47:153:47 | d | -| tests.cpp:154:5:154:14 | madArgsAny | -| tests.cpp:154:20:154:20 | a | -| tests.cpp:154:28:154:28 | b | -| tests.cpp:155:5:155:28 | madAndImplementedComplex | -| tests.cpp:155:34:155:34 | a | -| tests.cpp:155:41:155:41 | b | -| tests.cpp:155:48:155:48 | c | -| tests.cpp:160:5:160:24 | madArg0FieldToReturn | -| tests.cpp:160:38:160:39 | mc | -| tests.cpp:161:5:161:32 | madArg0IndirectFieldToReturn | -| tests.cpp:161:47:161:48 | mc | -| tests.cpp:162:5:162:32 | madArg0FieldIndirectToReturn | -| tests.cpp:162:46:162:47 | mc | -| tests.cpp:163:13:163:32 | madArg0ToReturnField | -| tests.cpp:163:38:163:38 | x | -| tests.cpp:164:14:164:41 | madArg0ToReturnIndirectField | -| tests.cpp:164:47:164:47 | x | -| tests.cpp:165:13:165:40 | madArg0ToReturnFieldIndirect | -| tests.cpp:165:46:165:46 | x | -| tests.cpp:167:13:167:30 | madFieldToFieldVar | -| tests.cpp:168:13:168:38 | madFieldToIndirectFieldVar | -| tests.cpp:169:14:169:39 | madIndirectFieldToFieldVar | -| tests.cpp:171:6:171:19 | test_summaries | -| tests.cpp:174:6:174:6 | a | -| tests.cpp:174:9:174:9 | b | -| tests.cpp:174:12:174:12 | c | -| tests.cpp:174:15:174:15 | d | -| tests.cpp:174:18:174:18 | e | -| tests.cpp:175:7:175:11 | a_ptr | -| tests.cpp:218:14:218:16 | mc1 | -| tests.cpp:218:19:218:21 | mc2 | -| tests.cpp:237:15:237:18 | rtn1 | -| tests.cpp:240:14:240:17 | rtn2 | -| tests.cpp:241:7:241:14 | rtn2_ptr | -| tests.cpp:267:7:267:7 | operator= | -| tests.cpp:267:7:267:7 | operator= | -| tests.cpp:267:7:267:13 | MyClass | -| tests.cpp:270:6:270:26 | memberRemoteMadSource | -| tests.cpp:271:7:271:39 | memberRemoteMadSourceIndirectArg0 | -| tests.cpp:271:46:271:46 | x | -| tests.cpp:272:6:272:29 | memberRemoteMadSourceVar | -| tests.cpp:273:7:273:21 | qualifierSource | -| tests.cpp:274:7:274:26 | qualifierFieldSource | -| tests.cpp:277:7:277:23 | memberMadSinkArg0 | -| tests.cpp:277:29:277:29 | x | -| tests.cpp:278:6:278:21 | memberMadSinkVar | -| tests.cpp:279:7:279:19 | qualifierSink | -| tests.cpp:280:7:280:23 | qualifierArg0Sink | -| tests.cpp:280:29:280:29 | x | -| tests.cpp:281:7:281:24 | qualifierFieldSink | -| tests.cpp:284:7:284:19 | madArg0ToSelf | -| tests.cpp:284:25:284:25 | x | -| tests.cpp:285:6:285:20 | madSelfToReturn | -| tests.cpp:286:6:286:16 | notASummary | -| tests.cpp:287:7:287:20 | madArg0ToField | -| tests.cpp:287:26:287:26 | x | -| tests.cpp:288:6:288:21 | madFieldToReturn | -| tests.cpp:290:6:290:8 | val | -| tests.cpp:293:7:293:7 | MyDerivedClass | -| tests.cpp:293:7:293:7 | operator= | -| tests.cpp:293:7:293:7 | operator= | -| tests.cpp:293:7:293:20 | MyDerivedClass | -| tests.cpp:295:6:295:28 | subtypeRemoteMadSource1 | -| tests.cpp:296:6:296:21 | subtypeNonSource | -| tests.cpp:297:6:297:28 | subtypeRemoteMadSource2 | -| tests.cpp:300:9:300:15 | source2 | -| tests.cpp:301:6:301:9 | sink | -| tests.cpp:301:19:301:20 | mc | -| tests.cpp:304:8:304:8 | operator= | -| tests.cpp:304:8:304:8 | operator= | -| tests.cpp:304:8:304:14 | MyClass | -| tests.cpp:307:8:307:33 | namespaceMemberMadSinkArg0 | -| tests.cpp:307:39:307:39 | x | -| tests.cpp:308:15:308:46 | namespaceStaticMemberMadSinkArg0 | -| tests.cpp:308:52:308:52 | x | -| tests.cpp:309:7:309:31 | namespaceMemberMadSinkVar | -| tests.cpp:310:14:310:44 | namespaceStaticMemberMadSinkVar | -| tests.cpp:313:7:313:30 | namespaceMadSelfToReturn | -| tests.cpp:317:22:317:28 | source3 | -| tests.cpp:319:6:319:23 | test_class_members | -| tests.cpp:320:10:320:11 | mc | -| tests.cpp:320:14:320:16 | mc2 | -| tests.cpp:320:19:320:21 | mc3 | -| tests.cpp:320:24:320:26 | mc4 | -| tests.cpp:320:29:320:31 | mc5 | -| tests.cpp:320:34:320:36 | mc6 | -| tests.cpp:320:39:320:41 | mc7 | -| tests.cpp:320:44:320:46 | mc8 | -| tests.cpp:320:49:320:51 | mc9 | -| tests.cpp:320:54:320:57 | mc10 | -| tests.cpp:320:60:320:63 | mc11 | -| tests.cpp:321:11:321:13 | ptr | -| tests.cpp:321:17:321:23 | mc4_ptr | -| tests.cpp:322:17:322:19 | mdc | -| tests.cpp:323:23:323:25 | mnc | -| tests.cpp:323:28:323:31 | mnc2 | -| tests.cpp:324:24:324:31 | mnc2_ptr | -| tests.cpp:330:6:330:6 | a | -| tests.cpp:429:8:429:8 | operator= | -| tests.cpp:429:8:429:8 | operator= | -| tests.cpp:429:8:429:14 | intPair | -| tests.cpp:430:6:430:10 | first | -| tests.cpp:431:6:431:11 | second | -| tests.cpp:434:5:434:29 | madCallArg0ReturnToReturn | -| tests.cpp:434:37:434:43 | fun_ptr | -| tests.cpp:435:9:435:38 | madCallArg0ReturnToReturnFirst | -| tests.cpp:435:46:435:52 | fun_ptr | -| tests.cpp:436:6:436:25 | madCallArg0WithValue | -| tests.cpp:436:34:436:40 | fun_ptr | -| tests.cpp:436:53:436:57 | value | -| tests.cpp:437:5:437:36 | madCallReturnValueIgnoreFunction | -| tests.cpp:437:45:437:51 | fun_ptr | -| tests.cpp:437:64:437:68 | value | -| tests.cpp:439:5:439:14 | getTainted | -| tests.cpp:440:6:440:13 | useValue | -| tests.cpp:440:19:440:19 | x | -| tests.cpp:441:6:441:17 | dontUseValue | -| tests.cpp:441:23:441:23 | x | -| tests.cpp:443:6:443:27 | test_function_pointers | -| tests.cpp:456:19:456:19 | X | -| tests.cpp:457:8:457:35 | StructWithTypedefInParameter | -| tests.cpp:457:8:457:35 | StructWithTypedefInParameter | -| tests.cpp:458:12:458:15 | Type | -| tests.cpp:459:5:459:31 | parameter_ref_to_return_ref | -| tests.cpp:459:5:459:31 | parameter_ref_to_return_ref | -| tests.cpp:459:45:459:45 | x | -| tests.cpp:459:45:459:45 | x | -| tests.cpp:462:6:462:37 | test_parameter_ref_to_return_ref | -| tests.cpp:463:6:463:6 | x | -| tests.cpp:464:36:464:36 | s | -| tests.cpp:465:6:465:6 | y | -| tests.cpp:469:7:469:9 | INT | -| tests.cpp:471:5:471:17 | receive_array | -| tests.cpp:471:23:471:23 | a | -| tests.cpp:473:6:473:23 | test_receive_array | -| tests.cpp:474:6:474:6 | x | -| tests.cpp:475:6:475:10 | array | -| tests.cpp:476:6:476:6 | y | diff --git a/cpp/ql/test/library-tests/dataflow/models-as-data/SummaryCall.ql b/cpp/ql/test/library-tests/dataflow/models-as-data/SummaryCall.ql deleted file mode 100644 index 1b569040028..00000000000 --- a/cpp/ql/test/library-tests/dataflow/models-as-data/SummaryCall.ql +++ /dev/null @@ -1,9 +0,0 @@ -import testModels -private import semmle.code.cpp.ir.dataflow.internal.DataFlowPrivate -private import semmle.code.cpp.ir.dataflow.internal.DataFlowUtil - -query predicate summaryCalls(SummaryCall c) { any() } - -query predicate summarizedCallables(SummarizedCallable c) { any() } - -query predicate sourceCallables(SourceCallable c) { c.getLocation().getFile().toString() != "" } diff --git a/cpp/ql/test/library-tests/dataflow/models-as-data/consistency.expected b/cpp/ql/test/library-tests/dataflow/models-as-data/consistency.expected deleted file mode 100644 index c89f4455bc5..00000000000 --- a/cpp/ql/test/library-tests/dataflow/models-as-data/consistency.expected +++ /dev/null @@ -1,29 +0,0 @@ -uniqueEnclosingCallable -uniqueCallEnclosingCallable -uniqueType -uniqueNodeLocation -missingLocation -uniqueNodeToString -parameterCallable -localFlowIsLocal -readStepIsLocal -storeStepIsLocal -compatibleTypesReflexive -unreachableNodeCCtx -localCallNodes -postIsNotPre -postHasUniquePre -uniquePostUpdate -postIsInSameCallable -reverseRead -argHasPostUpdate -postWithInFlow -viableImplInCallContextTooLarge -uniqueParameterNodeAtPosition -uniqueParameterNodePosition -uniqueContentApprox -identityLocalStep -missingArgumentCall -multipleArgumentCall -lambdaCallEnclosingCallableMismatch -speculativeStepAlreadyHasModel diff --git a/cpp/ql/test/library-tests/dataflow/models-as-data/consistency.ql b/cpp/ql/test/library-tests/dataflow/models-as-data/consistency.ql deleted file mode 100644 index 1af8d69a356..00000000000 --- a/cpp/ql/test/library-tests/dataflow/models-as-data/consistency.ql +++ /dev/null @@ -1,2 +0,0 @@ -import testModels -import semmle.code.cpp.ir.dataflow.internal.DataFlowImplConsistency::Consistency diff --git a/cpp/ql/test/library-tests/dataflow/models-as-data/interpretElement.expected b/cpp/ql/test/library-tests/dataflow/models-as-data/interpretElement.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/cpp/ql/test/library-tests/dataflow/models-as-data/interpretElement.ql b/cpp/ql/test/library-tests/dataflow/models-as-data/interpretElement.ql deleted file mode 100644 index ccf0c3f886d..00000000000 --- a/cpp/ql/test/library-tests/dataflow/models-as-data/interpretElement.ql +++ /dev/null @@ -1,18 +0,0 @@ -import utils.test.InlineExpectationsTest -import testModels - -module InterpretElementTest implements TestSig { - string getARelevantTag() { result = "interpretElement" } - - predicate hasActualResult(Location location, string element, string tag, string value) { - exists(Element e | - e = interpretElement(_, _, _, _, _, _) and - location = e.getLocation() and - element = e.toString() and - tag = "interpretElement" and - value = "" - ) - } -} - -import MakeTest diff --git a/cpp/ql/test/library-tests/dataflow/models-as-data/taint.expected b/cpp/ql/test/library-tests/dataflow/models-as-data/taint.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/cpp/ql/test/library-tests/dataflow/models-as-data/taint.ql b/cpp/ql/test/library-tests/dataflow/models-as-data/taint.ql deleted file mode 100644 index 8c362d78e3e..00000000000 --- a/cpp/ql/test/library-tests/dataflow/models-as-data/taint.ql +++ /dev/null @@ -1,32 +0,0 @@ -import utils.test.dataflow.FlowTestCommon -import testModels - -module IRTest { - private import semmle.code.cpp.ir.IR - private import semmle.code.cpp.ir.dataflow.TaintTracking - - /** Common data flow configuration to be used by tests. */ - module TestAllocationConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { - source instanceof FlowSource - or - source.asExpr().(FunctionCall).getTarget().getName() = - ["source", "source2", "source3", "sourcePtr"] - or - source.asIndirectExpr(1).(FunctionCall).getTarget().getName() = "sourceIndirect" - } - - predicate isSink(DataFlow::Node sink) { - sinkNode(sink, "test-sink") - or - exists(FunctionCall call | - call.getTarget().getName() = "sink" and - sink.asExpr() = call.getAnArgument() - ) - } - } - - module IRFlow = TaintTracking::Global; -} - -import MakeTest> diff --git a/cpp/ql/test/library-tests/dataflow/models-as-data/FlowSummaryNode.expected b/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.expected similarity index 50% rename from cpp/ql/test/library-tests/dataflow/models-as-data/FlowSummaryNode.expected rename to cpp/ql/test/library-tests/dataflow/models-as-data/testModels.expected index 756e9a7e22a..0faf016ee41 100644 --- a/cpp/ql/test/library-tests/dataflow/models-as-data/FlowSummaryNode.expected +++ b/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.expected @@ -1,3 +1,301 @@ +uniqueEnclosingCallable +uniqueCallEnclosingCallable +uniqueType +uniqueNodeLocation +missingLocation +uniqueNodeToString +parameterCallable +localFlowIsLocal +readStepIsLocal +storeStepIsLocal +compatibleTypesReflexive +unreachableNodeCCtx +localCallNodes +postIsNotPre +postHasUniquePre +uniquePostUpdate +postIsInSameCallable +reverseRead +argHasPostUpdate +postWithInFlow +viableImplInCallContextTooLarge +uniqueParameterNodeAtPosition +uniqueParameterNodePosition +uniqueContentApprox +identityLocalStep +missingArgumentCall +multipleArgumentCall +lambdaCallEnclosingCallableMismatch +speculativeStepAlreadyHasModel +testFailures +summaryCalls +| file://:0:0:0:0 | [summary] call to [summary param] 0 in madCallArg0ReturnToReturn in madCallArg0ReturnToReturn | +| file://:0:0:0:0 | [summary] call to [summary param] 0 in madCallArg0ReturnToReturnFirst in madCallArg0ReturnToReturnFirst | +| file://:0:0:0:0 | [summary] call to [summary param] 0 in madCallArg0WithValue in madCallArg0WithValue | +summarizedCallables +| tests.cpp:144:5:144:19 | madArg0ToReturn | +| tests.cpp:145:6:145:28 | madArg0ToReturnIndirect | +| tests.cpp:147:5:147:28 | madArg0ToReturnValueFlow | +| tests.cpp:148:5:148:27 | madArg0IndirectToReturn | +| tests.cpp:149:5:149:33 | madArg0DoubleIndirectToReturn | +| tests.cpp:150:5:150:30 | madArg0NotIndirectToReturn | +| tests.cpp:151:6:151:26 | madArg0ToArg1Indirect | +| tests.cpp:152:6:152:34 | madArg0IndirectToArg1Indirect | +| tests.cpp:153:5:153:18 | madArgsComplex | +| tests.cpp:154:5:154:14 | madArgsAny | +| tests.cpp:155:5:155:28 | madAndImplementedComplex | +| tests.cpp:160:5:160:24 | madArg0FieldToReturn | +| tests.cpp:161:5:161:32 | madArg0IndirectFieldToReturn | +| tests.cpp:162:5:162:32 | madArg0FieldIndirectToReturn | +| tests.cpp:163:13:163:32 | madArg0ToReturnField | +| tests.cpp:164:14:164:41 | madArg0ToReturnIndirectField | +| tests.cpp:165:13:165:40 | madArg0ToReturnFieldIndirect | +| tests.cpp:284:7:284:19 | madArg0ToSelf | +| tests.cpp:285:6:285:20 | madSelfToReturn | +| tests.cpp:287:7:287:20 | madArg0ToField | +| tests.cpp:288:6:288:21 | madFieldToReturn | +| tests.cpp:313:7:313:30 | namespaceMadSelfToReturn | +| tests.cpp:434:5:434:29 | madCallArg0ReturnToReturn | +| tests.cpp:435:9:435:38 | madCallArg0ReturnToReturnFirst | +| tests.cpp:436:6:436:25 | madCallArg0WithValue | +| tests.cpp:437:5:437:36 | madCallReturnValueIgnoreFunction | +| tests.cpp:459:5:459:31 | parameter_ref_to_return_ref | +| tests.cpp:471:5:471:17 | receive_array | +sourceCallables +| tests.cpp:3:5:3:10 | source | +| tests.cpp:4:6:4:14 | sourcePtr | +| tests.cpp:5:6:5:19 | sourceIndirect | +| tests.cpp:6:6:6:9 | sink | +| tests.cpp:6:15:6:17 | val | +| tests.cpp:7:6:7:9 | sink | +| tests.cpp:7:16:7:18 | ptr | +| tests.cpp:11:5:11:18 | localMadSource | +| tests.cpp:12:5:12:19 | remoteMadSource | +| tests.cpp:13:5:13:14 | notASource | +| tests.cpp:14:5:14:22 | localMadSourceVoid | +| tests.cpp:15:5:15:25 | localMadSourceHasBody | +| tests.cpp:16:6:16:28 | remoteMadSourceIndirect | +| tests.cpp:17:7:17:35 | remoteMadSourceDoubleIndirect | +| tests.cpp:18:6:18:32 | remoteMadSourceIndirectArg0 | +| tests.cpp:18:39:18:39 | x | +| tests.cpp:18:47:18:47 | y | +| tests.cpp:19:6:19:32 | remoteMadSourceIndirectArg1 | +| tests.cpp:19:39:19:39 | x | +| tests.cpp:19:47:19:47 | y | +| tests.cpp:20:5:20:22 | remoteMadSourceVar | +| tests.cpp:21:6:21:31 | remoteMadSourceVarIndirect | +| tests.cpp:24:6:24:28 | namespaceLocalMadSource | +| tests.cpp:25:6:25:31 | namespaceLocalMadSourceVar | +| tests.cpp:28:7:28:30 | namespace2LocalMadSource | +| tests.cpp:31:6:31:19 | localMadSource | +| tests.cpp:33:5:33:27 | namespaceLocalMadSource | +| tests.cpp:35:6:35:17 | test_sources | +| tests.cpp:50:6:50:6 | v | +| tests.cpp:51:7:51:16 | v_indirect | +| tests.cpp:52:6:52:13 | v_direct | +| tests.cpp:63:6:63:6 | a | +| tests.cpp:63:9:63:9 | b | +| tests.cpp:63:12:63:12 | c | +| tests.cpp:63:15:63:15 | d | +| tests.cpp:75:6:75:6 | e | +| tests.cpp:85:6:85:26 | remoteMadSourceParam0 | +| tests.cpp:85:32:85:32 | x | +| tests.cpp:92:6:92:16 | madSinkArg0 | +| tests.cpp:92:22:92:22 | x | +| tests.cpp:93:6:93:13 | notASink | +| tests.cpp:93:19:93:19 | x | +| tests.cpp:94:6:94:16 | madSinkArg1 | +| tests.cpp:94:22:94:22 | x | +| tests.cpp:94:29:94:29 | y | +| tests.cpp:95:6:95:17 | madSinkArg01 | +| tests.cpp:95:23:95:23 | x | +| tests.cpp:95:30:95:30 | y | +| tests.cpp:95:37:95:37 | z | +| tests.cpp:96:6:96:17 | madSinkArg02 | +| tests.cpp:96:23:96:23 | x | +| tests.cpp:96:30:96:30 | y | +| tests.cpp:96:37:96:37 | z | +| tests.cpp:97:6:97:24 | madSinkIndirectArg0 | +| tests.cpp:97:31:97:31 | x | +| tests.cpp:98:6:98:30 | madSinkDoubleIndirectArg0 | +| tests.cpp:98:38:98:38 | x | +| tests.cpp:99:5:99:14 | madSinkVar | +| tests.cpp:100:6:100:23 | madSinkVarIndirect | +| tests.cpp:102:6:102:15 | test_sinks | +| tests.cpp:116:6:116:6 | a | +| tests.cpp:117:7:117:11 | a_ptr | +| tests.cpp:132:6:132:18 | madSinkParam0 | +| tests.cpp:132:24:132:24 | x | +| tests.cpp:138:8:138:8 | operator= | +| tests.cpp:138:8:138:8 | operator= | +| tests.cpp:138:8:138:18 | MyContainer | +| tests.cpp:139:6:139:10 | value | +| tests.cpp:140:6:140:11 | value2 | +| tests.cpp:141:7:141:9 | ptr | +| tests.cpp:144:5:144:19 | madArg0ToReturn | +| tests.cpp:144:25:144:25 | x | +| tests.cpp:145:6:145:28 | madArg0ToReturnIndirect | +| tests.cpp:145:34:145:34 | x | +| tests.cpp:146:5:146:15 | notASummary | +| tests.cpp:146:21:146:21 | x | +| tests.cpp:147:5:147:28 | madArg0ToReturnValueFlow | +| tests.cpp:147:34:147:34 | x | +| tests.cpp:148:5:148:27 | madArg0IndirectToReturn | +| tests.cpp:148:34:148:34 | x | +| tests.cpp:149:5:149:33 | madArg0DoubleIndirectToReturn | +| tests.cpp:149:41:149:41 | x | +| tests.cpp:150:5:150:30 | madArg0NotIndirectToReturn | +| tests.cpp:150:37:150:37 | x | +| tests.cpp:151:6:151:26 | madArg0ToArg1Indirect | +| tests.cpp:151:32:151:32 | x | +| tests.cpp:151:40:151:40 | y | +| tests.cpp:152:6:152:34 | madArg0IndirectToArg1Indirect | +| tests.cpp:152:47:152:47 | x | +| tests.cpp:152:55:152:55 | y | +| tests.cpp:153:5:153:18 | madArgsComplex | +| tests.cpp:153:25:153:25 | a | +| tests.cpp:153:33:153:33 | b | +| tests.cpp:153:40:153:40 | c | +| tests.cpp:153:47:153:47 | d | +| tests.cpp:154:5:154:14 | madArgsAny | +| tests.cpp:154:20:154:20 | a | +| tests.cpp:154:28:154:28 | b | +| tests.cpp:155:5:155:28 | madAndImplementedComplex | +| tests.cpp:155:34:155:34 | a | +| tests.cpp:155:41:155:41 | b | +| tests.cpp:155:48:155:48 | c | +| tests.cpp:160:5:160:24 | madArg0FieldToReturn | +| tests.cpp:160:38:160:39 | mc | +| tests.cpp:161:5:161:32 | madArg0IndirectFieldToReturn | +| tests.cpp:161:47:161:48 | mc | +| tests.cpp:162:5:162:32 | madArg0FieldIndirectToReturn | +| tests.cpp:162:46:162:47 | mc | +| tests.cpp:163:13:163:32 | madArg0ToReturnField | +| tests.cpp:163:38:163:38 | x | +| tests.cpp:164:14:164:41 | madArg0ToReturnIndirectField | +| tests.cpp:164:47:164:47 | x | +| tests.cpp:165:13:165:40 | madArg0ToReturnFieldIndirect | +| tests.cpp:165:46:165:46 | x | +| tests.cpp:167:13:167:30 | madFieldToFieldVar | +| tests.cpp:168:13:168:38 | madFieldToIndirectFieldVar | +| tests.cpp:169:14:169:39 | madIndirectFieldToFieldVar | +| tests.cpp:171:6:171:19 | test_summaries | +| tests.cpp:174:6:174:6 | a | +| tests.cpp:174:9:174:9 | b | +| tests.cpp:174:12:174:12 | c | +| tests.cpp:174:15:174:15 | d | +| tests.cpp:174:18:174:18 | e | +| tests.cpp:175:7:175:11 | a_ptr | +| tests.cpp:218:14:218:16 | mc1 | +| tests.cpp:218:19:218:21 | mc2 | +| tests.cpp:237:15:237:18 | rtn1 | +| tests.cpp:240:14:240:17 | rtn2 | +| tests.cpp:241:7:241:14 | rtn2_ptr | +| tests.cpp:267:7:267:7 | operator= | +| tests.cpp:267:7:267:7 | operator= | +| tests.cpp:267:7:267:13 | MyClass | +| tests.cpp:270:6:270:26 | memberRemoteMadSource | +| tests.cpp:271:7:271:39 | memberRemoteMadSourceIndirectArg0 | +| tests.cpp:271:46:271:46 | x | +| tests.cpp:272:6:272:29 | memberRemoteMadSourceVar | +| tests.cpp:273:7:273:21 | qualifierSource | +| tests.cpp:274:7:274:26 | qualifierFieldSource | +| tests.cpp:277:7:277:23 | memberMadSinkArg0 | +| tests.cpp:277:29:277:29 | x | +| tests.cpp:278:6:278:21 | memberMadSinkVar | +| tests.cpp:279:7:279:19 | qualifierSink | +| tests.cpp:280:7:280:23 | qualifierArg0Sink | +| tests.cpp:280:29:280:29 | x | +| tests.cpp:281:7:281:24 | qualifierFieldSink | +| tests.cpp:284:7:284:19 | madArg0ToSelf | +| tests.cpp:284:25:284:25 | x | +| tests.cpp:285:6:285:20 | madSelfToReturn | +| tests.cpp:286:6:286:16 | notASummary | +| tests.cpp:287:7:287:20 | madArg0ToField | +| tests.cpp:287:26:287:26 | x | +| tests.cpp:288:6:288:21 | madFieldToReturn | +| tests.cpp:290:6:290:8 | val | +| tests.cpp:293:7:293:7 | MyDerivedClass | +| tests.cpp:293:7:293:7 | operator= | +| tests.cpp:293:7:293:7 | operator= | +| tests.cpp:293:7:293:20 | MyDerivedClass | +| tests.cpp:295:6:295:28 | subtypeRemoteMadSource1 | +| tests.cpp:296:6:296:21 | subtypeNonSource | +| tests.cpp:297:6:297:28 | subtypeRemoteMadSource2 | +| tests.cpp:300:9:300:15 | source2 | +| tests.cpp:301:6:301:9 | sink | +| tests.cpp:301:19:301:20 | mc | +| tests.cpp:304:8:304:8 | operator= | +| tests.cpp:304:8:304:8 | operator= | +| tests.cpp:304:8:304:14 | MyClass | +| tests.cpp:307:8:307:33 | namespaceMemberMadSinkArg0 | +| tests.cpp:307:39:307:39 | x | +| tests.cpp:308:15:308:46 | namespaceStaticMemberMadSinkArg0 | +| tests.cpp:308:52:308:52 | x | +| tests.cpp:309:7:309:31 | namespaceMemberMadSinkVar | +| tests.cpp:310:14:310:44 | namespaceStaticMemberMadSinkVar | +| tests.cpp:313:7:313:30 | namespaceMadSelfToReturn | +| tests.cpp:317:22:317:28 | source3 | +| tests.cpp:319:6:319:23 | test_class_members | +| tests.cpp:320:10:320:11 | mc | +| tests.cpp:320:14:320:16 | mc2 | +| tests.cpp:320:19:320:21 | mc3 | +| tests.cpp:320:24:320:26 | mc4 | +| tests.cpp:320:29:320:31 | mc5 | +| tests.cpp:320:34:320:36 | mc6 | +| tests.cpp:320:39:320:41 | mc7 | +| tests.cpp:320:44:320:46 | mc8 | +| tests.cpp:320:49:320:51 | mc9 | +| tests.cpp:320:54:320:57 | mc10 | +| tests.cpp:320:60:320:63 | mc11 | +| tests.cpp:321:11:321:13 | ptr | +| tests.cpp:321:17:321:23 | mc4_ptr | +| tests.cpp:322:17:322:19 | mdc | +| tests.cpp:323:23:323:25 | mnc | +| tests.cpp:323:28:323:31 | mnc2 | +| tests.cpp:324:24:324:31 | mnc2_ptr | +| tests.cpp:330:6:330:6 | a | +| tests.cpp:429:8:429:8 | operator= | +| tests.cpp:429:8:429:8 | operator= | +| tests.cpp:429:8:429:14 | intPair | +| tests.cpp:430:6:430:10 | first | +| tests.cpp:431:6:431:11 | second | +| tests.cpp:434:5:434:29 | madCallArg0ReturnToReturn | +| tests.cpp:434:37:434:43 | fun_ptr | +| tests.cpp:435:9:435:38 | madCallArg0ReturnToReturnFirst | +| tests.cpp:435:46:435:52 | fun_ptr | +| tests.cpp:436:6:436:25 | madCallArg0WithValue | +| tests.cpp:436:34:436:40 | fun_ptr | +| tests.cpp:436:53:436:57 | value | +| tests.cpp:437:5:437:36 | madCallReturnValueIgnoreFunction | +| tests.cpp:437:45:437:51 | fun_ptr | +| tests.cpp:437:64:437:68 | value | +| tests.cpp:439:5:439:14 | getTainted | +| tests.cpp:440:6:440:13 | useValue | +| tests.cpp:440:19:440:19 | x | +| tests.cpp:441:6:441:17 | dontUseValue | +| tests.cpp:441:23:441:23 | x | +| tests.cpp:443:6:443:27 | test_function_pointers | +| tests.cpp:456:19:456:19 | X | +| tests.cpp:457:8:457:35 | StructWithTypedefInParameter | +| tests.cpp:457:8:457:35 | StructWithTypedefInParameter | +| tests.cpp:458:12:458:15 | Type | +| tests.cpp:459:5:459:31 | parameter_ref_to_return_ref | +| tests.cpp:459:5:459:31 | parameter_ref_to_return_ref | +| tests.cpp:459:45:459:45 | x | +| tests.cpp:459:45:459:45 | x | +| tests.cpp:462:6:462:37 | test_parameter_ref_to_return_ref | +| tests.cpp:463:6:463:6 | x | +| tests.cpp:464:36:464:36 | s | +| tests.cpp:465:6:465:6 | y | +| tests.cpp:469:7:469:9 | INT | +| tests.cpp:471:5:471:17 | receive_array | +| tests.cpp:471:23:471:23 | a | +| tests.cpp:473:6:473:23 | test_receive_array | +| tests.cpp:474:6:474:6 | x | +| tests.cpp:475:6:475:10 | array | +| tests.cpp:476:6:476:6 | y | +flowSummaryNode | tests.cpp:144:5:144:19 | [summary param] 0 in madArg0ToReturn | ParameterNode | madArg0ToReturn | madArg0ToReturn | | tests.cpp:144:5:144:19 | [summary] to write: ReturnValue in madArg0ToReturn | ReturnNode | madArg0ToReturn | madArg0ToReturn | | tests.cpp:145:6:145:28 | [summary param] 0 in madArg0ToReturnIndirect | ParameterNode | madArg0ToReturnIndirect | madArg0ToReturnIndirect | diff --git a/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.ql b/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.ql new file mode 100644 index 00000000000..4b89b7da409 --- /dev/null +++ b/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.ql @@ -0,0 +1,74 @@ +import semmle.code.cpp.ir.dataflow.internal.DataFlowImplConsistency::Consistency +import semmle.code.cpp.ir.dataflow.internal.DataFlowNodes +import semmle.code.cpp.ir.dataflow.internal.DataFlowPrivate +import semmle.code.cpp.ir.dataflow.internal.DataFlowUtil +import semmle.code.cpp.security.FlowSources +import utils.test.dataflow.FlowTestCommon + +module InterpretElementTest implements TestSig { + string getARelevantTag() { result = "interpretElement" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + exists(Element e | + e = interpretElement(_, _, _, _, _, _) and + location = e.getLocation() and + element = e.toString() and + tag = "interpretElement" and + value = "" + ) + } +} + +query predicate summaryCalls(SummaryCall c) { any() } + +query predicate summarizedCallables(SummarizedCallable c) { any() } + +query predicate sourceCallables(SourceCallable c) { c.getLocation().getFile().toString() != "" } + +module IRTest { + private import semmle.code.cpp.ir.IR + private import semmle.code.cpp.ir.dataflow.TaintTracking + + /** Common data flow configuration to be used by tests. */ + module TestAllocationConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source instanceof FlowSource + or + source.asExpr().(FunctionCall).getTarget().getName() = + ["source", "source2", "source3", "sourcePtr"] + or + source.asIndirectExpr(1).(FunctionCall).getTarget().getName() = "sourceIndirect" + } + + predicate isSink(DataFlow::Node sink) { + sinkNode(sink, "test-sink") + or + exists(FunctionCall call | + call.getTarget().getName() = "sink" and + sink.asExpr() = call.getAnArgument() + ) + } + } + + module IRFlow = TaintTracking::Global; +} + +import MakeTest, InterpretElementTest>> + +string describe(DataFlow::Node n) { + n instanceof ParameterNode and result = "ParameterNode" + or + n instanceof PostUpdateNode and result = "PostUpdateNode" + or + n instanceof ArgumentNode and result = "ArgumentNode" + or + n instanceof ReturnNode and result = "ReturnNode" + or + n instanceof OutNode and result = "OutNode" +} + +query predicate flowSummaryNode(FlowSummaryNode n, string str1, string str2, string str3) { + str1 = concat(describe(n), ", ") and + str2 = concat(n.getSummarizedCallable().toString(), ", ") and + str3 = concat(n.getEnclosingCallable().toString(), ", ") +} diff --git a/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.qll b/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.qll deleted file mode 100644 index ee5197e1ff2..00000000000 --- a/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.qll +++ /dev/null @@ -1 +0,0 @@ -import semmle.code.cpp.security.FlowSources From 1a4f333c4a59a21411a0950517fbd476ec0e93fc Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 26 Mar 2026 15:58:31 +0100 Subject: [PATCH 173/185] C#: Update integration tests to use SDK 10.0.201. --- .../all-platforms/autobuild/global.json | 2 +- .../all-platforms/autobuild_slnx/global.json | 2 +- .../all-platforms/binlog/global.json | 2 +- .../all-platforms/binlog_multiple/global.json | 2 +- .../blazor/BlazorTest/global.json | 2 +- .../all-platforms/blazor/Files.expected | 18 +- .../all-platforms/blazor/XSS.expected | 6 +- .../all-platforms/blazor/global.json | 2 +- .../BlazorTest/global.json | 2 +- .../blazor_build_mode_none/Files.expected | 18 +- .../blazor_build_mode_none/XSS.expected | 6 +- .../blazor_build_mode_none/global.json | 2 +- .../conditional_compilation/global.json | 2 +- .../all-platforms/cshtml/Files.expected | 2 +- .../all-platforms/cshtml/global.json | 2 +- .../cshtml_standalone/Files.expected | 2 +- .../cshtml_standalone/global.json | 2 +- .../cshtml_standalone_disabled/global.json | 2 +- .../cshtml_standalone_flowsteps/global.json | 2 +- .../cshtml_standalone_net6/Files.expected | 2 +- .../cshtml_standalone_net6/global.json | 4 +- .../diag_dotnet_incompatible/global.json | 2 +- .../diag_missing_project_files/global.json | 2 +- .../diag_missing_xamarin_sdk/global.json | 2 +- .../diag_recursive_generics/global.json | 2 +- .../all-platforms/dotnet_10/global.json | 2 +- .../all-platforms/dotnet_build/global.json | 2 +- .../dotnet_no_args_inject/global.json | 2 +- .../all-platforms/dotnet_pack/global.json | 2 +- .../all-platforms/dotnet_publish/global.json | 2 +- .../all-platforms/dotnet_run/global.json | 2 +- .../source_generator/global.json | 2 +- .../all-platforms/standalone/global.json | 2 +- .../standalone_buildless_option/global.json | 2 +- .../standalone_dependencies_net48/global.json | 2 +- .../proj/global.json | 2 +- .../standalone_failed/global.json | 2 +- .../all-platforms/standalone_resx/global.json | 2 +- .../all-platforms/standalone_slnx/global.json | 2 +- .../standalone_winforms/Assemblies.expected | 100 ++-- .../standalone_winforms/global.json | 2 +- .../linux/compiler_args/CompilerArgs.expected | 354 +++++++-------- .../linux/compiler_args/global.json | 2 +- .../diag_nuget_config_casing/global.json | 2 +- .../global.json | 2 +- .../posix/dotnet_test/global.json | 2 +- .../posix/dotnet_test_mstest/global.json | 2 +- .../posix/inherit-env-vars/global.json | 2 +- .../Assemblies.expected | 334 +++++++------- .../posix/standalone_dependencies/global.json | 2 +- .../Assemblies.expected | 334 +++++++------- .../global.json | 2 +- .../Assemblies.expected | 334 +++++++------- .../global.json | 2 +- .../global.json | 2 +- .../global.json | 2 +- .../standalone_dependencies_nuget/global.json | 2 +- .../global.json | 2 +- .../global.json | 2 +- .../global.json | 2 +- .../proj/global.json | 2 +- .../global.json | 2 +- .../posix/warn_as_error/global.json | 2 +- .../Assemblies.expected | 428 +++++++++--------- .../standalone_dependencies/global.json | 2 +- 65 files changed, 1022 insertions(+), 1022 deletions(-) diff --git a/csharp/ql/integration-tests/all-platforms/autobuild/global.json b/csharp/ql/integration-tests/all-platforms/autobuild/global.json index 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } diff --git a/csharp/ql/integration-tests/all-platforms/autobuild_slnx/global.json b/csharp/ql/integration-tests/all-platforms/autobuild_slnx/global.json index 481e95ec7be..ed604974070 100644 --- a/csharp/ql/integration-tests/all-platforms/autobuild_slnx/global.json +++ b/csharp/ql/integration-tests/all-platforms/autobuild_slnx/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "10.0.100" + "version": "10.0.201" } } diff --git a/csharp/ql/integration-tests/all-platforms/binlog/global.json b/csharp/ql/integration-tests/all-platforms/binlog/global.json index 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } diff --git a/csharp/ql/integration-tests/all-platforms/blazor/Files.expected b/csharp/ql/integration-tests/all-platforms/blazor/Files.expected index cd035dc7ae9..0ced64bd9b0 100644 --- a/csharp/ql/integration-tests/all-platforms/blazor/Files.expected +++ b/csharp/ql/integration-tests/all-platforms/blazor/Files.expected @@ -14,12 +14,12 @@ | 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 | +| 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 6518eb74a9f..d4f4f7cdd73 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/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 | +| 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/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 | +| 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } diff --git a/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/Files.expected b/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/Files.expected index 8811ba1c0c7..a9028ed1530 100644 --- a/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/Files.expected +++ b/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/Files.expected @@ -8,13 +8,13 @@ | BlazorTest/Components/Routes.razor | | BlazorTest/Components/_Imports.razor | | BlazorTest/Program.cs | -| [...]/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_App_razor.g.cs | -| [...]/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Layout_MainLayout_razor.g.cs | -| [...]/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Layout_NavMenu_razor.g.cs | -| [...]/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_MyInput_razor.g.cs | -| [...]/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_MyOutput_razor.g.cs | -| [...]/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_Error_razor.g.cs | -| [...]/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs | -| [...]/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Routes_razor.g.cs | -| [...]/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components__Imports_razor.g.cs | +| [...]/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components/App_razor.g.cs | +| [...]/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components/Layout/MainLayout_razor.g.cs | +| [...]/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components/Layout/NavMenu_razor.g.cs | +| [...]/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components/MyInput_razor.g.cs | +| [...]/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components/MyOutput_razor.g.cs | +| [...]/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components/Pages/Error_razor.g.cs | +| [...]/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components/Pages/TestPage_razor.g.cs | +| [...]/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components/Routes_razor.g.cs | +| [...]/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components/_Imports_razor.g.cs | | test-db/working/implicitUsings/GlobalUsings.g.cs | diff --git a/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/XSS.expected b/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/XSS.expected index f20ca29ee85..2ebaaaaf6aa 100644 --- a/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/XSS.expected +++ b/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/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 | test-db/working/razor/AC613014E59A413B9538FF8068364499/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 | -| test-db/working/razor/AC613014E59A413B9538FF8068364499/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 | test-db/working/razor/AC613014E59A413B9538FF8068364499/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 | +| test-db/working/razor/AC613014E59A413B9538FF8068364499/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 | -| test-db/working/razor/AC613014E59A413B9538FF8068364499/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 | +| test-db/working/razor/AC613014E59A413B9538FF8068364499/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_build_mode_none/global.json b/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/global.json index 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } diff --git a/csharp/ql/integration-tests/all-platforms/cshtml/Files.expected b/csharp/ql/integration-tests/all-platforms/cshtml/Files.expected index ef4dc96389f..4acc37f35e1 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml/Files.expected +++ b/csharp/ql/integration-tests/all-platforms/cshtml/Files.expected @@ -5,4 +5,4 @@ | 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 | +| 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/global.json b/csharp/ql/integration-tests/all-platforms/cshtml/global.json index 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone/Files.expected b/csharp/ql/integration-tests/all-platforms/cshtml_standalone/Files.expected index 2b6fea50a1b..c5ff8dee794 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone/Files.expected +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone/Files.expected @@ -1,4 +1,4 @@ | Program.cs | | Views/Home/Index.cshtml | | test-db/working/implicitUsings/GlobalUsings.g.cs | -| test-db/working/razor/EC52D77FE9BF67AD10C5C3F248392316/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Views_Home_Index_cshtml.g.cs | +| test-db/working/razor/EC52D77FE9BF67AD10C5C3F248392316/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_standalone/global.json b/csharp/ql/integration-tests/all-platforms/cshtml_standalone/global.json index 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/Files.expected b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/Files.expected index 4059eb70333..843b4651ea3 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/Files.expected +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/Files.expected @@ -1,4 +1,4 @@ | Program.cs | | Views/Home/Index.cshtml | | test-db/working/implicitUsings/GlobalUsings.g.cs | -| test-db/working/razor/EC52D77FE9BF67AD10C5C3F248392316/[...]/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Views_Home_Index_cshtml.g.cs | +| test-db/working/razor/EC52D77FE9BF67AD10C5C3F248392316/[...]/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Views/Home/Index_cshtml.g.cs | diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/global.json b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/global.json index 2715bb6d9b0..ed604974070 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/global.json +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "6.0.418" + "version": "10.0.201" } -} \ No newline at end of file +} 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } diff --git a/csharp/ql/integration-tests/all-platforms/dotnet_10/global.json b/csharp/ql/integration-tests/all-platforms/dotnet_10/global.json index 481e95ec7be..ed604974070 100644 --- a/csharp/ql/integration-tests/all-platforms/dotnet_10/global.json +++ b/csharp/ql/integration-tests/all-platforms/dotnet_10/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } diff --git a/csharp/ql/integration-tests/all-platforms/standalone/global.json b/csharp/ql/integration-tests/all-platforms/standalone/global.json index 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } 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 376af49c07f..ce67766bbb5 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": "10.0.100" + "version": "10.0.201" } } 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 376af49c07f..ce67766bbb5 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": "10.0.100" + "version": "10.0.201" } } 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 376af49c07f..ce67766bbb5 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": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } diff --git a/csharp/ql/integration-tests/all-platforms/standalone_slnx/global.json b/csharp/ql/integration-tests/all-platforms/standalone_slnx/global.json index 481e95ec7be..ed604974070 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_slnx/global.json +++ b/csharp/ql/integration-tests/all-platforms/standalone_slnx/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "10.0.100" + "version": "10.0.201" } } 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 aa00093875c..3419be9d7e8 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_winforms/Assemblies.expected +++ b/csharp/ql/integration-tests/all-platforms/standalone_winforms/Assemblies.expected @@ -1,50 +1,50 @@ -| 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/microsoft.windowsdesktop.app.ref/10.0.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } diff --git a/csharp/ql/integration-tests/linux/compiler_args/CompilerArgs.expected b/csharp/ql/integration-tests/linux/compiler_args/CompilerArgs.expected index 67a23e2d941..13f7aedb656 100644 --- a/csharp/ql/integration-tests/linux/compiler_args/CompilerArgs.expected +++ b/csharp/ql/integration-tests/linux/compiler_args/CompilerArgs.expected @@ -1,7 +1,7 @@ | 0 | /noconfig | | 1 | /unsafe- | | 2 | /checked- | -| 3 | /nowarn:1701,1702,1701,1702 | +| 3 | /nowarn:1701,1702,1701,1702,8002 | | 4 | /fullpaths | | 5 | /nostdlib+ | | 6 | /errorreport:prompt | @@ -10,173 +10,173 @@ | 9 | /preferreduilang:en | | 10 | /highentropyva+ | | 11 | /nullable:enable | -| 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 | +| 12 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/Microsoft.CSharp.dll | +| 13 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/Microsoft.VisualBasic.Core.dll | +| 14 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/Microsoft.VisualBasic.dll | +| 15 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/Microsoft.Win32.Primitives.dll | +| 16 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/Microsoft.Win32.Registry.dll | +| 17 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/mscorlib.dll | +| 18 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/netstandard.dll | +| 19 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.AppContext.dll | +| 20 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Buffers.dll | +| 21 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Collections.Concurrent.dll | +| 22 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Collections.dll | +| 23 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Collections.Immutable.dll | +| 24 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Collections.NonGeneric.dll | +| 25 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Collections.Specialized.dll | +| 26 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.ComponentModel.Annotations.dll | +| 27 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.ComponentModel.DataAnnotations.dll | +| 28 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.ComponentModel.dll | +| 29 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.ComponentModel.EventBasedAsync.dll | +| 30 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.ComponentModel.Primitives.dll | +| 31 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.ComponentModel.TypeConverter.dll | +| 32 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Configuration.dll | +| 33 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Console.dll | +| 34 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Core.dll | +| 35 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Data.Common.dll | +| 36 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Data.DataSetExtensions.dll | +| 37 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Data.dll | +| 38 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Diagnostics.Contracts.dll | +| 39 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Diagnostics.Debug.dll | +| 40 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Diagnostics.DiagnosticSource.dll | +| 41 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Diagnostics.FileVersionInfo.dll | +| 42 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Diagnostics.Process.dll | +| 43 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Diagnostics.StackTrace.dll | +| 44 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Diagnostics.TextWriterTraceListener.dll | +| 45 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Diagnostics.Tools.dll | +| 46 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Diagnostics.TraceSource.dll | +| 47 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Diagnostics.Tracing.dll | +| 48 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.dll | +| 49 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Drawing.dll | +| 50 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Drawing.Primitives.dll | +| 51 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Dynamic.Runtime.dll | +| 52 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Formats.Asn1.dll | +| 53 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Formats.Tar.dll | +| 54 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Globalization.Calendars.dll | +| 55 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Globalization.dll | +| 56 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Globalization.Extensions.dll | +| 57 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.IO.Compression.Brotli.dll | +| 58 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.IO.Compression.dll | +| 59 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.IO.Compression.FileSystem.dll | +| 60 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.IO.Compression.ZipFile.dll | +| 61 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.IO.dll | +| 62 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.IO.FileSystem.AccessControl.dll | +| 63 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.IO.FileSystem.dll | +| 64 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.IO.FileSystem.DriveInfo.dll | +| 65 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.IO.FileSystem.Primitives.dll | +| 66 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.IO.FileSystem.Watcher.dll | +| 67 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.IO.IsolatedStorage.dll | +| 68 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.IO.MemoryMappedFiles.dll | +| 69 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.IO.Pipelines.dll | +| 70 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.IO.Pipes.AccessControl.dll | +| 71 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.IO.Pipes.dll | +| 72 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.IO.UnmanagedMemoryStream.dll | +| 73 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Linq.AsyncEnumerable.dll | +| 74 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Linq.dll | +| 75 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Linq.Expressions.dll | +| 76 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Linq.Parallel.dll | +| 77 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Linq.Queryable.dll | +| 78 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Memory.dll | +| 79 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Net.dll | +| 80 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Net.Http.dll | +| 81 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Net.Http.Json.dll | +| 82 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Net.HttpListener.dll | +| 83 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Net.Mail.dll | +| 84 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Net.NameResolution.dll | +| 85 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Net.NetworkInformation.dll | +| 86 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Net.Ping.dll | +| 87 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Net.Primitives.dll | +| 88 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Net.Quic.dll | +| 89 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Net.Requests.dll | +| 90 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Net.Security.dll | +| 91 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Net.ServerSentEvents.dll | +| 92 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Net.ServicePoint.dll | +| 93 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Net.Sockets.dll | +| 94 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Net.WebClient.dll | +| 95 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Net.WebHeaderCollection.dll | +| 96 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Net.WebProxy.dll | +| 97 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Net.WebSockets.Client.dll | +| 98 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Net.WebSockets.dll | +| 99 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Numerics.dll | +| 100 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Numerics.Vectors.dll | +| 101 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.ObjectModel.dll | +| 102 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Reflection.DispatchProxy.dll | +| 103 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Reflection.dll | +| 104 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Reflection.Emit.dll | +| 105 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Reflection.Emit.ILGeneration.dll | +| 106 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Reflection.Emit.Lightweight.dll | +| 107 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Reflection.Extensions.dll | +| 108 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Reflection.Metadata.dll | +| 109 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Reflection.Primitives.dll | +| 110 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Reflection.TypeExtensions.dll | +| 111 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Resources.Reader.dll | +| 112 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Resources.ResourceManager.dll | +| 113 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Resources.Writer.dll | +| 114 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Runtime.CompilerServices.Unsafe.dll | +| 115 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Runtime.CompilerServices.VisualC.dll | +| 116 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Runtime.dll | +| 117 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Runtime.Extensions.dll | +| 118 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Runtime.Handles.dll | +| 119 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Runtime.InteropServices.dll | +| 120 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Runtime.InteropServices.JavaScript.dll | +| 121 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Runtime.InteropServices.RuntimeInformation.dll | +| 122 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Runtime.Intrinsics.dll | +| 123 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Runtime.Loader.dll | +| 124 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Runtime.Numerics.dll | +| 125 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Runtime.Serialization.dll | +| 126 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Runtime.Serialization.Formatters.dll | +| 127 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Runtime.Serialization.Json.dll | +| 128 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Runtime.Serialization.Primitives.dll | +| 129 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Runtime.Serialization.Xml.dll | +| 130 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Security.AccessControl.dll | +| 131 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Security.Claims.dll | +| 132 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Security.Cryptography.Algorithms.dll | +| 133 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Security.Cryptography.Cng.dll | +| 134 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Security.Cryptography.Csp.dll | +| 135 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Security.Cryptography.dll | +| 136 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Security.Cryptography.Encoding.dll | +| 137 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Security.Cryptography.OpenSsl.dll | +| 138 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Security.Cryptography.Primitives.dll | +| 139 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Security.Cryptography.X509Certificates.dll | +| 140 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Security.dll | +| 141 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Security.Principal.dll | +| 142 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Security.Principal.Windows.dll | +| 143 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Security.SecureString.dll | +| 144 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.ServiceModel.Web.dll | +| 145 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.ServiceProcess.dll | +| 146 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Text.Encoding.CodePages.dll | +| 147 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Text.Encoding.dll | +| 148 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Text.Encoding.Extensions.dll | +| 149 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Text.Encodings.Web.dll | +| 150 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Text.Json.dll | +| 151 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Text.RegularExpressions.dll | +| 152 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Threading.AccessControl.dll | +| 153 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Threading.Channels.dll | +| 154 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Threading.dll | +| 155 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Threading.Overlapped.dll | +| 156 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Threading.Tasks.Dataflow.dll | +| 157 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Threading.Tasks.dll | +| 158 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Threading.Tasks.Extensions.dll | +| 159 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Threading.Tasks.Parallel.dll | +| 160 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Threading.Thread.dll | +| 161 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Threading.ThreadPool.dll | +| 162 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Threading.Timer.dll | +| 163 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Transactions.dll | +| 164 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Transactions.Local.dll | +| 165 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.ValueTuple.dll | +| 166 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Web.dll | +| 167 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Web.HttpUtility.dll | +| 168 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Windows.dll | +| 169 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Xml.dll | +| 170 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Xml.Linq.dll | +| 171 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Xml.ReaderWriter.dll | +| 172 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Xml.Serialization.dll | +| 173 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Xml.XDocument.dll | +| 174 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Xml.XmlDocument.dll | +| 175 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Xml.XmlSerializer.dll | +| 176 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Xml.XPath.dll | +| 177 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/System.Xml.XPath.XDocument.dll | +| 178 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/ref/net10.0/WindowsBase.dll | | 179 | /features:"InterceptorsNamespaces=;Microsoft.Extensions.Validation.Generated" | | 180 | /debug+ | | 181 | /debug:portable | @@ -191,15 +191,15 @@ | 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 | +| 193 | /analyzerconfig:/usr/share/dotnet/sdk/10.0.201/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_10_default.globalconfig | +| 194 | /analyzer:/usr/share/dotnet/sdk/10.0.201/Sdks/Microsoft.NET.Sdk/targets/../analyzers/Microsoft.CodeAnalysis.CSharp.NetAnalyzers.dll | +| 195 | /analyzer:/usr/share/dotnet/sdk/10.0.201/Sdks/Microsoft.NET.Sdk/targets/../analyzers/Microsoft.CodeAnalysis.NetAnalyzers.dll | +| 196 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/analyzers/dotnet/cs/Microsoft.Interop.ComInterfaceGenerator.dll | +| 197 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/analyzers/dotnet/cs/Microsoft.Interop.JavaScript.JSImportGenerator.dll | +| 198 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/analyzers/dotnet/cs/Microsoft.Interop.LibraryImportGenerator.dll | +| 199 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/analyzers/dotnet/cs/Microsoft.Interop.SourceGeneration.dll | +| 200 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/analyzers/dotnet/cs/System.Text.Json.SourceGeneration.dll | +| 201 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.5/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 | diff --git a/csharp/ql/integration-tests/linux/compiler_args/global.json b/csharp/ql/integration-tests/linux/compiler_args/global.json index 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } diff --git a/csharp/ql/integration-tests/linux/diag_nuget_config_casing/global.json b/csharp/ql/integration-tests/linux/diag_nuget_config_casing/global.json index 481e95ec7be..ed604974070 100644 --- a/csharp/ql/integration-tests/linux/diag_nuget_config_casing/global.json +++ b/csharp/ql/integration-tests/linux/diag_nuget_config_casing/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } diff --git a/csharp/ql/integration-tests/posix/dotnet_test/global.json b/csharp/ql/integration-tests/posix/dotnet_test/global.json index 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies/Assemblies.expected b/csharp/ql/integration-tests/posix/standalone_dependencies/Assemblies.expected index 619475882b5..8a3fdeb74b6 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies/Assemblies.expected +++ b/csharp/ql/integration-tests/posix/standalone_dependencies/Assemblies.expected @@ -1,170 +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/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/microsoft.netcore.app.ref/10.0.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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 376af49c07f..ce67766bbb5 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": "10.0.100" + "version": "10.0.201" } } 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 619475882b5..8a3fdeb74b6 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,170 +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/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/microsoft.netcore.app.ref/10.0.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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 376af49c07f..ce67766bbb5 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": "10.0.100" + "version": "10.0.201" } } 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 7e3b8f6e453..c3861c7a846 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,167 +1,167 @@ -| 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/microsoft.netcore.app.ref/10.0.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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 376af49c07f..ce67766bbb5 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": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } 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 481e95ec7be..ed604974070 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": "10.0.100" + "version": "10.0.201" } } diff --git a/csharp/ql/integration-tests/windows/standalone_dependencies/Assemblies.expected b/csharp/ql/integration-tests/windows/standalone_dependencies/Assemblies.expected index 90a2806afe5..c4532a2d554 100644 --- a/csharp/ql/integration-tests/windows/standalone_dependencies/Assemblies.expected +++ b/csharp/ql/integration-tests/windows/standalone_dependencies/Assemblies.expected @@ -1,217 +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/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/microsoft.netcore.app.ref/10.0.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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.5/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 376af49c07f..ce67766bbb5 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": "10.0.100" + "version": "10.0.201" } } From 56153d583e50c13ffa4f862f0dcf6f9c5e1cb4ca Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Thu, 26 Mar 2026 17:31:18 +0000 Subject: [PATCH 174/185] C++: Switch to doublyBoundedFastTC when computing virtual dispatch edges and inline pairCand to avoid a giant tuple explosion. --- .../ir/dataflow/internal/DataFlowDispatch.qll | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowDispatch.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowDispatch.qll index 0d63558c956..bce93655276 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowDispatch.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowDispatch.qll @@ -238,7 +238,12 @@ private module TrackVirtualDispatch { private import TypeTracking::TypeTrack::Graph - private predicate edgePlus(PathNode n1, PathNode n2) = fastTC(edges/2)(n1, n2) + private predicate isSource(PathNode n) { n.isSource() } + + private predicate isSink(PathNode n) { n.isSink() } + + private predicate edgePlus(PathNode n1, PathNode n2) = + doublyBoundedFastTC(edges/2, isSource/1, isSink/1)(n1, n2) /** * Gets the most specific implementation of `mf` that may be called when the @@ -255,6 +260,15 @@ private module TrackVirtualDispatch { ) } + pragma[nomagic] + private MemberFunction mostSpecificForSource(PathNode p1, MemberFunction mf) { + p1.isSource() and + exists(Class derived | + qualifierSourceImpl(p1.getNode(), derived) and + result = mostSpecific(mf, derived) + ) + } + /** * Gets a possible pair of end-points `(p1, p2)` where: * - `p1` is a derived-to-base conversion that converts from some @@ -264,16 +278,16 @@ private module TrackVirtualDispatch { * - `callable` is the most specific implementation that may be called when * the qualifier has type `derived`. */ + bindingset[p1, p2] + pragma[inline_late] private predicate pairCand( PathNode p1, PathNode p2, DataFlowPrivate::DataFlowCallable callable, DataFlowPrivate::DataFlowCall call ) { - exists(Class derived, MemberFunction mf | - qualifierSourceImpl(p1.getNode(), derived) and + p2.isSink() and + exists(MemberFunction mf | qualifierOfVirtualCallImpl(p2.getNode(), call.asCallInstruction(), mf) and - p1.isSource() and - p2.isSink() and - callable.asSourceCallable() = mostSpecific(mf, derived) + callable.asSourceCallable() = mostSpecificForSource(p1, mf) ) } From f897575d3fee366c942fd2ac7872ab5237cb35db Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 27 Mar 2026 10:11:13 +0000 Subject: [PATCH 175/185] Update change note --- cpp/ql/lib/change-notes/2026-03-26-convert-csv-models-to-yml.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/lib/change-notes/2026-03-26-convert-csv-models-to-yml.md b/cpp/ql/lib/change-notes/2026-03-26-convert-csv-models-to-yml.md index 1fcb2d6ac6c..41d77b518f1 100644 --- a/cpp/ql/lib/change-notes/2026-03-26-convert-csv-models-to-yml.md +++ b/cpp/ql/lib/change-notes/2026-03-26-convert-csv-models-to-yml.md @@ -1,4 +1,4 @@ --- category: breaking --- -* ZeroMQ and `getc`-family models have been migrated from inline CSV specifications in QL files to `.model.yml` data extension files in the `ext/` directory. The `SourceModelCsv`, `SinkModelCsv`, and `SummaryModelCsv` classes and the associated CSV parsing infrastructure have been removed from `ExternalFlow.qll`. New models should be added as `.model.yml` files in the `ext/` directory. +* The `SourceModelCsv`, `SinkModelCsv`, and `SummaryModelCsv` classes and the associated CSV parsing infrastructure have been removed from `ExternalFlow.qll`. New models should be added as `.model.yml` files in the `ext/` directory. From 7e1ad825c38647040670d33388e363c24b556202 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 27 Mar 2026 11:17:15 +0000 Subject: [PATCH 176/185] Fix model row with misaligned columns The original CSV had too many columns, and copilot cut off the last one, before adding the provenance column at the end. --- .../library-tests/dataflow/models-as-data/testModels.ext.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.ext.yml b/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.ext.yml index bc2709d647b..c6bebdb95a4 100644 --- a/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.ext.yml +++ b/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.ext.yml @@ -70,7 +70,7 @@ extensions: - ["", "", False, "madArg0ToReturnFieldIndirect", "", "", "Argument[0]", "ReturnValue.Field[*ptr]", "taint", "manual"] - ["", "", False, "madFieldToFieldVar", "", "", "Field[value]", "Field[value2]", "taint", "manual"] - ["", "", False, "madFieldToIndirectFieldVar", "", "", "Field[value]", "Field[*ptr]", "taint", "manual"] - - ["", "", False, "madIndirectFieldToFieldVar", "", "", "", "Field[value]", "Field[value2]", "manual"] + - ["", "", False, "madIndirectFieldToFieldVar", "", "", "Field[value]", "Field[value2]", "taint", "manual"] - ["", "MyClass", True, "madArg0ToSelf", "", "", "Argument[0]", "Argument[-1]", "taint", "manual"] - ["", "MyClass", True, "madSelfToReturn", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"] - ["", "MyClass", True, "madArg0ToField", "", "", "Argument[0]", "Argument[-1].Field[val]", "taint", "manual"] From c07a8145154fecf4135a3793504c0752169eecb9 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 27 Mar 2026 11:23:33 +0000 Subject: [PATCH 177/185] Add comments to converted MaD file --- .../dataflow/models-as-data/testModels.ext.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.ext.yml b/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.ext.yml index c6bebdb95a4..95261223473 100644 --- a/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.ext.yml +++ b/cpp/ql/test/library-tests/dataflow/models-as-data/testModels.ext.yml @@ -12,7 +12,7 @@ extensions: - ["", "", False, "remoteMadSourceIndirectArg0", "", "", "Argument[*0]", "remote", "manual"] - ["", "", False, "remoteMadSourceIndirectArg1", "", "", "Argument[*1]", "remote", "manual"] - ["", "", False, "remoteMadSourceVar", "", "", "", "remote", "manual"] - - ["", "", False, "remoteMadSourceVarIndirect", "", "", "*", "remote", "manual"] + - ["", "", False, "remoteMadSourceVarIndirect", "", "", "*", "remote", "manual"] # we can't express this source/sink correctly at present, "*" is not a valid access path - ["", "", False, "remoteMadSourceParam0", "", "", "Parameter[0]", "remote", "manual"] - ["MyNamespace", "", False, "namespaceLocalMadSource", "", "", "ReturnValue", "local", "manual"] - ["MyNamespace", "", False, "namespaceLocalMadSourceVar", "", "", "", "local", "manual"] @@ -21,7 +21,7 @@ extensions: - ["", "MyClass", True, "memberRemoteMadSourceIndirectArg0", "", "", "Argument[*0]", "remote", "manual"] - ["", "MyClass", True, "memberRemoteMadSourceVar", "", "", "", "remote", "manual"] - ["", "MyClass", True, "subtypeRemoteMadSource1", "", "", "ReturnValue", "remote", "manual"] - - ["", "MyClass", False, "subtypeNonSource", "", "", "ReturnValue", "remote", "manual"] + - ["", "MyClass", False, "subtypeNonSource", "", "", "ReturnValue", "remote", "manual"] # the tests define this in MyDerivedClass, so it should *not* be recongized as a source - ["", "MyClass", True, "qualifierSource", "", "", "Argument[-1]", "remote", "manual"] - ["", "MyClass", True, "qualifierFieldSource", "", "", "Argument[-1].val", "remote", "manual"] - ["", "MyDerivedClass", False, "subtypeRemoteMadSource2", "", "", "ReturnValue", "remote", "manual"] @@ -36,7 +36,7 @@ extensions: - ["", "", False, "madSinkIndirectArg0", "", "", "Argument[*0]", "test-sink", "manual"] - ["", "", False, "madSinkDoubleIndirectArg0", "", "", "Argument[**0]", "test-sink", "manual"] - ["", "", False, "madSinkVar", "", "", "", "test-sink", "manual"] - - ["", "", False, "madSinkVarIndirect", "", "", "*", "test-sink", "manual"] + - ["", "", False, "madSinkVarIndirect", "", "", "*", "test-sink", "manual"] # we can't express this source/sink correctly at present, "*" is not a valid access path - ["", "", False, "madSinkParam0", "", "", "Parameter[0]", "test-sink", "manual"] - ["", "MyClass", True, "memberMadSinkArg0", "", "", "Argument[0]", "test-sink", "manual"] - ["", "MyClass", True, "memberMadSinkVar", "", "", "", "test-sink", "manual"] @@ -61,16 +61,16 @@ extensions: - ["", "", False, "madArg0IndirectToArg1Indirect", "", "", "Argument[*0]", "Argument[*1]", "taint", "manual"] - ["", "", False, "madArgsComplex", "", "", "Argument[*0..1,2]", "ReturnValue", "taint", "manual"] - ["", "", False, "madAndImplementedComplex", "", "", "Argument[2]", "ReturnValue", "taint", "manual"] - - ["", "", False, "madArgsAny", "", "", "Argument", "ReturnValue", "taint", "manual"] + - ["", "", False, "madArgsAny", "", "", "Argument", "ReturnValue", "taint", "manual"] # we can't express this source/sink correctly at present, "Argument" is not a valid input - ["", "", False, "madArg0FieldToReturn", "", "", "Argument[0].Field[value]", "ReturnValue", "taint", "manual"] - ["", "", False, "madArg0IndirectFieldToReturn", "", "", "Argument[*0].Field[value]", "ReturnValue", "taint", "manual"] - ["", "", False, "madArg0FieldIndirectToReturn", "", "", "Argument[0].Field[*ptr]", "ReturnValue", "taint", "manual"] - ["", "", False, "madArg0ToReturnField", "", "", "Argument[0]", "ReturnValue.Field[value]", "taint", "manual"] - ["", "", False, "madArg0ToReturnIndirectField", "", "", "Argument[0]", "ReturnValue[*].Field[value]", "taint", "manual"] - ["", "", False, "madArg0ToReturnFieldIndirect", "", "", "Argument[0]", "ReturnValue.Field[*ptr]", "taint", "manual"] - - ["", "", False, "madFieldToFieldVar", "", "", "Field[value]", "Field[value2]", "taint", "manual"] - - ["", "", False, "madFieldToIndirectFieldVar", "", "", "Field[value]", "Field[*ptr]", "taint", "manual"] - - ["", "", False, "madIndirectFieldToFieldVar", "", "", "Field[value]", "Field[value2]", "taint", "manual"] + - ["", "", False, "madFieldToFieldVar", "", "", "Field[value]", "Field[value2]", "taint", "manual"] # we can't express this source/sink correctly at present, "Field[value]" is not a valid input and "Field[value2]" is not a valid output + - ["", "", False, "madFieldToIndirectFieldVar", "", "", "Field[value]", "Field[*ptr]", "taint", "manual"] # we can't express this source/sink correctly at present, "Field[value]" is not a valid input and "Field[*ptr]" is not a valid output + - ["", "", False, "madIndirectFieldToFieldVar", "", "", "Field[value]", "Field[value2]", "taint", "manual"] # we can't express this source/sink correctly at present, "Field[value]" is not a valid input and "Field[value2]" is not a valid output - ["", "MyClass", True, "madArg0ToSelf", "", "", "Argument[0]", "Argument[-1]", "taint", "manual"] - ["", "MyClass", True, "madSelfToReturn", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"] - ["", "MyClass", True, "madArg0ToField", "", "", "Argument[0]", "Argument[-1].Field[val]", "taint", "manual"] From a9449cc99183003883f6ec6375974d4382aecbff Mon Sep 17 00:00:00 2001 From: MarkLee131 Date: Fri, 27 Mar 2026 19:08:27 +0800 Subject: [PATCH 178/185] Add EC to secure algorithm whitelist for Java CWE-327 query --- .../2026-03-27-add-ec-to-secure-algorithms.md | 4 +++ .../semmle/code/java/security/Encryption.qll | 6 +++- .../security/CWE-327/semmle/tests/Test.java | 33 +++++++++++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 java/ql/lib/change-notes/2026-03-27-add-ec-to-secure-algorithms.md diff --git a/java/ql/lib/change-notes/2026-03-27-add-ec-to-secure-algorithms.md b/java/ql/lib/change-notes/2026-03-27-add-ec-to-secure-algorithms.md new file mode 100644 index 00000000000..2c46d38ebfe --- /dev/null +++ b/java/ql/lib/change-notes/2026-03-27-add-ec-to-secure-algorithms.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The `java/potentially-weak-cryptographic-algorithm` query no longer flags Elliptic Curve algorithms (`EC`, `ECDSA`, `ECDH`, `EdDSA`, `Ed25519`, `Ed448`, `XDH`, `X25519`, `X448`) as potentially insecure. These are modern, secure algorithms recommended by NIST SP 800-57 and other standards bodies. Previously, these algorithms were not included in the secure algorithm whitelist, causing false positives when using standard Java cryptographic APIs such as `KeyPairGenerator.getInstance("EC")`. diff --git a/java/ql/lib/semmle/code/java/security/Encryption.qll b/java/ql/lib/semmle/code/java/security/Encryption.qll index b0a0fc72df7..afbace5bf45 100644 --- a/java/ql/lib/semmle/code/java/security/Encryption.qll +++ b/java/ql/lib/semmle/code/java/security/Encryption.qll @@ -259,7 +259,11 @@ string getASecureAlgorithmName() { result = [ "RSA", "SHA-?(256|384|512)", "CCM", "GCM", "AES(?![^a-zA-Z](ECB|CBC/PKCS[57]Padding))", - "Blowfish", "ECIES", "SHA3-(256|384|512)" + "Blowfish", "ECIES", "SHA3-(256|384|512)", + // Elliptic Curve algorithms: EC (key generation), ECDSA (signatures), ECDH (key agreement), + // EdDSA/Ed25519/Ed448 (Edwards-curve signatures), XDH/X25519/X448 (key agreement). + // These are modern, secure algorithms recommended by NIST and other standards bodies. + "EC", "ECDSA", "ECDH", "EdDSA", "Ed25519", "Ed448", "XDH", "X25519", "X448" ] } diff --git a/java/ql/test/query-tests/security/CWE-327/semmle/tests/Test.java b/java/ql/test/query-tests/security/CWE-327/semmle/tests/Test.java index 2f66d499639..41ce1e69784 100644 --- a/java/ql/test/query-tests/security/CWE-327/semmle/tests/Test.java +++ b/java/ql/test/query-tests/security/CWE-327/semmle/tests/Test.java @@ -46,6 +46,39 @@ class Test { cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec); byte[] encrypted = cipher.doFinal(input.getBytes("UTF-8")); + + KeyPairGenerator keyPairGenerator; + + // GOOD: EC is a secure algorithm for key pair generation + keyPairGenerator = KeyPairGenerator.getInstance("EC"); + + // GOOD: ECDSA is a secure algorithm for digital signatures + Signature ecdsaSig = Signature.getInstance("ECDSA"); + + // GOOD: ECDH is a secure algorithm for key agreement + KeyAgreement ecdhKa = KeyAgreement.getInstance("ECDH"); + + // GOOD: EdDSA is a secure algorithm (Edwards-curve Digital Signature Algorithm) + keyPairGenerator = KeyPairGenerator.getInstance("EdDSA"); + + // GOOD: Ed25519 is a secure algorithm + keyPairGenerator = KeyPairGenerator.getInstance("Ed25519"); + + // GOOD: Ed448 is a secure algorithm + keyPairGenerator = KeyPairGenerator.getInstance("Ed448"); + + // GOOD: XDH is a secure algorithm for key agreement + keyPairGenerator = KeyPairGenerator.getInstance("XDH"); + + // GOOD: X25519 is a secure algorithm for key agreement + keyPairGenerator = KeyPairGenerator.getInstance("X25519"); + + // GOOD: X448 is a secure algorithm for key agreement + keyPairGenerator = KeyPairGenerator.getInstance("X448"); + + // GOOD: SHA256withECDSA is a secure signature algorithm + Signature sha256Ecdsa = Signature.getInstance("SHA256withECDSA"); + } catch (Exception e) { // fail } From da4a2238bc706382a41d402e5a907d9d95d6424a Mon Sep 17 00:00:00 2001 From: MarkLee131 Date: Sat, 28 Mar 2026 16:51:13 +0800 Subject: [PATCH 179/185] Address PR review: add Signature.getInstance sink, HMAC/PBKDF2 whitelist, fix test APIs - Model Signature.getInstance() as CryptoAlgoSpec sink (previously only Signature constructor was modeled) - Add HMAC-based algorithms (HMACSHA1/256/384/512, HmacSHA1/256/384/512) and PBKDF2 to the secure algorithm whitelist - Fix XDH/X25519/X448 tests to use KeyAgreement.getInstance() instead of KeyPairGenerator.getInstance() to match their key agreement semantics - Add test cases for SHA384withECDSA, HMACSHA*, and PBKDF2WithHmacSHA1 from user-reported false positives - Update change note to document all additions --- .../2026-03-27-add-ec-to-secure-algorithms.md | 3 ++- .../semmle/code/java/security/Encryption.qll | 10 +++++++-- .../security/CWE-327/semmle/tests/Test.java | 21 +++++++++++++------ 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/java/ql/lib/change-notes/2026-03-27-add-ec-to-secure-algorithms.md b/java/ql/lib/change-notes/2026-03-27-add-ec-to-secure-algorithms.md index 2c46d38ebfe..1e323fafd35 100644 --- a/java/ql/lib/change-notes/2026-03-27-add-ec-to-secure-algorithms.md +++ b/java/ql/lib/change-notes/2026-03-27-add-ec-to-secure-algorithms.md @@ -1,4 +1,5 @@ --- category: minorAnalysis --- -* The `java/potentially-weak-cryptographic-algorithm` query no longer flags Elliptic Curve algorithms (`EC`, `ECDSA`, `ECDH`, `EdDSA`, `Ed25519`, `Ed448`, `XDH`, `X25519`, `X448`) as potentially insecure. These are modern, secure algorithms recommended by NIST SP 800-57 and other standards bodies. Previously, these algorithms were not included in the secure algorithm whitelist, causing false positives when using standard Java cryptographic APIs such as `KeyPairGenerator.getInstance("EC")`. +* The `java/potentially-weak-cryptographic-algorithm` query no longer flags Elliptic Curve algorithms (`EC`, `ECDSA`, `ECDH`, `EdDSA`, `Ed25519`, `Ed448`, `XDH`, `X25519`, `X448`), HMAC-based algorithms (`HMACSHA1`, `HMACSHA256`, `HMACSHA384`, `HMACSHA512`), or PBKDF2 key derivation as potentially insecure. These are modern, secure algorithms recommended by NIST and other standards bodies. Previously, these algorithms were not included in the secure algorithm whitelist, causing false positives when using standard Java cryptographic APIs such as `KeyPairGenerator.getInstance("EC")` or `new SecretKeySpec(key, "HMACSHA256")`. +* The `Signature.getInstance(...)` method is now modeled as a `CryptoAlgoSpec` sink, alongside the existing `Signature` constructor sink. This ensures that algorithm strings passed to `Signature.getInstance(...)` are also checked by the query. diff --git a/java/ql/lib/semmle/code/java/security/Encryption.qll b/java/ql/lib/semmle/code/java/security/Encryption.qll index afbace5bf45..6af8d29cc4a 100644 --- a/java/ql/lib/semmle/code/java/security/Encryption.qll +++ b/java/ql/lib/semmle/code/java/security/Encryption.qll @@ -263,7 +263,9 @@ string getASecureAlgorithmName() { // Elliptic Curve algorithms: EC (key generation), ECDSA (signatures), ECDH (key agreement), // EdDSA/Ed25519/Ed448 (Edwards-curve signatures), XDH/X25519/X448 (key agreement). // These are modern, secure algorithms recommended by NIST and other standards bodies. - "EC", "ECDSA", "ECDH", "EdDSA", "Ed25519", "Ed448", "XDH", "X25519", "X448" + "EC", "ECDSA", "ECDH", "EdDSA", "Ed25519", "Ed448", "XDH", "X25519", "X448", + // HMAC-based algorithms and key derivation functions. + "HMACSHA(1|256|384|512)", "HmacSHA(1|256|384|512)", "PBKDF2" ] } @@ -370,9 +372,13 @@ class JavaSecuritySignature extends JavaSecurityAlgoSpec { exists(Constructor c | c.getAReference() = this | c.getDeclaringType().hasQualifiedName("java.security", "Signature") ) + or + exists(Method m | m.getAReference() = this | + m.hasQualifiedName("java.security", "Signature", "getInstance") + ) } - override Expr getAlgoSpec() { result = this.(ConstructorCall).getArgument(0) } + override Expr getAlgoSpec() { result = this.(Call).getArgument(0) } } /** A call to the `getInstance` method declared in `java.security.KeyPairGenerator`. */ diff --git a/java/ql/test/query-tests/security/CWE-327/semmle/tests/Test.java b/java/ql/test/query-tests/security/CWE-327/semmle/tests/Test.java index 41ce1e69784..23aff65161c 100644 --- a/java/ql/test/query-tests/security/CWE-327/semmle/tests/Test.java +++ b/java/ql/test/query-tests/security/CWE-327/semmle/tests/Test.java @@ -52,7 +52,7 @@ class Test { // GOOD: EC is a secure algorithm for key pair generation keyPairGenerator = KeyPairGenerator.getInstance("EC"); - // GOOD: ECDSA is a secure algorithm for digital signatures + // GOOD: ECDSA is a secure signature algorithm Signature ecdsaSig = Signature.getInstance("ECDSA"); // GOOD: ECDH is a secure algorithm for key agreement @@ -61,24 +61,33 @@ class Test { // GOOD: EdDSA is a secure algorithm (Edwards-curve Digital Signature Algorithm) keyPairGenerator = KeyPairGenerator.getInstance("EdDSA"); - // GOOD: Ed25519 is a secure algorithm + // GOOD: Ed25519 is a secure algorithm for key pair generation keyPairGenerator = KeyPairGenerator.getInstance("Ed25519"); - // GOOD: Ed448 is a secure algorithm + // GOOD: Ed448 is a secure algorithm for key pair generation keyPairGenerator = KeyPairGenerator.getInstance("Ed448"); // GOOD: XDH is a secure algorithm for key agreement - keyPairGenerator = KeyPairGenerator.getInstance("XDH"); + KeyAgreement xdhKa = KeyAgreement.getInstance("XDH"); // GOOD: X25519 is a secure algorithm for key agreement - keyPairGenerator = KeyPairGenerator.getInstance("X25519"); + KeyAgreement x25519Ka = KeyAgreement.getInstance("X25519"); // GOOD: X448 is a secure algorithm for key agreement - keyPairGenerator = KeyPairGenerator.getInstance("X448"); + KeyAgreement x448Ka = KeyAgreement.getInstance("X448"); // GOOD: SHA256withECDSA is a secure signature algorithm Signature sha256Ecdsa = Signature.getInstance("SHA256withECDSA"); + // GOOD: HMAC-based SecretKeySpec should not be flagged + new SecretKeySpec(null, "HMACSHA1"); + new SecretKeySpec(null, "HMACSHA256"); + new SecretKeySpec(null, "HMACSHA384"); + new SecretKeySpec(null, "SHA384withECDSA"); + + // GOOD: PBKDF2 key derivation is a secure algorithm + SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); + } catch (Exception e) { // fail } From 0c5e89a68eff355ca81aa710827194f501046496 Mon Sep 17 00:00:00 2001 From: MarkLee131 Date: Sat, 28 Mar 2026 17:39:40 +0800 Subject: [PATCH 180/185] Exclude bounds-check arithmetic from tainted-arithmetic sinks The java/tainted-arithmetic query now recognizes when an arithmetic expression appears directly as an operand of a comparison (e.g., `if (off + len > array.length)`). Such expressions are bounds checks, not vulnerable computations, and are excluded via the existing overflowIrrelevant predicate. Add test cases for bounds-checking patterns that should not be flagged. --- ...2026-03-28-tainted-arithmetic-bounds-check.md | 4 ++++ .../code/java/security/ArithmeticCommon.qll | 16 +++++++++++++++- .../CWE-190/semmle/tests/ArithmeticTainted.java | 14 ++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 java/ql/lib/change-notes/2026-03-28-tainted-arithmetic-bounds-check.md diff --git a/java/ql/lib/change-notes/2026-03-28-tainted-arithmetic-bounds-check.md b/java/ql/lib/change-notes/2026-03-28-tainted-arithmetic-bounds-check.md new file mode 100644 index 00000000000..238b1e2978f --- /dev/null +++ b/java/ql/lib/change-notes/2026-03-28-tainted-arithmetic-bounds-check.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The `java/tainted-arithmetic` query no longer flags arithmetic expressions that are used directly as an operand of a comparison in bounds-checking patterns. For example, `if (off + len > array.length)` is now recognized as a bounds check rather than a potentially vulnerable computation, reducing false positives. diff --git a/java/ql/lib/semmle/code/java/security/ArithmeticCommon.qll b/java/ql/lib/semmle/code/java/security/ArithmeticCommon.qll index 9282e766627..791c1ab7ba0 100644 --- a/java/ql/lib/semmle/code/java/security/ArithmeticCommon.qll +++ b/java/ql/lib/semmle/code/java/security/ArithmeticCommon.qll @@ -132,7 +132,21 @@ private predicate inBitwiseAnd(Expr exp) { /** Holds if overflow/underflow is irrelevant for this expression. */ predicate overflowIrrelevant(Expr exp) { inBitwiseAnd(exp) or - exp.getEnclosingCallable() instanceof HashCodeMethod + exp.getEnclosingCallable() instanceof HashCodeMethod or + arithmeticUsedInBoundsCheck(exp) +} + +/** + * Holds if `exp` is an arithmetic expression used directly as an operand of a + * comparison, indicating it is part of a bounds check rather than a vulnerable + * computation. For example, in `if (off + len > array.length)`, the addition + * is the bounds check itself. + */ +private predicate arithmeticUsedInBoundsCheck(ArithExpr exp) { + exists(ComparisonExpr comp | + comp.getAnOperand() = exp and + comp.getEnclosingStmt() instanceof IfStmt + ) } /** diff --git a/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTainted.java b/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTainted.java index 5fde69929b2..80a83392873 100644 --- a/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTainted.java +++ b/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTainted.java @@ -138,4 +138,18 @@ public class ArithmeticTainted { // BAD: may underflow if input data is very small --data; } + + public static void boundsCheckGood(byte[] bs, int off, int len) { + // GOOD: arithmetic used directly in a bounds check, not as a computation + if (off + len > bs.length) { + throw new IndexOutOfBoundsException(); + } + } + + public static void boundsCheckGood2(int[] arr, int offset, int count) { + // GOOD: subtraction used directly in a bounds check + if (offset - count < 0) { + throw new IndexOutOfBoundsException(); + } + } } From ea9b99f67c575574a484d1de0a2cd54b866d771c Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> Date: Sat, 28 Mar 2026 16:36:39 +0000 Subject: [PATCH 181/185] Rephrase change note --- .../change-notes/2026-03-27-add-ec-to-secure-algorithms.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/lib/change-notes/2026-03-27-add-ec-to-secure-algorithms.md b/java/ql/lib/change-notes/2026-03-27-add-ec-to-secure-algorithms.md index 1e323fafd35..adf25c03a59 100644 --- a/java/ql/lib/change-notes/2026-03-27-add-ec-to-secure-algorithms.md +++ b/java/ql/lib/change-notes/2026-03-27-add-ec-to-secure-algorithms.md @@ -1,5 +1,5 @@ --- category: minorAnalysis --- -* The `java/potentially-weak-cryptographic-algorithm` query no longer flags Elliptic Curve algorithms (`EC`, `ECDSA`, `ECDH`, `EdDSA`, `Ed25519`, `Ed448`, `XDH`, `X25519`, `X448`), HMAC-based algorithms (`HMACSHA1`, `HMACSHA256`, `HMACSHA384`, `HMACSHA512`), or PBKDF2 key derivation as potentially insecure. These are modern, secure algorithms recommended by NIST and other standards bodies. Previously, these algorithms were not included in the secure algorithm whitelist, causing false positives when using standard Java cryptographic APIs such as `KeyPairGenerator.getInstance("EC")` or `new SecretKeySpec(key, "HMACSHA256")`. -* The `Signature.getInstance(...)` method is now modeled as a `CryptoAlgoSpec` sink, alongside the existing `Signature` constructor sink. This ensures that algorithm strings passed to `Signature.getInstance(...)` are also checked by the query. +* The `java/potentially-weak-cryptographic-algorithm` query no longer flags Elliptic Curve algorithms (`EC`, `ECDSA`, `ECDH`, `EdDSA`, `Ed25519`, `Ed448`, `XDH`, `X25519`, `X448`), HMAC-based algorithms (`HMACSHA1`, `HMACSHA256`, `HMACSHA384`, `HMACSHA512`), or PBKDF2 key derivation as potentially insecure. These are modern, secure algorithms recommended by NIST and other standards bodies. This will reduce the number of false positives for this query. +* The first argument of the method `getInstance` of `java.security.Signature` is now modeled as a sink for `java/potentially-weak-cryptographic-algorithm`, `java/weak-cryptographic-algorithm` and `java/rsa-without-oaep`. From 2b8558706f07b170a83426e4bdb0b934182a7012 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> Date: Sat, 28 Mar 2026 16:39:16 +0000 Subject: [PATCH 182/185] Add sentence to change note. --- .../lib/change-notes/2026-03-27-add-ec-to-secure-algorithms.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/lib/change-notes/2026-03-27-add-ec-to-secure-algorithms.md b/java/ql/lib/change-notes/2026-03-27-add-ec-to-secure-algorithms.md index adf25c03a59..ee53bedd417 100644 --- a/java/ql/lib/change-notes/2026-03-27-add-ec-to-secure-algorithms.md +++ b/java/ql/lib/change-notes/2026-03-27-add-ec-to-secure-algorithms.md @@ -2,4 +2,4 @@ category: minorAnalysis --- * The `java/potentially-weak-cryptographic-algorithm` query no longer flags Elliptic Curve algorithms (`EC`, `ECDSA`, `ECDH`, `EdDSA`, `Ed25519`, `Ed448`, `XDH`, `X25519`, `X448`), HMAC-based algorithms (`HMACSHA1`, `HMACSHA256`, `HMACSHA384`, `HMACSHA512`), or PBKDF2 key derivation as potentially insecure. These are modern, secure algorithms recommended by NIST and other standards bodies. This will reduce the number of false positives for this query. -* The first argument of the method `getInstance` of `java.security.Signature` is now modeled as a sink for `java/potentially-weak-cryptographic-algorithm`, `java/weak-cryptographic-algorithm` and `java/rsa-without-oaep`. +* The first argument of the method `getInstance` of `java.security.Signature` is now modeled as a sink for `java/potentially-weak-cryptographic-algorithm`, `java/weak-cryptographic-algorithm` and `java/rsa-without-oaep`. This will increase the number of alerts for these queries. From f5cfc5e282d73e4f89eb2377aa9e7966ed54d8e1 Mon Sep 17 00:00:00 2001 From: Kaixuan Li Date: Sun, 29 Mar 2026 10:25:10 +0800 Subject: [PATCH 183/185] Update java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTainted.java Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> --- .../security/CWE-190/semmle/tests/ArithmeticTainted.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTainted.java b/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTainted.java index 80a83392873..04020aac31f 100644 --- a/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTainted.java +++ b/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTainted.java @@ -119,6 +119,8 @@ public class ArithmeticTainted { test2(data); test3(data); test4(data); + boundsCheckGood(null, data, 5); + boundsCheckGood2(null, data, 5); } } From b595a70384d4e118dd5fdb94afbb73e27474fb40 Mon Sep 17 00:00:00 2001 From: Kaixuan Li Date: Sun, 29 Mar 2026 11:45:27 +0800 Subject: [PATCH 184/185] Update java/ql/lib/change-notes/2026-03-28-tainted-arithmetic-bounds-check.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../change-notes/2026-03-28-tainted-arithmetic-bounds-check.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/lib/change-notes/2026-03-28-tainted-arithmetic-bounds-check.md b/java/ql/lib/change-notes/2026-03-28-tainted-arithmetic-bounds-check.md index 238b1e2978f..0688815c822 100644 --- a/java/ql/lib/change-notes/2026-03-28-tainted-arithmetic-bounds-check.md +++ b/java/ql/lib/change-notes/2026-03-28-tainted-arithmetic-bounds-check.md @@ -1,4 +1,4 @@ --- category: minorAnalysis --- -* The `java/tainted-arithmetic` query no longer flags arithmetic expressions that are used directly as an operand of a comparison in bounds-checking patterns. For example, `if (off + len > array.length)` is now recognized as a bounds check rather than a potentially vulnerable computation, reducing false positives. +* The `java/tainted-arithmetic` query no longer flags arithmetic expressions that are used directly as an operand of a comparison in `if`-condition bounds-checking patterns. For example, `if (off + len > array.length)` is now recognized as a bounds check rather than a potentially vulnerable computation, reducing false positives. From e6adfbca77eeb010bd0a8fbb4df5857d8829f177 Mon Sep 17 00:00:00 2001 From: MarkLee131 Date: Sun, 29 Mar 2026 11:53:06 +0800 Subject: [PATCH 185/185] Address review: update QLDoc comment and fix expected test output - Clarify that arithmeticUsedInBoundsCheck applies to if-condition comparisons, not all comparisons - Update expected test line numbers to reflect added test calls --- .../code/java/security/ArithmeticCommon.qll | 6 +-- .../semmle/tests/ArithmeticTainted.expected | 40 +++++++++---------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/ArithmeticCommon.qll b/java/ql/lib/semmle/code/java/security/ArithmeticCommon.qll index 791c1ab7ba0..42b7ec7b02d 100644 --- a/java/ql/lib/semmle/code/java/security/ArithmeticCommon.qll +++ b/java/ql/lib/semmle/code/java/security/ArithmeticCommon.qll @@ -138,9 +138,9 @@ predicate overflowIrrelevant(Expr exp) { /** * Holds if `exp` is an arithmetic expression used directly as an operand of a - * comparison, indicating it is part of a bounds check rather than a vulnerable - * computation. For example, in `if (off + len > array.length)`, the addition - * is the bounds check itself. + * comparison in an `if`-condition, indicating it is part of a bounds check + * rather than a vulnerable computation. For example, in + * `if (off + len > array.length)`, the addition is the bounds check itself. */ private predicate arithmeticUsedInBoundsCheck(ArithExpr exp) { exists(ComparisonExpr comp | diff --git a/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTainted.expected b/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTainted.expected index f7277e3079c..a39920b9065 100644 --- a/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTainted.expected +++ b/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTainted.expected @@ -4,10 +4,10 @@ | ArithmeticTainted.java:50:17:50:24 | ... + ... | ArithmeticTainted.java:17:46:17:54 | System.in : InputStream | ArithmeticTainted.java:50:17:50:20 | data | This arithmetic expression depends on a $@, potentially causing an overflow. | ArithmeticTainted.java:17:46:17:54 | System.in | user-provided value | | ArithmeticTainted.java:71:17:71:27 | ... + ... | ArithmeticTainted.java:17:46:17:54 | System.in : InputStream | ArithmeticTainted.java:71:17:71:23 | herring | This arithmetic expression depends on a $@, potentially causing an overflow. | ArithmeticTainted.java:17:46:17:54 | System.in | user-provided value | | ArithmeticTainted.java:95:37:95:46 | ... + ... | ArithmeticTainted.java:17:46:17:54 | System.in : InputStream | ArithmeticTainted.java:95:37:95:40 | data | This arithmetic expression depends on a $@, potentially causing an overflow. | ArithmeticTainted.java:17:46:17:54 | System.in | user-provided value | -| ArithmeticTainted.java:127:3:127:8 | ...++ | ArithmeticTainted.java:17:46:17:54 | System.in : InputStream | ArithmeticTainted.java:127:3:127:6 | data | This arithmetic expression depends on a $@, potentially causing an overflow. | ArithmeticTainted.java:17:46:17:54 | System.in | user-provided value | -| ArithmeticTainted.java:131:3:131:8 | ++... | ArithmeticTainted.java:17:46:17:54 | System.in : InputStream | ArithmeticTainted.java:131:5:131:8 | data | This arithmetic expression depends on a $@, potentially causing an overflow. | ArithmeticTainted.java:17:46:17:54 | System.in | user-provided value | -| ArithmeticTainted.java:135:3:135:8 | ...-- | ArithmeticTainted.java:17:46:17:54 | System.in : InputStream | ArithmeticTainted.java:135:3:135:6 | data | This arithmetic expression depends on a $@, potentially causing an underflow. | ArithmeticTainted.java:17:46:17:54 | System.in | user-provided value | -| ArithmeticTainted.java:139:3:139:8 | --... | ArithmeticTainted.java:17:46:17:54 | System.in : InputStream | ArithmeticTainted.java:139:5:139:8 | data | This arithmetic expression depends on a $@, potentially causing an underflow. | ArithmeticTainted.java:17:46:17:54 | System.in | user-provided value | +| ArithmeticTainted.java:129:3:129:8 | ...++ | ArithmeticTainted.java:17:46:17:54 | System.in : InputStream | ArithmeticTainted.java:129:3:129:6 | data | This arithmetic expression depends on a $@, potentially causing an overflow. | ArithmeticTainted.java:17:46:17:54 | System.in | user-provided value | +| ArithmeticTainted.java:133:3:133:8 | ++... | ArithmeticTainted.java:17:46:17:54 | System.in : InputStream | ArithmeticTainted.java:133:5:133:8 | data | This arithmetic expression depends on a $@, potentially causing an overflow. | ArithmeticTainted.java:17:46:17:54 | System.in | user-provided value | +| ArithmeticTainted.java:137:3:137:8 | ...-- | ArithmeticTainted.java:17:46:17:54 | System.in : InputStream | ArithmeticTainted.java:137:3:137:6 | data | This arithmetic expression depends on a $@, potentially causing an underflow. | ArithmeticTainted.java:17:46:17:54 | System.in | user-provided value | +| ArithmeticTainted.java:141:3:141:8 | --... | ArithmeticTainted.java:17:46:17:54 | System.in : InputStream | ArithmeticTainted.java:141:5:141:8 | data | This arithmetic expression depends on a $@, potentially causing an underflow. | ArithmeticTainted.java:17:46:17:54 | System.in | user-provided value | edges | ArithmeticTainted.java:17:24:17:64 | new InputStreamReader(...) : InputStreamReader | ArithmeticTainted.java:18:40:18:56 | readerInputStream : InputStreamReader | provenance | | | ArithmeticTainted.java:17:24:17:64 | new InputStreamReader(...) : InputStreamReader | ArithmeticTainted.java:18:40:18:56 | readerInputStream : InputStreamReader | provenance | | @@ -38,14 +38,14 @@ edges | ArithmeticTainted.java:66:18:66:24 | tainted : Holder [dat] : Number | ArithmeticTainted.java:66:18:66:34 | getData(...) : Number | provenance | | | ArithmeticTainted.java:66:18:66:24 | tainted : Holder [dat] : Number | Holder.java:16:13:16:19 | parameter this : Holder [dat] : Number | provenance | | | ArithmeticTainted.java:66:18:66:34 | getData(...) : Number | ArithmeticTainted.java:71:17:71:23 | herring | provenance | | -| ArithmeticTainted.java:118:9:118:12 | data : Number | ArithmeticTainted.java:125:26:125:33 | data : Number | provenance | | -| ArithmeticTainted.java:119:10:119:13 | data : Number | ArithmeticTainted.java:129:27:129:34 | data : Number | provenance | | -| ArithmeticTainted.java:120:10:120:13 | data : Number | ArithmeticTainted.java:133:27:133:34 | data : Number | provenance | | -| ArithmeticTainted.java:121:10:121:13 | data : Number | ArithmeticTainted.java:137:27:137:34 | data : Number | provenance | | -| ArithmeticTainted.java:125:26:125:33 | data : Number | ArithmeticTainted.java:127:3:127:6 | data | provenance | | -| ArithmeticTainted.java:129:27:129:34 | data : Number | ArithmeticTainted.java:131:5:131:8 | data | provenance | | -| ArithmeticTainted.java:133:27:133:34 | data : Number | ArithmeticTainted.java:135:3:135:6 | data | provenance | | -| ArithmeticTainted.java:137:27:137:34 | data : Number | ArithmeticTainted.java:139:5:139:8 | data | provenance | | +| ArithmeticTainted.java:118:9:118:12 | data : Number | ArithmeticTainted.java:127:26:127:33 | data : Number | provenance | | +| ArithmeticTainted.java:119:10:119:13 | data : Number | ArithmeticTainted.java:131:27:131:34 | data : Number | provenance | | +| ArithmeticTainted.java:120:10:120:13 | data : Number | ArithmeticTainted.java:135:27:135:34 | data : Number | provenance | | +| ArithmeticTainted.java:121:10:121:13 | data : Number | ArithmeticTainted.java:139:27:139:34 | data : Number | provenance | | +| ArithmeticTainted.java:127:26:127:33 | data : Number | ArithmeticTainted.java:129:3:129:6 | data | provenance | | +| ArithmeticTainted.java:131:27:131:34 | data : Number | ArithmeticTainted.java:133:5:133:8 | data | provenance | | +| ArithmeticTainted.java:135:27:135:34 | data : Number | ArithmeticTainted.java:137:3:137:6 | data | provenance | | +| ArithmeticTainted.java:139:27:139:34 | data : Number | ArithmeticTainted.java:141:5:141:8 | data | provenance | | | Holder.java:12:22:12:26 | d : Number | Holder.java:13:9:13:9 | d : Number | provenance | | | Holder.java:13:3:13:5 | this <.field> [post update] : Holder [dat] : Number | Holder.java:12:14:12:20 | parameter this [Return] : Holder [dat] : Number | provenance | | | Holder.java:13:9:13:9 | d : Number | Holder.java:13:3:13:5 | this <.field> [post update] : Holder [dat] : Number | provenance | | @@ -86,14 +86,14 @@ nodes | ArithmeticTainted.java:119:10:119:13 | data : Number | semmle.label | data : Number | | ArithmeticTainted.java:120:10:120:13 | data : Number | semmle.label | data : Number | | ArithmeticTainted.java:121:10:121:13 | data : Number | semmle.label | data : Number | -| ArithmeticTainted.java:125:26:125:33 | data : Number | semmle.label | data : Number | -| ArithmeticTainted.java:127:3:127:6 | data | semmle.label | data | -| ArithmeticTainted.java:129:27:129:34 | data : Number | semmle.label | data : Number | -| ArithmeticTainted.java:131:5:131:8 | data | semmle.label | data | -| ArithmeticTainted.java:133:27:133:34 | data : Number | semmle.label | data : Number | -| ArithmeticTainted.java:135:3:135:6 | data | semmle.label | data | -| ArithmeticTainted.java:137:27:137:34 | data : Number | semmle.label | data : Number | -| ArithmeticTainted.java:139:5:139:8 | data | semmle.label | data | +| ArithmeticTainted.java:127:26:127:33 | data : Number | semmle.label | data : Number | +| ArithmeticTainted.java:129:3:129:6 | data | semmle.label | data | +| ArithmeticTainted.java:131:27:131:34 | data : Number | semmle.label | data : Number | +| ArithmeticTainted.java:133:5:133:8 | data | semmle.label | data | +| ArithmeticTainted.java:135:27:135:34 | data : Number | semmle.label | data : Number | +| ArithmeticTainted.java:137:3:137:6 | data | semmle.label | data | +| ArithmeticTainted.java:139:27:139:34 | data : Number | semmle.label | data : Number | +| ArithmeticTainted.java:141:5:141:8 | data | semmle.label | data | | Holder.java:12:14:12:20 | parameter this [Return] : Holder [dat] : Number | semmle.label | parameter this [Return] : Holder [dat] : Number | | Holder.java:12:22:12:26 | d : Number | semmle.label | d : Number | | Holder.java:13:3:13:5 | this <.field> [post update] : Holder [dat] : Number | semmle.label | this <.field> [post update] : Holder [dat] : Number |