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/111] 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/111] 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/111] 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 79841bbc00441663bc36ae8a12b90b0a9968f2a6 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 10 Mar 2026 16:20:50 +0100 Subject: [PATCH 004/111] =?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 1253553aeccd237d09d2c7d0f3a8aaf968ec114a Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 25 Feb 2026 09:09:51 +0100 Subject: [PATCH 005/111] JS: Add browser source kinds --- .../frameworks/data/ModelsAsData.qll | 12 +++++++ .../security/dataflow/RemoteFlowSources.qll | 36 ++++++++++++------- 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll index e4adff2a9ac..391f2ea1b33 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/ModelsAsData.qll @@ -35,6 +35,18 @@ private class RemoteFlowSourceFromMaD extends RemoteFlowSource { override string getSourceType() { result = "Remote flow" } } +private class ClientSideRemoteFlowSourceFromMaD extends ClientSideRemoteFlowSource { + private ClientSideRemoteFlowKind kind; + + ClientSideRemoteFlowSourceFromMaD() { ModelOutput::sourceNode(this, kind) } + + override ClientSideRemoteFlowKind getKind() { result = kind } + + override string getSourceType() { + result = "Source node (" + this.getThreatModel() + ") [from data-extension]" + } +} + /** * A threat-model flow source originating from a data extension. */ diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/RemoteFlowSources.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/RemoteFlowSources.qll index 9f4975e605a..5b1424fb86e 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/RemoteFlowSources.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/RemoteFlowSources.qll @@ -43,35 +43,47 @@ import Cached /** * A type of remote flow source that is specific to the browser environment. + * + * The underlying string also corresponds to a source kind. */ class ClientSideRemoteFlowKind extends string { ClientSideRemoteFlowKind() { - this = ["query", "fragment", "path", "url", "name", "message-event"] + this = + [ + "browser", "browser-url-query", "browser-url-fragment", "browser-url-path", "browser-url", + "browser-window-name", "browser-message-event" + ] } /** - * Holds if this is the `query` kind, describing sources derived from the query parameters of the browser URL, + * Holds if this is the `browser` kind, indicating a remote source in a browser context, that does not fit into one + * of the more specific kinds. + */ + predicate isGenericBrowserSourceKind() { this = "browser" } + + /** + * Holds if this is the `browser-url-query` kind, describing sources derived from the query parameters of the browser URL, * such as `location.search`. */ - predicate isQuery() { this = "query" } + predicate isQuery() { this = "browser-url-query" } /** - * Holds if this is the `frgament` kind, describing sources derived from the fragment part of the browser URL, + * Holds if this is the `browser-url-fragment` kind, describing sources derived from the fragment part of the browser URL, * such as `location.hash`. */ - predicate isFragment() { this = "fragment" } + predicate isFragment() { this = "browser-url-fragment" } /** - * Holds if this is the `path` kind, describing sources derived from the pathname of the browser URL, + * Holds if this is the `browser-url-path` kind, describing sources derived from the pathname of the browser URL, * such as `location.pathname`. */ - predicate isPath() { this = "path" } + predicate isPath() { this = "browser-url-path" } /** - * Holds if this is the `url` kind, describing sources derived from the browser URL, + * Holds if this is the `browser-url` kind, describing sources derived from the browser URL, * where the untrusted part of the URL is prefixed by trusted data, such as the scheme and hostname. */ - predicate isUrl() { this = "url" } + predicate isUrl() { this = "browser-url" } /** Holds if this is the `query` or `fragment` kind. */ predicate isQueryOrFragment() { this.isQuery() or this.isFragment() } @@ -83,13 +95,13 @@ class ClientSideRemoteFlowKind extends string { predicate isPathOrUrl() { this.isPath() or this.isUrl() } /** Holds if this is the `name` kind, describing sources derived from the window name, such as `window.name`. */ - predicate isWindowName() { this = "name" } + predicate isWindowName() { this = "browser-window-name" } /** - * Holds if this is the `message-event` kind, describing sources derived from cross-window message passing, + * Holds if this is the `browser-message-event` kind, describing sources derived from cross-window message passing, * such as `event` in `window.onmessage = event => {...}`. */ - predicate isMessageEvent() { this = "message-event" } + predicate isMessageEvent() { this = "browser-message-event" } } /** From 4a001f960f161d3f9e001af6a4dcdc84b26b46ee Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 25 Feb 2026 09:41:38 +0100 Subject: [PATCH 006/111] JS: Add tests in request forgery queries --- .../Security/CWE-918/ClientSideRequestForgery.expected | 6 ++++++ .../Security/CWE-918/ClientSideRequestForgery.ext.yml | 7 +++++++ .../query-tests/Security/CWE-918/RequestForgery.expected | 6 ++++++ .../query-tests/Security/CWE-918/RequestForgery.ext.yml | 7 +++++++ .../ql/test/query-tests/Security/CWE-918/clientSide.js | 3 +++ .../ql/test/query-tests/Security/CWE-918/serverSide.js | 3 +++ 6 files changed, 32 insertions(+) create mode 100644 javascript/ql/test/query-tests/Security/CWE-918/ClientSideRequestForgery.ext.yml create mode 100644 javascript/ql/test/query-tests/Security/CWE-918/RequestForgery.ext.yml diff --git a/javascript/ql/test/query-tests/Security/CWE-918/ClientSideRequestForgery.expected b/javascript/ql/test/query-tests/Security/CWE-918/ClientSideRequestForgery.expected index 1d6b8781db7..aed2cabe358 100644 --- a/javascript/ql/test/query-tests/Security/CWE-918/ClientSideRequestForgery.expected +++ b/javascript/ql/test/query-tests/Security/CWE-918/ClientSideRequestForgery.expected @@ -3,6 +3,7 @@ | clientSide.js:14:5:14:64 | request ... search) | clientSide.js:14:42:14:63 | window. ... .search | clientSide.js:14:13:14:63 | 'https: ... .search | The $@ of this request depends on a $@. | clientSide.js:14:13:14:63 | 'https: ... .search | URL | clientSide.js:14:42:14:63 | window. ... .search | user-provided value | | clientSide.js:17:5:17:58 | request ... '/id') | clientSide.js:16:22:16:41 | window.location.hash | clientSide.js:17:13:17:57 | 'https: ... + '/id' | The $@ of this request depends on a $@. | clientSide.js:17:13:17:57 | 'https: ... + '/id' | URL | clientSide.js:16:22:16:41 | window.location.hash | user-provided value | | clientSide.js:21:5:21:54 | request ... '/id') | clientSide.js:20:18:20:28 | window.name | clientSide.js:21:13:21:53 | 'https: ... + '/id' | The $@ of this request depends on a $@. | clientSide.js:21:13:21:53 | 'https: ... + '/id' | URL | clientSide.js:20:18:20:28 | window.name | user-provided value | +| clientSide.js:27:5:27:19 | request(custom) | clientSide.js:26:20:26:56 | require ... ource() | clientSide.js:27:13:27:18 | custom | The $@ of this request depends on a $@. | clientSide.js:27:13:27:18 | custom | URL | clientSide.js:26:20:26:56 | require ... ource() | user-provided value | edges | clientSide.js:11:11:11:15 | query | clientSide.js:12:42:12:46 | query | provenance | | | clientSide.js:11:19:11:40 | window. ... .search | clientSide.js:11:19:11:53 | window. ... ring(1) | provenance | | @@ -16,6 +17,8 @@ edges | clientSide.js:20:11:20:14 | name | clientSide.js:21:42:21:45 | name | provenance | | | clientSide.js:20:18:20:28 | window.name | clientSide.js:20:11:20:14 | name | provenance | | | clientSide.js:21:42:21:45 | name | clientSide.js:21:13:21:53 | 'https: ... + '/id' | provenance | | +| clientSide.js:26:11:26:16 | custom | clientSide.js:27:13:27:18 | custom | provenance | | +| clientSide.js:26:20:26:56 | require ... ource() | clientSide.js:26:11:26:16 | custom | provenance | | nodes | clientSide.js:11:11:11:15 | query | semmle.label | query | | clientSide.js:11:19:11:40 | window. ... .search | semmle.label | window. ... .search | @@ -33,4 +36,7 @@ nodes | clientSide.js:20:18:20:28 | window.name | semmle.label | window.name | | clientSide.js:21:13:21:53 | 'https: ... + '/id' | semmle.label | 'https: ... + '/id' | | clientSide.js:21:42:21:45 | name | semmle.label | name | +| clientSide.js:26:11:26:16 | custom | semmle.label | custom | +| clientSide.js:26:20:26:56 | require ... ource() | semmle.label | require ... ource() | +| clientSide.js:27:13:27:18 | custom | semmle.label | custom | subpaths diff --git a/javascript/ql/test/query-tests/Security/CWE-918/ClientSideRequestForgery.ext.yml b/javascript/ql/test/query-tests/Security/CWE-918/ClientSideRequestForgery.ext.yml new file mode 100644 index 00000000000..950186d58df --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-918/ClientSideRequestForgery.ext.yml @@ -0,0 +1,7 @@ +extensions: + - addsTo: + pack: codeql/javascript-all + extensible: sourceModel + data: + - ['testlib', 'Member[getBrowserSource].ReturnValue', 'browser-url-query'] + - ['testlib', 'Member[getServerSource].ReturnValue', 'remote'] diff --git a/javascript/ql/test/query-tests/Security/CWE-918/RequestForgery.expected b/javascript/ql/test/query-tests/Security/CWE-918/RequestForgery.expected index 1818e116d82..79383f58521 100644 --- a/javascript/ql/test/query-tests/Security/CWE-918/RequestForgery.expected +++ b/javascript/ql/test/query-tests/Security/CWE-918/RequestForgery.expected @@ -39,6 +39,7 @@ | serverSide.js:143:5:143:26 | axios.g ... t.href) | serverSide.js:139:19:139:31 | req.query.url | serverSide.js:143:15:143:25 | target.href | The $@ of this request depends on a $@. | serverSide.js:143:15:143:25 | target.href | URL | serverSide.js:139:19:139:31 | req.query.url | user-provided value | | serverSide.js:145:5:145:25 | axios.g ... dedUrl) | serverSide.js:139:19:139:31 | req.query.url | serverSide.js:145:15:145:24 | encodedUrl | The $@ of this request depends on a $@. | serverSide.js:145:15:145:24 | encodedUrl | URL | serverSide.js:139:19:139:31 | req.query.url | user-provided value | | serverSide.js:147:5:147:25 | axios.g ... pedUrl) | serverSide.js:139:19:139:31 | req.query.url | serverSide.js:147:15:147:24 | escapedUrl | The $@ of this request depends on a $@. | serverSide.js:147:15:147:24 | escapedUrl | URL | serverSide.js:139:19:139:31 | req.query.url | user-provided value | +| serverSide.js:151:1:151:15 | request(custom) | serverSide.js:150:16:150:51 | require ... ource() | serverSide.js:151:9:151:14 | custom | The $@ of this request depends on a $@. | serverSide.js:151:9:151:14 | custom | URL | serverSide.js:150:16:150:51 | require ... ource() | user-provided value | edges | Request/app/api/proxy/route2.serverSide.ts:4:9:4:15 | { url } | Request/app/api/proxy/route2.serverSide.ts:4:11:4:13 | url | provenance | | | Request/app/api/proxy/route2.serverSide.ts:4:11:4:13 | url | Request/app/api/proxy/route2.serverSide.ts:5:27:5:29 | url | provenance | | @@ -144,6 +145,8 @@ edges | serverSide.js:146:11:146:20 | escapedUrl | serverSide.js:147:15:147:24 | escapedUrl | provenance | | | serverSide.js:146:24:146:36 | escape(input) | serverSide.js:146:11:146:20 | escapedUrl | provenance | | | serverSide.js:146:31:146:35 | input | serverSide.js:146:24:146:36 | escape(input) | provenance | | +| serverSide.js:150:7:150:12 | custom | serverSide.js:151:9:151:14 | custom | provenance | | +| serverSide.js:150:16:150:51 | require ... ource() | serverSide.js:150:7:150:12 | custom | provenance | | nodes | Request/app/api/proxy/route2.serverSide.ts:4:9:4:15 | { url } | semmle.label | { url } | | Request/app/api/proxy/route2.serverSide.ts:4:11:4:13 | url | semmle.label | url | @@ -271,4 +274,7 @@ nodes | serverSide.js:146:24:146:36 | escape(input) | semmle.label | escape(input) | | serverSide.js:146:31:146:35 | input | semmle.label | input | | serverSide.js:147:15:147:24 | escapedUrl | semmle.label | escapedUrl | +| serverSide.js:150:7:150:12 | custom | semmle.label | custom | +| serverSide.js:150:16:150:51 | require ... ource() | semmle.label | require ... ource() | +| serverSide.js:151:9:151:14 | custom | semmle.label | custom | subpaths diff --git a/javascript/ql/test/query-tests/Security/CWE-918/RequestForgery.ext.yml b/javascript/ql/test/query-tests/Security/CWE-918/RequestForgery.ext.yml new file mode 100644 index 00000000000..950186d58df --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-918/RequestForgery.ext.yml @@ -0,0 +1,7 @@ +extensions: + - addsTo: + pack: codeql/javascript-all + extensible: sourceModel + data: + - ['testlib', 'Member[getBrowserSource].ReturnValue', 'browser-url-query'] + - ['testlib', 'Member[getServerSource].ReturnValue', 'remote'] diff --git a/javascript/ql/test/query-tests/Security/CWE-918/clientSide.js b/javascript/ql/test/query-tests/Security/CWE-918/clientSide.js index aa4174cd9ab..1651fb01f44 100644 --- a/javascript/ql/test/query-tests/Security/CWE-918/clientSide.js +++ b/javascript/ql/test/query-tests/Security/CWE-918/clientSide.js @@ -22,4 +22,7 @@ export function MyComponent() { request('https://example.com/api?q=' + name); request(window.location.href + '?q=123'); + + const custom = require('testlib').getBrowserSource(); // $ Source[js/client-side-request-forgery] + request(custom) // $ Alert[js/client-side-request-forgery]; } diff --git a/javascript/ql/test/query-tests/Security/CWE-918/serverSide.js b/javascript/ql/test/query-tests/Security/CWE-918/serverSide.js index 38f2bb72ac3..7cf16ccb1ed 100644 --- a/javascript/ql/test/query-tests/Security/CWE-918/serverSide.js +++ b/javascript/ql/test/query-tests/Security/CWE-918/serverSide.js @@ -146,3 +146,6 @@ var server2 = http.createServer(function (req, res) { const escapedUrl = escape(input); axios.get(escapedUrl); // $ Alert[js/request-forgery] }); + +const custom = require('testlib').getServerSource(); // $ Source[js/request-forgery] +request(custom) // $ Alert[js/request-forgery]; From 5db30c994794d3a157373a074b78e5222a5c1d4f Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 11 Mar 2026 15:40:07 +0100 Subject: [PATCH 007/111] JS: Add change note --- .../ql/lib/change-notes/2026-03-11-browser-source-kinds.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 javascript/ql/lib/change-notes/2026-03-11-browser-source-kinds.md diff --git a/javascript/ql/lib/change-notes/2026-03-11-browser-source-kinds.md b/javascript/ql/lib/change-notes/2026-03-11-browser-source-kinds.md new file mode 100644 index 00000000000..71d06f3d1b6 --- /dev/null +++ b/javascript/ql/lib/change-notes/2026-03-11-browser-source-kinds.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added support for browser-specific source kinds (`browser`, `browser-url-query`, `browser-url-fragment`, `browser-url-path`, `browser-url`, `browser-window-name`, `browser-message-event`) that can be used in data extensions to model sources in browser environments. 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 008/111] 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 009/111] 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 010/111] 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 011/111] 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 012/111] 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 013/111] 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 84d1828a9c47280ce9f6ea0de180a050cbf76ae5 Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 12 Mar 2026 09:35:36 +0100 Subject: [PATCH 014/111] JavaScript extractor: recognise bun and tsx in shebang lines Update the shebang regexp (renamed NODE_INVOCATION -> JS_INVOCATION) to also match 'bun' and 'tsx' so that scripts using these runtimes are correctly identified as JavaScript files. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../src/com/semmle/js/extractor/FileExtractor.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/javascript/extractor/src/com/semmle/js/extractor/FileExtractor.java b/javascript/extractor/src/com/semmle/js/extractor/FileExtractor.java index 9cf5c3b295c..70d6677855d 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/FileExtractor.java +++ b/javascript/extractor/src/com/semmle/js/extractor/FileExtractor.java @@ -28,13 +28,13 @@ import com.semmle.util.trap.TrapWriter.Label; */ public class FileExtractor { /** - * Pattern to use on the shebang line of a script to identify whether it is a Node.js script. + * Pattern to use on the shebang line of a script to identify whether it is a JavaScript script. * - *

There are many different ways of invoking the Node.js interpreter (directly, through {@code + *

There are many different ways of invoking a JavaScript interpreter (directly, through {@code * env}, with or without flags, with or without modified environment, etc.), so we simply look for - * the word {@code "node"} or {@code "nodejs"}. + * the word {@code "node"}, {@code "nodejs"}, {@code "bun"}, or {@code "tsx"}. */ - private static final Pattern NODE_INVOCATION = Pattern.compile("\\bnode(js)?\\b"); + private static final Pattern JS_INVOCATION = Pattern.compile("\\b(node(js)?|bun|tsx)\\b"); /** A pattern that matches strings starting with `{ "...":`, suggesting JSON data. */ public static final Pattern JSON_OBJECT_START = @@ -157,7 +157,7 @@ public class FileExtractor { // do a cheap check first if (firstLine != null && firstLine.startsWith("#!")) { // now do the slightly more expensive one - return NODE_INVOCATION.matcher(firstLine).find(); + return JS_INVOCATION.matcher(firstLine).find(); } } catch (IOException e) { Exceptions.ignore(e, "We simply skip this file."); @@ -302,7 +302,7 @@ public class FileExtractor { int lengthOfText = endOfLine - startOfText; String text = new String(bytes, startOfText, lengthOfText, StandardCharsets.UTF_8); // Check if the shebang is a recognized JavaScript intepreter. - return !NODE_INVOCATION.matcher(text).find(); + return !JS_INVOCATION.matcher(text).find(); } @Override From b8c44be59947db13145c573382d62d5c59ab3e22 Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 12 Mar 2026 09:46:35 +0100 Subject: [PATCH 015/111] Add QL test for bun/tsx shebang recognition in TypeScript files Add test files with #!/usr/bin/env bun, #!/usr/bin/env tsx, and #!/usr/bin/env node shebangs. The query lists extracted .ts files, verifying that all three shebangs are recognized and the files are not skipped by the extractor. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../test/library-tests/TypeScript/Shebangs/Shebangs.expected | 4 ++++ .../ql/test/library-tests/TypeScript/Shebangs/Shebangs.ql | 4 ++++ .../ql/test/library-tests/TypeScript/Shebangs/shebang_bun.ts | 2 ++ .../ql/test/library-tests/TypeScript/Shebangs/shebang_node.ts | 2 ++ .../ql/test/library-tests/TypeScript/Shebangs/shebang_tsx.ts | 2 ++ .../ql/test/library-tests/TypeScript/Shebangs/tsconfig.json | 3 +++ 6 files changed, 17 insertions(+) create mode 100644 javascript/ql/test/library-tests/TypeScript/Shebangs/Shebangs.expected create mode 100644 javascript/ql/test/library-tests/TypeScript/Shebangs/Shebangs.ql create mode 100644 javascript/ql/test/library-tests/TypeScript/Shebangs/shebang_bun.ts create mode 100644 javascript/ql/test/library-tests/TypeScript/Shebangs/shebang_node.ts create mode 100644 javascript/ql/test/library-tests/TypeScript/Shebangs/shebang_tsx.ts create mode 100644 javascript/ql/test/library-tests/TypeScript/Shebangs/tsconfig.json diff --git a/javascript/ql/test/library-tests/TypeScript/Shebangs/Shebangs.expected b/javascript/ql/test/library-tests/TypeScript/Shebangs/Shebangs.expected new file mode 100644 index 00000000000..3f4d018029a --- /dev/null +++ b/javascript/ql/test/library-tests/TypeScript/Shebangs/Shebangs.expected @@ -0,0 +1,4 @@ +| shebang_bun.ts | +| shebang_node.ts | +| shebang_tsx.ts | +| tsconfig.json | diff --git a/javascript/ql/test/library-tests/TypeScript/Shebangs/Shebangs.ql b/javascript/ql/test/library-tests/TypeScript/Shebangs/Shebangs.ql new file mode 100644 index 00000000000..1b3590b82d0 --- /dev/null +++ b/javascript/ql/test/library-tests/TypeScript/Shebangs/Shebangs.ql @@ -0,0 +1,4 @@ +import javascript + +from File f +select f.getRelativePath() diff --git a/javascript/ql/test/library-tests/TypeScript/Shebangs/shebang_bun.ts b/javascript/ql/test/library-tests/TypeScript/Shebangs/shebang_bun.ts new file mode 100644 index 00000000000..417e04ff16a --- /dev/null +++ b/javascript/ql/test/library-tests/TypeScript/Shebangs/shebang_bun.ts @@ -0,0 +1,2 @@ +#!/usr/bin/env bun +const x: number = 1; diff --git a/javascript/ql/test/library-tests/TypeScript/Shebangs/shebang_node.ts b/javascript/ql/test/library-tests/TypeScript/Shebangs/shebang_node.ts new file mode 100644 index 00000000000..10b11969aa5 --- /dev/null +++ b/javascript/ql/test/library-tests/TypeScript/Shebangs/shebang_node.ts @@ -0,0 +1,2 @@ +#!/usr/bin/env node +const x: number = 1; diff --git a/javascript/ql/test/library-tests/TypeScript/Shebangs/shebang_tsx.ts b/javascript/ql/test/library-tests/TypeScript/Shebangs/shebang_tsx.ts new file mode 100644 index 00000000000..31331240ced --- /dev/null +++ b/javascript/ql/test/library-tests/TypeScript/Shebangs/shebang_tsx.ts @@ -0,0 +1,2 @@ +#!/usr/bin/env tsx +const x: number = 1; diff --git a/javascript/ql/test/library-tests/TypeScript/Shebangs/tsconfig.json b/javascript/ql/test/library-tests/TypeScript/Shebangs/tsconfig.json new file mode 100644 index 00000000000..82194fc7ab0 --- /dev/null +++ b/javascript/ql/test/library-tests/TypeScript/Shebangs/tsconfig.json @@ -0,0 +1,3 @@ +{ + "include": ["."] +} From 1b6f3a43ef4f75187d9a050679b458b95c426a66 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 23 Feb 2026 10:41:43 +0100 Subject: [PATCH 016/111] 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 22e012c6f41174c14620e6db27762efca479f9f3 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 11 Mar 2026 11:41:43 +0000 Subject: [PATCH 017/111] Expand `isTypeExprTopDown` We should be using all subtypes of `FieldBase`. This allows us to find more type expressions, and is also simpler to evaluate. --- go/ql/lib/semmle/go/Expr.qll | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/go/ql/lib/semmle/go/Expr.qll b/go/ql/lib/semmle/go/Expr.qll index 4a4ab00f053..a7cb36be71f 100644 --- a/go/ql/lib/semmle/go/Expr.qll +++ b/go/ql/lib/semmle/go/Expr.qll @@ -2145,20 +2145,12 @@ private predicate isTypeExprTopDown(Expr e) { or e = any(ArrayTypeExpr ae).getElement() or - e = any(FieldDecl f).getTypeExpr() - or - e = any(ParameterDecl pd).getTypeExpr() + e = any(FieldBase fb).getTypeExpr() or e = any(TypeParamDecl tpd).getTypeConstraintExpr() or e = any(TypeParamDecl tpd).getNameExpr(_) or - e = any(ReceiverDecl rd).getTypeExpr() - or - e = any(ResultVariableDecl rvd).getTypeExpr() - or - e = any(MethodSpec md).getTypeExpr() - or e = any(MapTypeExpr mt).getKeyTypeExpr() or e = any(MapTypeExpr mt).getValueTypeExpr() From 39e038208914fda087b0dc85391c32bbb680a083 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 11 Mar 2026 12:20:10 +0000 Subject: [PATCH 018/111] Improve QLDoc for `isTypeExprTopDown` --- go/ql/lib/semmle/go/Expr.qll | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/go/ql/lib/semmle/go/Expr.qll b/go/ql/lib/semmle/go/Expr.qll index a7cb36be71f..ffadbe3ad78 100644 --- a/go/ql/lib/semmle/go/Expr.qll +++ b/go/ql/lib/semmle/go/Expr.qll @@ -2131,11 +2131,12 @@ private predicate isTypeExprBottomUp(Expr e) { * Holds if `e` must be a type expression because it either occurs in a syntactic * position where a type is expected, or it is part of a larger type expression. * - * This predicate is only needed on snapshots for which type information is - * incomplete. It is an underapproximation; in cases where it is syntactically ambiguous - * whether an expression refers to a type or a value, we conservatively assume that - * it may be the latter and so this predicate does not consider the expression to be - * a type expression. + * This predicate is only needed on databases for which type information is + * incomplete - for example, when some dependencies could not be reached during + * extraction. It is an underapproximation; in cases where it is syntactically + * ambiguous whether an expression refers to a type or a value, we conservatively + * assume that it may be the latter and so this predicate does not consider the + * expression to be a type expression. */ pragma[nomagic] private predicate isTypeExprTopDown(Expr e) { From a16c43881b8b49364621dd8cc63c6c32ed8447c0 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 11 Mar 2026 14:06:53 +0000 Subject: [PATCH 019/111] Use "database" instead of "snapshot" in QLDocs --- go/ql/lib/semmle/go/Expr.qll | 4 ++-- go/ql/lib/semmle/go/controlflow/IR.qll | 2 +- go/ql/src/filters/ClassifyFiles.ql | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/go/ql/lib/semmle/go/Expr.qll b/go/ql/lib/semmle/go/Expr.qll index ffadbe3ad78..54fec79e080 100644 --- a/go/ql/lib/semmle/go/Expr.qll +++ b/go/ql/lib/semmle/go/Expr.qll @@ -829,7 +829,7 @@ class ConversionExpr extends CallOrConversionExpr { /** * A function call expression. * - * On snapshots with incomplete type information, type conversions may be misclassified + * On databases with incomplete type information, type conversions may be misclassified * as function call expressions. * * Examples: @@ -2093,7 +2093,7 @@ class LabelName extends Name { * Holds if `e` is a type expression, as determined by a bottom-up syntactic * analysis starting with `TypeName`s. * - * On a snapshot with full type information, this predicate covers all type + * On a database with full type information, this predicate covers all type * expressions. However, if type information is missing then not all type names * may be identified as such, so not all type expressions can be determined by * a bottom-up analysis. In such cases, `isTypeExprTopDown` below is useful. diff --git a/go/ql/lib/semmle/go/controlflow/IR.qll b/go/ql/lib/semmle/go/controlflow/IR.qll index 144f0df6e7d..c6433900a73 100644 --- a/go/ql/lib/semmle/go/controlflow/IR.qll +++ b/go/ql/lib/semmle/go/controlflow/IR.qll @@ -294,7 +294,7 @@ module IR { /** * An IR instruction that reads the value of a field. * - * On snapshots with incomplete type information, method expressions may sometimes be + * On databases with incomplete type information, method expressions may sometimes be * misclassified as field reads. */ class FieldReadInstruction extends ComponentReadInstruction { diff --git a/go/ql/src/filters/ClassifyFiles.ql b/go/ql/src/filters/ClassifyFiles.ql index f5ac1258375..8e353740c1a 100644 --- a/go/ql/src/filters/ClassifyFiles.ql +++ b/go/ql/src/filters/ClassifyFiles.ql @@ -1,6 +1,6 @@ /** * @name Classify files - * @description This query produces a list of all files in a snapshot that are classified as + * @description This query produces a list of all files in a database that are classified as * generated code, test code or vendored-in library code. * @kind file-classifier * @id go/file-classifier From c27175598512499ec5a8008272c08d791f2290d9 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 10 Mar 2026 22:04:06 +0000 Subject: [PATCH 020/111] Add and use `exprRefersToNil` predicate --- go/ql/lib/semmle/go/Expr.qll | 5 ++++- go/ql/lib/semmle/go/dataflow/Properties.qll | 2 +- go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll | 6 +++--- go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll | 2 +- go/ql/src/RedundantCode/UnreachableStatement.ql | 2 +- go/ql/src/experimental/CWE-203/Timing.ql | 6 +++--- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/go/ql/lib/semmle/go/Expr.qll b/go/ql/lib/semmle/go/Expr.qll index 4a4ab00f053..53097c7a962 100644 --- a/go/ql/lib/semmle/go/Expr.qll +++ b/go/ql/lib/semmle/go/Expr.qll @@ -2035,6 +2035,9 @@ class ConstantName extends ValueName { override string getAPrimaryQlClass() { result = "ConstantName" } } +/** Holds if `e` is an expression that refers to the `nil` constant. */ +predicate exprRefersToNil(Expr e) { e.(ConstantName).getTarget() = Builtin::nil() } + /** * A name referring to a variable. * @@ -2175,7 +2178,7 @@ private predicate isTypeExprTopDown(Expr e) { or e = any(TypeSwitchStmt s).getACase().getExpr(_) and // special case: `nil` is allowed in a type case but isn't a type - not e = Builtin::nil().getAReference() + not exprRefersToNil(e) or e = any(SelectorExpr sel | isTypeExprTopDown(sel)).getBase() or diff --git a/go/ql/lib/semmle/go/dataflow/Properties.qll b/go/ql/lib/semmle/go/dataflow/Properties.qll index f7df3391f40..735deb19c9f 100644 --- a/go/ql/lib/semmle/go/dataflow/Properties.qll +++ b/go/ql/lib/semmle/go/dataflow/Properties.qll @@ -22,7 +22,7 @@ class Property extends TProperty { isTrue = eq.getPolarity().booleanXor(e.getBoolValue().booleanXor(outcome)) or this = IsNil(isTrue) and - e = Builtin::nil().getAReference() and + exprRefersToNil(e) and isTrue = eq.getPolarity().booleanXor(outcome).booleanNot() ) or diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll index 404eca4b4a2..ea1fc575076 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll @@ -560,7 +560,7 @@ private predicate onlyPossibleReturnOfBool(FuncDecl fd, FunctionOutput res, Node */ predicate possiblyReturnsNonNil(FuncDecl fd, FunctionOutput res, Node ret) { ret = res.getEntryNode(fd) and - not ret.asExpr() = Builtin::nil().getAReference() + not exprRefersToNil(ret.asExpr()) } /** @@ -570,7 +570,7 @@ predicate possiblyReturnsNonNil(FuncDecl fd, FunctionOutput res, Node ret) { private predicate onlyPossibleReturnOfNonNil(FuncDecl fd, FunctionOutput res, Node ret) { possiblyReturnsNonNil(fd, res, ret) and forall(Node otherRet | otherRet = res.getEntryNode(fd) and otherRet != ret | - otherRet.asExpr() = Builtin::nil().getAReference() + exprRefersToNil(otherRet.asExpr()) ) } @@ -609,7 +609,7 @@ private predicate isCertainlyNotNil(DataFlow::Node node) { */ private predicate onlyPossibleReturnOfNil(FuncDecl fd, FunctionOutput res, DataFlow::Node ret) { ret = res.getEntryNode(fd) and - ret.asExpr() = Builtin::nil().getAReference() and + exprRefersToNil(ret.asExpr()) and forall(DataFlow::Node otherRet | otherRet = res.getEntryNode(fd) and otherRet != ret | isCertainlyNotNil(otherRet) ) diff --git a/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll b/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll index af28f7f4020..adb3d5dcac7 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll @@ -418,7 +418,7 @@ predicate functionEnsuresInputIsConstant( forex(DataFlow::Node ret, IR::ReturnInstruction ri | ret = outp.getEntryNode(fd) and ri.getReturnStmt().getAnExpr() = ret.asExpr() and - ret.asExpr() = Builtin::nil().getAReference() + exprRefersToNil(ret.asExpr()) | DataFlow::localFlow(inp.getExitNode(fd), _) and mustPassConstantCaseTestToReach(ri, inp.getExitNode(fd)) diff --git a/go/ql/src/RedundantCode/UnreachableStatement.ql b/go/ql/src/RedundantCode/UnreachableStatement.ql index c177705a86f..12b035049e9 100644 --- a/go/ql/src/RedundantCode/UnreachableStatement.ql +++ b/go/ql/src/RedundantCode/UnreachableStatement.ql @@ -26,7 +26,7 @@ ControlFlow::Node nonGuardPredecessor(ControlFlow::Node nd) { * Matches if `retval` is a constant or a struct composed wholly of constants. */ predicate isAllowedReturnValue(Expr retval) { - retval = Builtin::nil().getAReference() + exprRefersToNil(retval) or retval = Builtin::true_().getAReference() or diff --git a/go/ql/src/experimental/CWE-203/Timing.ql b/go/ql/src/experimental/CWE-203/Timing.ql index e488adf2f97..30ce6952e06 100644 --- a/go/ql/src/experimental/CWE-203/Timing.ql +++ b/go/ql/src/experimental/CWE-203/Timing.ql @@ -36,7 +36,7 @@ private class SensitiveStringCompareSink extends Sink { not op1 = nonSensitiveOperand and not ( // Comparisons with `nil` should be excluded. - nonSensitiveOperand = Builtin::nil().getAReference() + exprRefersToNil(nonSensitiveOperand) or // Comparisons with empty string should also be excluded. nonSensitiveOperand.getStringValue().length() = 0 @@ -60,7 +60,7 @@ private class SensitiveCompareSink extends Sink { not op1 = op2 and not ( // Comparisons with `nil` should be excluded. - op2 = Builtin::nil().getAReference() + exprRefersToNil(op2) or // Comparisons with empty string should also be excluded. op2.getStringValue().length() = 0 @@ -85,7 +85,7 @@ private class SensitiveStringSink extends Sink { not op1 = op2 and not ( // Comparisons with `nil` should be excluded. - op2 = Builtin::nil().getAReference() + exprRefersToNil(op2) or // Comparisons with empty string should also be excluded. op2.getStringValue().length() = 0 From 48bf4fd82aea7075c4e7576fe301938099ebdd90 Mon Sep 17 00:00:00 2001 From: Taus Date: Wed, 11 Mar 2026 16:01:47 +0000 Subject: [PATCH 021/111] 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 022/111] 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 023/111] 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 ee3674cb805b461c95a7e36fa00e0cf50047f73e Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Thu, 12 Mar 2026 11:37:44 +0100 Subject: [PATCH 024/111] Swift: Disable stack protector pass --- swift/extractor/main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/swift/extractor/main.cpp b/swift/extractor/main.cpp index 8019d1bfc66..d76f956fba7 100644 --- a/swift/extractor/main.cpp +++ b/swift/extractor/main.cpp @@ -81,6 +81,7 @@ static void turnOffSilVerifications(swift::SILOptions& options) { options.VerifyExclusivity = false; options.VerifyNone = true; options.VerifySILOwnership = false; + options.EnableStackProtection = false; // Causes crashes on Linux } codeql::TrapDomain invocationTrapDomain(codeql::SwiftExtractorState& state); From b9c0aca11af887963d4e9b31946f1911f2d25c0b Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Thu, 12 Mar 2026 15:00:18 +0100 Subject: [PATCH 025/111] Swift: Fix formatting --- swift/extractor/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/swift/extractor/main.cpp b/swift/extractor/main.cpp index d76f956fba7..2d51f88bb0b 100644 --- a/swift/extractor/main.cpp +++ b/swift/extractor/main.cpp @@ -81,7 +81,7 @@ static void turnOffSilVerifications(swift::SILOptions& options) { options.VerifyExclusivity = false; options.VerifyNone = true; options.VerifySILOwnership = false; - options.EnableStackProtection = false; // Causes crashes on Linux + options.EnableStackProtection = false; // Causes crashes on Linux } codeql::TrapDomain invocationTrapDomain(codeql::SwiftExtractorState& state); From 12e0f3f3597d8dfb9ee980ec2b3a1ee532196c06 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Thu, 12 Mar 2026 15:46:23 +0100 Subject: [PATCH 026/111] Swift: Limit successfully extracted lines --- swift/ql/src/diagnostics/SuccessfullyExtractedLines.ql | 2 +- .../query-tests/Diagnostics/SuccessfullyExtractedLines.expected | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/swift/ql/src/diagnostics/SuccessfullyExtractedLines.ql b/swift/ql/src/diagnostics/SuccessfullyExtractedLines.ql index 5aec16da4ef..0de0cb1ae1a 100644 --- a/swift/ql/src/diagnostics/SuccessfullyExtractedLines.ql +++ b/swift/ql/src/diagnostics/SuccessfullyExtractedLines.ql @@ -9,4 +9,4 @@ import swift -select sum(File f | | f.getNumberOfLinesOfCode()) +select sum(File f | exists(f.getRelativePath()) | f.getNumberOfLinesOfCode()) diff --git a/swift/ql/test/query-tests/Diagnostics/SuccessfullyExtractedLines.expected b/swift/ql/test/query-tests/Diagnostics/SuccessfullyExtractedLines.expected index beaf5bb6a1f..b5a514b9ffa 100644 --- a/swift/ql/test/query-tests/Diagnostics/SuccessfullyExtractedLines.expected +++ b/swift/ql/test/query-tests/Diagnostics/SuccessfullyExtractedLines.expected @@ -1 +1 @@ -| 299 | +| 4 | From ba3fadbf202316b88d297e6c5ba07186d3f41a69 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Thu, 12 Mar 2026 16:37:13 +0100 Subject: [PATCH 027/111] Swift: Rename function --- swift/extractor/main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/swift/extractor/main.cpp b/swift/extractor/main.cpp index 2d51f88bb0b..6da464d7194 100644 --- a/swift/extractor/main.cpp +++ b/swift/extractor/main.cpp @@ -76,7 +76,7 @@ static void processFrontendOptions(codeql::SwiftExtractorState& state, } } -static void turnOffSilVerifications(swift::SILOptions& options) { +static void turnOffSilVerificationsAndStackProtection(swift::SILOptions& options) { options.VerifyAll = false; options.VerifyExclusivity = false; options.VerifyNone = true; @@ -99,7 +99,7 @@ class Observer : public swift::FrontendObserver { options.KeepASTContext = true; lockOutputSwiftModuleTraps(state, options); processFrontendOptions(state, options); - turnOffSilVerifications(invocation.getSILOptions()); + turnOffSilVerificationsAndStackProtection(invocation.getSILOptions()); } void configuredCompiler(swift::CompilerInstance& instance) override { From c9e0927992ea08e8671b5e96c56f076e4c323656 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Mar 2026 03:04:44 +0000 Subject: [PATCH 028/111] Bump the extractor-dependencies group across 1 directory with 2 updates Bumps the extractor-dependencies group with 2 updates in the /go/extractor directory: [golang.org/x/mod](https://github.com/golang/mod) and [golang.org/x/tools](https://github.com/golang/tools). Updates `golang.org/x/mod` from 0.33.0 to 0.34.0 - [Commits](https://github.com/golang/mod/compare/v0.33.0...v0.34.0) Updates `golang.org/x/tools` from 0.42.0 to 0.43.0 - [Release notes](https://github.com/golang/tools/releases) - [Commits](https://github.com/golang/tools/compare/v0.42.0...v0.43.0) --- updated-dependencies: - dependency-name: golang.org/x/mod dependency-version: 0.34.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: extractor-dependencies - dependency-name: golang.org/x/tools dependency-version: 0.43.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: extractor-dependencies ... Signed-off-by: dependabot[bot] --- go/extractor/go.mod | 6 +++--- go/extractor/go.sum | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/go/extractor/go.mod b/go/extractor/go.mod index 46d189d005e..ae43e8a51bd 100644 --- a/go/extractor/go.mod +++ b/go/extractor/go.mod @@ -9,8 +9,8 @@ toolchain go1.26.0 // when adding or removing dependencies, run // bazel mod tidy require ( - golang.org/x/mod v0.33.0 - golang.org/x/tools v0.42.0 + golang.org/x/mod v0.34.0 + golang.org/x/tools v0.43.0 ) require github.com/stretchr/testify v1.11.1 @@ -18,6 +18,6 @@ require github.com/stretchr/testify v1.11.1 require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - golang.org/x/sync v0.19.0 // indirect + golang.org/x/sync v0.20.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go/extractor/go.sum b/go/extractor/go.sum index ade080a41ad..8bb3f3dc9fc 100644 --- a/go/extractor/go.sum +++ b/go/extractor/go.sum @@ -6,12 +6,12 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -golang.org/x/mod v0.33.0 h1:tHFzIWbBifEmbwtGz65eaWyGiGZatSrT9prnU8DbVL8= -golang.org/x/mod v0.33.0/go.mod h1:swjeQEj+6r7fODbD2cqrnje9PnziFuw4bmLbBZFrQ5w= -golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= -golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= -golang.org/x/tools v0.42.0 h1:uNgphsn75Tdz5Ji2q36v/nsFSfR/9BRFvqhGBaJGd5k= -golang.org/x/tools v0.42.0/go.mod h1:Ma6lCIwGZvHK6XtgbswSoWroEkhugApmsXyrUmBhfr0= +golang.org/x/mod v0.34.0 h1:xIHgNUUnW6sYkcM5Jleh05DvLOtwc6RitGHbDk4akRI= +golang.org/x/mod v0.34.0/go.mod h1:ykgH52iCZe79kzLLMhyCUzhMci+nQj+0XkbXpNYtVjY= +golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= +golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s= +golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= From 8c1c039edf8bc0f951e2f3fa1eec0a9c98a714dd Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 12 Mar 2026 10:25:49 +0100 Subject: [PATCH 029/111] C#: Delete PreBasicBlocks. --- .../ql/consistency-queries/CfgConsistency.ql | 58 ------ .../controlflow/internal/PreBasicBlocks.qll | 175 ------------------ 2 files changed, 233 deletions(-) delete mode 100644 csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreBasicBlocks.qll diff --git a/csharp/ql/consistency-queries/CfgConsistency.ql b/csharp/ql/consistency-queries/CfgConsistency.ql index d7f0c091538..4b0d15f8a81 100644 --- a/csharp/ql/consistency-queries/CfgConsistency.ql +++ b/csharp/ql/consistency-queries/CfgConsistency.ql @@ -1,63 +1,5 @@ import csharp import semmle.code.csharp.controlflow.internal.Completion -import semmle.code.csharp.controlflow.internal.PreBasicBlocks import ControlFlow import semmle.code.csharp.controlflow.internal.ControlFlowGraphImpl::Consistency import semmle.code.csharp.controlflow.internal.Splitting - -private predicate splitBB(ControlFlow::BasicBlock bb) { - exists(ControlFlow::Node first | - first = bb.getFirstNode() and - first.isJoin() and - strictcount(first.getAPredecessor().getAstNode()) = 1 - ) -} - -private class RelevantBasicBlock extends ControlFlow::BasicBlock { - RelevantBasicBlock() { not splitBB(this) } -} - -predicate bbStartInconsistency(ControlFlowElement cfe) { - exists(RelevantBasicBlock bb | bb.getFirstNode() = cfe.getAControlFlowNode()) and - not cfe = any(PreBasicBlock bb).getFirstElement() -} - -predicate bbSuccInconsistency(ControlFlowElement pred, ControlFlowElement succ) { - exists(RelevantBasicBlock predBB, RelevantBasicBlock succBB | - predBB.getLastNode() = pred.getAControlFlowNode() and - succBB = predBB.getASuccessor() and - succBB.getFirstNode() = succ.getAControlFlowNode() - ) and - not exists(PreBasicBlock predBB, PreBasicBlock succBB | - predBB.getLastNode() = pred and - succBB = predBB.getASuccessor() and - succBB.getFirstElement() = succ - ) -} - -predicate bbIntraSuccInconsistency(ControlFlowElement pred, ControlFlowElement succ) { - exists(ControlFlow::BasicBlock bb, int i | - pred.getAControlFlowNode() = bb.getNode(i) and - succ.getAControlFlowNode() = bb.getNode(i + 1) - ) and - not exists(PreBasicBlock bb | - bb.getLastNode() = pred and - bb.getASuccessor().getFirstElement() = succ - ) and - not exists(PreBasicBlock bb, int i | - bb.getNode(i) = pred and - bb.getNode(i + 1) = succ - ) -} - -query predicate preBasicBlockConsistency(ControlFlowElement cfe1, ControlFlowElement cfe2, string s) { - bbStartInconsistency(cfe1) and - cfe2 = cfe1 and - s = "start inconsistency" - or - bbSuccInconsistency(cfe1, cfe2) and - s = "succ inconsistency" - or - bbIntraSuccInconsistency(cfe1, cfe2) and - s = "intra succ inconsistency" -} diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreBasicBlocks.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreBasicBlocks.qll deleted file mode 100644 index 38eca378edf..00000000000 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreBasicBlocks.qll +++ /dev/null @@ -1,175 +0,0 @@ -/** - * INTERNAL: Do not use. - * - * Provides a basic block implementation on control flow elements. That is, - * a "pre-CFG" where the nodes are (unsplit) control flow elements and the - * successor relation is `succ = succ(pred, _)`. - * - * The logic is duplicated from the implementation in `BasicBlocks.qll`, and - * being an internal class, all predicate documentation has been removed. - */ - -import csharp -private import Completion -private import ControlFlowGraphImpl -private import semmle.code.csharp.controlflow.ControlFlowGraph::ControlFlow as Cfg -private import codeql.controlflow.BasicBlock as BB - -private predicate startsBB(ControlFlowElement cfe) { - not succ(_, cfe, _) and - ( - succ(cfe, _, _) - or - scopeLast(_, cfe, _) - ) - or - strictcount(ControlFlowElement pred, Completion c | succ(pred, cfe, c)) > 1 - or - succ(_, cfe, any(ConditionalCompletion c)) - or - exists(ControlFlowElement pred, int i | - succ(pred, cfe, _) and - i = count(ControlFlowElement succ, Completion c | succ(pred, succ, c)) - | - i > 1 - or - i = 1 and - scopeLast(_, pred, _) - ) -} - -private predicate intraBBSucc(ControlFlowElement pred, ControlFlowElement succ) { - succ(pred, succ, _) and - not startsBB(succ) -} - -private predicate bbIndex(ControlFlowElement bbStart, ControlFlowElement cfe, int i) = - shortestDistances(startsBB/1, intraBBSucc/2)(bbStart, cfe, i) - -private predicate succBB(PreBasicBlock pred, PreBasicBlock succ) { succ = pred.getASuccessor() } - -private predicate entryBB(PreBasicBlock bb) { scopeFirst(_, bb) } - -private predicate bbIDominates(PreBasicBlock dom, PreBasicBlock bb) = - idominance(entryBB/1, succBB/2)(_, dom, bb) - -class PreBasicBlock extends ControlFlowElement { - PreBasicBlock() { startsBB(this) } - - PreBasicBlock getASuccessor(Cfg::SuccessorType t) { - succ(this.getLastNode(), result, any(Completion c | t = c.getAMatchingSuccessorType())) - } - - deprecated PreBasicBlock getASuccessorByType(Cfg::SuccessorType t) { - result = this.getASuccessor(t) - } - - PreBasicBlock getASuccessor() { result = this.getASuccessor(_) } - - PreBasicBlock getAPredecessor() { result.getASuccessor() = this } - - ControlFlowElement getNode(int pos) { bbIndex(this, result, pos) } - - deprecated ControlFlowElement getElement(int pos) { result = this.getNode(pos) } - - ControlFlowElement getAnElement() { result = this.getNode(_) } - - ControlFlowElement getFirstElement() { result = this } - - ControlFlowElement getLastNode() { result = this.getNode(this.length() - 1) } - - deprecated ControlFlowElement getLastElement() { result = this.getLastNode() } - - int length() { result = strictcount(this.getAnElement()) } - - PreBasicBlock getImmediateDominator() { bbIDominates(result, this) } - - predicate immediatelyDominates(PreBasicBlock bb) { bbIDominates(this, bb) } - - pragma[inline] - predicate strictlyDominates(PreBasicBlock bb) { this.immediatelyDominates+(bb) } - - pragma[inline] - predicate dominates(PreBasicBlock bb) { - bb = this - or - this.strictlyDominates(bb) - } - - predicate inDominanceFrontier(PreBasicBlock df) { - this = df.getAPredecessor() and not bbIDominates(this, df) - or - exists(PreBasicBlock prev | prev.inDominanceFrontier(df) | - bbIDominates(this, prev) and - not bbIDominates(this, df) - ) - } - - /** Unsupported. Do not use. */ - predicate strictlyPostDominates(PreBasicBlock bb) { none() } - - /** Unsupported. Do not use. */ - predicate postDominates(PreBasicBlock bb) { - this.strictlyPostDominates(bb) or - this = bb - } -} - -private Completion getConditionalCompletion(ConditionalCompletion cc) { - result.getInnerCompletion() = cc -} - -pragma[nomagic] -private predicate conditionBlockImmediatelyControls( - ConditionBlock cond, PreBasicBlock succ, ConditionalCompletion cc -) { - exists(ControlFlowElement last, Completion c | - last = cond.getLastNode() and - c = getConditionalCompletion(cc) and - succ(last, succ, c) and - // In the pre-CFG, we need to account for case where one predecessor node has - // two edges to the same successor node. Assertion expressions are examples of - // such nodes. - not exists(Completion other | - succ(last, succ, other) and - other != c - ) and - forall(PreBasicBlock pred | pred = succ.getAPredecessor() and pred != cond | - succ.dominates(pred) - ) - ) -} - -class ConditionBlock extends PreBasicBlock { - ConditionBlock() { - exists(Completion c | c = getConditionalCompletion(_) | - succ(this.getLastNode(), _, c) - or - scopeLast(_, this.getLastNode(), c) - ) - } - - pragma[nomagic] - predicate controls(PreBasicBlock controlled, Cfg::ConditionalSuccessor s) { - exists(PreBasicBlock succ, ConditionalCompletion c | - conditionBlockImmediatelyControls(this, succ, c) - | - succ.dominates(controlled) and - s = c.getAMatchingSuccessorType() - ) - } -} - -module PreCfg implements BB::CfgSig { - class ControlFlowNode = ControlFlowElement; - - class BasicBlock = PreBasicBlock; - - class EntryBasicBlock extends BasicBlock { - EntryBasicBlock() { entryBB(this) } - } - - predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) { - conditionBlockImmediatelyControls(bb1, bb2, _) - } -} From f58a6e5d3a3e76dd06de0472cc48ff67280ef33e Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 13 Mar 2026 10:01:02 +0000 Subject: [PATCH 030/111] 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 031/111] 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 032/111] 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 033/111] 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 821cc0e875550262e6d55a8e8398b9f0b89e2acf Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 13 Mar 2026 14:58:04 +0100 Subject: [PATCH 034/111] JS: Address PR review comments - Fix misplaced semicolons in test files (was inside comment, moved before it) - Update QLdoc comments to reference new browser source kind names - Update docs to list browser source kinds and fix outdated 'only remote' note Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../customizing-library-models-for-javascript.rst | 13 +++++++++++-- .../security/dataflow/RemoteFlowSources.qll | 8 ++++---- .../test/query-tests/Security/CWE-918/clientSide.js | 2 +- .../test/query-tests/Security/CWE-918/serverSide.js | 2 +- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/docs/codeql/codeql-language-guides/customizing-library-models-for-javascript.rst b/docs/codeql/codeql-language-guides/customizing-library-models-for-javascript.rst index 413471be885..a0c2e916281 100644 --- a/docs/codeql/codeql-language-guides/customizing-library-models-for-javascript.rst +++ b/docs/codeql/codeql-language-guides/customizing-library-models-for-javascript.rst @@ -406,7 +406,7 @@ Adds a new taint source. Most taint-tracking queries will use the new source. - **type**: Name of a type from which to evaluate **path**. - **path**: Access path leading to the source. -- **kind**: Kind of source to add. Currently only **remote** is used. +- **kind**: Kind of source to add. See the section on :ref:`source kinds ` for supported values. Example: @@ -553,7 +553,16 @@ Kinds Source kinds ~~~~~~~~~~~~ -See documentation below for :ref:`Threat models `. +- **remote**: A general source of remote flow. +- **browser**: A source in the browser environment that does not fit a more specific browser kind. +- **browser-url-query**: A source derived from the query parameters of the browser URL, such as ``location.search``. +- **browser-url-fragment**: A source derived from the fragment part of the browser URL, such as ``location.hash``. +- **browser-url-path**: A source derived from the pathname of the browser URL, such as ``location.pathname``. +- **browser-url**: A source derived from the browser URL, where the untrusted part is prefixed by trusted data such as the scheme and hostname. +- **browser-window-name**: A source derived from the window name, such as ``window.name``. +- **browser-message-event**: A source derived from cross-window message passing, such as ``event`` in ``window.onmessage = event => {...}``. + +See also :ref:`Threat models `. Sink kinds ~~~~~~~~~~ diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/RemoteFlowSources.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/RemoteFlowSources.qll index 5b1424fb86e..8791382180a 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/RemoteFlowSources.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/RemoteFlowSources.qll @@ -85,16 +85,16 @@ class ClientSideRemoteFlowKind extends string { */ predicate isUrl() { this = "browser-url" } - /** Holds if this is the `query` or `fragment` kind. */ + /** Holds if this is the `browser-url-query` or `browser-url-fragment` kind. */ predicate isQueryOrFragment() { this.isQuery() or this.isFragment() } - /** Holds if this is the `path`, `query`, or `fragment` kind. */ + /** Holds if this is the `browser-url-path`, `browser-url-query`, or `browser-url-fragment` kind. */ predicate isPathOrQueryOrFragment() { this.isPath() or this.isQuery() or this.isFragment() } - /** Holds if this is the `path` or `url` kind. */ + /** Holds if this is the `browser-url-path` or `browser-url` kind. */ predicate isPathOrUrl() { this.isPath() or this.isUrl() } - /** Holds if this is the `name` kind, describing sources derived from the window name, such as `window.name`. */ + /** Holds if this is the `browser-window-name` kind, describing sources derived from the window name, such as `window.name`. */ predicate isWindowName() { this = "browser-window-name" } /** diff --git a/javascript/ql/test/query-tests/Security/CWE-918/clientSide.js b/javascript/ql/test/query-tests/Security/CWE-918/clientSide.js index 1651fb01f44..a8e29602f1f 100644 --- a/javascript/ql/test/query-tests/Security/CWE-918/clientSide.js +++ b/javascript/ql/test/query-tests/Security/CWE-918/clientSide.js @@ -24,5 +24,5 @@ export function MyComponent() { request(window.location.href + '?q=123'); const custom = require('testlib').getBrowserSource(); // $ Source[js/client-side-request-forgery] - request(custom) // $ Alert[js/client-side-request-forgery]; + request(custom); // $ Alert[js/client-side-request-forgery] } diff --git a/javascript/ql/test/query-tests/Security/CWE-918/serverSide.js b/javascript/ql/test/query-tests/Security/CWE-918/serverSide.js index 7cf16ccb1ed..c359312738b 100644 --- a/javascript/ql/test/query-tests/Security/CWE-918/serverSide.js +++ b/javascript/ql/test/query-tests/Security/CWE-918/serverSide.js @@ -148,4 +148,4 @@ var server2 = http.createServer(function (req, res) { }); const custom = require('testlib').getServerSource(); // $ Source[js/request-forgery] -request(custom) // $ Alert[js/request-forgery]; +request(custom); // $ Alert[js/request-forgery] From dfa6d20072119d55137b1c464b573b2db9f2419d Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 13 Mar 2026 15:05:07 +0100 Subject: [PATCH 035/111] JS: Replace broken link with plain text --- .../customizing-library-models-for-javascript.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/codeql-language-guides/customizing-library-models-for-javascript.rst b/docs/codeql/codeql-language-guides/customizing-library-models-for-javascript.rst index a0c2e916281..b8f064c7574 100644 --- a/docs/codeql/codeql-language-guides/customizing-library-models-for-javascript.rst +++ b/docs/codeql/codeql-language-guides/customizing-library-models-for-javascript.rst @@ -406,7 +406,7 @@ Adds a new taint source. Most taint-tracking queries will use the new source. - **type**: Name of a type from which to evaluate **path**. - **path**: Access path leading to the source. -- **kind**: Kind of source to add. See the section on :ref:`source kinds ` for supported values. +- **kind**: Kind of source to add. See the section on source kinds for a list of supported kinds. Example: From 7a6ab700915a4ca05175b244dc9d7bf773dc076d Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 13 Mar 2026 15:32:25 +0100 Subject: [PATCH 036/111] 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 037/111] 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 7ef60a864974c8c790766fa0fbd877cbb5bd63e3 Mon Sep 17 00:00:00 2001 From: Jonas Jensen Date: Wed, 11 Mar 2026 13:15:31 +0100 Subject: [PATCH 038/111] Update the overlay annotation script for go The Go libraries follow their own naming convention for "query libraries". These need to be exempted from automatic `overlay[local?]` annotations since otherwise it appears that too many predicates are evaluated, possibly because of inadequate use of sentinels. --- config/add-overlay-annotations.py | 1 + 1 file changed, 1 insertion(+) diff --git a/config/add-overlay-annotations.py b/config/add-overlay-annotations.py index 0a30eee5799..4fbd9a2b7fc 100644 --- a/config/add-overlay-annotations.py +++ b/config/add-overlay-annotations.py @@ -199,6 +199,7 @@ def annotate_as_appropriate(filename, lines): # as overlay[local?]. It is not clear that these heuristics are exactly what we want, # but they seem to work well enough for now (as determined by speed and accuracy numbers). if (filename.endswith("Test.qll") or + re.search(r"go/ql/lib/semmle/go/security/[^/]+[.]qll$", filename.replace(os.sep, "/")) or ((filename.endswith("Query.qll") or filename.endswith("Config.qll")) and any("implements DataFlow::ConfigSig" in line for line in lines))): return None From c56feb764489a3ef2f098590a395e9d985a35077 Mon Sep 17 00:00:00 2001 From: Jonas Jensen Date: Wed, 11 Mar 2026 13:17:49 +0100 Subject: [PATCH 039/111] Go: annotate the standard library with for overlay This commit is auto-generated with: python3 config/add-overlay-annotations.py go --- go/ql/lib/Customizations.qll | 2 ++ go/ql/lib/go.qll | 2 ++ go/ql/lib/ideContextual.qll | 2 ++ go/ql/lib/semmle/go/AST.qll | 2 ++ go/ql/lib/semmle/go/Architectures.qll | 2 ++ go/ql/lib/semmle/go/Comments.qll | 2 ++ go/ql/lib/semmle/go/Concepts.qll | 2 ++ go/ql/lib/semmle/go/Decls.qll | 2 ++ go/ql/lib/semmle/go/DiagnosticsReporting.qll | 2 ++ go/ql/lib/semmle/go/Errors.qll | 2 ++ go/ql/lib/semmle/go/Expr.qll | 2 ++ go/ql/lib/semmle/go/Files.qll | 2 ++ go/ql/lib/semmle/go/GoMod.qll | 2 ++ go/ql/lib/semmle/go/HTML.qll | 2 ++ go/ql/lib/semmle/go/Locations.qll | 2 ++ go/ql/lib/semmle/go/Packages.qll | 2 ++ go/ql/lib/semmle/go/PrintAst.qll | 2 ++ go/ql/lib/semmle/go/Scopes.qll | 2 ++ go/ql/lib/semmle/go/Stmt.qll | 2 ++ go/ql/lib/semmle/go/StringOps.qll | 2 ++ go/ql/lib/semmle/go/Types.qll | 2 ++ go/ql/lib/semmle/go/Util.qll | 2 ++ go/ql/lib/semmle/go/VariableWithFields.qll | 2 ++ go/ql/lib/semmle/go/concepts/GeneratedFile.qll | 2 ++ go/ql/lib/semmle/go/concepts/HTTP.qll | 2 ++ go/ql/lib/semmle/go/controlflow/BasicBlocks.qll | 2 ++ go/ql/lib/semmle/go/controlflow/ControlFlowGraph.qll | 3 +++ go/ql/lib/semmle/go/controlflow/ControlFlowGraphImpl.qll | 2 ++ go/ql/lib/semmle/go/controlflow/IR.qll | 2 ++ go/ql/lib/semmle/go/dataflow/DataFlow.qll | 2 ++ go/ql/lib/semmle/go/dataflow/ExternalFlow.qll | 2 ++ go/ql/lib/semmle/go/dataflow/FlowSummary.qll | 2 ++ go/ql/lib/semmle/go/dataflow/FunctionInputsAndOutputs.qll | 2 ++ go/ql/lib/semmle/go/dataflow/GlobalValueNumbering.qll | 2 ++ go/ql/lib/semmle/go/dataflow/Properties.qll | 2 ++ go/ql/lib/semmle/go/dataflow/SSA.qll | 2 ++ go/ql/lib/semmle/go/dataflow/SsaImpl.qll | 2 ++ go/ql/lib/semmle/go/dataflow/TaintTracking.qll | 2 ++ .../dataflow/barrierguardutil/RedirectCheckBarrierGuard.qll | 2 ++ .../lib/semmle/go/dataflow/barrierguardutil/RegexpCheck.qll | 2 ++ go/ql/lib/semmle/go/dataflow/barrierguardutil/UrlCheck.qll | 2 ++ go/ql/lib/semmle/go/dataflow/internal/ContainerFlow.qll | 2 ++ go/ql/lib/semmle/go/dataflow/internal/DataFlowDispatch.qll | 5 +++++ go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl.qll | 3 +++ go/ql/lib/semmle/go/dataflow/internal/DataFlowImplCommon.qll | 3 +++ .../semmle/go/dataflow/internal/DataFlowImplConsistency.qll | 2 ++ .../lib/semmle/go/dataflow/internal/DataFlowImplSpecific.qll | 2 ++ go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll | 3 +++ go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll | 4 ++++ go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll | 3 +++ .../semmle/go/dataflow/internal/ExternalFlowExtensions.qll | 2 ++ go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll | 2 ++ .../go/dataflow/internal/TaintTrackingImplSpecific.qll | 2 ++ go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll | 4 ++++ go/ql/lib/semmle/go/dependencies/Dependencies.qll | 2 ++ go/ql/lib/semmle/go/dependencies/SemVer.qll | 2 ++ go/ql/lib/semmle/go/frameworks/Afero.qll | 2 ++ go/ql/lib/semmle/go/frameworks/AwsLambda.qll | 2 ++ go/ql/lib/semmle/go/frameworks/Beego.qll | 2 ++ go/ql/lib/semmle/go/frameworks/BeegoOrm.qll | 2 ++ go/ql/lib/semmle/go/frameworks/Bun.qll | 2 ++ go/ql/lib/semmle/go/frameworks/Couchbase.qll | 2 ++ go/ql/lib/semmle/go/frameworks/CryptoLibraries.qll | 2 ++ go/ql/lib/semmle/go/frameworks/Echo.qll | 2 ++ go/ql/lib/semmle/go/frameworks/ElazarlGoproxy.qll | 2 ++ go/ql/lib/semmle/go/frameworks/Email.qll | 2 ++ go/ql/lib/semmle/go/frameworks/Encoding.qll | 2 ++ go/ql/lib/semmle/go/frameworks/Fasthttp.qll | 2 ++ go/ql/lib/semmle/go/frameworks/Gin.qll | 2 ++ go/ql/lib/semmle/go/frameworks/GinCors.qll | 2 ++ go/ql/lib/semmle/go/frameworks/Glog.qll | 2 ++ go/ql/lib/semmle/go/frameworks/GoJose.qll | 2 ++ go/ql/lib/semmle/go/frameworks/GoKit.qll | 2 ++ go/ql/lib/semmle/go/frameworks/GoMicro.qll | 2 ++ go/ql/lib/semmle/go/frameworks/Gorqlite.qll | 2 ++ go/ql/lib/semmle/go/frameworks/Gqlgen.qll | 2 ++ go/ql/lib/semmle/go/frameworks/Jwt.qll | 2 ++ go/ql/lib/semmle/go/frameworks/K8sIoApiCoreV1.qll | 2 ++ .../lib/semmle/go/frameworks/K8sIoApimachineryPkgRuntime.qll | 2 ++ go/ql/lib/semmle/go/frameworks/K8sIoClientGo.qll | 2 ++ go/ql/lib/semmle/go/frameworks/Logrus.qll | 2 ++ go/ql/lib/semmle/go/frameworks/Macaron.qll | 2 ++ go/ql/lib/semmle/go/frameworks/Mux.qll | 2 ++ go/ql/lib/semmle/go/frameworks/NoSQL.qll | 2 ++ go/ql/lib/semmle/go/frameworks/Protobuf.qll | 2 ++ go/ql/lib/semmle/go/frameworks/Revel.qll | 2 ++ go/ql/lib/semmle/go/frameworks/RsCors.qll | 2 ++ go/ql/lib/semmle/go/frameworks/SQL.qll | 2 ++ go/ql/lib/semmle/go/frameworks/Spew.qll | 2 ++ go/ql/lib/semmle/go/frameworks/Squirrel.qll | 2 ++ go/ql/lib/semmle/go/frameworks/Stdlib.qll | 2 ++ go/ql/lib/semmle/go/frameworks/SystemCommandExecutors.qll | 2 ++ go/ql/lib/semmle/go/frameworks/Testing.qll | 2 ++ go/ql/lib/semmle/go/frameworks/Twirp.qll | 2 ++ go/ql/lib/semmle/go/frameworks/WebSocket.qll | 2 ++ go/ql/lib/semmle/go/frameworks/XNetHtml.qll | 2 ++ go/ql/lib/semmle/go/frameworks/XPath.qll | 2 ++ go/ql/lib/semmle/go/frameworks/Yaml.qll | 2 ++ go/ql/lib/semmle/go/frameworks/Zap.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/ArchiveTar.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/ArchiveZip.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/Bufio.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/CompressFlate.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/CompressGzip.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/CompressLzw.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/CompressZlib.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/CryptoTls.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/DatabaseSql.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/EncodingAsn1.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/EncodingCsv.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/EncodingGob.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/EncodingJson.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/EncodingPem.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/EncodingXml.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/Errors.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/Fmt.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/Html.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/HtmlTemplate.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/Io.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/IoFs.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/Log.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/MimeMultipart.qll | 2 ++ .../lib/semmle/go/frameworks/stdlib/MimeQuotedprintable.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/Net.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/NetHttp.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/NetHttpHttputil.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/NetTextproto.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/Os.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/Path.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/PathFilepath.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/Reflect.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/Regexp.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/Strconv.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/Strings.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/Syscall.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/TextTabwriter.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/TextTemplate.qll | 2 ++ go/ql/lib/semmle/go/frameworks/stdlib/Unsafe.qll | 2 ++ go/ql/lib/utils/test/internal/InlineExpectationsTestImpl.qll | 3 +++ 139 files changed, 291 insertions(+) diff --git a/go/ql/lib/Customizations.qll b/go/ql/lib/Customizations.qll index 127840de9dd..56824bc03eb 100644 --- a/go/ql/lib/Customizations.qll +++ b/go/ql/lib/Customizations.qll @@ -8,5 +8,7 @@ * `FileSystemAccess`, or the `Source` and `Sink` classes associated with the security queries * to model frameworks that are not covered by the standard library. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/go.qll b/go/ql/lib/go.qll index 1b8bf94a0d2..af9f676e013 100644 --- a/go/ql/lib/go.qll +++ b/go/ql/lib/go.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with Go programs. */ +overlay[local?] +module; import Customizations import semmle.go.Architectures diff --git a/go/ql/lib/ideContextual.qll b/go/ql/lib/ideContextual.qll index b28a23a6e00..2f96afdeffe 100644 --- a/go/ql/lib/ideContextual.qll +++ b/go/ql/lib/ideContextual.qll @@ -2,6 +2,8 @@ * Provides classes and predicates related to contextual queries * in the code viewer. */ +overlay[local?] +module; import go private import codeql.util.FileSystem diff --git a/go/ql/lib/semmle/go/AST.qll b/go/ql/lib/semmle/go/AST.qll index 6a840f81cbb..bbe93ed345b 100644 --- a/go/ql/lib/semmle/go/AST.qll +++ b/go/ql/lib/semmle/go/AST.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with AST nodes. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/Architectures.qll b/go/ql/lib/semmle/go/Architectures.qll index bb4face2407..b90501a5d36 100644 --- a/go/ql/lib/semmle/go/Architectures.qll +++ b/go/ql/lib/semmle/go/Architectures.qll @@ -1,4 +1,6 @@ /** Provides classes for working with architectures. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/Comments.qll b/go/ql/lib/semmle/go/Comments.qll index b55810311f8..f232d4b9378 100644 --- a/go/ql/lib/semmle/go/Comments.qll +++ b/go/ql/lib/semmle/go/Comments.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with code comments. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/Concepts.qll b/go/ql/lib/semmle/go/Concepts.qll index 4e328ed76c4..ffa48ea9654 100644 --- a/go/ql/lib/semmle/go/Concepts.qll +++ b/go/ql/lib/semmle/go/Concepts.qll @@ -3,6 +3,8 @@ * access or system command execution, for which individual framework libraries * provide concrete subclasses. */ +overlay[local?] +module; import go import semmle.go.dataflow.FunctionInputsAndOutputs diff --git a/go/ql/lib/semmle/go/Decls.qll b/go/ql/lib/semmle/go/Decls.qll index 9d1e4d2611a..d3282b59f69 100644 --- a/go/ql/lib/semmle/go/Decls.qll +++ b/go/ql/lib/semmle/go/Decls.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with declarations. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/DiagnosticsReporting.qll b/go/ql/lib/semmle/go/DiagnosticsReporting.qll index 691c430aa73..0cbc98cdd83 100644 --- a/go/ql/lib/semmle/go/DiagnosticsReporting.qll +++ b/go/ql/lib/semmle/go/DiagnosticsReporting.qll @@ -1,4 +1,6 @@ /** Provides classes for working with errors and warnings recorded during extraction. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/Errors.qll b/go/ql/lib/semmle/go/Errors.qll index 2e138e8de61..54e1ea98863 100644 --- a/go/ql/lib/semmle/go/Errors.qll +++ b/go/ql/lib/semmle/go/Errors.qll @@ -1,4 +1,6 @@ /** Provides classes for working with Go frontend errors recorded during extraction. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/Expr.qll b/go/ql/lib/semmle/go/Expr.qll index 9b34f592083..9e006aed54c 100644 --- a/go/ql/lib/semmle/go/Expr.qll +++ b/go/ql/lib/semmle/go/Expr.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with expressions. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/Files.qll b/go/ql/lib/semmle/go/Files.qll index cda168482ca..8252357bcc2 100644 --- a/go/ql/lib/semmle/go/Files.qll +++ b/go/ql/lib/semmle/go/Files.qll @@ -1,4 +1,6 @@ /** Provides classes for working with files and folders. */ +overlay[local?] +module; import go private import codeql.util.FileSystem diff --git a/go/ql/lib/semmle/go/GoMod.qll b/go/ql/lib/semmle/go/GoMod.qll index 119339c18eb..e357ae616cf 100644 --- a/go/ql/lib/semmle/go/GoMod.qll +++ b/go/ql/lib/semmle/go/GoMod.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with go.mod files. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/HTML.qll b/go/ql/lib/semmle/go/HTML.qll index 2f0e411a88d..41bb47e0ba5 100644 --- a/go/ql/lib/semmle/go/HTML.qll +++ b/go/ql/lib/semmle/go/HTML.qll @@ -1,4 +1,6 @@ /** Provides classes for working with HTML documents. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/Locations.qll b/go/ql/lib/semmle/go/Locations.qll index 7503421c0ff..03105fbdf25 100644 --- a/go/ql/lib/semmle/go/Locations.qll +++ b/go/ql/lib/semmle/go/Locations.qll @@ -1,4 +1,6 @@ /** Provides classes for working with locations and program elements that have locations. */ +overlay[local?] +module; import go private import semmle.go.Overlay diff --git a/go/ql/lib/semmle/go/Packages.qll b/go/ql/lib/semmle/go/Packages.qll index d1163350446..8926d0e17f1 100644 --- a/go/ql/lib/semmle/go/Packages.qll +++ b/go/ql/lib/semmle/go/Packages.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with packages. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/PrintAst.qll b/go/ql/lib/semmle/go/PrintAst.qll index bee97008dbd..c7c9bb5b4b7 100644 --- a/go/ql/lib/semmle/go/PrintAst.qll +++ b/go/ql/lib/semmle/go/PrintAst.qll @@ -1,6 +1,8 @@ /** * Provides queries to pretty-print a Go AST as a graph. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/Scopes.qll b/go/ql/lib/semmle/go/Scopes.qll index 2ab08b5b5b4..1933c33230c 100644 --- a/go/ql/lib/semmle/go/Scopes.qll +++ b/go/ql/lib/semmle/go/Scopes.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with scopes and declared objects. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/Stmt.qll b/go/ql/lib/semmle/go/Stmt.qll index 8719ad543cf..befc60e73c6 100644 --- a/go/ql/lib/semmle/go/Stmt.qll +++ b/go/ql/lib/semmle/go/Stmt.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with statements. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/StringOps.qll b/go/ql/lib/semmle/go/StringOps.qll index 3463e4fdf87..6af2946f95c 100644 --- a/go/ql/lib/semmle/go/StringOps.qll +++ b/go/ql/lib/semmle/go/StringOps.qll @@ -1,6 +1,8 @@ /** * Provides predicates and classes for working with string operations. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/Types.qll b/go/ql/lib/semmle/go/Types.qll index d377cb2c9d8..cd4d5a4120f 100644 --- a/go/ql/lib/semmle/go/Types.qll +++ b/go/ql/lib/semmle/go/Types.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with Go types. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/Util.qll b/go/ql/lib/semmle/go/Util.qll index 02175f2d66a..4879cb0cbe7 100644 --- a/go/ql/lib/semmle/go/Util.qll +++ b/go/ql/lib/semmle/go/Util.qll @@ -1,4 +1,6 @@ /** This module provides general utility classes and predicates. */ +overlay[local?] +module; /** * A Boolean value. diff --git a/go/ql/lib/semmle/go/VariableWithFields.qll b/go/ql/lib/semmle/go/VariableWithFields.qll index 0fce5247dcd..920c4313de4 100644 --- a/go/ql/lib/semmle/go/VariableWithFields.qll +++ b/go/ql/lib/semmle/go/VariableWithFields.qll @@ -1,4 +1,6 @@ /** Provides the `VariableWithFields` class, for working with variables with a chain of field or element accesses chained to it. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/concepts/GeneratedFile.qll b/go/ql/lib/semmle/go/concepts/GeneratedFile.qll index d1067b60ad0..575ede7fdee 100644 --- a/go/ql/lib/semmle/go/concepts/GeneratedFile.qll +++ b/go/ql/lib/semmle/go/concepts/GeneratedFile.qll @@ -1,4 +1,6 @@ /** Provides a class for generated files. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/concepts/HTTP.qll b/go/ql/lib/semmle/go/concepts/HTTP.qll index b3990edd084..73f3bfb8784 100644 --- a/go/ql/lib/semmle/go/concepts/HTTP.qll +++ b/go/ql/lib/semmle/go/concepts/HTTP.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with HTTP-related concepts such as requests and responses. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/controlflow/BasicBlocks.qll b/go/ql/lib/semmle/go/controlflow/BasicBlocks.qll index 43b8c7e8dd3..cc1b0c6292c 100644 --- a/go/ql/lib/semmle/go/controlflow/BasicBlocks.qll +++ b/go/ql/lib/semmle/go/controlflow/BasicBlocks.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with basic blocks. */ +overlay[local?] +module; import go private import ControlFlowGraphImpl diff --git a/go/ql/lib/semmle/go/controlflow/ControlFlowGraph.qll b/go/ql/lib/semmle/go/controlflow/ControlFlowGraph.qll index 88adb88c026..c7dbe776a8e 100644 --- a/go/ql/lib/semmle/go/controlflow/ControlFlowGraph.qll +++ b/go/ql/lib/semmle/go/controlflow/ControlFlowGraph.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with a CFG-based program representation. */ +overlay[local?] +module; import go private import ControlFlowGraphImpl @@ -62,6 +64,7 @@ module ControlFlow { BasicBlock getBasicBlock() { result.getANode() = this } /** Holds if this node dominates `dominee` in the control-flow graph. */ + overlay[caller?] pragma[inline] predicate dominatesNode(ControlFlow::Node dominee) { exists(ReachableBasicBlock thisbb, ReachableBasicBlock dbb, int i, int j | diff --git a/go/ql/lib/semmle/go/controlflow/ControlFlowGraphImpl.qll b/go/ql/lib/semmle/go/controlflow/ControlFlowGraphImpl.qll index 71bd0ea561f..125ad7fdec2 100644 --- a/go/ql/lib/semmle/go/controlflow/ControlFlowGraphImpl.qll +++ b/go/ql/lib/semmle/go/controlflow/ControlFlowGraphImpl.qll @@ -3,6 +3,8 @@ * * Provides predicates for building intra-procedural CFGs. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/controlflow/IR.qll b/go/ql/lib/semmle/go/controlflow/IR.qll index c6433900a73..e3ed7cadbad 100644 --- a/go/ql/lib/semmle/go/controlflow/IR.qll +++ b/go/ql/lib/semmle/go/controlflow/IR.qll @@ -9,6 +9,8 @@ * Each instruction is also a control-flow node, but there are control-flow nodes that are not * instructions (synthetic entry and exit nodes, as well as no-op skip nodes). */ +overlay[local?] +module; import go private import semmle.go.controlflow.ControlFlowGraphImpl diff --git a/go/ql/lib/semmle/go/dataflow/DataFlow.qll b/go/ql/lib/semmle/go/dataflow/DataFlow.qll index c26adbfd2c2..bc0d310566e 100644 --- a/go/ql/lib/semmle/go/dataflow/DataFlow.qll +++ b/go/ql/lib/semmle/go/dataflow/DataFlow.qll @@ -14,6 +14,8 @@ * (intraprocedural) data flow, invoke `DataFlow::localFlow` or * `DataFlow::LocalFlowStep` with arguments of type `DataFlow::Node`. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll b/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll index 388921224ad..e1170aeda24 100644 --- a/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll +++ b/go/ql/lib/semmle/go/dataflow/ExternalFlow.qll @@ -84,6 +84,8 @@ * "taint" indicates a default additional taint step and "value" indicates a * globally applicable value-preserving step. */ +overlay[local?] +module; private import go private import internal.ExternalFlowExtensions::Extensions as Extensions diff --git a/go/ql/lib/semmle/go/dataflow/FlowSummary.qll b/go/ql/lib/semmle/go/dataflow/FlowSummary.qll index 749e1c92e06..632697b341f 100644 --- a/go/ql/lib/semmle/go/dataflow/FlowSummary.qll +++ b/go/ql/lib/semmle/go/dataflow/FlowSummary.qll @@ -1,6 +1,8 @@ /** * Provides classes and predicates for defining flow summaries. */ +overlay[local?] +module; import go private import internal.FlowSummaryImpl as Impl diff --git a/go/ql/lib/semmle/go/dataflow/FunctionInputsAndOutputs.qll b/go/ql/lib/semmle/go/dataflow/FunctionInputsAndOutputs.qll index 89d3c297fed..42d17006d64 100644 --- a/go/ql/lib/semmle/go/dataflow/FunctionInputsAndOutputs.qll +++ b/go/ql/lib/semmle/go/dataflow/FunctionInputsAndOutputs.qll @@ -2,6 +2,8 @@ * Provides QL classes for indicating data flow through a function parameter, return value, * or receiver. */ +overlay[local?] +module; import go private import semmle.go.dataflow.internal.DataFlowPrivate diff --git a/go/ql/lib/semmle/go/dataflow/GlobalValueNumbering.qll b/go/ql/lib/semmle/go/dataflow/GlobalValueNumbering.qll index e566ca41c2f..0b08d5a4b8f 100644 --- a/go/ql/lib/semmle/go/dataflow/GlobalValueNumbering.qll +++ b/go/ql/lib/semmle/go/dataflow/GlobalValueNumbering.qll @@ -29,6 +29,8 @@ * common reason for this is that the analysis cannot prove that there * are no side-effects that might cause the computed value to change. */ +overlay[local?] +module; /* * Note to developers: the correctness of this module depends on the diff --git a/go/ql/lib/semmle/go/dataflow/Properties.qll b/go/ql/lib/semmle/go/dataflow/Properties.qll index 735deb19c9f..6794eee5fcd 100644 --- a/go/ql/lib/semmle/go/dataflow/Properties.qll +++ b/go/ql/lib/semmle/go/dataflow/Properties.qll @@ -1,6 +1,8 @@ /** * Provides a class for representing and reasoning about properties of data-flow nodes. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/dataflow/SSA.qll b/go/ql/lib/semmle/go/dataflow/SSA.qll index 69fffa393c1..c3d759a70fe 100644 --- a/go/ql/lib/semmle/go/dataflow/SSA.qll +++ b/go/ql/lib/semmle/go/dataflow/SSA.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with static single assignment form (SSA). */ +overlay[local?] +module; import go private import SsaImpl diff --git a/go/ql/lib/semmle/go/dataflow/SsaImpl.qll b/go/ql/lib/semmle/go/dataflow/SsaImpl.qll index 026c8114f9f..bf530108d4b 100644 --- a/go/ql/lib/semmle/go/dataflow/SsaImpl.qll +++ b/go/ql/lib/semmle/go/dataflow/SsaImpl.qll @@ -3,6 +3,8 @@ * * Provides predicates for constructing an SSA representation for functions. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/dataflow/TaintTracking.qll b/go/ql/lib/semmle/go/dataflow/TaintTracking.qll index c469574b3b9..89b43de0738 100644 --- a/go/ql/lib/semmle/go/dataflow/TaintTracking.qll +++ b/go/ql/lib/semmle/go/dataflow/TaintTracking.qll @@ -2,6 +2,8 @@ * Provides classes for performing local (intra-procedural) and * global (inter-procedural) taint-tracking analyses. */ +overlay[local?] +module; import semmle.go.dataflow.DataFlow diff --git a/go/ql/lib/semmle/go/dataflow/barrierguardutil/RedirectCheckBarrierGuard.qll b/go/ql/lib/semmle/go/dataflow/barrierguardutil/RedirectCheckBarrierGuard.qll index d185f9f78f3..cd5490e63c0 100644 --- a/go/ql/lib/semmle/go/dataflow/barrierguardutil/RedirectCheckBarrierGuard.qll +++ b/go/ql/lib/semmle/go/dataflow/barrierguardutil/RedirectCheckBarrierGuard.qll @@ -1,6 +1,8 @@ /** * Provides an implementation of a commonly used barrier guard for sanitizing untrusted URLs. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/dataflow/barrierguardutil/RegexpCheck.qll b/go/ql/lib/semmle/go/dataflow/barrierguardutil/RegexpCheck.qll index 8cdc3b2e1ac..4b669a305f5 100644 --- a/go/ql/lib/semmle/go/dataflow/barrierguardutil/RegexpCheck.qll +++ b/go/ql/lib/semmle/go/dataflow/barrierguardutil/RegexpCheck.qll @@ -1,6 +1,8 @@ /** * Provides an implementation of a commonly used barrier guard for sanitizing untrusted URLs. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/dataflow/barrierguardutil/UrlCheck.qll b/go/ql/lib/semmle/go/dataflow/barrierguardutil/UrlCheck.qll index 8abcfb327cc..8a105cc8fa9 100644 --- a/go/ql/lib/semmle/go/dataflow/barrierguardutil/UrlCheck.qll +++ b/go/ql/lib/semmle/go/dataflow/barrierguardutil/UrlCheck.qll @@ -1,6 +1,8 @@ /** * Provides an implementation of a commonly used barrier guard for sanitizing untrusted URLs. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/dataflow/internal/ContainerFlow.qll b/go/ql/lib/semmle/go/dataflow/internal/ContainerFlow.qll index e978cb3e587..05897354061 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/ContainerFlow.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/ContainerFlow.qll @@ -1,4 +1,6 @@ /** Contains predicates for dealing with container flow. */ +overlay[local?] +module; import go private import DataFlowNodes diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowDispatch.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowDispatch.qll index a06edad0be2..10455f84edb 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowDispatch.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowDispatch.qll @@ -1,3 +1,6 @@ +overlay[local?] +module; + private import go private import DataFlowPrivate @@ -119,6 +122,7 @@ class ArgumentPosition extends int { } /** Holds if arguments at position `apos` match parameters at position `ppos`. */ +overlay[caller?] pragma[inline] predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos) { ppos = apos } @@ -130,6 +134,7 @@ private predicate isInterfaceMethod(Method c) { * Holds if `call` is passing `arg` to param `p` in any circumstance except passing * a receiver parameter to a concrete method. */ +overlay[caller?] pragma[inline] predicate golangSpecificParamArgFilter( DataFlowCall call, DataFlow::ParameterNode p, DataFlow::ArgumentNode arg diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl.qll index c9761d21702..ae10681799f 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl.qll @@ -1,3 +1,6 @@ +overlay[local?] +module; + private import DataFlowImplSpecific private import codeql.dataflow.internal.DataFlowImpl private import semmle.go.Locations diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplCommon.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplCommon.qll index 6df86bde023..27db6081e49 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplCommon.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplCommon.qll @@ -1,3 +1,6 @@ +overlay[local?] +module; + private import DataFlowImplSpecific private import codeql.dataflow.internal.DataFlowImplCommon private import semmle.go.Locations diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplConsistency.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplConsistency.qll index b4d92771150..cf4794a9715 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplConsistency.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplConsistency.qll @@ -2,6 +2,8 @@ * Provides consistency queries for checking invariants in the language-specific * data-flow classes and predicates. */ +overlay[local?] +module; private import go private import DataFlowImplSpecific as Impl diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplSpecific.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplSpecific.qll index c680778ce4d..c2c6b0b7c43 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplSpecific.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowImplSpecific.qll @@ -1,6 +1,8 @@ /** * Provides Go-specific definitions for use in the data flow library. */ +overlay[local?] +module; private import codeql.dataflow.DataFlow private import semmle.go.Locations diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll index 4fb767e548c..f5115656675 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll @@ -1,3 +1,6 @@ +overlay[local?] +module; + private import go private import semmle.go.dataflow.FunctionInputsAndOutputs private import semmle.go.dataflow.FlowSummary diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll index 76b0ef363e3..33149bf0057 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll @@ -1,3 +1,6 @@ +overlay[local?] +module; + private import go private import DataFlowUtil private import DataFlowImplCommon @@ -478,5 +481,6 @@ predicate allowParameterReturnInSelf(ParameterNode p) { class ContentApprox = Unit; /** Gets an approximated value for content `c`. */ +overlay[caller?] pragma[inline] ContentApprox getContentApprox(Content c) { any() } diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll index ea1fc575076..b29ff7d5ea8 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll @@ -1,6 +1,8 @@ /** * Provides Go-specific definitions for use in the data flow library. */ +overlay[local?] +module; private import go private import semmle.go.dataflow.FunctionInputsAndOutputs @@ -147,6 +149,7 @@ predicate simpleLocalFlowStep(Node nodeFrom, Node nodeTo, string model) { * Holds if data flows from `source` to `sink` in zero or more local * (intra-procedural) steps. */ +overlay[caller?] pragma[inline] predicate localFlow(Node source, Node sink) { localFlowStep*(source, sink) } diff --git a/go/ql/lib/semmle/go/dataflow/internal/ExternalFlowExtensions.qll b/go/ql/lib/semmle/go/dataflow/internal/ExternalFlowExtensions.qll index 2e962299f3e..5d43cf674c1 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/ExternalFlowExtensions.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/ExternalFlowExtensions.qll @@ -1,6 +1,8 @@ /** * This module provides extensible predicates for defining MaD models. */ +overlay[local?] +module; private import codeql.mad.static.ModelsAsData as SharedMaD diff --git a/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll b/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll index f09f42872ea..240665bd492 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll @@ -1,6 +1,8 @@ /** * Provides classes and predicates for defining flow summaries. */ +overlay[local?] +module; private import go private import codeql.dataflow.internal.FlowSummaryImpl diff --git a/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingImplSpecific.qll b/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingImplSpecific.qll index b9795bb14d3..e0c416087fd 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingImplSpecific.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingImplSpecific.qll @@ -1,6 +1,8 @@ /** * Provides Go-specific definitions for use in the taint tracking library. */ +overlay[local?] +module; private import codeql.dataflow.TaintTracking private import DataFlowImplSpecific diff --git a/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll b/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll index adb3d5dcac7..f9f14874493 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll @@ -1,6 +1,8 @@ /** * Provides Go-specific definitions for use in the taint-tracking library. */ +overlay[local?] +module; private import go private import FlowSummaryImpl as FlowSummaryImpl @@ -11,6 +13,7 @@ private import DataFlowPrivate as DataFlowPrivate * Holds if taint can flow from `src` to `sink` in zero or more * local (intra-procedural) steps. */ +overlay[caller?] pragma[inline] predicate localTaint(DataFlow::Node src, DataFlow::Node sink) { localTaintStep*(src, sink) } @@ -18,6 +21,7 @@ predicate localTaint(DataFlow::Node src, DataFlow::Node sink) { localTaintStep*( * Holds if taint can flow from `src` to `sink` in zero or more * local (intra-procedural) steps. */ +overlay[caller?] pragma[inline] predicate localExprTaint(Expr src, Expr sink) { localTaint(DataFlow::exprNode(src), DataFlow::exprNode(sink)) diff --git a/go/ql/lib/semmle/go/dependencies/Dependencies.qll b/go/ql/lib/semmle/go/dependencies/Dependencies.qll index d8c8ee52d29..6c9537c72c4 100644 --- a/go/ql/lib/semmle/go/dependencies/Dependencies.qll +++ b/go/ql/lib/semmle/go/dependencies/Dependencies.qll @@ -1,6 +1,8 @@ /** * Provides classes for modeling go.mod dependencies. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/dependencies/SemVer.qll b/go/ql/lib/semmle/go/dependencies/SemVer.qll index 88d37563931..290617781ec 100644 --- a/go/ql/lib/semmle/go/dependencies/SemVer.qll +++ b/go/ql/lib/semmle/go/dependencies/SemVer.qll @@ -1,6 +1,8 @@ /** * Provides classes for dealing with semantic versions, for dependency versions. */ +overlay[local?] +module; import semmle.go.dependencies.Dependencies diff --git a/go/ql/lib/semmle/go/frameworks/Afero.qll b/go/ql/lib/semmle/go/frameworks/Afero.qll index c03bf611433..22704a6af8e 100644 --- a/go/ql/lib/semmle/go/frameworks/Afero.qll +++ b/go/ql/lib/semmle/go/frameworks/Afero.qll @@ -2,6 +2,8 @@ * Provides classes for working with sinks and taint propagators * from the `github.com/spf13/afero` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/AwsLambda.qll b/go/ql/lib/semmle/go/frameworks/AwsLambda.qll index 28f21c9101b..f366a877097 100644 --- a/go/ql/lib/semmle/go/frameworks/AwsLambda.qll +++ b/go/ql/lib/semmle/go/frameworks/AwsLambda.qll @@ -2,6 +2,8 @@ * Provides classes for working with remote flow sources, sinks and taint propagators * from the `github.com/aws/aws-lambda-go/lambda` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/Beego.qll b/go/ql/lib/semmle/go/frameworks/Beego.qll index 383be8ec42a..5f3f2e986c2 100644 --- a/go/ql/lib/semmle/go/frameworks/Beego.qll +++ b/go/ql/lib/semmle/go/frameworks/Beego.qll @@ -2,6 +2,8 @@ * Provides classes for working with remote flow sources, sinks and taint propagators * from the `github.com/beego/beego` package. */ +overlay[local?] +module; import go import semmle.go.security.Xss diff --git a/go/ql/lib/semmle/go/frameworks/BeegoOrm.qll b/go/ql/lib/semmle/go/frameworks/BeegoOrm.qll index 925b0f19fa3..e1bc5c481bd 100644 --- a/go/ql/lib/semmle/go/frameworks/BeegoOrm.qll +++ b/go/ql/lib/semmle/go/frameworks/BeegoOrm.qll @@ -2,6 +2,8 @@ * Provides classes for working with remote flow sources, sinks and taint propagators * from the `github.com/astaxie/beego/orm` subpackage. */ +overlay[local?] +module; import go private import semmle.go.security.StoredXssCustomizations diff --git a/go/ql/lib/semmle/go/frameworks/Bun.qll b/go/ql/lib/semmle/go/frameworks/Bun.qll index 5be82d2cacc..8637c8f5704 100644 --- a/go/ql/lib/semmle/go/frameworks/Bun.qll +++ b/go/ql/lib/semmle/go/frameworks/Bun.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `Bun` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/Couchbase.qll b/go/ql/lib/semmle/go/frameworks/Couchbase.qll index b5bfbcb22a2..d1be1a73205 100644 --- a/go/ql/lib/semmle/go/frameworks/Couchbase.qll +++ b/go/ql/lib/semmle/go/frameworks/Couchbase.qll @@ -1,6 +1,8 @@ /** * Provides models of commonly used functions in the official Couchbase Go SDK library. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/CryptoLibraries.qll b/go/ql/lib/semmle/go/frameworks/CryptoLibraries.qll index 154ac82e7a2..7f0e52b449a 100644 --- a/go/ql/lib/semmle/go/frameworks/CryptoLibraries.qll +++ b/go/ql/lib/semmle/go/frameworks/CryptoLibraries.qll @@ -1,6 +1,8 @@ /** * Provides classes for modeling cryptographic libraries. */ +overlay[local?] +module; import go import semmle.go.Concepts::Cryptography diff --git a/go/ql/lib/semmle/go/frameworks/Echo.qll b/go/ql/lib/semmle/go/frameworks/Echo.qll index a2a6e7d846a..865d8c3972b 100644 --- a/go/ql/lib/semmle/go/frameworks/Echo.qll +++ b/go/ql/lib/semmle/go/frameworks/Echo.qll @@ -2,6 +2,8 @@ * Provides classes for working with remote flow sources, taint propagators, and HTTP sinks * from the `github.com/labstack/echo` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/ElazarlGoproxy.qll b/go/ql/lib/semmle/go/frameworks/ElazarlGoproxy.qll index b1bf4571216..23f3a8c2d4d 100644 --- a/go/ql/lib/semmle/go/frameworks/ElazarlGoproxy.qll +++ b/go/ql/lib/semmle/go/frameworks/ElazarlGoproxy.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with concepts relating to the [github.com/elazarl/goproxy](https://pkg.go.dev/github.com/elazarl/goproxy) package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/Email.qll b/go/ql/lib/semmle/go/frameworks/Email.qll index ba4cf8be415..97894806f6f 100644 --- a/go/ql/lib/semmle/go/frameworks/Email.qll +++ b/go/ql/lib/semmle/go/frameworks/Email.qll @@ -1,4 +1,6 @@ /** Provides classes for working with email-related APIs. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/Encoding.qll b/go/ql/lib/semmle/go/frameworks/Encoding.qll index 201e2c9001d..45f83021a0c 100644 --- a/go/ql/lib/semmle/go/frameworks/Encoding.qll +++ b/go/ql/lib/semmle/go/frameworks/Encoding.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling taint propagation through marshalling and encoding functions. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/Fasthttp.qll b/go/ql/lib/semmle/go/frameworks/Fasthttp.qll index 941e6b44945..2dea987ade6 100644 --- a/go/ql/lib/semmle/go/frameworks/Fasthttp.qll +++ b/go/ql/lib/semmle/go/frameworks/Fasthttp.qll @@ -2,6 +2,8 @@ * Provides classes for working with remote flow sources, sinks and taint propagators * from the `github.com/valyala/fasthttp` package. */ +overlay[local?] +module; import go private import semmle.go.security.RequestForgeryCustomizations diff --git a/go/ql/lib/semmle/go/frameworks/Gin.qll b/go/ql/lib/semmle/go/frameworks/Gin.qll index 71ed5d931fa..f6d2bf8ff55 100644 --- a/go/ql/lib/semmle/go/frameworks/Gin.qll +++ b/go/ql/lib/semmle/go/frameworks/Gin.qll @@ -1,6 +1,8 @@ /** * Provides classes for modeling the `github.com/gin-gonic/gin` package. */ +overlay[local?] +module; import go import semmle.go.concepts.HTTP diff --git a/go/ql/lib/semmle/go/frameworks/GinCors.qll b/go/ql/lib/semmle/go/frameworks/GinCors.qll index cc993ea4dee..cd742ac9ba2 100644 --- a/go/ql/lib/semmle/go/frameworks/GinCors.qll +++ b/go/ql/lib/semmle/go/frameworks/GinCors.qll @@ -1,6 +1,8 @@ /** * Provides classes for modeling the `github.com/gin-contrib/cors` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/Glog.qll b/go/ql/lib/semmle/go/frameworks/Glog.qll index 146b8a4f814..a9ffc432181 100644 --- a/go/ql/lib/semmle/go/frameworks/Glog.qll +++ b/go/ql/lib/semmle/go/frameworks/Glog.qll @@ -2,6 +2,8 @@ * Provides models of commonly used functions in the `github.com/golang/glog` and `k8s.io/klog` * packages. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/GoJose.qll b/go/ql/lib/semmle/go/frameworks/GoJose.qll index 509e289f586..6ee1feb5ab9 100644 --- a/go/ql/lib/semmle/go/frameworks/GoJose.qll +++ b/go/ql/lib/semmle/go/frameworks/GoJose.qll @@ -2,6 +2,8 @@ * Provides classes for working with the `gopkg.in/square/go-jose` and `github.com/go-jose/go-jose` * packages. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/GoKit.qll b/go/ql/lib/semmle/go/frameworks/GoKit.qll index e4a9e48d207..f56451b1b81 100644 --- a/go/ql/lib/semmle/go/frameworks/GoKit.qll +++ b/go/ql/lib/semmle/go/frameworks/GoKit.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with concepts relating to the [github.com/go-kit/kit](https://pkg.go.dev/github.com/go-kit/kit) package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/GoMicro.qll b/go/ql/lib/semmle/go/frameworks/GoMicro.qll index f01dcde9f1e..723f58899ff 100644 --- a/go/ql/lib/semmle/go/frameworks/GoMicro.qll +++ b/go/ql/lib/semmle/go/frameworks/GoMicro.qll @@ -1,6 +1,8 @@ /** * Provides models of the [Go Micro library](https://github.com/go-micro/go-micro). */ +overlay[local?] +module; import go private import semmle.go.security.RequestForgeryCustomizations diff --git a/go/ql/lib/semmle/go/frameworks/Gorqlite.qll b/go/ql/lib/semmle/go/frameworks/Gorqlite.qll index 65ac5d88bab..434c8148bd7 100644 --- a/go/ql/lib/semmle/go/frameworks/Gorqlite.qll +++ b/go/ql/lib/semmle/go/frameworks/Gorqlite.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `gorqlite` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/Gqlgen.qll b/go/ql/lib/semmle/go/frameworks/Gqlgen.qll index 4edaab46b22..bcde5ce9a36 100644 --- a/go/ql/lib/semmle/go/frameworks/Gqlgen.qll +++ b/go/ql/lib/semmle/go/frameworks/Gqlgen.qll @@ -1,4 +1,6 @@ /** Provides models of commonly used functions and types in the gqlgen packages. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/Jwt.qll b/go/ql/lib/semmle/go/frameworks/Jwt.qll index 681ead26834..d139f48ae2b 100644 --- a/go/ql/lib/semmle/go/frameworks/Jwt.qll +++ b/go/ql/lib/semmle/go/frameworks/Jwt.qll @@ -2,6 +2,8 @@ * Provides classes and predicates for working with the `github.com/golang-jwt/jwt` and * `github.com/dgrijalva/jwt-go` packages. */ +overlay[local?] +module; import go private import semmle.go.security.MissingJwtSignatureCheckCustomizations::MissingJwtSignatureCheck diff --git a/go/ql/lib/semmle/go/frameworks/K8sIoApiCoreV1.qll b/go/ql/lib/semmle/go/frameworks/K8sIoApiCoreV1.qll index 6fe789dccc3..ea80d0eba37 100644 --- a/go/ql/lib/semmle/go/frameworks/K8sIoApiCoreV1.qll +++ b/go/ql/lib/semmle/go/frameworks/K8sIoApiCoreV1.qll @@ -1,4 +1,6 @@ /** Provides models of commonly used functions in the `k8s.io/api/core/v1` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/K8sIoApimachineryPkgRuntime.qll b/go/ql/lib/semmle/go/frameworks/K8sIoApimachineryPkgRuntime.qll index 5c7481e5808..945904ba0ae 100644 --- a/go/ql/lib/semmle/go/frameworks/K8sIoApimachineryPkgRuntime.qll +++ b/go/ql/lib/semmle/go/frameworks/K8sIoApimachineryPkgRuntime.qll @@ -1,4 +1,6 @@ /** Provides models of commonly used functions in the `k8s.io/apimachinery/pkg/runtime` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/K8sIoClientGo.qll b/go/ql/lib/semmle/go/frameworks/K8sIoClientGo.qll index c087cc26ff8..f23d069f4c0 100644 --- a/go/ql/lib/semmle/go/frameworks/K8sIoClientGo.qll +++ b/go/ql/lib/semmle/go/frameworks/K8sIoClientGo.qll @@ -1,4 +1,6 @@ /** Provides models of commonly used functions in the `k8s.io/client-go/kubernetes/typed/core/v1` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/Logrus.qll b/go/ql/lib/semmle/go/frameworks/Logrus.qll index 83278a4cd9e..33287462c05 100644 --- a/go/ql/lib/semmle/go/frameworks/Logrus.qll +++ b/go/ql/lib/semmle/go/frameworks/Logrus.qll @@ -1,4 +1,6 @@ /** Provides models of commonly used functions in the `github.com/sirupsen/logrus` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/Macaron.qll b/go/ql/lib/semmle/go/frameworks/Macaron.qll index 41e95095aa2..1c088804263 100644 --- a/go/ql/lib/semmle/go/frameworks/Macaron.qll +++ b/go/ql/lib/semmle/go/frameworks/Macaron.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with concepts relating to the Macaron web framework */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/Mux.qll b/go/ql/lib/semmle/go/frameworks/Mux.qll index e9bb5968f70..a4790e3c5cd 100644 --- a/go/ql/lib/semmle/go/frameworks/Mux.qll +++ b/go/ql/lib/semmle/go/frameworks/Mux.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with concepts in the Mux HTTP middleware library. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/NoSQL.qll b/go/ql/lib/semmle/go/frameworks/NoSQL.qll index 2772182f4fc..463a3923496 100644 --- a/go/ql/lib/semmle/go/frameworks/NoSQL.qll +++ b/go/ql/lib/semmle/go/frameworks/NoSQL.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with NoSQL-related concepts such as queries. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/Protobuf.qll b/go/ql/lib/semmle/go/frameworks/Protobuf.qll index 62443eb46af..246608159e5 100644 --- a/go/ql/lib/semmle/go/frameworks/Protobuf.qll +++ b/go/ql/lib/semmle/go/frameworks/Protobuf.qll @@ -1,4 +1,6 @@ /** Provides models of commonly used functions and types in the protobuf packages. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/Revel.qll b/go/ql/lib/semmle/go/frameworks/Revel.qll index a1eff5e736e..c6250c2f8a5 100644 --- a/go/ql/lib/semmle/go/frameworks/Revel.qll +++ b/go/ql/lib/semmle/go/frameworks/Revel.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with remote flow sources from the `github.com/revel/revel` package. */ +overlay[local?] +module; import go private import semmle.go.security.OpenUrlRedirectCustomizations diff --git a/go/ql/lib/semmle/go/frameworks/RsCors.qll b/go/ql/lib/semmle/go/frameworks/RsCors.qll index 52b4a7fe6d0..7609b27b58a 100644 --- a/go/ql/lib/semmle/go/frameworks/RsCors.qll +++ b/go/ql/lib/semmle/go/frameworks/RsCors.qll @@ -1,4 +1,6 @@ /** Provides classes for modeling the `github.com/rs/cors` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/SQL.qll b/go/ql/lib/semmle/go/frameworks/SQL.qll index c5cf4989d1a..fad4722ad5c 100644 --- a/go/ql/lib/semmle/go/frameworks/SQL.qll +++ b/go/ql/lib/semmle/go/frameworks/SQL.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with SQL-related concepts such as queries. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/Spew.qll b/go/ql/lib/semmle/go/frameworks/Spew.qll index f49a4aa4d89..4c8720868b7 100644 --- a/go/ql/lib/semmle/go/frameworks/Spew.qll +++ b/go/ql/lib/semmle/go/frameworks/Spew.qll @@ -1,6 +1,8 @@ /** * Provides models of commonly used functions in the `github.com/davecgh/go-spew/spew` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/Squirrel.qll b/go/ql/lib/semmle/go/frameworks/Squirrel.qll index c7d75003cfe..28168c54107 100644 --- a/go/ql/lib/semmle/go/frameworks/Squirrel.qll +++ b/go/ql/lib/semmle/go/frameworks/Squirrel.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `squirrel` ORM package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/Stdlib.qll b/go/ql/lib/semmle/go/frameworks/Stdlib.qll index 3b05627168d..4a8a2e8d0ea 100644 --- a/go/ql/lib/semmle/go/frameworks/Stdlib.qll +++ b/go/ql/lib/semmle/go/frameworks/Stdlib.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the standard libraries. */ +overlay[local?] +module; import go import semmle.go.frameworks.stdlib.ArchiveTar diff --git a/go/ql/lib/semmle/go/frameworks/SystemCommandExecutors.qll b/go/ql/lib/semmle/go/frameworks/SystemCommandExecutors.qll index 8abf2bbd368..d1bbbf41d89 100644 --- a/go/ql/lib/semmle/go/frameworks/SystemCommandExecutors.qll +++ b/go/ql/lib/semmle/go/frameworks/SystemCommandExecutors.qll @@ -2,6 +2,8 @@ * Provides concrete classes for data-flow nodes that execute an * operating system command, for instance by spawning a new process. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/Testing.qll b/go/ql/lib/semmle/go/frameworks/Testing.qll index c0246c7df50..c6173ac099a 100644 --- a/go/ql/lib/semmle/go/frameworks/Testing.qll +++ b/go/ql/lib/semmle/go/frameworks/Testing.qll @@ -1,4 +1,6 @@ /** Provides classes for working with tests. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/Twirp.qll b/go/ql/lib/semmle/go/frameworks/Twirp.qll index 254949ad772..2fcd44da2ff 100644 --- a/go/ql/lib/semmle/go/frameworks/Twirp.qll +++ b/go/ql/lib/semmle/go/frameworks/Twirp.qll @@ -1,4 +1,6 @@ /** Provides models of commonly used functions and types in the twirp packages. */ +overlay[local?] +module; import go private import semmle.go.security.RequestForgeryCustomizations diff --git a/go/ql/lib/semmle/go/frameworks/WebSocket.qll b/go/ql/lib/semmle/go/frameworks/WebSocket.qll index eb6160214cc..36c6db5c453 100644 --- a/go/ql/lib/semmle/go/frameworks/WebSocket.qll +++ b/go/ql/lib/semmle/go/frameworks/WebSocket.qll @@ -1,4 +1,6 @@ /** Provides classes for working with WebSocket-related APIs. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/XNetHtml.qll b/go/ql/lib/semmle/go/frameworks/XNetHtml.qll index 003c0e8570e..4eec0c9b331 100644 --- a/go/ql/lib/semmle/go/frameworks/XNetHtml.qll +++ b/go/ql/lib/semmle/go/frameworks/XNetHtml.qll @@ -6,6 +6,8 @@ * that were already untrusted. We do not yet model adding a child `Node` to a tree then calling `Render` * yielding an untrustworthy string. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/XPath.qll b/go/ql/lib/semmle/go/frameworks/XPath.qll index 0d8dc5d8176..d052a619c35 100644 --- a/go/ql/lib/semmle/go/frameworks/XPath.qll +++ b/go/ql/lib/semmle/go/frameworks/XPath.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with XPath-related concepts such as XPath expressions. */ +overlay[local?] +module; import go import semmle.go.dataflow.ExternalFlow diff --git a/go/ql/lib/semmle/go/frameworks/Yaml.qll b/go/ql/lib/semmle/go/frameworks/Yaml.qll index 22fc4f8c58c..160e5f18c6b 100644 --- a/go/ql/lib/semmle/go/frameworks/Yaml.qll +++ b/go/ql/lib/semmle/go/frameworks/Yaml.qll @@ -1,6 +1,8 @@ /** * Provides classes for working with the [gopkg.in/yaml](https://pkg.go.dev/gopkg.in/yaml.v3) package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/Zap.qll b/go/ql/lib/semmle/go/frameworks/Zap.qll index 0928d2b0595..b634d8e9795 100644 --- a/go/ql/lib/semmle/go/frameworks/Zap.qll +++ b/go/ql/lib/semmle/go/frameworks/Zap.qll @@ -1,6 +1,8 @@ /** * Provides models of commonly used functions in the `go.uber.org/zap` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/ArchiveTar.qll b/go/ql/lib/semmle/go/frameworks/stdlib/ArchiveTar.qll index 24d16f86b66..0798f187647 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/ArchiveTar.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/ArchiveTar.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `archive/tar` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/ArchiveZip.qll b/go/ql/lib/semmle/go/frameworks/stdlib/ArchiveZip.qll index ed4061700dc..273b8ddff2c 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/ArchiveZip.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/ArchiveZip.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `archive/zip` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/Bufio.qll b/go/ql/lib/semmle/go/frameworks/stdlib/Bufio.qll index 1ddb7e0889c..e79a5f16a90 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/Bufio.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/Bufio.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `bufio` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/CompressFlate.qll b/go/ql/lib/semmle/go/frameworks/stdlib/CompressFlate.qll index 5df4ac972c9..1d63d0dda29 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/CompressFlate.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/CompressFlate.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `compress/flate` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/CompressGzip.qll b/go/ql/lib/semmle/go/frameworks/stdlib/CompressGzip.qll index 29b731ec927..695c9ea5df5 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/CompressGzip.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/CompressGzip.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `compress/gzip` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/CompressLzw.qll b/go/ql/lib/semmle/go/frameworks/stdlib/CompressLzw.qll index 4d8e2d1de93..319c1d4dd93 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/CompressLzw.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/CompressLzw.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `compress/lzw` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/CompressZlib.qll b/go/ql/lib/semmle/go/frameworks/stdlib/CompressZlib.qll index be8d7fa69a0..26a2872ae1c 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/CompressZlib.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/CompressZlib.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `compress/zlib` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/CryptoTls.qll b/go/ql/lib/semmle/go/frameworks/stdlib/CryptoTls.qll index 2bd85457cf8..a370f12c24d 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/CryptoTls.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/CryptoTls.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `crypto/tls` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/DatabaseSql.qll b/go/ql/lib/semmle/go/frameworks/stdlib/DatabaseSql.qll index f4132688796..1969724b486 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/DatabaseSql.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/DatabaseSql.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `database/sql` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/EncodingAsn1.qll b/go/ql/lib/semmle/go/frameworks/stdlib/EncodingAsn1.qll index 68d9655b11c..7a860608a90 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/EncodingAsn1.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/EncodingAsn1.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `encoding/asn1` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/EncodingCsv.qll b/go/ql/lib/semmle/go/frameworks/stdlib/EncodingCsv.qll index 7606cdc16bd..283eeebacb6 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/EncodingCsv.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/EncodingCsv.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `encoding/csv` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/EncodingGob.qll b/go/ql/lib/semmle/go/frameworks/stdlib/EncodingGob.qll index ada9f167f8d..01db1ec539a 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/EncodingGob.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/EncodingGob.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `encoding/gob` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/EncodingJson.qll b/go/ql/lib/semmle/go/frameworks/stdlib/EncodingJson.qll index f38db392bd0..bf6e25ff9f1 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/EncodingJson.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/EncodingJson.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `encoding/json` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/EncodingPem.qll b/go/ql/lib/semmle/go/frameworks/stdlib/EncodingPem.qll index cb2383d428a..4ef997c7815 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/EncodingPem.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/EncodingPem.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `encoding/pem` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/EncodingXml.qll b/go/ql/lib/semmle/go/frameworks/stdlib/EncodingXml.qll index b36f9007084..b5206754529 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/EncodingXml.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/EncodingXml.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `encoding/xml` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/Errors.qll b/go/ql/lib/semmle/go/frameworks/stdlib/Errors.qll index 133a69795b8..d20d0c1837e 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/Errors.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/Errors.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `errors` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/Fmt.qll b/go/ql/lib/semmle/go/frameworks/stdlib/Fmt.qll index 6adbd542e9b..bc58441ada9 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/Fmt.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/Fmt.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `fmt` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/Html.qll b/go/ql/lib/semmle/go/frameworks/stdlib/Html.qll index 82e5f13e130..c26d329f625 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/Html.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/Html.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `html` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/HtmlTemplate.qll b/go/ql/lib/semmle/go/frameworks/stdlib/HtmlTemplate.qll index f61482c35d7..8d343bfa4fe 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/HtmlTemplate.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/HtmlTemplate.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `html/template` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/Io.qll b/go/ql/lib/semmle/go/frameworks/stdlib/Io.qll index f44ca36ff85..41597e40f02 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/Io.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/Io.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `io` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/IoFs.qll b/go/ql/lib/semmle/go/frameworks/stdlib/IoFs.qll index de7fafc514f..b071e56cbb5 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/IoFs.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/IoFs.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the 'io/fs' package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/Log.qll b/go/ql/lib/semmle/go/frameworks/stdlib/Log.qll index ca74160bf0d..a5ebca68be5 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/Log.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/Log.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `log` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/MimeMultipart.qll b/go/ql/lib/semmle/go/frameworks/stdlib/MimeMultipart.qll index ad60672e35e..d8c193d7f3e 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/MimeMultipart.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/MimeMultipart.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `mime/multipart` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/MimeQuotedprintable.qll b/go/ql/lib/semmle/go/frameworks/stdlib/MimeQuotedprintable.qll index 0cf54c107a7..64b3d4c1755 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/MimeQuotedprintable.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/MimeQuotedprintable.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `mime/quotedprintable` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/Net.qll b/go/ql/lib/semmle/go/frameworks/stdlib/Net.qll index 5b66e523bad..9d3f4abf6bd 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/Net.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/Net.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `net` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/NetHttp.qll b/go/ql/lib/semmle/go/frameworks/stdlib/NetHttp.qll index a2aab2517d7..9bafe9721b7 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/NetHttp.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/NetHttp.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `net/http` package. */ +overlay[local?] +module; import go private import semmle.go.dataflow.internal.DataFlowPrivate diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/NetHttpHttputil.qll b/go/ql/lib/semmle/go/frameworks/stdlib/NetHttpHttputil.qll index f914626c770..465181bb39f 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/NetHttpHttputil.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/NetHttpHttputil.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `net/http/httputil` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/NetTextproto.qll b/go/ql/lib/semmle/go/frameworks/stdlib/NetTextproto.qll index 9e19e719ce5..b1d314fdfd1 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/NetTextproto.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/NetTextproto.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `net/textproto` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/Os.qll b/go/ql/lib/semmle/go/frameworks/stdlib/Os.qll index 72ea4cc6c57..0a633de08c8 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/Os.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/Os.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `os` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/Path.qll b/go/ql/lib/semmle/go/frameworks/stdlib/Path.qll index 98215ecd00a..0bdf0b67ff0 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/Path.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/Path.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `path` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/PathFilepath.qll b/go/ql/lib/semmle/go/frameworks/stdlib/PathFilepath.qll index 379c141fb2a..43deb8e1e7e 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/PathFilepath.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/PathFilepath.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `path/filepath` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/Reflect.qll b/go/ql/lib/semmle/go/frameworks/stdlib/Reflect.qll index 62c09ef0c5e..9a4a74d70d5 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/Reflect.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/Reflect.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `reflect` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/Regexp.qll b/go/ql/lib/semmle/go/frameworks/stdlib/Regexp.qll index 17cc0249908..6a28cd1709f 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/Regexp.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/Regexp.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `regexp` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/Strconv.qll b/go/ql/lib/semmle/go/frameworks/stdlib/Strconv.qll index 0f3d2f95cc7..7048ddcbe0d 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/Strconv.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/Strconv.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `strconv` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/Strings.qll b/go/ql/lib/semmle/go/frameworks/stdlib/Strings.qll index 96b07f5de34..2f514bf28f4 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/Strings.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/Strings.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `strings` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/Syscall.qll b/go/ql/lib/semmle/go/frameworks/stdlib/Syscall.qll index b93a991e8e3..cb74560809f 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/Syscall.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/Syscall.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `syscall` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/TextTabwriter.qll b/go/ql/lib/semmle/go/frameworks/stdlib/TextTabwriter.qll index 964afecb4e6..f0e78817c2d 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/TextTabwriter.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/TextTabwriter.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `text/tabwriter` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/TextTemplate.qll b/go/ql/lib/semmle/go/frameworks/stdlib/TextTemplate.qll index c5a67f388f4..31d7f94ec57 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/TextTemplate.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/TextTemplate.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `text/template` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/Unsafe.qll b/go/ql/lib/semmle/go/frameworks/stdlib/Unsafe.qll index d14598e6f79..307686feac6 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/Unsafe.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/Unsafe.qll @@ -1,6 +1,8 @@ /** * Provides classes modeling security-relevant aspects of the `unsafe` package. */ +overlay[local?] +module; import go diff --git a/go/ql/lib/utils/test/internal/InlineExpectationsTestImpl.qll b/go/ql/lib/utils/test/internal/InlineExpectationsTestImpl.qll index 1d185440772..3bdc948842c 100644 --- a/go/ql/lib/utils/test/internal/InlineExpectationsTestImpl.qll +++ b/go/ql/lib/utils/test/internal/InlineExpectationsTestImpl.qll @@ -1,3 +1,6 @@ +overlay[local?] +module; + private import go as G private import codeql.util.test.InlineExpectationsTest From f32f85399a748eef9285fc8f21e88a9b8df4900c Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Mon, 9 Mar 2026 17:29:17 +0000 Subject: [PATCH 040/111] Mark various files as `overlay[local]` --- go/ql/lib/semmle/go/AST.qll | 2 +- go/ql/lib/semmle/go/Architectures.qll | 2 +- go/ql/lib/semmle/go/Comments.qll | 2 +- go/ql/lib/semmle/go/Decls.qll | 2 +- go/ql/lib/semmle/go/DiagnosticsReporting.qll | 2 +- go/ql/lib/semmle/go/Errors.qll | 2 +- go/ql/lib/semmle/go/Expr.qll | 2 +- go/ql/lib/semmle/go/Files.qll | 2 +- go/ql/lib/semmle/go/GoMod.qll | 2 +- go/ql/lib/semmle/go/HTML.qll | 2 +- go/ql/lib/semmle/go/Locations.qll | 2 +- go/ql/lib/semmle/go/Packages.qll | 2 +- go/ql/lib/semmle/go/PrintAst.qll | 2 +- go/ql/lib/semmle/go/Scopes.qll | 2 +- go/ql/lib/semmle/go/Stmt.qll | 2 +- go/ql/lib/semmle/go/Types.qll | 2 +- go/ql/lib/semmle/go/Util.qll | 2 +- go/ql/lib/semmle/go/VariableWithFields.qll | 2 +- go/ql/lib/semmle/go/concepts/GeneratedFile.qll | 2 +- go/ql/lib/semmle/go/controlflow/BasicBlocks.qll | 2 +- go/ql/lib/semmle/go/controlflow/ControlFlowGraph.qll | 2 +- go/ql/lib/semmle/go/controlflow/ControlFlowGraphImpl.qll | 2 +- go/ql/lib/semmle/go/controlflow/IR.qll | 2 +- go/ql/lib/semmle/go/dataflow/FunctionInputsAndOutputs.qll | 2 +- go/ql/lib/semmle/go/dataflow/GlobalValueNumbering.qll | 2 +- go/ql/lib/semmle/go/dataflow/Properties.qll | 2 +- go/ql/lib/semmle/go/dataflow/SSA.qll | 2 +- go/ql/lib/semmle/go/dataflow/SsaImpl.qll | 2 +- 28 files changed, 28 insertions(+), 28 deletions(-) diff --git a/go/ql/lib/semmle/go/AST.qll b/go/ql/lib/semmle/go/AST.qll index bbe93ed345b..a0715f6ca0e 100644 --- a/go/ql/lib/semmle/go/AST.qll +++ b/go/ql/lib/semmle/go/AST.qll @@ -1,7 +1,7 @@ /** * Provides classes for working with AST nodes. */ -overlay[local?] +overlay[local] module; import go diff --git a/go/ql/lib/semmle/go/Architectures.qll b/go/ql/lib/semmle/go/Architectures.qll index b90501a5d36..0daef5147b4 100644 --- a/go/ql/lib/semmle/go/Architectures.qll +++ b/go/ql/lib/semmle/go/Architectures.qll @@ -1,5 +1,5 @@ /** Provides classes for working with architectures. */ -overlay[local?] +overlay[local] module; import go diff --git a/go/ql/lib/semmle/go/Comments.qll b/go/ql/lib/semmle/go/Comments.qll index f232d4b9378..08a0fabc1ca 100644 --- a/go/ql/lib/semmle/go/Comments.qll +++ b/go/ql/lib/semmle/go/Comments.qll @@ -1,7 +1,7 @@ /** * Provides classes for working with code comments. */ -overlay[local?] +overlay[local] module; import go diff --git a/go/ql/lib/semmle/go/Decls.qll b/go/ql/lib/semmle/go/Decls.qll index d3282b59f69..7588ab913be 100644 --- a/go/ql/lib/semmle/go/Decls.qll +++ b/go/ql/lib/semmle/go/Decls.qll @@ -1,7 +1,7 @@ /** * Provides classes for working with declarations. */ -overlay[local?] +overlay[local] module; import go diff --git a/go/ql/lib/semmle/go/DiagnosticsReporting.qll b/go/ql/lib/semmle/go/DiagnosticsReporting.qll index 0cbc98cdd83..c7d0b547a86 100644 --- a/go/ql/lib/semmle/go/DiagnosticsReporting.qll +++ b/go/ql/lib/semmle/go/DiagnosticsReporting.qll @@ -1,5 +1,5 @@ /** Provides classes for working with errors and warnings recorded during extraction. */ -overlay[local?] +overlay[local] module; import go diff --git a/go/ql/lib/semmle/go/Errors.qll b/go/ql/lib/semmle/go/Errors.qll index 54e1ea98863..4ea0ed2c015 100644 --- a/go/ql/lib/semmle/go/Errors.qll +++ b/go/ql/lib/semmle/go/Errors.qll @@ -1,5 +1,5 @@ /** Provides classes for working with Go frontend errors recorded during extraction. */ -overlay[local?] +overlay[local] module; import go diff --git a/go/ql/lib/semmle/go/Expr.qll b/go/ql/lib/semmle/go/Expr.qll index 9e006aed54c..0dcc707b19d 100644 --- a/go/ql/lib/semmle/go/Expr.qll +++ b/go/ql/lib/semmle/go/Expr.qll @@ -1,7 +1,7 @@ /** * Provides classes for working with expressions. */ -overlay[local?] +overlay[local] module; import go diff --git a/go/ql/lib/semmle/go/Files.qll b/go/ql/lib/semmle/go/Files.qll index 8252357bcc2..ab4e2e084ed 100644 --- a/go/ql/lib/semmle/go/Files.qll +++ b/go/ql/lib/semmle/go/Files.qll @@ -1,5 +1,5 @@ /** Provides classes for working with files and folders. */ -overlay[local?] +overlay[local] module; import go diff --git a/go/ql/lib/semmle/go/GoMod.qll b/go/ql/lib/semmle/go/GoMod.qll index e357ae616cf..6a899cd1d60 100644 --- a/go/ql/lib/semmle/go/GoMod.qll +++ b/go/ql/lib/semmle/go/GoMod.qll @@ -1,7 +1,7 @@ /** * Provides classes for working with go.mod files. */ -overlay[local?] +overlay[local] module; import go diff --git a/go/ql/lib/semmle/go/HTML.qll b/go/ql/lib/semmle/go/HTML.qll index 41bb47e0ba5..01f8a069fe9 100644 --- a/go/ql/lib/semmle/go/HTML.qll +++ b/go/ql/lib/semmle/go/HTML.qll @@ -1,5 +1,5 @@ /** Provides classes for working with HTML documents. */ -overlay[local?] +overlay[local] module; import go diff --git a/go/ql/lib/semmle/go/Locations.qll b/go/ql/lib/semmle/go/Locations.qll index 03105fbdf25..da55799e6df 100644 --- a/go/ql/lib/semmle/go/Locations.qll +++ b/go/ql/lib/semmle/go/Locations.qll @@ -1,5 +1,5 @@ /** Provides classes for working with locations and program elements that have locations. */ -overlay[local?] +overlay[local] module; import go diff --git a/go/ql/lib/semmle/go/Packages.qll b/go/ql/lib/semmle/go/Packages.qll index 8926d0e17f1..f37ddb0507e 100644 --- a/go/ql/lib/semmle/go/Packages.qll +++ b/go/ql/lib/semmle/go/Packages.qll @@ -1,7 +1,7 @@ /** * Provides classes for working with packages. */ -overlay[local?] +overlay[local] module; import go diff --git a/go/ql/lib/semmle/go/PrintAst.qll b/go/ql/lib/semmle/go/PrintAst.qll index c7c9bb5b4b7..6ea5fcc3971 100644 --- a/go/ql/lib/semmle/go/PrintAst.qll +++ b/go/ql/lib/semmle/go/PrintAst.qll @@ -1,7 +1,7 @@ /** * Provides queries to pretty-print a Go AST as a graph. */ -overlay[local?] +overlay[local] module; import go diff --git a/go/ql/lib/semmle/go/Scopes.qll b/go/ql/lib/semmle/go/Scopes.qll index 1933c33230c..4e9a13c8ea1 100644 --- a/go/ql/lib/semmle/go/Scopes.qll +++ b/go/ql/lib/semmle/go/Scopes.qll @@ -1,7 +1,7 @@ /** * Provides classes for working with scopes and declared objects. */ -overlay[local?] +overlay[local] module; import go diff --git a/go/ql/lib/semmle/go/Stmt.qll b/go/ql/lib/semmle/go/Stmt.qll index befc60e73c6..aa6fe7c24de 100644 --- a/go/ql/lib/semmle/go/Stmt.qll +++ b/go/ql/lib/semmle/go/Stmt.qll @@ -1,7 +1,7 @@ /** * Provides classes for working with statements. */ -overlay[local?] +overlay[local] module; import go diff --git a/go/ql/lib/semmle/go/Types.qll b/go/ql/lib/semmle/go/Types.qll index cd4d5a4120f..574d7568543 100644 --- a/go/ql/lib/semmle/go/Types.qll +++ b/go/ql/lib/semmle/go/Types.qll @@ -1,7 +1,7 @@ /** * Provides classes for working with Go types. */ -overlay[local?] +overlay[local] module; import go diff --git a/go/ql/lib/semmle/go/Util.qll b/go/ql/lib/semmle/go/Util.qll index 4879cb0cbe7..a6fe2a6b2b5 100644 --- a/go/ql/lib/semmle/go/Util.qll +++ b/go/ql/lib/semmle/go/Util.qll @@ -1,5 +1,5 @@ /** This module provides general utility classes and predicates. */ -overlay[local?] +overlay[local] module; /** diff --git a/go/ql/lib/semmle/go/VariableWithFields.qll b/go/ql/lib/semmle/go/VariableWithFields.qll index 920c4313de4..277a7dcc326 100644 --- a/go/ql/lib/semmle/go/VariableWithFields.qll +++ b/go/ql/lib/semmle/go/VariableWithFields.qll @@ -1,5 +1,5 @@ /** Provides the `VariableWithFields` class, for working with variables with a chain of field or element accesses chained to it. */ -overlay[local?] +overlay[local] module; import go diff --git a/go/ql/lib/semmle/go/concepts/GeneratedFile.qll b/go/ql/lib/semmle/go/concepts/GeneratedFile.qll index 575ede7fdee..683a8be7e05 100644 --- a/go/ql/lib/semmle/go/concepts/GeneratedFile.qll +++ b/go/ql/lib/semmle/go/concepts/GeneratedFile.qll @@ -1,5 +1,5 @@ /** Provides a class for generated files. */ -overlay[local?] +overlay[local] module; import go diff --git a/go/ql/lib/semmle/go/controlflow/BasicBlocks.qll b/go/ql/lib/semmle/go/controlflow/BasicBlocks.qll index cc1b0c6292c..dc52abb25ab 100644 --- a/go/ql/lib/semmle/go/controlflow/BasicBlocks.qll +++ b/go/ql/lib/semmle/go/controlflow/BasicBlocks.qll @@ -1,7 +1,7 @@ /** * Provides classes for working with basic blocks. */ -overlay[local?] +overlay[local] module; import go diff --git a/go/ql/lib/semmle/go/controlflow/ControlFlowGraph.qll b/go/ql/lib/semmle/go/controlflow/ControlFlowGraph.qll index c7dbe776a8e..77bb94d89f8 100644 --- a/go/ql/lib/semmle/go/controlflow/ControlFlowGraph.qll +++ b/go/ql/lib/semmle/go/controlflow/ControlFlowGraph.qll @@ -1,7 +1,7 @@ /** * Provides classes for working with a CFG-based program representation. */ -overlay[local?] +overlay[local] module; import go diff --git a/go/ql/lib/semmle/go/controlflow/ControlFlowGraphImpl.qll b/go/ql/lib/semmle/go/controlflow/ControlFlowGraphImpl.qll index 125ad7fdec2..a26ab3adaf5 100644 --- a/go/ql/lib/semmle/go/controlflow/ControlFlowGraphImpl.qll +++ b/go/ql/lib/semmle/go/controlflow/ControlFlowGraphImpl.qll @@ -3,7 +3,7 @@ * * Provides predicates for building intra-procedural CFGs. */ -overlay[local?] +overlay[local] module; import go diff --git a/go/ql/lib/semmle/go/controlflow/IR.qll b/go/ql/lib/semmle/go/controlflow/IR.qll index e3ed7cadbad..a4c73004108 100644 --- a/go/ql/lib/semmle/go/controlflow/IR.qll +++ b/go/ql/lib/semmle/go/controlflow/IR.qll @@ -9,7 +9,7 @@ * Each instruction is also a control-flow node, but there are control-flow nodes that are not * instructions (synthetic entry and exit nodes, as well as no-op skip nodes). */ -overlay[local?] +overlay[local] module; import go diff --git a/go/ql/lib/semmle/go/dataflow/FunctionInputsAndOutputs.qll b/go/ql/lib/semmle/go/dataflow/FunctionInputsAndOutputs.qll index 42d17006d64..5f437f81576 100644 --- a/go/ql/lib/semmle/go/dataflow/FunctionInputsAndOutputs.qll +++ b/go/ql/lib/semmle/go/dataflow/FunctionInputsAndOutputs.qll @@ -2,7 +2,7 @@ * Provides QL classes for indicating data flow through a function parameter, return value, * or receiver. */ -overlay[local?] +overlay[local] module; import go diff --git a/go/ql/lib/semmle/go/dataflow/GlobalValueNumbering.qll b/go/ql/lib/semmle/go/dataflow/GlobalValueNumbering.qll index 0b08d5a4b8f..88a659f6f82 100644 --- a/go/ql/lib/semmle/go/dataflow/GlobalValueNumbering.qll +++ b/go/ql/lib/semmle/go/dataflow/GlobalValueNumbering.qll @@ -29,7 +29,7 @@ * common reason for this is that the analysis cannot prove that there * are no side-effects that might cause the computed value to change. */ -overlay[local?] +overlay[local] module; /* diff --git a/go/ql/lib/semmle/go/dataflow/Properties.qll b/go/ql/lib/semmle/go/dataflow/Properties.qll index 6794eee5fcd..573b001a3c3 100644 --- a/go/ql/lib/semmle/go/dataflow/Properties.qll +++ b/go/ql/lib/semmle/go/dataflow/Properties.qll @@ -1,7 +1,7 @@ /** * Provides a class for representing and reasoning about properties of data-flow nodes. */ -overlay[local?] +overlay[local] module; import go diff --git a/go/ql/lib/semmle/go/dataflow/SSA.qll b/go/ql/lib/semmle/go/dataflow/SSA.qll index c3d759a70fe..46ce4da3935 100644 --- a/go/ql/lib/semmle/go/dataflow/SSA.qll +++ b/go/ql/lib/semmle/go/dataflow/SSA.qll @@ -1,7 +1,7 @@ /** * Provides classes for working with static single assignment form (SSA). */ -overlay[local?] +overlay[local] module; import go diff --git a/go/ql/lib/semmle/go/dataflow/SsaImpl.qll b/go/ql/lib/semmle/go/dataflow/SsaImpl.qll index bf530108d4b..9648335a6dd 100644 --- a/go/ql/lib/semmle/go/dataflow/SsaImpl.qll +++ b/go/ql/lib/semmle/go/dataflow/SsaImpl.qll @@ -3,7 +3,7 @@ * * Provides predicates for constructing an SSA representation for functions. */ -overlay[local?] +overlay[local] module; import go From e9df9147ad4e7c6deb768f37852a6d43d0b5e7bd Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 11 Mar 2026 15:00:50 +0000 Subject: [PATCH 041/111] Add overlay annotations in 4 PrintAst tests --- .../library-tests/semmle/go/PrintAst/PrintAstExcludeComments.ql | 1 + .../library-tests/semmle/go/PrintAst/PrintAstNestedFunction.ql | 1 + .../library-tests/semmle/go/PrintAst/PrintAstRestrictFile.ql | 1 + .../library-tests/semmle/go/PrintAst/PrintAstRestrictFunction.ql | 1 + 4 files changed, 4 insertions(+) diff --git a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstExcludeComments.ql b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstExcludeComments.ql index 4ca15c10ac5..bbcaa16f28b 100644 --- a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstExcludeComments.ql +++ b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstExcludeComments.ql @@ -5,6 +5,7 @@ import go import semmle.go.PrintAst +overlay[local] class Cfg extends PrintAstConfiguration { override predicate shouldPrintFunction(FuncDecl func) { any() } diff --git a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstNestedFunction.ql b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstNestedFunction.ql index eaddceacaa3..b04be6edfac 100644 --- a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstNestedFunction.ql +++ b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstNestedFunction.ql @@ -5,6 +5,7 @@ import go import semmle.go.PrintAst +overlay[local] class Cfg extends PrintAstConfiguration { override predicate shouldPrintFunction(FuncDecl func) { func.getName() = "hasNested" } diff --git a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFile.ql b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFile.ql index 83d27b9cf26..60cda4f5045 100644 --- a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFile.ql +++ b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFile.ql @@ -5,6 +5,7 @@ import go import semmle.go.PrintAst +overlay[local] class Cfg extends PrintAstConfiguration { override predicate shouldPrintFunction(FuncDecl func) { any() } diff --git a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFunction.ql b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFunction.ql index 382fc397755..5b3501edc6c 100644 --- a/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFunction.ql +++ b/go/ql/test/library-tests/semmle/go/PrintAst/PrintAstRestrictFunction.ql @@ -5,6 +5,7 @@ import go import semmle.go.PrintAst +overlay[local] class Cfg extends PrintAstConfiguration { override predicate shouldPrintFunction(FuncDecl func) { func.getName() = "g" } From 99f4930e24c2c4892dcc9650f97b0ac9705d80d5 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 13 Mar 2026 15:23:39 +0000 Subject: [PATCH 042/111] Explicitly mark DataFlowNodes.qll as overlay[local] --- go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll index f5115656675..8fca4bec8c6 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll @@ -1,4 +1,4 @@ -overlay[local?] +overlay[local] module; private import go From b8b841cfba8b66008e8538e7202f05fc0c662ffb Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 13 Mar 2026 16:18:50 +0000 Subject: [PATCH 043/111] Add `overlay[loca]` in 4 more tests --- .../semmle/go/dataflow/ExternalFlowInheritance/ql_I1.ql | 1 + .../semmle/go/dataflow/ExternalFlowInheritance/ql_P1.ql | 1 + .../semmle/go/dataflow/ExternalFlowInheritance/ql_S1.ql | 1 + .../semmle/go/dataflow/VarArgsWithFunctionModels/Flows.ql | 1 + 4 files changed, 4 insertions(+) diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlowInheritance/ql_I1.ql b/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlowInheritance/ql_I1.ql index 181c55b29df..2468a57cac0 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlowInheritance/ql_I1.ql +++ b/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlowInheritance/ql_I1.ql @@ -34,6 +34,7 @@ module FlowTest implements TestSig { } } +overlay[local] class MyStep extends DataFlow::FunctionModel, Method { MyStep() { this.hasQualifiedName("github.com/nonexistent/test", "I1", "Step") } diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlowInheritance/ql_P1.ql b/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlowInheritance/ql_P1.ql index e82a6cb4da1..788c8c028d2 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlowInheritance/ql_P1.ql +++ b/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlowInheritance/ql_P1.ql @@ -44,6 +44,7 @@ module FlowTest implements TestSig { } } +overlay[local] class MyStep extends DataFlow::FunctionModel, Method { MyStep() { this.hasQualifiedName("github.com/nonexistent/test", "P1", "Step") } diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlowInheritance/ql_S1.ql b/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlowInheritance/ql_S1.ql index c4124dcd10e..127fb0012a3 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlowInheritance/ql_S1.ql +++ b/go/ql/test/library-tests/semmle/go/dataflow/ExternalFlowInheritance/ql_S1.ql @@ -44,6 +44,7 @@ module FlowTest implements TestSig { } } +overlay[local] class MyStep extends DataFlow::FunctionModel, Method { MyStep() { this.hasQualifiedName("github.com/nonexistent/test", "S1", "Step") } diff --git a/go/ql/test/library-tests/semmle/go/dataflow/VarArgsWithFunctionModels/Flows.ql b/go/ql/test/library-tests/semmle/go/dataflow/VarArgsWithFunctionModels/Flows.ql index 78e21d534e0..bbe5618b568 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/VarArgsWithFunctionModels/Flows.ql +++ b/go/ql/test/library-tests/semmle/go/dataflow/VarArgsWithFunctionModels/Flows.ql @@ -4,6 +4,7 @@ import ModelValidation import utils.test.InlineFlowTest import DefaultFlowTest +overlay[local] class SummaryModelTest extends DataFlow::FunctionModel { FunctionInput inp; FunctionOutput outp; From 8c03136c252e22cc062b63f132d89235b3354633 Mon Sep 17 00:00:00 2001 From: Jeongsoo Lee Date: Fri, 13 Mar 2026 10:11:40 -0700 Subject: [PATCH 044/111] 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 045/111] 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 f9f1d9eecc057b9c394d7543fd42580d601dbd41 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Fri, 13 Mar 2026 11:11:29 +0100 Subject: [PATCH 046/111] Swift: Ignore some DB-CHECK results on Linux --- swift/ql/integration-tests/posix/deduplication/test.py | 2 ++ swift/ql/integration-tests/posix/hello-world/test.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/swift/ql/integration-tests/posix/deduplication/test.py b/swift/ql/integration-tests/posix/deduplication/test.py index d9915ed3770..3e52638fdc0 100644 --- a/swift/ql/integration-tests/posix/deduplication/test.py +++ b/swift/ql/integration-tests/posix/deduplication/test.py @@ -1,6 +1,8 @@ +import pytest import runs_on @runs_on.posix +@pytest.mark.ql_test("DB-CHECK", xfail=runs_on.linux) def test(codeql, swift): codeql.database.create(command="swift build", keep_trap=True) diff --git a/swift/ql/integration-tests/posix/hello-world/test.py b/swift/ql/integration-tests/posix/hello-world/test.py index 2b81f139383..eb0ccd23b46 100644 --- a/swift/ql/integration-tests/posix/hello-world/test.py +++ b/swift/ql/integration-tests/posix/hello-world/test.py @@ -1,9 +1,9 @@ import pytest - import runs_on @runs_on.posix +@pytest.mark.ql_test("DB-CHECK", xfail=runs_on.linux) def test(codeql, swift): codeql.database.create(command="swift build") From a5c8a5b5f865eb196d673fc748e7df50838468f4 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 13 Mar 2026 08:07:45 +0100 Subject: [PATCH 047/111] C#: Remove splitting-awareness for taint steps. --- .../internal/TaintTrackingPrivate.qll | 124 +++++++----------- 1 file changed, 48 insertions(+), 76 deletions(-) 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 bb08c8f7e2c..78dc2f98d6b 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll @@ -45,82 +45,58 @@ predicate defaultImplicitTaintRead(DataFlow::Node node, DataFlow::ContentSet c) ) } -private class LocalTaintExprStepConfiguration extends ControlFlowReachabilityConfiguration { - LocalTaintExprStepConfiguration() { this = "LocalTaintExprStepConfiguration" } - - override predicate candidate( - Expr e1, Expr e2, ControlFlowElement scope, boolean exactScope, boolean isSuccessor - ) { - exactScope = false and - isSuccessor = true and - ( - e1 = e2.(ElementAccess).getQualifier() and - scope = e2 - or - e1 = e2.(AddExpr).getAnOperand() and - scope = e2 - or - // A comparison expression where taint can flow from one of the - // operands if the other operand is a constant value. - exists(ComparisonTest ct, Expr other | - ct.getExpr() = e2 and - e1 = ct.getAnArgument() and - other = ct.getAnArgument() and - other.stripCasts().hasValue() and - e1 != other and - scope = e2 - ) - or - e1 = e2.(UnaryLogicalOperation).getAnOperand() and - scope = e2 - or - e1 = e2.(BinaryLogicalOperation).getAnOperand() and - scope = e2 - or - e1 = e2.(InterpolatedStringExpr).getAChild() and - scope = e2 - or - e1 = e2.(InterpolatedStringInsertExpr).getInsert() and - scope = e2 - or - e2 = - any(OperatorCall oc | - oc.getTarget().(ConversionOperator).fromLibrary() and - e1 = oc.getAnArgument() and - scope = e2 - ) - or - e1 = e2.(AwaitExpr).getExpr() and - scope = e2 - or - // Taint flows from the operand of a cast to the cast expression if the cast is to an interpolated string handler. - e2 = - any(CastExpr ce | - e1 = ce.getExpr() and - scope = ce and - ce.getTargetType() - .(Attributable) - .getAnAttribute() - .getType() - .hasFullyQualifiedName("System.Runtime.CompilerServices", - "InterpolatedStringHandlerAttribute") - ) - ) - } -} - -private ControlFlow::Nodes::ExprNode getALastEvalNode(ControlFlow::Nodes::ExprNode cfn) { - exists(OperatorCall oc | any(LocalTaintExprStepConfiguration x).hasExprPath(_, result, oc, cfn) | - oc.getTarget() instanceof ImplicitConversionOperator +private predicate localTaintExprStep(Expr e1, Expr e2) { + e1 = e2.(ElementAccess).getQualifier() + or + e1 = e2.(AddExpr).getAnOperand() + or + // A comparison expression where taint can flow from one of the + // operands if the other operand is a constant value. + exists(ComparisonTest ct, Expr other | + ct.getExpr() = e2 and + e1 = ct.getAnArgument() and + other = ct.getAnArgument() and + other.stripCasts().hasValue() and + e1 != other ) + or + e1 = e2.(UnaryLogicalOperation).getAnOperand() + or + e1 = e2.(BinaryLogicalOperation).getAnOperand() + or + e1 = e2.(InterpolatedStringExpr).getAChild() + or + e1 = e2.(InterpolatedStringInsertExpr).getInsert() + or + e2 = + any(OperatorCall oc | + oc.getTarget().(ConversionOperator).fromLibrary() and + e1 = oc.getAnArgument() + ) + or + e1 = e2.(AwaitExpr).getExpr() + or + // Taint flows from the operand of a cast to the cast expression if the cast is to an interpolated string handler. + e2 = + any(CastExpr ce | + e1 = ce.getExpr() and + ce.getTargetType() + .(Attributable) + .getAnAttribute() + .getType() + .hasFullyQualifiedName("System.Runtime.CompilerServices", + "InterpolatedStringHandlerAttribute") + ) } -private ControlFlow::Nodes::ExprNode getPostUpdateReverseStep(ControlFlow::Nodes::ExprNode e) { - result = getALastEvalNode(e) +private Expr getALastEvalNode(OperatorCall oc) { + localTaintExprStep(result, oc) and oc.getTarget() instanceof ImplicitConversionOperator } +private Expr getPostUpdateReverseStep(Expr e) { result = getALastEvalNode(e) } + private predicate localTaintStepCommon(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { - hasNodePath(any(LocalTaintExprStepConfiguration x), nodeFrom, nodeTo) + localTaintExprStep(nodeFrom.asExpr(), nodeTo.asExpr()) } cached @@ -191,12 +167,8 @@ private module Cached { // Allow reverse update flow for implicit conversion operator calls. // This is needed to support flow out of method call arguments, where an implicit conversion is applied // to a call argument. - nodeTo.(PostUpdateNode).getPreUpdateNode().(DataFlow::ExprNode).getControlFlowNode() = - getPostUpdateReverseStep(nodeFrom - .(PostUpdateNode) - .getPreUpdateNode() - .(DataFlow::ExprNode) - .getControlFlowNode()) + nodeTo.(PostUpdateNode).getPreUpdateNode().asExpr() = + getPostUpdateReverseStep(nodeFrom.(PostUpdateNode).getPreUpdateNode().asExpr()) ) and model = "" or From 2160910d56ec2ce3dfb17b5e886cc2e7795e6aad Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 13 Mar 2026 08:37:11 +0100 Subject: [PATCH 048/111] C#: Remove splitting-awareness for read steps. --- .../dataflow/internal/DataFlowPrivate.qll | 176 +++++------------- 1 file changed, 46 insertions(+), 130 deletions(-) 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 70161a6fc47..8a9a47ab648 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -2378,133 +2378,51 @@ predicate storeStep(Node node1, ContentSet c, Node node2) { storeStepDelegateCall(node1, c, node2) } -pragma[nomagic] -private predicate isAssignExprLValueDescendant(Expr e) { - e = any(AssignExpr ae).getLValue() - or - exists(Expr parent | - isAssignExprLValueDescendant(parent) and - e = parent.getAChildExpr() - ) -} - -private class ReadStepConfiguration extends ControlFlowReachabilityConfiguration { - ReadStepConfiguration() { this = "ReadStepConfiguration" } - - override predicate candidate( - Expr e1, Expr e2, ControlFlowElement scope, boolean exactScope, boolean isSuccessor - ) { - exactScope = false and - isSuccessor = true and - fieldOrPropertyRead(e1, _, e2) and - scope = e2 - or - exactScope = false and - isSuccessor = true and - dynamicPropertyRead(e1, _, e2) and - scope = e2 - or - exactScope = false and - isSuccessor = true and - arrayRead(e1, e2) and - scope = e2 - or - exactScope = false and - e1 = e2.(AwaitExpr).getExpr() and - scope = e2 and - isSuccessor = true - or - exactScope = false and - e2 = e1.(TupleExpr).getAnArgument() and - scope = e1 and - isSuccessor = false - } - - override predicate candidateDef( - Expr e, AssignableDefinition defTo, ControlFlowElement scope, boolean exactScope, - boolean isSuccessor - ) { - exists(ForeachStmt fs | - e = fs.getIterableExpr() and - defTo.(AssignableDefinitions::LocalVariableDefinition).getDeclaration() = - fs.getVariableDeclExpr() and - isSuccessor = true - | - scope = fs and - exactScope = true - or - scope = fs.getIterableExpr() and - exactScope = false - or - scope = fs.getVariableDeclExpr() and - exactScope = false - ) - or - scope = - any(AssignExpr ae | - ae = defTo.(AssignableDefinitions::TupleAssignmentDefinition).getAssignment() and - isAssignExprLValueDescendant(e.(TupleExpr)) and - exactScope = false and - isSuccessor = true - ) - or - scope = - any(TupleExpr te | - te.getAnArgument() = defTo.(AssignableDefinitions::LocalVariableDefinition).getDeclaration() and - e = te and - exactScope = false and - isSuccessor = false - ) - } -} - private predicate readContentStep(Node node1, Content c, Node node2) { - exists(ReadStepConfiguration x | - hasNodePath(x, node1, node2) and - arrayRead(node1.asExpr(), node2.asExpr()) and + arrayRead(node1.asExpr(), node2.asExpr()) and + c instanceof ElementContent + or + exists( + ForeachStmt fs, Ssa::ExplicitDefinition def, + AssignableDefinitions::LocalVariableDefinition defTo + | + node1.asExpr() = fs.getIterableExpr() and + defTo.getDeclaration() = fs.getVariableDeclExpr() and + def.getADefinition() = defTo and + node2.(SsaDefinitionNode).getDefinition() = def and c instanceof ElementContent + ) + or + node1 = + any(InstanceParameterAccessPreNode n | + n.getUnderlyingControlFlowNode() = node2.(ExprNode).getControlFlowNode() and + n.getParameter() = c.(PrimaryConstructorParameterContent).getParameter() + ) and + node2.asExpr() instanceof ParameterRead + or + // node1 = (..., node2, ...) + // node1.ItemX flows to node2 + exists(TupleExpr te, int i, Expr item | + te = node1.asExpr() and + not te.isConstruction() and + c.(FieldContent).getField() = te.getType().(TupleType).getElement(i).getUnboundDeclaration() and + // node1 = (..., item, ...) + te.getArgument(i) = item + | + // item = (..., ..., ...) in node1 = (..., (..., ..., ...), ...) + node2.asExpr().(TupleExpr) = item or - exists(ForeachStmt fs, Ssa::ExplicitDefinition def | - x.hasDefPath(fs.getIterableExpr(), node1.getControlFlowNode(), def.getADefinition(), - def.getControlFlowNode()) and - node2.(SsaDefinitionNode).getDefinition() = def and - c instanceof ElementContent + // item = variable in node1 = (..., variable, ...) + exists(AssignableDefinitions::TupleAssignmentDefinition tad | + node2.(AssignableDefinitionNode).getDefinition() = tad and + tad.getLeaf() = item ) or - node1 = - any(InstanceParameterAccessPreNode n | - n.getUnderlyingControlFlowNode() = node2.(ExprNode).getControlFlowNode() and - n.getParameter() = c.(PrimaryConstructorParameterContent).getParameter() - ) and - node2.asExpr() instanceof ParameterRead - or - // node1 = (..., node2, ...) - // node1.ItemX flows to node2 - exists(TupleExpr te, int i, Expr item | - te = node1.asExpr() and - not te.isConstruction() and - c.(FieldContent).getField() = te.getType().(TupleType).getElement(i).getUnboundDeclaration() and - // node1 = (..., item, ...) - te.getArgument(i) = item - | - // item = (..., ..., ...) in node1 = (..., (..., ..., ...), ...) - node2.asExpr().(TupleExpr) = item and - hasNodePath(x, node1, node2) - or - // item = variable in node1 = (..., variable, ...) - exists(AssignableDefinitions::TupleAssignmentDefinition tad | - node2.(AssignableDefinitionNode).getDefinition() = tad and - tad.getLeaf() = item and - hasNodePath(x, node1, node2) - ) - or - // item = variable in node1 = (..., variable, ...) in a case/is var (..., ...) - isPatternExprDescendant(te) and - exists(AssignableDefinitions::LocalVariableDefinition lvd | - node2.(AssignableDefinitionNode).getDefinition() = lvd and - lvd.getDeclaration() = item and - hasNodePath(x, node1, node2) - ) + // item = variable in node1 = (..., variable, ...) in a case/is var (..., ...) + isPatternExprDescendant(te) and + exists(AssignableDefinitions::LocalVariableDefinition lvd | + node2.(AssignableDefinitionNode).getDefinition() = lvd and + lvd.getDeclaration() = item ) ) or @@ -2535,14 +2453,12 @@ predicate readStep(Node node1, ContentSet c, Node node2) { c.isSingleton(cont) ) or - exists(ReadStepConfiguration x | hasNodePath(x, node1, node2) | - fieldOrPropertyRead(node1.asExpr(), c, node2.asExpr()) - or - dynamicPropertyRead(node1.asExpr(), c, node2.asExpr()) - or - node2.asExpr().(AwaitExpr).getExpr() = node1.asExpr() and - c = getResultContent() - ) + fieldOrPropertyRead(node1.asExpr(), c, node2.asExpr()) + or + dynamicPropertyRead(node1.asExpr(), c, node2.asExpr()) + or + node2.asExpr().(AwaitExpr).getExpr() = node1.asExpr() and + c = getResultContent() or FlowSummaryImpl::Private::Steps::summaryReadStep(node1.(FlowSummaryNode).getSummaryNode(), c, node2.(FlowSummaryNode).getSummaryNode()) From bce0a4d2a7e5401ba0267892c8458517ecff2ac7 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 13 Mar 2026 08:53:41 +0100 Subject: [PATCH 049/111] C#: Remove splitting-awareness for store steps. --- .../dataflow/internal/DataFlowPrivate.qll | 101 ++++++------------ 1 file changed, 30 insertions(+), 71 deletions(-) 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 8a9a47ab648..b9ffba13173 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -834,11 +834,11 @@ private class Argument extends Expr { } /** - * Holds if `e` is an assignment of `src` to field or property `c` of `q`. + * Holds if there is an assignment of `src` to field or property `c` of `q`. * * `postUpdate` indicates whether the store targets a post-update node. */ -private predicate fieldOrPropertyStore(Expr e, ContentSet c, Expr src, Expr q, boolean postUpdate) { +private predicate fieldOrPropertyStore(ContentSet c, Expr src, Expr q, boolean postUpdate) { exists(FieldOrProperty f | c = f.getContentSet() and ( @@ -861,25 +861,20 @@ private predicate fieldOrPropertyStore(Expr e, ContentSet c, Expr src, Expr q, b f = fa.getTarget() and src = def.getSource() and q = fa.getQualifier() and - e = def.getExpr() and postUpdate = true ) or // `with` expression initializer, `x with { f = src }` - e = - any(WithExpr we | - exists(MemberInitializer mi | - q = we and - mi = we.getInitializer().getAMemberInitializer() and - f = mi.getInitializedMember() and - src = mi.getRValue() and - postUpdate = false - ) - ) + exists(WithExpr we, MemberInitializer mi | + q = we and + mi = we.getInitializer().getAMemberInitializer() and + f = mi.getInitializedMember() and + src = mi.getRValue() and + postUpdate = false + ) or // Object initializer, `new C() { f = src }` exists(MemberInitializer mi | - e = q and mi = q.(ObjectInitializer).getAMemberInitializer() and q.getParent() instanceof ObjectCreation and f = mi.getInitializedMember() and @@ -888,16 +883,13 @@ private predicate fieldOrPropertyStore(Expr e, ContentSet c, Expr src, Expr q, b ) or // Tuple element, `(..., src, ...)` `f` is `ItemX` of tuple `q` - e = - any(TupleExpr te | - exists(int i | - e = q and - src = te.getArgument(i) and - te.isConstruction() and - f = q.getType().(TupleType).getElement(i) and - postUpdate = false - ) - ) + exists(TupleExpr te, int i | + te = q and + src = te.getArgument(i) and + te.isConstruction() and + f = q.getType().(TupleType).getElement(i) and + postUpdate = false + ) ) or // A write to a dynamic property @@ -907,7 +899,6 @@ private predicate fieldOrPropertyStore(Expr e, ContentSet c, Expr src, Expr q, b c.isDynamicProperty(dp) and src = def.getSource() and q = dma.getQualifier() and - e = def.getExpr() and postUpdate = true ) } @@ -943,22 +934,20 @@ private predicate collectionStore(Expr src, CollectionExpression ce) { } /** - * Holds if `e` is an expression that adds `src` to array `a`. + * Holds if there is an expression that adds `src` to array `a`. * * `postUpdate` indicates whether the store targets a post-update node. */ -private predicate arrayStore(Expr e, Expr src, Expr a, boolean postUpdate) { +private predicate arrayStore(Expr src, Expr a, boolean postUpdate) { // Direct assignment, `a[i] = src` exists(AssignableDefinition def | a = def.getTargetAccess().(ArrayWrite).getQualifier() and src = def.getSource() and - e = def.getExpr() and postUpdate = true ) or // Array initializer, `new [] { src }` src = a.(ArrayInitializer).getAnElement() and - e = a and postUpdate = false or // Member initializer, `new C { Array = { [i] = src } }` @@ -966,7 +955,6 @@ private predicate arrayStore(Expr e, Expr src, Expr a, boolean postUpdate) { mi = a.(ObjectInitializer).getAMemberInitializer() and mi.getLValue() instanceof ArrayAccess and mi.getRValue() = src and - e = a and postUpdate = false ) } @@ -1149,9 +1137,9 @@ private module Cached { exprMayHavePostUpdateNode(cfn.getExpr()) or exists(Expr e | e = cfn.getExpr() | - fieldOrPropertyStore(_, _, _, e, true) + fieldOrPropertyStore(_, _, e, true) or - arrayStore(_, _, e, true) + arrayStore(_, e, true) or // needed for reverse stores; e.g. `x.f1.f2 = y` induces // a store step of `f1` into `x` @@ -2236,30 +2224,6 @@ predicate jumpStep(Node pred, Node succ) { succ = pred.(LocalFunctionCreationNode).getAnAccess(false) } -private class StoreStepConfiguration extends ControlFlowReachabilityConfiguration { - StoreStepConfiguration() { this = "StoreStepConfiguration" } - - override predicate candidate( - Expr e1, Expr e2, ControlFlowElement scope, boolean exactScope, boolean isSuccessor - ) { - exactScope = false and - fieldOrPropertyStore(scope, _, e1, e2, isSuccessor.booleanNot()) - or - exactScope = false and - arrayStore(scope, e1, e2, isSuccessor.booleanNot()) - or - exactScope = false and - isSuccessor = true and - collectionStore(e1, e2) and - scope = e2 - or - exactScope = false and - isSuccessor = true and - isParamsArg(e2, e1, _) and - scope = e2 - } -} - pragma[nomagic] private ContentSet getResultContent() { result.isProperty(any(SystemThreadingTasksTaskTClass c_).getResultProperty()) @@ -2282,21 +2246,17 @@ private predicate recordParameter(RecordType t, Parameter p, string name) { } private predicate storeContentStep(Node node1, Content c, Node node2) { - exists(StoreStepConfiguration x, ExprNode node, boolean postUpdate | - hasNodePath(x, node1, node) and + exists(ExprNode node, boolean postUpdate | if postUpdate = true then node = node2.(PostUpdateNode).getPreUpdateNode() else node = node2 | - arrayStore(_, node1.asExpr(), node.getExpr(), postUpdate) and c instanceof ElementContent + arrayStore(node1.asExpr(), node.getExpr(), postUpdate) and c instanceof ElementContent ) or - exists(StoreStepConfiguration x | hasNodePath(x, node1, node2) | - collectionStore(node1.asExpr(), node2.asExpr()) and c instanceof ElementContent - ) + collectionStore(node1.asExpr(), node2.asExpr()) and c instanceof ElementContent or - exists(StoreStepConfiguration x, Expr arg, ControlFlow::Node callCfn | - x.hasExprPath(arg, node1.(ExprNode).getControlFlowNode(), _, callCfn) and - node2 = TParamsArgumentNode(callCfn) and - isParamsArg(_, arg, _) and + exists(Call call | + node2 = TParamsArgumentNode(call.getControlFlowNode()) and + isParamsArg(call, node1.asExpr(), _) and c instanceof ElementContent ) or @@ -2352,11 +2312,10 @@ predicate storeStep(Node node1, ContentSet c, Node node2) { c.isSingleton(cont) ) or - exists(StoreStepConfiguration x, ExprNode node, boolean postUpdate | - hasNodePath(x, node1, node) and + exists(ExprNode node, boolean postUpdate | if postUpdate = true then node = node2.(PostUpdateNode).getPreUpdateNode() else node = node2 | - fieldOrPropertyStore(_, c, node1.asExpr(), node.getExpr(), postUpdate) + fieldOrPropertyStore(c, node1.asExpr(), node.getExpr(), postUpdate) ) or exists(Expr e | @@ -2492,9 +2451,9 @@ predicate clearsContent(Node n, ContentSet c) { c.isSingleton(cont) ) or - fieldOrPropertyStore(_, c, _, n.asExpr(), true) + fieldOrPropertyStore(c, _, n.asExpr(), true) or - fieldOrPropertyStore(_, c, _, n.(ObjectInitializerNode).getInitializer(), false) + fieldOrPropertyStore(c, _, n.(ObjectInitializerNode).getInitializer(), false) or FlowSummaryImpl::Private::Steps::summaryClearsContent(n.(FlowSummaryNode).getSummaryNode(), c) or From 1e8de0511b1d6adc69a2bddf0b073cb67ea9a9ff Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 13 Mar 2026 13:00:43 +0100 Subject: [PATCH 050/111] C#: Remove splitting-awareness in lambda flow. --- .../dataflow/internal/DataFlowPrivate.qll | 49 ++++++------------- 1 file changed, 15 insertions(+), 34 deletions(-) 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 b9ffba13173..13075418232 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -1154,7 +1154,7 @@ private module Cached { ) ) or - lambdaCallExpr(_, cfn) + lambdaCallExpr(_, _, cfn) } or TFlowSummaryNode(FlowSummaryImpl::Private::SummaryNode sn) { sn.getSummarizedCallable() instanceof CallableUsedInSource @@ -1588,7 +1588,7 @@ private module ArgumentNodes { class DelegateSelfArgumentNode extends ArgumentNodeImpl, ExprNode { private DataFlowCall call_; - DelegateSelfArgumentNode() { lambdaCallExpr(call_, this.getControlFlowNode()) } + DelegateSelfArgumentNode() { lambdaCallExpr(call_, this.getExpr(), _) } override predicate argumentOf(DataFlowCall call, ArgumentPosition pos) { call = call_ and @@ -2855,45 +2855,26 @@ private predicate isLocalFunctionCallReceiver( f = receiver.getTarget().getUnboundDeclaration() } -private class LambdaConfiguration extends ControlFlowReachabilityConfiguration { - LambdaConfiguration() { this = "LambdaConfiguration" } - - override predicate candidate( - Expr e1, Expr e2, ControlFlowElement scope, boolean exactScope, boolean isSuccessor - ) { - e1 = e2.(DelegateLikeCall).getExpr() and - exactScope = false and - scope = e2 and - isSuccessor = true - or - e1 = e2.(DelegateCreation).getArgument() and - exactScope = false and - scope = e2 and - isSuccessor = true - or - isLocalFunctionCallReceiver(e2, e1, _) and - exactScope = false and - scope = e2 and - isSuccessor = true - } -} - -private predicate lambdaCallExpr(DataFlowCall call, ControlFlow::Node receiver) { - exists(LambdaConfiguration x, DelegateLikeCall dc | - x.hasExprPath(dc.getExpr(), receiver, dc, call.getControlFlowNode()) +private predicate lambdaCallExpr(DataFlowCall call, Expr receiver, ControlFlow::Node receiverCfn) { + exists(DelegateLikeCall dc | + call.(ExplicitDelegateLikeDataFlowCall).getCall() = dc and + receiver = dc.getExpr() and + receiverCfn = receiver.getControlFlowNode() ) or // In local function calls, `F()`, we use the local function access `F` // to represent the receiver. Only needed for flow through captured variables. - exists(LambdaConfiguration x, LocalFunctionCall fc | - x.hasExprPath(fc.getAChild(), receiver, fc, call.getControlFlowNode()) + exists(LocalFunctionCall fc | + receiver = fc.getAChild() and + receiverCfn = receiver.getControlFlowNode() and + fc.getControlFlowNode() = call.getControlFlowNode() ) } /** Holds if `call` is a lambda call where `receiver` is the lambda expression. */ predicate lambdaCall(DataFlowCall call, LambdaCallKind kind, Node receiver) { ( - lambdaCallExpr(call, receiver.(ExprNode).getControlFlowNode()) and + lambdaCallExpr(call, receiver.asExpr(), _) and // local function calls can be resolved directly without a flow analysis not call.getControlFlowNode().getAstNode() instanceof LocalFunctionCall or @@ -2903,9 +2884,9 @@ predicate lambdaCall(DataFlowCall call, LambdaCallKind kind, Node receiver) { } private predicate delegateCreationStep(Node nodeFrom, Node nodeTo) { - exists(LambdaConfiguration x, DelegateCreation dc | - x.hasExprPath(dc.getArgument(), nodeFrom.(ExprNode).getControlFlowNode(), dc, - nodeTo.(ExprNode).getControlFlowNode()) + exists(DelegateCreation dc | + dc.getArgument() = nodeFrom.asExpr() and + dc = nodeTo.asExpr() ) } From 659d8e7c9012942986a68cc42d48885fbe5924c1 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 13 Mar 2026 13:22:16 +0100 Subject: [PATCH 051/111] C#: Remove splitting-awareness in argumentOf. --- .../dataflow/internal/DataFlowPrivate.qll | 24 ++----------------- 1 file changed, 2 insertions(+), 22 deletions(-) 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 13075418232..2237f3e5954 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -1551,35 +1551,15 @@ abstract private class ArgumentNodeImpl extends Node { } private module ArgumentNodes { - private class ArgumentConfiguration extends ControlFlowReachabilityConfiguration { - ArgumentConfiguration() { this = "ArgumentConfiguration" } - - override predicate candidate( - Expr e1, Expr e2, ControlFlowElement scope, boolean exactScope, boolean isSuccessor - ) { - e1.(Argument).isArgumentOf(e2, _) and - exactScope = false and - isSuccessor = true and - if e2 instanceof PropertyWrite - then - exists(AssignableDefinition def | - def.getTargetAccess() = e2 and - scope = def.getExpr() - ) - else scope = e2 - } - } - /** A data-flow node that represents an explicit call argument. */ class ExplicitArgumentNode extends ArgumentNodeImpl { ExplicitArgumentNode() { this.asExpr() instanceof Argument } override predicate argumentOf(DataFlowCall call, ArgumentPosition pos) { - exists(ArgumentConfiguration x, Expr c, Argument arg | + exists(Expr c, Argument arg | arg = this.asExpr() and c = call.getExpr() and - arg.isArgumentOf(c, pos) and - x.hasExprPath(_, this.getControlFlowNode(), _, call.getControlFlowNode()) + arg.isArgumentOf(c, pos) ) } } From c076992b83affe0fd18e9f42b6f3576178a47479 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 13 Mar 2026 13:31:53 +0100 Subject: [PATCH 052/111] C#: Remove splitting-awareness in ObjectInitializerNode. --- .../dataflow/internal/DataFlowPrivate.qll | 30 +++++-------------- 1 file changed, 7 insertions(+), 23 deletions(-) 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 2237f3e5954..232b765c68a 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -1825,27 +1825,6 @@ private module OutNodes { } } - class ObjectOrCollectionInitializerConfiguration extends ControlFlowReachabilityConfiguration { - ObjectOrCollectionInitializerConfiguration() { - this = "ObjectOrCollectionInitializerConfiguration" - } - - override predicate candidate( - Expr e1, Expr e2, ControlFlowElement scope, boolean exactScope, boolean isSuccessor - ) { - exactScope = false and - scope = e1 and - isSuccessor = true and - exists(ObjectOrCollectionInitializer init | init = e1.(ObjectCreation).getInitializer() | - // E.g. `new Dictionary{ {0, "a"}, {1, "b"} }` - e2 = init.(CollectionInitializer).getAnElementInitializer() - or - // E.g. `new Dictionary() { [0] = "a", [1] = "b" }` - e2 = init.(ObjectInitializer).getAMemberInitializer().getLValue() - ) - } - } - /** * A data-flow node that reads a value returned by a callable using an * `out` or `ref` parameter. @@ -2672,8 +2651,13 @@ module PostUpdateNodes { override predicate argumentOf(DataFlowCall call, ArgumentPosition pos) { pos.isQualifier() and - any(ObjectOrCollectionInitializerConfiguration x) - .hasExprPath(_, cfn, _, call.getControlFlowNode()) + exists(ObjectOrCollectionInitializer init | init = oc.getInitializer() | + // E.g. `new Dictionary{ {0, "a"}, {1, "b"} }` + call.getExpr() = init.(CollectionInitializer).getAnElementInitializer() + or + // E.g. `new Dictionary() { [0] = "a", [1] = "b" }` + call.getExpr() = init.(ObjectInitializer).getAMemberInitializer().getLValue() + ) } override DataFlowCallable getEnclosingCallableImpl() { From 7124cd4e6edc1bfff46ca502090625a163d8c47d Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 13 Mar 2026 13:59:22 +0100 Subject: [PATCH 053/111] C#: Remove splitting-awareness for source-to-def steps. --- .../dataflow/internal/DataFlowPrivate.qll | 50 ++++++++----------- 1 file changed, 20 insertions(+), 30 deletions(-) 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 232b765c68a..830aab3eef5 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -286,7 +286,7 @@ module VariableCapture { e1 = LocalFlow::getALastEvalNode(e2) or exists(Ssa::Definition def, AssignableDefinition adef | - LocalFlow::defAssigns(adef, _, e1) and + LocalFlow::defAssigns(adef, _, _, e1) and def.getAnUltimateDefinition().(Ssa::ExplicitDefinition).getADefinition() = adef and exists(def.getAReadAtNode(e2)) ) @@ -379,7 +379,7 @@ module VariableCapture { this = def.getExpr().getAControlFlowNode() } - ControlFlow::Node getRhs() { LocalFlow::defAssigns(def, this, result) } + ControlFlow::Node getRhs() { LocalFlow::defAssigns(def, this, _, result) } CapturedVariable getVariable() { result = v } } @@ -620,35 +620,22 @@ module LocalFlow { ) ) } - - override predicate candidateDef( - Expr e, AssignableDefinition def, ControlFlowElement scope, boolean exactScope, - boolean isSuccessor - ) { - // Flow from source to definition - exactScope = false and - def.getSource() = e and - ( - scope = def.getExpr() and - isSuccessor = true - or - scope = def.(AssignableDefinitions::PatternDefinition).getMatch().(IsExpr) and - isSuccessor = false - or - exists(Switch s | - s.getACase() = def.(AssignableDefinitions::PatternDefinition).getMatch() and - isSuccessor = true - | - scope = s.getExpr() - or - scope = s.getACase() - ) - ) - } } - predicate defAssigns(AssignableDefinition def, ControlFlow::Node cfnDef, ControlFlow::Node value) { - any(LocalExprStepConfiguration x).hasDefPath(_, value, def, cfnDef) + predicate defAssigns( + AssignableDefinition def, ControlFlow::Node cfnDef, Expr value, ControlFlow::Node valueCfn + ) { + def.getSource() = value and + valueCfn = value.getControlFlowNode() and + cfnDef = def.getExpr().getAControlFlowNode() + } + + private predicate defAssigns(ExprNode value, AssignableDefinitionNode defNode) { + exists(ControlFlow::Node cfn, AssignableDefinition def, ControlFlow::Node cfnDef | + defAssigns(def, cfnDef, value.getExpr(), _) and + cfn = value.getControlFlowNode() and + defNode = TAssignableDefinitionNode(def, cfnDef) + ) } /** @@ -661,6 +648,8 @@ module LocalFlow { predicate localFlowStepCommon(Node nodeFrom, Node nodeTo) { hasNodePath(any(LocalExprStepConfiguration x), nodeFrom, nodeTo) or + defAssigns(nodeFrom, nodeTo) + or ThisFlow::adjacentThisRefs(nodeFrom, nodeTo) and nodeFrom != nodeTo or @@ -729,9 +718,10 @@ module LocalFlow { e instanceof ThisAccess or e instanceof BaseAccess ) or + defAssigns(node1, node2) + or hasNodePath(any(LocalExprStepConfiguration x), node1, node2) and ( - node2 instanceof AssignableDefinitionNode or node2.asExpr() instanceof Cast or node2.asExpr() instanceof AssignExpr ) From 4c77e0f3150b906e00f559ec875f82a97a0a5e74 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 13 Mar 2026 14:16:10 +0100 Subject: [PATCH 054/111] C#: Remove splitting-awareness for local expression steps. --- .../DataFlowConsistency.ql | 4 +- .../dataflow/internal/DataFlowPrivate.qll | 177 +++++++----------- 2 files changed, 67 insertions(+), 114 deletions(-) diff --git a/csharp/ql/consistency-queries/DataFlowConsistency.ql b/csharp/ql/consistency-queries/DataFlowConsistency.ql index 638bace3892..03e0f3f1b74 100644 --- a/csharp/ql/consistency-queries/DataFlowConsistency.ql +++ b/csharp/ql/consistency-queries/DataFlowConsistency.ql @@ -35,9 +35,7 @@ private module Input implements InputSig { or n.asExpr().(ObjectCreation).hasInitializer() or - exists( - n.(PostUpdateNode).getPreUpdateNode().asExprAtNode(LocalFlow::getPostUpdateReverseStep(_)) - ) + n.(PostUpdateNode).getPreUpdateNode().asExpr() = LocalFlow::getPostUpdateReverseStep(_) } predicate argHasPostUpdateExclude(ArgumentNode n) { 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 830aab3eef5..073a74e7890 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -283,7 +283,7 @@ module VariableCapture { private import semmle.code.csharp.controlflow.BasicBlocks as BasicBlocks private predicate closureFlowStep(ControlFlow::Nodes::ExprNode e1, ControlFlow::Nodes::ExprNode e2) { - e1 = LocalFlow::getALastEvalNode(e2) + e1.getExpr() = LocalFlow::getALastEvalNode(e2.getExpr()) or exists(Ssa::Definition def, AssignableDefinition adef | LocalFlow::defAssigns(adef, _, _, e1) and @@ -528,98 +528,58 @@ module SsaFlow { /** Provides predicates related to local data flow. */ module LocalFlow { - class LocalExprStepConfiguration extends ControlFlowReachabilityConfiguration { - LocalExprStepConfiguration() { this = "LocalExprStepConfiguration" } - - override predicate candidate( - Expr e1, Expr e2, ControlFlowElement scope, boolean exactScope, boolean isSuccessor - ) { - exactScope = false and - ( - e1 = e2.(ParenthesizedExpr).getExpr() and - scope = e2 and - isSuccessor = true - or - e1 = e2.(NullCoalescingExpr).getAnOperand() and - scope = e2 and - isSuccessor = true - or - e1 = e2.(SuppressNullableWarningExpr).getExpr() and - scope = e2 and - isSuccessor = true - or - e2 = - any(ConditionalExpr ce | - e1 = ce.getThen() or - e1 = ce.getElse() - ) and - scope = e2 and - isSuccessor = true - or - e1 = e2.(Cast).getExpr() and - scope = e2 and - isSuccessor = true - or - // An `=` expression, where the result of the expression is used - e2 = - any(AssignExpr ae | - ae.getParent() = any(ControlFlowElement cfe | not cfe instanceof ExprStmt) and - e1 = ae.getRValue() - ) and - scope = e2 and - isSuccessor = true - or - e1 = e2.(ObjectCreation).getInitializer() and - scope = e2 and - isSuccessor = false - or - e1 = e2.(ArrayCreation).getInitializer() and - scope = e2 and - isSuccessor = false - or - e1 = e2.(SwitchExpr).getACase().getBody() and - scope = e2 and - isSuccessor = true - or - e1 = e2.(CheckedExpr).getExpr() and - scope = e2 and - isSuccessor = true - or - e1 = e2.(UncheckedExpr).getExpr() and - scope = e2 and - isSuccessor = true - or - e1 = e2.(CollectionExpression).getAnElement() and - e1 instanceof SpreadElementExpr and - scope = e2 and - isSuccessor = true - or - e1 = e2.(SpreadElementExpr).getExpr() and - scope = e2 and - isSuccessor = true - or - exists(WithExpr we | - scope = we and - isSuccessor = true - | - e1 = we.getExpr() and - e2 = we.getInitializer() - or - e1 = we.getInitializer() and - e2 = we - ) - or - scope = any(AssignExpr ae | ae.getLValue().(TupleExpr) = e2 and ae.getRValue() = e1) and - isSuccessor = false - or - isSuccessor = true and - exists(ControlFlowElement cfe | cfe = e2.(TupleExpr).(PatternExpr).getPatternMatch() | - cfe.(IsExpr).getExpr() = e1 and scope = cfe - or - exists(Switch sw | sw.getACase() = cfe and sw.getExpr() = e1 and scope = sw) - ) + predicate localExprStep(Expr e1, Expr e2) { + e1 = e2.(ParenthesizedExpr).getExpr() + or + e1 = e2.(NullCoalescingExpr).getAnOperand() + or + e1 = e2.(SuppressNullableWarningExpr).getExpr() + or + e2 = + any(ConditionalExpr ce | + e1 = ce.getThen() or + e1 = ce.getElse() ) - } + or + e1 = e2.(Cast).getExpr() + or + // An `=` expression, where the result of the expression is used + e2 = + any(AssignExpr ae | + ae.getParent() = any(ControlFlowElement cfe | not cfe instanceof ExprStmt) and + e1 = ae.getRValue() + ) + or + e1 = e2.(ObjectCreation).getInitializer() + or + e1 = e2.(ArrayCreation).getInitializer() + or + e1 = e2.(SwitchExpr).getACase().getBody() + or + e1 = e2.(CheckedExpr).getExpr() + or + e1 = e2.(UncheckedExpr).getExpr() + or + e1 = e2.(CollectionExpression).getAnElement() and + e1 instanceof SpreadElementExpr + or + e1 = e2.(SpreadElementExpr).getExpr() + or + exists(WithExpr we | + e1 = we.getExpr() and + e2 = we.getInitializer() + or + e1 = we.getInitializer() and + e2 = we + ) + or + exists(AssignExpr ae | ae.getLValue().(TupleExpr) = e2 and ae.getRValue() = e1) + or + exists(ControlFlowElement cfe | cfe = e2.(TupleExpr).(PatternExpr).getPatternMatch() | + cfe.(IsExpr).getExpr() = e1 + or + exists(Switch sw | sw.getACase() = cfe and sw.getExpr() = e1) + ) } predicate defAssigns( @@ -646,7 +606,7 @@ module LocalFlow { } predicate localFlowStepCommon(Node nodeFrom, Node nodeTo) { - hasNodePath(any(LocalExprStepConfiguration x), nodeFrom, nodeTo) + localExprStep(nodeFrom.asExpr(), nodeTo.asExpr()) or defAssigns(nodeFrom, nodeTo) or @@ -674,11 +634,12 @@ module LocalFlow { } /** - * Gets a node that may execute last in `n`, and which, when it executes last, - * will be the value of `n`. + * Gets a node that may execute last in `e`, and which, when it executes last, + * will be the value of `e`. */ - ControlFlow::Nodes::ExprNode getALastEvalNode(ControlFlow::Nodes::ExprNode cfn) { - exists(Expr e | any(LocalExprStepConfiguration x).hasExprPath(_, result, e, cfn) | + Expr getALastEvalNode(Expr e) { + localExprStep(result, e) and + ( e instanceof ConditionalExpr or e instanceof Cast or e instanceof NullCoalescingExpr or @@ -702,9 +663,7 @@ module LocalFlow { * we add a reverse flow step from `[post] b ? x : y` to `[post] x` and to * `[post] y`, in order for the side-effect of `m` to reach both `x` and `y`. */ - ControlFlow::Nodes::ExprNode getPostUpdateReverseStep(ControlFlow::Nodes::ExprNode e) { - result = getALastEvalNode(e) - } + Expr getPostUpdateReverseStep(Expr e) { result = getALastEvalNode(e) } /** * Holds if the value of `node2` is given by `node1`. @@ -720,7 +679,7 @@ module LocalFlow { or defAssigns(node1, node2) or - hasNodePath(any(LocalExprStepConfiguration x), node1, node2) and + localExprStep(node1.asExpr(), node2.asExpr()) and ( node2.asExpr() instanceof Cast or node2.asExpr() instanceof AssignExpr @@ -765,12 +724,8 @@ predicate simpleLocalFlowStep(Node nodeFrom, Node nodeTo, string model) { or nodeTo = nodeFrom.(LocalFunctionCreationNode).getAnAccess(true) or - nodeTo.(PostUpdateNode).getPreUpdateNode().(ExprNode).getControlFlowNode() = - LocalFlow::getPostUpdateReverseStep(nodeFrom - .(PostUpdateNode) - .getPreUpdateNode() - .(ExprNode) - .getControlFlowNode()) + nodeTo.(PostUpdateNode).getPreUpdateNode().asExpr() = + LocalFlow::getPostUpdateReverseStep(nodeFrom.(PostUpdateNode).getPreUpdateNode().asExpr()) ) and model = "" or @@ -1119,10 +1074,10 @@ private module Cached { ( cfn.getExpr() instanceof Argument or - cfn = - LocalFlow::getPostUpdateReverseStep(any(ControlFlow::Nodes::ExprNode e | - exists(any(SourcePostUpdateNode p).getPreUpdateNode().asExprAtNode(e)) - )) + cfn.getExpr() = + LocalFlow::getPostUpdateReverseStep(any(SourcePostUpdateNode p) + .getPreUpdateNode() + .asExpr()) ) and exprMayHavePostUpdateNode(cfn.getExpr()) or From e7edf15031b50cdca98ebf0c83e537084c083f8e Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 13 Mar 2026 14:21:21 +0100 Subject: [PATCH 055/111] C#: Clean up. --- config/identical-files.json | 4 - .../internal/ControlFlowReachability.qll | 246 ------------------ .../dataflow/internal/DataFlowPrivate.qll | 19 -- .../internal/TaintTrackingPrivate.qll | 1 - 4 files changed, 270 deletions(-) delete mode 100644 csharp/ql/lib/semmle/code/csharp/dataflow/internal/ControlFlowReachability.qll diff --git a/config/identical-files.json b/config/identical-files.json index bdaf567ae17..8a5c00a49f8 100644 --- a/config/identical-files.json +++ b/config/identical-files.json @@ -172,10 +172,6 @@ "cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/reachability/PrintDominance.qll", "cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/reachability/PrintDominance.qll" ], - "C# ControlFlowReachability": [ - "csharp/ql/lib/semmle/code/csharp/dataflow/internal/ControlFlowReachability.qll", - "csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/ControlFlowReachability.qll" - ], "C++ ExternalAPIs": [ "cpp/ql/src/Security/CWE/CWE-020/ExternalAPIs.qll", "cpp/ql/src/Security/CWE/CWE-020/ir/ExternalAPIs.qll" diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ControlFlowReachability.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ControlFlowReachability.qll deleted file mode 100644 index 706893c64ea..00000000000 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ControlFlowReachability.qll +++ /dev/null @@ -1,246 +0,0 @@ -import csharp - -private class ControlFlowScope extends ControlFlowElement { - private boolean exactScope; - - ControlFlowScope() { - exists(ControlFlowReachabilityConfiguration c | - c.candidate(_, _, this, exactScope, _) or - c.candidateDef(_, _, this, exactScope, _) - ) - } - - predicate isExact() { exactScope = true } - - predicate isNonExact() { exactScope = false } -} - -private newtype TControlFlowElementOrBasicBlock = - TControlFlowElement(ControlFlowElement cfe) or - TBasicBlock(ControlFlow::BasicBlock bb) - -class ControlFlowElementOrBasicBlock extends TControlFlowElementOrBasicBlock { - ControlFlowElement asControlFlowElement() { this = TControlFlowElement(result) } - - ControlFlow::BasicBlock asBasicBlock() { this = TBasicBlock(result) } - - string toString() { - result = this.asControlFlowElement().toString() - or - result = this.asBasicBlock().toString() - } - - Location getLocation() { - result = this.asControlFlowElement().getLocation() - or - result = this.asBasicBlock().getLocation() - } -} - -private predicate isBasicBlock(ControlFlowElementOrBasicBlock c) { c instanceof TBasicBlock } - -private predicate isNonExactScope(ControlFlowElementOrBasicBlock c) { - c.asControlFlowElement().(ControlFlowScope).isNonExact() -} - -private predicate step(ControlFlowElementOrBasicBlock pred, ControlFlowElementOrBasicBlock succ) { - pred.asBasicBlock().getANode().getAstNode() = succ.asControlFlowElement() - or - pred.asControlFlowElement() = succ.asControlFlowElement().getAChild() -} - -private predicate basicBlockInNonExactScope( - ControlFlowElementOrBasicBlock bb, ControlFlowElementOrBasicBlock scope -) = doublyBoundedFastTC(step/2, isBasicBlock/1, isNonExactScope/1)(bb, scope) - -pragma[noinline] -private ControlFlow::BasicBlock getABasicBlockInScope(ControlFlowScope scope, boolean exactScope) { - basicBlockInNonExactScope(TBasicBlock(result), TControlFlowElement(scope)) and - exactScope = false - or - scope.isExact() and - result.getANode().getAstNode() = scope and - exactScope = true -} - -/** - * A helper class for determining control-flow reachability for pairs of - * elements. - * - * This is useful when defining for example expression-based data-flow steps in - * the presence of control-flow splitting, where a data-flow step should make - * sure to stay in the same split. - * - * For example, in - * - * ```csharp - * if (b) - * .... - * var x = "foo"; - * if (b) - * .... - * ``` - * - * there should only be steps from `[b = true] "foo"` to `[b = true] SSA def(x)` - * and `[b = false] "foo"` to `[b = false] SSA def(x)`, and for example not from - * `[b = true] "foo"` to `[b = false] SSA def(x)` - */ -abstract class ControlFlowReachabilityConfiguration extends string { - bindingset[this] - ControlFlowReachabilityConfiguration() { any() } - - /** - * Holds if `e1` and `e2` are expressions for which we want to find a - * control-flow path that follows control flow successors (resp. - * predecessors, as specified by `isSuccessor`) inside the syntactic scope - * `scope`. The Boolean `exactScope` indicates whether a transitive child - * of `scope` is allowed (`exactScope = false`). - */ - predicate candidate( - Expr e1, Expr e2, ControlFlowElement scope, boolean exactScope, boolean isSuccessor - ) { - none() - } - - /** - * Holds if `e` and `def` are elements for which we want to find a - * control-flow path that follows control flow successors (resp. - * predecessors, as specified by `isSuccessor`) inside the syntactic scope - * `scope`. The Boolean `exactScope` indicates whether a transitive child - * of `scope` is allowed (`exactScope = false`). - */ - predicate candidateDef( - Expr e, AssignableDefinition def, ControlFlowElement scope, boolean exactScope, - boolean isSuccessor - ) { - none() - } - - pragma[nomagic] - private predicate reachesBasicBlockExprBase( - Expr e1, Expr e2, boolean isSuccessor, ControlFlow::Nodes::ElementNode cfn1, int i, - ControlFlow::BasicBlock bb - ) { - this.candidate(e1, e2, _, _, isSuccessor) and - cfn1 = e1.getAControlFlowNode() and - bb.getNode(i) = cfn1 - } - - pragma[nomagic] - private predicate reachesBasicBlockExprRec( - Expr e1, Expr e2, boolean isSuccessor, ControlFlow::Nodes::ElementNode cfn1, - ControlFlow::BasicBlock bb - ) { - exists(ControlFlow::BasicBlock mid | - this.reachesBasicBlockExpr(e1, e2, isSuccessor, cfn1, mid) - | - isSuccessor = true and - bb = mid.getASuccessor() - or - isSuccessor = false and - bb = mid.getAPredecessor() - ) - } - - pragma[nomagic] - private predicate reachesBasicBlockExpr( - Expr e1, Expr e2, boolean isSuccessor, ControlFlow::Nodes::ElementNode cfn1, - ControlFlow::BasicBlock bb - ) { - this.reachesBasicBlockExprBase(e1, e2, isSuccessor, cfn1, _, bb) - or - exists(ControlFlowElement scope, boolean exactScope | - this.candidate(e1, e2, scope, exactScope, isSuccessor) and - this.reachesBasicBlockExprRec(e1, e2, isSuccessor, cfn1, bb) and - bb = getABasicBlockInScope(scope, exactScope) - ) - } - - pragma[nomagic] - private predicate reachesBasicBlockDefinitionBase( - Expr e, AssignableDefinition def, boolean isSuccessor, ControlFlow::Nodes::ElementNode cfn, - int i, ControlFlow::BasicBlock bb - ) { - this.candidateDef(e, def, _, _, isSuccessor) and - cfn = e.getAControlFlowNode() and - bb.getNode(i) = cfn - } - - pragma[nomagic] - private predicate reachesBasicBlockDefinitionRec( - Expr e, AssignableDefinition def, boolean isSuccessor, ControlFlow::Nodes::ElementNode cfn, - ControlFlow::BasicBlock bb - ) { - exists(ControlFlow::BasicBlock mid | - this.reachesBasicBlockDefinition(e, def, isSuccessor, cfn, mid) - | - isSuccessor = true and - bb = mid.getASuccessor() - or - isSuccessor = false and - bb = mid.getAPredecessor() - ) - } - - pragma[nomagic] - private predicate reachesBasicBlockDefinition( - Expr e, AssignableDefinition def, boolean isSuccessor, ControlFlow::Nodes::ElementNode cfn, - ControlFlow::BasicBlock bb - ) { - this.reachesBasicBlockDefinitionBase(e, def, isSuccessor, cfn, _, bb) - or - exists(ControlFlowElement scope, boolean exactScope | - this.candidateDef(e, def, scope, exactScope, isSuccessor) and - this.reachesBasicBlockDefinitionRec(e, def, isSuccessor, cfn, bb) and - bb = getABasicBlockInScope(scope, exactScope) - ) - } - - /** - * Holds if there is a control-flow path from `cfn1` to `cfn2`, where `cfn1` is a - * control-flow node for `e1` and `cfn2` is a control-flow node for `e2`. - */ - pragma[nomagic] - predicate hasExprPath(Expr e1, ControlFlow::Node cfn1, Expr e2, ControlFlow::Node cfn2) { - exists(ControlFlow::BasicBlock bb, boolean isSuccessor, int i, int j | - this.reachesBasicBlockExprBase(e1, e2, isSuccessor, cfn1, i, bb) and - cfn2 = bb.getNode(j) and - cfn2 = e2.getAControlFlowNode() - | - isSuccessor = true and j >= i - or - isSuccessor = false and i >= j - ) - or - exists(ControlFlow::BasicBlock bb | - this.reachesBasicBlockExprRec(e1, e2, _, cfn1, bb) and - cfn2 = bb.getANode() and - cfn2 = e2.getAControlFlowNode() - ) - } - - /** - * Holds if there is a control-flow path from `cfn` to `cfnDef`, where `cfn` is a - * control-flow node for `e` and `cfnDef` is a control-flow node for `def`. - */ - pragma[nomagic] - predicate hasDefPath( - Expr e, ControlFlow::Node cfn, AssignableDefinition def, ControlFlow::Node cfnDef - ) { - exists(ControlFlow::BasicBlock bb, boolean isSuccessor, int i, int j | - this.reachesBasicBlockDefinitionBase(e, def, isSuccessor, cfn, i, bb) and - cfnDef = bb.getNode(j) and - def.getExpr().getAControlFlowNode() = cfnDef - | - isSuccessor = true and j >= i - or - isSuccessor = false and i >= j - ) - or - exists(ControlFlow::BasicBlock bb | - this.reachesBasicBlockDefinitionRec(e, def, _, cfn, bb) and - def.getExpr().getAControlFlowNode() = cfnDef and - cfnDef = bb.getANode() - ) - } -} 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 073a74e7890..03164960d41 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -2,7 +2,6 @@ private import csharp private import DataFlowPublic private import DataFlowDispatch private import DataFlowImplCommon -private import ControlFlowReachability private import FlowSummaryImpl as FlowSummaryImpl private import semmle.code.csharp.dataflow.FlowSummary as FlowSummary private import semmle.code.csharp.dataflow.internal.ExternalFlow @@ -259,24 +258,6 @@ private module ThisFlow { } } -/** - * Holds if there is a control-flow path from `n1` to `n2`. `n2` is either an - * expression node or an SSA definition node. - */ -pragma[nomagic] -predicate hasNodePath(ControlFlowReachabilityConfiguration conf, ExprNode n1, Node n2) { - exists(ControlFlow::Node cfn1, ControlFlow::Node cfn2 | conf.hasExprPath(_, cfn1, _, cfn2) | - cfn1 = n1.getControlFlowNode() and - cfn2 = n2.(ExprNode).getControlFlowNode() - ) - or - exists(ControlFlow::Node cfn, AssignableDefinition def, ControlFlow::Node cfnDef | - conf.hasDefPath(_, cfn, def, cfnDef) and - cfn = n1.getControlFlowNode() and - n2 = TAssignableDefinitionNode(def, cfnDef) - ) -} - /** Provides logic related to captured variables. */ module VariableCapture { private import codeql.dataflow.VariableCapture as Shared 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 78dc2f98d6b..99a50b36873 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll @@ -4,7 +4,6 @@ private import FlowSummaryImpl as FlowSummaryImpl private import semmle.code.csharp.Caching private import semmle.code.csharp.dataflow.internal.DataFlowDispatch private import semmle.code.csharp.dataflow.internal.DataFlowPrivate -private import semmle.code.csharp.dataflow.internal.ControlFlowReachability private import semmle.code.csharp.dispatch.Dispatch private import semmle.code.csharp.commons.ComparisonTest // import `TaintedMember` definitions from other files to avoid potential reevaluation From db0a3e38e27770f64d72341804cdc377220d531c Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Mon, 16 Mar 2026 09:09:54 +0100 Subject: [PATCH 056/111] C#: Accept a few irrelevant taint steps. --- csharp/ql/test/library-tests/csharp7/LocalTaintFlow.expected | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/csharp/ql/test/library-tests/csharp7/LocalTaintFlow.expected b/csharp/ql/test/library-tests/csharp7/LocalTaintFlow.expected index b2094817cfb..90ef19f62fe 100644 --- a/csharp/ql/test/library-tests/csharp7/LocalTaintFlow.expected +++ b/csharp/ql/test/library-tests/csharp7/LocalTaintFlow.expected @@ -26,6 +26,7 @@ | CSharp7.cs:31:16:31:16 | access to parameter i | CSharp7.cs:31:16:31:20 | ... > ... | | CSharp7.cs:31:16:31:16 | access to parameter i | CSharp7.cs:31:24:31:24 | access to parameter i | | CSharp7.cs:31:24:31:24 | access to parameter i | CSharp7.cs:31:16:31:59 | ... ? ... : ... | +| CSharp7.cs:31:28:31:59 | throw ... | CSharp7.cs:31:16:31:59 | ... ? ... : ... | | CSharp7.cs:35:7:35:18 | this | CSharp7.cs:35:7:35:18 | this access | | CSharp7.cs:39:9:39:9 | access to parameter x | CSharp7.cs:39:9:39:21 | SSA def(x) | | CSharp7.cs:39:13:39:21 | "tainted" | CSharp7.cs:39:9:39:9 | access to parameter x | @@ -253,6 +254,7 @@ | CSharp7.cs:233:13:233:13 | access to local variable o | CSharp7.cs:235:13:235:42 | [input] SSA phi read(o) | | CSharp7.cs:233:13:233:13 | access to local variable o | CSharp7.cs:237:18:237:18 | access to local variable o | | CSharp7.cs:233:13:233:23 | [false] ... is ... | CSharp7.cs:233:13:233:33 | [false] ... && ... | +| CSharp7.cs:233:13:233:23 | [false] ... is ... | CSharp7.cs:233:13:233:33 | [true] ... && ... | | CSharp7.cs:233:13:233:23 | [true] ... is ... | CSharp7.cs:233:13:233:33 | [false] ... && ... | | CSharp7.cs:233:13:233:23 | [true] ... is ... | CSharp7.cs:233:13:233:33 | [true] ... && ... | | CSharp7.cs:233:18:233:23 | Int32 i1 | CSharp7.cs:233:18:233:23 | SSA def(i1) | @@ -338,6 +340,8 @@ | CSharp7.cs:297:35:297:35 | access to local variable x | CSharp7.cs:297:40:297:44 | Int32 y | | CSharp7.cs:297:35:297:35 | access to local variable x | CSharp7.cs:297:49:297:49 | access to local variable x | | CSharp7.cs:297:35:297:44 | [false] ... is ... | CSharp7.cs:297:25:297:44 | [false] ... && ... | +| CSharp7.cs:297:35:297:44 | [false] ... is ... | CSharp7.cs:297:25:297:44 | [true] ... && ... | +| CSharp7.cs:297:35:297:44 | [true] ... is ... | CSharp7.cs:297:25:297:44 | [false] ... && ... | | CSharp7.cs:297:35:297:44 | [true] ... is ... | CSharp7.cs:297:25:297:44 | [true] ... && ... | | CSharp7.cs:297:40:297:44 | Int32 y | CSharp7.cs:297:40:297:44 | SSA def(y) | | CSharp7.cs:297:40:297:44 | SSA def(y) | CSharp7.cs:299:31:299:31 | access to local variable y | From a929c0bf24e76c15759f096b09dea4c7056d5c4a Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Mon, 16 Mar 2026 09:05:00 +0100 Subject: [PATCH 057/111] C#: Remove splitting-awareness from Range Analysis. --- .../rangeanalysis/ControlFlowReachability.qll | 246 ------------------ .../internal/rangeanalysis/RangeUtils.qll | 18 +- 2 files changed, 3 insertions(+), 261 deletions(-) delete mode 100644 csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/ControlFlowReachability.qll diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/ControlFlowReachability.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/ControlFlowReachability.qll deleted file mode 100644 index 706893c64ea..00000000000 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/ControlFlowReachability.qll +++ /dev/null @@ -1,246 +0,0 @@ -import csharp - -private class ControlFlowScope extends ControlFlowElement { - private boolean exactScope; - - ControlFlowScope() { - exists(ControlFlowReachabilityConfiguration c | - c.candidate(_, _, this, exactScope, _) or - c.candidateDef(_, _, this, exactScope, _) - ) - } - - predicate isExact() { exactScope = true } - - predicate isNonExact() { exactScope = false } -} - -private newtype TControlFlowElementOrBasicBlock = - TControlFlowElement(ControlFlowElement cfe) or - TBasicBlock(ControlFlow::BasicBlock bb) - -class ControlFlowElementOrBasicBlock extends TControlFlowElementOrBasicBlock { - ControlFlowElement asControlFlowElement() { this = TControlFlowElement(result) } - - ControlFlow::BasicBlock asBasicBlock() { this = TBasicBlock(result) } - - string toString() { - result = this.asControlFlowElement().toString() - or - result = this.asBasicBlock().toString() - } - - Location getLocation() { - result = this.asControlFlowElement().getLocation() - or - result = this.asBasicBlock().getLocation() - } -} - -private predicate isBasicBlock(ControlFlowElementOrBasicBlock c) { c instanceof TBasicBlock } - -private predicate isNonExactScope(ControlFlowElementOrBasicBlock c) { - c.asControlFlowElement().(ControlFlowScope).isNonExact() -} - -private predicate step(ControlFlowElementOrBasicBlock pred, ControlFlowElementOrBasicBlock succ) { - pred.asBasicBlock().getANode().getAstNode() = succ.asControlFlowElement() - or - pred.asControlFlowElement() = succ.asControlFlowElement().getAChild() -} - -private predicate basicBlockInNonExactScope( - ControlFlowElementOrBasicBlock bb, ControlFlowElementOrBasicBlock scope -) = doublyBoundedFastTC(step/2, isBasicBlock/1, isNonExactScope/1)(bb, scope) - -pragma[noinline] -private ControlFlow::BasicBlock getABasicBlockInScope(ControlFlowScope scope, boolean exactScope) { - basicBlockInNonExactScope(TBasicBlock(result), TControlFlowElement(scope)) and - exactScope = false - or - scope.isExact() and - result.getANode().getAstNode() = scope and - exactScope = true -} - -/** - * A helper class for determining control-flow reachability for pairs of - * elements. - * - * This is useful when defining for example expression-based data-flow steps in - * the presence of control-flow splitting, where a data-flow step should make - * sure to stay in the same split. - * - * For example, in - * - * ```csharp - * if (b) - * .... - * var x = "foo"; - * if (b) - * .... - * ``` - * - * there should only be steps from `[b = true] "foo"` to `[b = true] SSA def(x)` - * and `[b = false] "foo"` to `[b = false] SSA def(x)`, and for example not from - * `[b = true] "foo"` to `[b = false] SSA def(x)` - */ -abstract class ControlFlowReachabilityConfiguration extends string { - bindingset[this] - ControlFlowReachabilityConfiguration() { any() } - - /** - * Holds if `e1` and `e2` are expressions for which we want to find a - * control-flow path that follows control flow successors (resp. - * predecessors, as specified by `isSuccessor`) inside the syntactic scope - * `scope`. The Boolean `exactScope` indicates whether a transitive child - * of `scope` is allowed (`exactScope = false`). - */ - predicate candidate( - Expr e1, Expr e2, ControlFlowElement scope, boolean exactScope, boolean isSuccessor - ) { - none() - } - - /** - * Holds if `e` and `def` are elements for which we want to find a - * control-flow path that follows control flow successors (resp. - * predecessors, as specified by `isSuccessor`) inside the syntactic scope - * `scope`. The Boolean `exactScope` indicates whether a transitive child - * of `scope` is allowed (`exactScope = false`). - */ - predicate candidateDef( - Expr e, AssignableDefinition def, ControlFlowElement scope, boolean exactScope, - boolean isSuccessor - ) { - none() - } - - pragma[nomagic] - private predicate reachesBasicBlockExprBase( - Expr e1, Expr e2, boolean isSuccessor, ControlFlow::Nodes::ElementNode cfn1, int i, - ControlFlow::BasicBlock bb - ) { - this.candidate(e1, e2, _, _, isSuccessor) and - cfn1 = e1.getAControlFlowNode() and - bb.getNode(i) = cfn1 - } - - pragma[nomagic] - private predicate reachesBasicBlockExprRec( - Expr e1, Expr e2, boolean isSuccessor, ControlFlow::Nodes::ElementNode cfn1, - ControlFlow::BasicBlock bb - ) { - exists(ControlFlow::BasicBlock mid | - this.reachesBasicBlockExpr(e1, e2, isSuccessor, cfn1, mid) - | - isSuccessor = true and - bb = mid.getASuccessor() - or - isSuccessor = false and - bb = mid.getAPredecessor() - ) - } - - pragma[nomagic] - private predicate reachesBasicBlockExpr( - Expr e1, Expr e2, boolean isSuccessor, ControlFlow::Nodes::ElementNode cfn1, - ControlFlow::BasicBlock bb - ) { - this.reachesBasicBlockExprBase(e1, e2, isSuccessor, cfn1, _, bb) - or - exists(ControlFlowElement scope, boolean exactScope | - this.candidate(e1, e2, scope, exactScope, isSuccessor) and - this.reachesBasicBlockExprRec(e1, e2, isSuccessor, cfn1, bb) and - bb = getABasicBlockInScope(scope, exactScope) - ) - } - - pragma[nomagic] - private predicate reachesBasicBlockDefinitionBase( - Expr e, AssignableDefinition def, boolean isSuccessor, ControlFlow::Nodes::ElementNode cfn, - int i, ControlFlow::BasicBlock bb - ) { - this.candidateDef(e, def, _, _, isSuccessor) and - cfn = e.getAControlFlowNode() and - bb.getNode(i) = cfn - } - - pragma[nomagic] - private predicate reachesBasicBlockDefinitionRec( - Expr e, AssignableDefinition def, boolean isSuccessor, ControlFlow::Nodes::ElementNode cfn, - ControlFlow::BasicBlock bb - ) { - exists(ControlFlow::BasicBlock mid | - this.reachesBasicBlockDefinition(e, def, isSuccessor, cfn, mid) - | - isSuccessor = true and - bb = mid.getASuccessor() - or - isSuccessor = false and - bb = mid.getAPredecessor() - ) - } - - pragma[nomagic] - private predicate reachesBasicBlockDefinition( - Expr e, AssignableDefinition def, boolean isSuccessor, ControlFlow::Nodes::ElementNode cfn, - ControlFlow::BasicBlock bb - ) { - this.reachesBasicBlockDefinitionBase(e, def, isSuccessor, cfn, _, bb) - or - exists(ControlFlowElement scope, boolean exactScope | - this.candidateDef(e, def, scope, exactScope, isSuccessor) and - this.reachesBasicBlockDefinitionRec(e, def, isSuccessor, cfn, bb) and - bb = getABasicBlockInScope(scope, exactScope) - ) - } - - /** - * Holds if there is a control-flow path from `cfn1` to `cfn2`, where `cfn1` is a - * control-flow node for `e1` and `cfn2` is a control-flow node for `e2`. - */ - pragma[nomagic] - predicate hasExprPath(Expr e1, ControlFlow::Node cfn1, Expr e2, ControlFlow::Node cfn2) { - exists(ControlFlow::BasicBlock bb, boolean isSuccessor, int i, int j | - this.reachesBasicBlockExprBase(e1, e2, isSuccessor, cfn1, i, bb) and - cfn2 = bb.getNode(j) and - cfn2 = e2.getAControlFlowNode() - | - isSuccessor = true and j >= i - or - isSuccessor = false and i >= j - ) - or - exists(ControlFlow::BasicBlock bb | - this.reachesBasicBlockExprRec(e1, e2, _, cfn1, bb) and - cfn2 = bb.getANode() and - cfn2 = e2.getAControlFlowNode() - ) - } - - /** - * Holds if there is a control-flow path from `cfn` to `cfnDef`, where `cfn` is a - * control-flow node for `e` and `cfnDef` is a control-flow node for `def`. - */ - pragma[nomagic] - predicate hasDefPath( - Expr e, ControlFlow::Node cfn, AssignableDefinition def, ControlFlow::Node cfnDef - ) { - exists(ControlFlow::BasicBlock bb, boolean isSuccessor, int i, int j | - this.reachesBasicBlockDefinitionBase(e, def, isSuccessor, cfn, i, bb) and - cfnDef = bb.getNode(j) and - def.getExpr().getAControlFlowNode() = cfnDef - | - isSuccessor = true and j >= i - or - isSuccessor = false and i >= j - ) - or - exists(ControlFlow::BasicBlock bb | - this.reachesBasicBlockDefinitionRec(e, def, _, cfn, bb) and - def.getExpr().getAControlFlowNode() = cfnDef and - cfnDef = bb.getANode() - ) - } -} 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 71d177a48bb..656bf9aae21 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 @@ -8,26 +8,14 @@ private module Impl { private import ConstantUtils private import SsaReadPositionCommon private import semmle.code.csharp.controlflow.Guards as G - private import ControlFlowReachability private class ExprNode = ControlFlow::Nodes::ExprNode; - private class ExprChildReachability extends ControlFlowReachabilityConfiguration { - ExprChildReachability() { this = "ExprChildReachability" } - - override predicate candidate( - Expr e1, Expr e2, ControlFlowElement scope, boolean exactScope, boolean isSuccessor - ) { - e2 = e1.getAChild() and - scope = e1 and - exactScope = false and - isSuccessor in [false, true] - } - } - /** Holds if `parent` having child `child` implies `parentNode` having child `childNode`. */ predicate hasChild(Expr parent, Expr child, ExprNode parentNode, ExprNode childNode) { - any(ExprChildReachability x).hasExprPath(parent, parentNode, child, childNode) + parent.getAChild() = child and + parentNode = parent.getControlFlowNode() and + childNode = child.getControlFlowNode() } /** Holds if SSA definition `def` equals `e + delta`. */ From d6055754b62ccd71f9474cef08f1a017569ae03a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 16 Mar 2026 12:15:34 +0000 Subject: [PATCH 058/111] Release preparation for version 2.25.0 --- actions/ql/lib/CHANGELOG.md | 4 ++++ .../ql/lib/change-notes/released/0.4.30.md | 3 +++ actions/ql/lib/codeql-pack.release.yml | 2 +- actions/ql/lib/qlpack.yml | 2 +- actions/ql/src/CHANGELOG.md | 4 ++++ .../ql/src/change-notes/released/0.6.22.md | 3 +++ actions/ql/src/codeql-pack.release.yml | 2 +- actions/ql/src/qlpack.yml | 2 +- cpp/ql/lib/CHANGELOG.md | 6 +++++ .../8.0.1.md} | 7 +++--- cpp/ql/lib/codeql-pack.release.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/CHANGELOG.md | 4 ++++ cpp/ql/src/change-notes/released/1.5.13.md | 3 +++ cpp/ql/src/codeql-pack.release.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- .../ql/campaigns/Solorigate/lib/CHANGELOG.md | 4 ++++ .../lib/change-notes/released/1.7.61.md | 3 +++ .../Solorigate/lib/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +- .../ql/campaigns/Solorigate/src/CHANGELOG.md | 4 ++++ .../src/change-notes/released/1.7.61.md | 3 +++ .../Solorigate/src/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/CHANGELOG.md | 10 ++++++++ .../2026-02-24-partial-constructors.md | 4 ---- .../2026-03-02-post-update-nodes.md | 4 ---- ...-03-03-implicit-conversion-reverse-flow.md | 4 ---- .../2026-03-04-websocket-receiveasync.md | 4 ---- csharp/ql/lib/change-notes/released/5.4.9.md | 9 ++++++++ csharp/ql/lib/codeql-pack.release.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/CHANGELOG.md | 4 ++++ csharp/ql/src/change-notes/released/1.6.4.md | 3 +++ csharp/ql/src/codeql-pack.release.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/CHANGELOG.md | 4 ++++ .../change-notes/released/1.0.44.md | 3 +++ .../codeql-pack.release.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/CHANGELOG.md | 6 +++++ .../ql/lib/change-notes/released/7.0.2.md | 7 +++--- go/ql/lib/codeql-pack.release.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/CHANGELOG.md | 4 ++++ go/ql/src/change-notes/released/1.5.8.md | 3 +++ go/ql/src/codeql-pack.release.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/lib/CHANGELOG.md | 23 +++++++++++++++++++ .../2026-03-04-binary-assignment.md | 4 ---- .../{2026-02-18-cfg.md => released/9.0.0.md} | 12 +++++++--- java/ql/lib/codeql-pack.release.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/CHANGELOG.md | 4 ++++ java/ql/src/change-notes/released/1.10.9.md | 3 +++ java/ql/src/codeql-pack.release.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/CHANGELOG.md | 7 ++++++ ...-03-05-inline-expectation-space-after-$.md | 4 ---- .../2.6.24.md} | 8 ++++--- javascript/ql/lib/codeql-pack.release.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/CHANGELOG.md | 4 ++++ .../ql/src/change-notes/released/2.3.4.md | 3 +++ javascript/ql/src/codeql-pack.release.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/CHANGELOG.md | 4 ++++ .../change-notes/released/1.0.44.md | 3 +++ misc/suite-helpers/codeql-pack.release.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/CHANGELOG.md | 7 ++++++ .../7.0.1.md} | 7 +++--- python/ql/lib/codeql-pack.release.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/CHANGELOG.md | 4 ++++ python/ql/src/change-notes/released/1.7.9.md | 3 +++ python/ql/src/codeql-pack.release.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/CHANGELOG.md | 6 +++++ ...-03-05-inline-expectation-space-after-$.md | 4 ---- .../ql/lib/change-notes/released/5.1.12.md | 7 +++--- ruby/ql/lib/codeql-pack.release.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/CHANGELOG.md | 4 ++++ ruby/ql/src/change-notes/released/1.5.9.md | 3 +++ ruby/ql/src/codeql-pack.release.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- rust/ql/lib/CHANGELOG.md | 7 ++++++ .../2026-02-26-neutral-models-map-from.md | 4 ---- ...-03-05-inline-expectation-space-after-$.md | 4 ---- .../ql/lib/change-notes/released/0.2.8.md | 8 ++++--- rust/ql/lib/codeql-pack.release.yml | 2 +- rust/ql/lib/qlpack.yml | 2 +- rust/ql/src/CHANGELOG.md | 4 ++++ rust/ql/src/change-notes/released/0.1.29.md | 3 +++ rust/ql/src/codeql-pack.release.yml | 2 +- rust/ql/src/qlpack.yml | 2 +- shared/concepts/CHANGELOG.md | 4 ++++ .../concepts/change-notes/released/0.0.18.md | 3 +++ shared/concepts/codeql-pack.release.yml | 2 +- shared/concepts/qlpack.yml | 2 +- shared/controlflow/CHANGELOG.md | 4 ++++ .../change-notes/released/2.0.28.md | 3 +++ shared/controlflow/codeql-pack.release.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/CHANGELOG.md | 6 +++++ .../2.1.0.md} | 9 ++++---- shared/dataflow/codeql-pack.release.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/CHANGELOG.md | 4 ++++ shared/mad/change-notes/released/1.0.44.md | 3 +++ shared/mad/codeql-pack.release.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/quantum/CHANGELOG.md | 4 ++++ .../quantum/change-notes/released/0.0.22.md | 3 +++ shared/quantum/codeql-pack.release.yml | 2 +- shared/quantum/qlpack.yml | 2 +- shared/rangeanalysis/CHANGELOG.md | 4 ++++ .../change-notes/released/1.0.44.md | 3 +++ shared/rangeanalysis/codeql-pack.release.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/CHANGELOG.md | 4 ++++ shared/regex/change-notes/released/1.0.44.md | 3 +++ shared/regex/codeql-pack.release.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/CHANGELOG.md | 4 ++++ shared/ssa/change-notes/released/2.0.20.md | 3 +++ shared/ssa/codeql-pack.release.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/CHANGELOG.md | 4 ++++ .../change-notes/released/1.0.44.md | 3 +++ shared/threat-models/codeql-pack.release.yml | 2 +- shared/threat-models/qlpack.yml | 2 +- shared/tutorial/CHANGELOG.md | 4 ++++ .../tutorial/change-notes/released/1.0.44.md | 3 +++ shared/tutorial/codeql-pack.release.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typeflow/CHANGELOG.md | 4 ++++ .../typeflow/change-notes/released/1.0.44.md | 3 +++ shared/typeflow/codeql-pack.release.yml | 2 +- shared/typeflow/qlpack.yml | 2 +- shared/typeinference/CHANGELOG.md | 4 ++++ .../change-notes/released/0.0.25.md | 3 +++ shared/typeinference/codeql-pack.release.yml | 2 +- shared/typeinference/qlpack.yml | 2 +- shared/typetracking/CHANGELOG.md | 4 ++++ .../change-notes/released/2.0.28.md | 3 +++ shared/typetracking/codeql-pack.release.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/CHANGELOG.md | 4 ++++ shared/typos/change-notes/released/1.0.44.md | 3 +++ shared/typos/codeql-pack.release.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/CHANGELOG.md | 4 ++++ shared/util/change-notes/released/2.0.31.md | 3 +++ shared/util/codeql-pack.release.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/xml/CHANGELOG.md | 4 ++++ shared/xml/change-notes/released/1.0.44.md | 3 +++ shared/xml/codeql-pack.release.yml | 2 +- shared/xml/qlpack.yml | 2 +- shared/yaml/CHANGELOG.md | 4 ++++ shared/yaml/change-notes/released/1.0.44.md | 3 +++ shared/yaml/codeql-pack.release.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/CHANGELOG.md | 10 ++++++++ ...-03-05-inline-expectation-space-after-$.md | 4 ---- .../change-notes/2026-03-06-swift-6.2.4.md | 4 ---- .../ql/lib/change-notes/released/6.3.0.md | 11 ++++++--- swift/ql/lib/codeql-pack.release.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/CHANGELOG.md | 4 ++++ swift/ql/src/change-notes/released/1.2.18.md | 3 +++ swift/ql/src/codeql-pack.release.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 175 files changed, 444 insertions(+), 154 deletions(-) create mode 100644 actions/ql/lib/change-notes/released/0.4.30.md create mode 100644 actions/ql/src/change-notes/released/0.6.22.md rename cpp/ql/lib/change-notes/{2026-03-05-inline-expectation-space-after-$.md => released/8.0.1.md} (81%) create mode 100644 cpp/ql/src/change-notes/released/1.5.13.md create mode 100644 csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.61.md create mode 100644 csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.61.md delete mode 100644 csharp/ql/lib/change-notes/2026-02-24-partial-constructors.md delete mode 100644 csharp/ql/lib/change-notes/2026-03-02-post-update-nodes.md delete mode 100644 csharp/ql/lib/change-notes/2026-03-03-implicit-conversion-reverse-flow.md delete mode 100644 csharp/ql/lib/change-notes/2026-03-04-websocket-receiveasync.md create mode 100644 csharp/ql/lib/change-notes/released/5.4.9.md create mode 100644 csharp/ql/src/change-notes/released/1.6.4.md create mode 100644 go/ql/consistency-queries/change-notes/released/1.0.44.md rename csharp/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md => go/ql/lib/change-notes/released/7.0.2.md (81%) create mode 100644 go/ql/src/change-notes/released/1.5.8.md delete mode 100644 java/ql/lib/change-notes/2026-03-04-binary-assignment.md rename java/ql/lib/change-notes/{2026-02-18-cfg.md => released/9.0.0.md} (70%) create mode 100644 java/ql/src/change-notes/released/1.10.9.md delete mode 100644 javascript/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md rename javascript/ql/lib/change-notes/{2026-03-11-browser-source-kinds.md => released/2.6.24.md} (53%) create mode 100644 javascript/ql/src/change-notes/released/2.3.4.md create mode 100644 misc/suite-helpers/change-notes/released/1.0.44.md rename python/ql/lib/change-notes/{2026-03-05-ignore-type-overloaded-methods-during-resolution.md => released/7.0.1.md} (54%) create mode 100644 python/ql/src/change-notes/released/1.7.9.md delete mode 100644 ruby/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md rename python/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md => ruby/ql/lib/change-notes/released/5.1.12.md (81%) create mode 100644 ruby/ql/src/change-notes/released/1.5.9.md delete mode 100644 rust/ql/lib/change-notes/2026-02-26-neutral-models-map-from.md delete mode 100644 rust/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md rename java/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md => rust/ql/lib/change-notes/released/0.2.8.md (52%) create mode 100644 rust/ql/src/change-notes/released/0.1.29.md create mode 100644 shared/concepts/change-notes/released/0.0.18.md create mode 100644 shared/controlflow/change-notes/released/2.0.28.md rename shared/dataflow/change-notes/{2026-03-04-flow-feature-escapes-source-call-context.md => released/2.1.0.md} (89%) create mode 100644 shared/mad/change-notes/released/1.0.44.md create mode 100644 shared/quantum/change-notes/released/0.0.22.md create mode 100644 shared/rangeanalysis/change-notes/released/1.0.44.md create mode 100644 shared/regex/change-notes/released/1.0.44.md create mode 100644 shared/ssa/change-notes/released/2.0.20.md create mode 100644 shared/threat-models/change-notes/released/1.0.44.md create mode 100644 shared/tutorial/change-notes/released/1.0.44.md create mode 100644 shared/typeflow/change-notes/released/1.0.44.md create mode 100644 shared/typeinference/change-notes/released/0.0.25.md create mode 100644 shared/typetracking/change-notes/released/2.0.28.md create mode 100644 shared/typos/change-notes/released/1.0.44.md create mode 100644 shared/util/change-notes/released/2.0.31.md create mode 100644 shared/xml/change-notes/released/1.0.44.md create mode 100644 shared/yaml/change-notes/released/1.0.44.md delete mode 100644 swift/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md delete mode 100644 swift/ql/lib/change-notes/2026-03-06-swift-6.2.4.md rename go/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md => swift/ql/lib/change-notes/released/6.3.0.md (61%) create mode 100644 swift/ql/src/change-notes/released/1.2.18.md diff --git a/actions/ql/lib/CHANGELOG.md b/actions/ql/lib/CHANGELOG.md index 0de191099ce..e482a61b06a 100644 --- a/actions/ql/lib/CHANGELOG.md +++ b/actions/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.4.30 + +No user-facing changes. + ## 0.4.29 No user-facing changes. diff --git a/actions/ql/lib/change-notes/released/0.4.30.md b/actions/ql/lib/change-notes/released/0.4.30.md new file mode 100644 index 00000000000..db4b03e0b97 --- /dev/null +++ b/actions/ql/lib/change-notes/released/0.4.30.md @@ -0,0 +1,3 @@ +## 0.4.30 + +No user-facing changes. diff --git a/actions/ql/lib/codeql-pack.release.yml b/actions/ql/lib/codeql-pack.release.yml index e8ce8a9cf2d..008b5d85453 100644 --- a/actions/ql/lib/codeql-pack.release.yml +++ b/actions/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.4.29 +lastReleaseVersion: 0.4.30 diff --git a/actions/ql/lib/qlpack.yml b/actions/ql/lib/qlpack.yml index 58daff358ae..9a23a378da6 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-dev +version: 0.4.30 library: true warnOnImplicitThis: true dependencies: diff --git a/actions/ql/src/CHANGELOG.md b/actions/ql/src/CHANGELOG.md index 98d0c402d61..3b0f1c68853 100644 --- a/actions/ql/src/CHANGELOG.md +++ b/actions/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.6.22 + +No user-facing changes. + ## 0.6.21 No user-facing changes. diff --git a/actions/ql/src/change-notes/released/0.6.22.md b/actions/ql/src/change-notes/released/0.6.22.md new file mode 100644 index 00000000000..e94a6b1f5a2 --- /dev/null +++ b/actions/ql/src/change-notes/released/0.6.22.md @@ -0,0 +1,3 @@ +## 0.6.22 + +No user-facing changes. diff --git a/actions/ql/src/codeql-pack.release.yml b/actions/ql/src/codeql-pack.release.yml index 8842c194911..d34186b2833 100644 --- a/actions/ql/src/codeql-pack.release.yml +++ b/actions/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.6.21 +lastReleaseVersion: 0.6.22 diff --git a/actions/ql/src/qlpack.yml b/actions/ql/src/qlpack.yml index cb88235175f..823050fa00b 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-dev +version: 0.6.22 library: false warnOnImplicitThis: true groups: [actions, queries] diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index ceed8215197..de37c16751a 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 8.0.1 + +### Minor Analysis Improvements + +* Inline expectations test comments, which are of the form `// $ tag` or `// $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the `$` symbol. + ## 8.0.0 ### Breaking Changes diff --git a/cpp/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md b/cpp/ql/lib/change-notes/released/8.0.1.md similarity index 81% rename from cpp/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md rename to cpp/ql/lib/change-notes/released/8.0.1.md index 23fdce9b615..46866df058a 100644 --- a/cpp/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md +++ b/cpp/ql/lib/change-notes/released/8.0.1.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 8.0.1 + +### Minor Analysis Improvements + * Inline expectations test comments, which are of the form `// $ tag` or `// $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the `$` symbol. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index 0f48687270d..145ae8f5b47 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 8.0.0 +lastReleaseVersion: 8.0.1 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index f58f85ad943..286288140c4 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-dev +version: 8.0.1 groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index 46b9d362541..c29eaa31e44 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.5.13 + +No user-facing changes. + ## 1.5.12 No user-facing changes. diff --git a/cpp/ql/src/change-notes/released/1.5.13.md b/cpp/ql/src/change-notes/released/1.5.13.md new file mode 100644 index 00000000000..293a8ca4ee1 --- /dev/null +++ b/cpp/ql/src/change-notes/released/1.5.13.md @@ -0,0 +1,3 @@ +## 1.5.13 + +No user-facing changes. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 7a2ef006808..63816b66f59 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.5.12 +lastReleaseVersion: 1.5.13 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 82056b71c4d..5fb03d53434 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-dev +version: 1.5.13 groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index e651f382fe1..86119cf97c4 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.61 + +No user-facing changes. + ## 1.7.60 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.61.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.61.md new file mode 100644 index 00000000000..260a59b90af --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.61.md @@ -0,0 +1,3 @@ +## 1.7.61 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml index c6e284f44d7..4235ee0663a 100644 --- a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.60 +lastReleaseVersion: 1.7.61 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index db6b6b5e014..e2e83cd47e7 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-dev +version: 1.7.61 groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index e651f382fe1..86119cf97c4 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.61 + +No user-facing changes. + ## 1.7.60 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.61.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.61.md new file mode 100644 index 00000000000..260a59b90af --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.61.md @@ -0,0 +1,3 @@ +## 1.7.61 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml index c6e284f44d7..4235ee0663a 100644 --- a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.60 +lastReleaseVersion: 1.7.61 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index e0ee0aaab8f..ebbb19fa683 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-dev +version: 1.7.61 groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 0546fef07b9..695a5611d94 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,13 @@ +## 5.4.9 + +### Minor Analysis Improvements + +* Inline expectations test comments, which are of the form `// $ tag` or `// $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the `$` symbol. +* Added `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. + ## 5.4.8 ### Minor Analysis Improvements diff --git a/csharp/ql/lib/change-notes/2026-02-24-partial-constructors.md b/csharp/ql/lib/change-notes/2026-02-24-partial-constructors.md deleted file mode 100644 index 5ce442aaa10..00000000000 --- a/csharp/ql/lib/change-notes/2026-02-24-partial-constructors.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* C# 14: Added support for partial constructors. diff --git a/csharp/ql/lib/change-notes/2026-03-02-post-update-nodes.md b/csharp/ql/lib/change-notes/2026-03-02-post-update-nodes.md deleted file mode 100644 index d021cabf1a0..00000000000 --- a/csharp/ql/lib/change-notes/2026-03-02-post-update-nodes.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added post-update nodes for struct-type arguments, allowing data flow out of method calls via those arguments. diff --git a/csharp/ql/lib/change-notes/2026-03-03-implicit-conversion-reverse-flow.md b/csharp/ql/lib/change-notes/2026-03-03-implicit-conversion-reverse-flow.md deleted file mode 100644 index 842c2069b3e..00000000000 --- a/csharp/ql/lib/change-notes/2026-03-03-implicit-conversion-reverse-flow.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added reverse taint flow from implicit conversion operator calls to their arguments. diff --git a/csharp/ql/lib/change-notes/2026-03-04-websocket-receiveasync.md b/csharp/ql/lib/change-notes/2026-03-04-websocket-receiveasync.md deleted file mode 100644 index 7b709cad7ca..00000000000 --- a/csharp/ql/lib/change-notes/2026-03-04-websocket-receiveasync.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added `System.Net.WebSockets::ReceiveAsync` as a remote flow source. \ No newline at end of file diff --git a/csharp/ql/lib/change-notes/released/5.4.9.md b/csharp/ql/lib/change-notes/released/5.4.9.md new file mode 100644 index 00000000000..00b802f5aba --- /dev/null +++ b/csharp/ql/lib/change-notes/released/5.4.9.md @@ -0,0 +1,9 @@ +## 5.4.9 + +### Minor Analysis Improvements + +* Inline expectations test comments, which are of the form `// $ tag` or `// $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the `$` symbol. +* Added `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. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index 35346716101..b33412cd939 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 5.4.8 +lastReleaseVersion: 5.4.9 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 2393305504e..3c914c68019 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-dev +version: 5.4.9 groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index 91479d78ffe..35b5ab1e24e 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.6.4 + +No user-facing changes. + ## 1.6.3 No user-facing changes. diff --git a/csharp/ql/src/change-notes/released/1.6.4.md b/csharp/ql/src/change-notes/released/1.6.4.md new file mode 100644 index 00000000000..5c811dc4638 --- /dev/null +++ b/csharp/ql/src/change-notes/released/1.6.4.md @@ -0,0 +1,3 @@ +## 1.6.4 + +No user-facing changes. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index 00b51441d88..1910e09d6a6 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.6.3 +lastReleaseVersion: 1.6.4 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 6290164f0bb..314f157005e 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-dev +version: 1.6.4 groups: - csharp - queries diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index 5940973b8ca..83afe3edcec 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.44 + +No user-facing changes. + ## 1.0.43 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/1.0.44.md b/go/ql/consistency-queries/change-notes/released/1.0.44.md new file mode 100644 index 00000000000..9a8d400d319 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/1.0.44.md @@ -0,0 +1,3 @@ +## 1.0.44 + +No user-facing changes. diff --git a/go/ql/consistency-queries/codeql-pack.release.yml b/go/ql/consistency-queries/codeql-pack.release.yml index 950be6c1f2c..59728e63980 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.43 +lastReleaseVersion: 1.0.44 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index d0473dca567..abdc2742c45 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-dev +version: 1.0.44 groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index 3e1f0ee4aa3..1093bb81803 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.0.2 + +### Minor Analysis Improvements + +* Inline expectations test comments, which are of the form `// $ tag` or `// $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the `$` symbol. + ## 7.0.1 No user-facing changes. diff --git a/csharp/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md b/go/ql/lib/change-notes/released/7.0.2.md similarity index 81% rename from csharp/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md rename to go/ql/lib/change-notes/released/7.0.2.md index 23fdce9b615..88cadec6237 100644 --- a/csharp/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md +++ b/go/ql/lib/change-notes/released/7.0.2.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 7.0.2 + +### Minor Analysis Improvements + * Inline expectations test comments, which are of the form `// $ tag` or `// $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the `$` symbol. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index a18747dd3a7..1f4c0c554e9 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 7.0.1 +lastReleaseVersion: 7.0.2 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index dc03fcbe4f2..2e3c31c5973 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-dev +version: 7.0.2 groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index 289e4b4281b..83e764ea9d3 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.5.8 + +No user-facing changes. + ## 1.5.7 No user-facing changes. diff --git a/go/ql/src/change-notes/released/1.5.8.md b/go/ql/src/change-notes/released/1.5.8.md new file mode 100644 index 00000000000..ec8f84e657f --- /dev/null +++ b/go/ql/src/change-notes/released/1.5.8.md @@ -0,0 +1,3 @@ +## 1.5.8 + +No user-facing changes. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index 227ac5febef..d26e0a52764 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.5.7 +lastReleaseVersion: 1.5.8 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index bc7a0adc3d2..2d0bef9e155 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-dev +version: 1.5.8 groups: - go - queries diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index 644a5328933..24757112923 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,26 @@ +## 9.0.0 + +### Breaking Changes + +* 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: + - `ControlFlowNode.asCall` has been removed - use `Call.getControlFlowNode` instead. + - `ControlFlowNode.getEnclosingStmt` has been removed. + - `ControlFlow::ExprNode` has been removed. + - `ControlFlow::StmtNode` has been removed. + - `ControlFlow::Node` has been removed - this was merely an alias of + `ControlFlowNode`, which is still available. + - Previously deprecated predicates on `BasicBlock` have been removed. + +### Minor Analysis Improvements + +* Inline expectations test comments, which are of the form `// $ tag` or `// $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the `$` symbol. +* The class `Assignment` now extends `BinaryExpr`. Uses of `BinaryExpr` may in some cases need slight adjustment. + ## 8.1.1 ### Minor Analysis Improvements diff --git a/java/ql/lib/change-notes/2026-03-04-binary-assignment.md b/java/ql/lib/change-notes/2026-03-04-binary-assignment.md deleted file mode 100644 index e94a7f6722b..00000000000 --- a/java/ql/lib/change-notes/2026-03-04-binary-assignment.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The class `Assignment` now extends `BinaryExpr`. Uses of `BinaryExpr` may in some cases need slight adjustment. diff --git a/java/ql/lib/change-notes/2026-02-18-cfg.md b/java/ql/lib/change-notes/released/9.0.0.md similarity index 70% rename from java/ql/lib/change-notes/2026-02-18-cfg.md rename to java/ql/lib/change-notes/released/9.0.0.md index 27bd381ec0d..e0b4d7f10ab 100644 --- a/java/ql/lib/change-notes/2026-02-18-cfg.md +++ b/java/ql/lib/change-notes/released/9.0.0.md @@ -1,6 +1,7 @@ ---- -category: breaking ---- +## 9.0.0 + +### Breaking Changes + * 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 @@ -14,3 +15,8 @@ category: breaking - `ControlFlow::Node` has been removed - this was merely an alias of `ControlFlowNode`, which is still available. - Previously deprecated predicates on `BasicBlock` have been removed. + +### Minor Analysis Improvements + +* Inline expectations test comments, which are of the form `// $ tag` or `// $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the `$` symbol. +* The class `Assignment` now extends `BinaryExpr`. Uses of `BinaryExpr` may in some cases need slight adjustment. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index 7d4e7133afe..fd5f4a48b3c 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 8.1.1 +lastReleaseVersion: 9.0.0 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 243a7ddd9a6..e45e13037e7 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 8.1.2-dev +version: 9.0.0 groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index 85bbb64158a..ae0e77925bd 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.10.9 + +No user-facing changes. + ## 1.10.8 ### Minor Analysis Improvements diff --git a/java/ql/src/change-notes/released/1.10.9.md b/java/ql/src/change-notes/released/1.10.9.md new file mode 100644 index 00000000000..0babf4b0286 --- /dev/null +++ b/java/ql/src/change-notes/released/1.10.9.md @@ -0,0 +1,3 @@ +## 1.10.9 + +No user-facing changes. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index 148ec989f9c..947b9a72073 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.10.8 +lastReleaseVersion: 1.10.9 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index ea148f21e79..6d1aa235ed6 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-dev +version: 1.10.9 groups: - java - queries diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index 07069cd41b1..01ac46e87c5 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,10 @@ +## 2.6.24 + +### Minor Analysis Improvements + +* Added support for browser-specific source kinds (`browser`, `browser-url-query`, `browser-url-fragment`, `browser-url-path`, `browser-url`, `browser-window-name`, `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 `// $ tag` or `// $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the `$` symbol. + ## 2.6.23 ### Minor Analysis Improvements diff --git a/javascript/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md b/javascript/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md deleted file mode 100644 index 23fdce9b615..00000000000 --- a/javascript/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Inline expectations test comments, which are of the form `// $ tag` or `// $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the `$` symbol. diff --git a/javascript/ql/lib/change-notes/2026-03-11-browser-source-kinds.md b/javascript/ql/lib/change-notes/released/2.6.24.md similarity index 53% rename from javascript/ql/lib/change-notes/2026-03-11-browser-source-kinds.md rename to javascript/ql/lib/change-notes/released/2.6.24.md index 71d06f3d1b6..9d16a33f1a8 100644 --- a/javascript/ql/lib/change-notes/2026-03-11-browser-source-kinds.md +++ b/javascript/ql/lib/change-notes/released/2.6.24.md @@ -1,4 +1,6 @@ ---- -category: minorAnalysis ---- +## 2.6.24 + +### Minor Analysis Improvements + * Added support for browser-specific source kinds (`browser`, `browser-url-query`, `browser-url-fragment`, `browser-url-path`, `browser-url`, `browser-window-name`, `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 `// $ tag` or `// $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the `$` symbol. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index 50942a620ed..ce80dc3be1c 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.6.23 +lastReleaseVersion: 2.6.24 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index d3ae02b327c..70d0ad7df76 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-dev +version: 2.6.24 groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index 39bd03fdef8..872cd055c51 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.3.4 + +No user-facing changes. + ## 2.3.3 No user-facing changes. diff --git a/javascript/ql/src/change-notes/released/2.3.4.md b/javascript/ql/src/change-notes/released/2.3.4.md new file mode 100644 index 00000000000..c7dcb90e95a --- /dev/null +++ b/javascript/ql/src/change-notes/released/2.3.4.md @@ -0,0 +1,3 @@ +## 2.3.4 + +No user-facing changes. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index 417ee8d65a1..1d7561c966c 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.3.3 +lastReleaseVersion: 2.3.4 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 345b9f5e9b9..d9fc2fd16d5 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-dev +version: 2.3.4 groups: - javascript - queries diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index d44ddfc29ab..8b32c3a6018 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.44 + +No user-facing changes. + ## 1.0.43 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/1.0.44.md b/misc/suite-helpers/change-notes/released/1.0.44.md new file mode 100644 index 00000000000..9a8d400d319 --- /dev/null +++ b/misc/suite-helpers/change-notes/released/1.0.44.md @@ -0,0 +1,3 @@ +## 1.0.44 + +No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index 950be6c1f2c..59728e63980 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.43 +lastReleaseVersion: 1.0.44 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 99171f3f221..dea7170bc37 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-dev +version: 1.0.44 groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index 757949e1a57..4db07a9c83e 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,3 +1,10 @@ +## 7.0.1 + +### Minor Analysis Improvements + +- The call graph resolution no longer considers methods marked using [`@typing.overload`](https://typing.python.org/en/latest/spec/overload.html#overloads) 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 `# $ tag` or `# $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the `$` symbol. + ## 7.0.0 ### Breaking Changes diff --git a/python/ql/lib/change-notes/2026-03-05-ignore-type-overloaded-methods-during-resolution.md b/python/ql/lib/change-notes/released/7.0.1.md similarity index 54% rename from python/ql/lib/change-notes/2026-03-05-ignore-type-overloaded-methods-during-resolution.md rename to python/ql/lib/change-notes/released/7.0.1.md index 001b46a0adb..97224884c93 100644 --- a/python/ql/lib/change-notes/2026-03-05-ignore-type-overloaded-methods-during-resolution.md +++ b/python/ql/lib/change-notes/released/7.0.1.md @@ -1,5 +1,6 @@ ---- -category: minorAnalysis ---- +## 7.0.1 + +### Minor Analysis Improvements - The call graph resolution no longer considers methods marked using [`@typing.overload`](https://typing.python.org/en/latest/spec/overload.html#overloads) 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 `# $ tag` or `# $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the `$` symbol. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index e0db21c7869..a18747dd3a7 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 7.0.0 +lastReleaseVersion: 7.0.1 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index 1e5bd87c850..2400efca5a7 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-dev +version: 7.0.1 groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index 76ac40e7767..46e1c23df07 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.9 + +No user-facing changes. + ## 1.7.8 No user-facing changes. diff --git a/python/ql/src/change-notes/released/1.7.9.md b/python/ql/src/change-notes/released/1.7.9.md new file mode 100644 index 00000000000..84107525ff7 --- /dev/null +++ b/python/ql/src/change-notes/released/1.7.9.md @@ -0,0 +1,3 @@ +## 1.7.9 + +No user-facing changes. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index e003efd5127..678da6bc37e 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.8 +lastReleaseVersion: 1.7.9 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index 1ce2f7a64a0..7c1c1610d14 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-dev +version: 1.7.9 groups: - python - queries diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index af8da8d490f..8014d434977 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 5.1.12 + +### Minor Analysis Improvements + +* Inline expectations test comments, which are of the form `# $ tag` or `# $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the `$` symbol. + ## 5.1.11 ### Minor Analysis Improvements diff --git a/ruby/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md b/ruby/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md deleted file mode 100644 index 9b32429325e..00000000000 --- a/ruby/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Inline expectations test comments, which are of the form `# $ tag` or `# $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the `$` symbol. diff --git a/python/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md b/ruby/ql/lib/change-notes/released/5.1.12.md similarity index 81% rename from python/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md rename to ruby/ql/lib/change-notes/released/5.1.12.md index 9b32429325e..8112f58ab86 100644 --- a/python/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md +++ b/ruby/ql/lib/change-notes/released/5.1.12.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 5.1.12 + +### Minor Analysis Improvements + * Inline expectations test comments, which are of the form `# $ tag` or `# $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the `$` symbol. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index 4f89df382ec..537ae582d46 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 5.1.11 +lastReleaseVersion: 5.1.12 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 082848d5e62..9a0242be164 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-dev +version: 5.1.12 groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index 9414b1dab9d..ddefff5e95b 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.5.9 + +No user-facing changes. + ## 1.5.8 No user-facing changes. diff --git a/ruby/ql/src/change-notes/released/1.5.9.md b/ruby/ql/src/change-notes/released/1.5.9.md new file mode 100644 index 00000000000..be9d418e598 --- /dev/null +++ b/ruby/ql/src/change-notes/released/1.5.9.md @@ -0,0 +1,3 @@ +## 1.5.9 + +No user-facing changes. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index d26e0a52764..5ac7d08bfbf 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.5.8 +lastReleaseVersion: 1.5.9 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index ad4284d6c12..3ba280ea378 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-dev +version: 1.5.9 groups: - ruby - queries diff --git a/rust/ql/lib/CHANGELOG.md b/rust/ql/lib/CHANGELOG.md index 34301d08146..6f7d27e23b4 100644 --- a/rust/ql/lib/CHANGELOG.md +++ b/rust/ql/lib/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.2.8 + +### Minor Analysis Improvements + +* Inline expectations test comments, which are of the form `// $ tag` or `// $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the `$` symbol. +* Added neutral models to inhibit spurious generated sink models for `map` and `from`. This fixes some false positive query results. + ## 0.2.7 ### Minor Analysis Improvements diff --git a/rust/ql/lib/change-notes/2026-02-26-neutral-models-map-from.md b/rust/ql/lib/change-notes/2026-02-26-neutral-models-map-from.md deleted file mode 100644 index 99c313c2ca2..00000000000 --- a/rust/ql/lib/change-notes/2026-02-26-neutral-models-map-from.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added neutral models to inhibit spurious generated sink models for `map` and `from`. This fixes some false positive query results. diff --git a/rust/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md b/rust/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md deleted file mode 100644 index 23fdce9b615..00000000000 --- a/rust/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Inline expectations test comments, which are of the form `// $ tag` or `// $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the `$` symbol. diff --git a/java/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md b/rust/ql/lib/change-notes/released/0.2.8.md similarity index 52% rename from java/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md rename to rust/ql/lib/change-notes/released/0.2.8.md index 23fdce9b615..a892527ffef 100644 --- a/java/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md +++ b/rust/ql/lib/change-notes/released/0.2.8.md @@ -1,4 +1,6 @@ ---- -category: minorAnalysis ---- +## 0.2.8 + +### Minor Analysis Improvements + * Inline expectations test comments, which are of the form `// $ tag` or `// $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the `$` symbol. +* Added neutral models to inhibit spurious generated sink models for `map` and `from`. This fixes some false positive query results. diff --git a/rust/ql/lib/codeql-pack.release.yml b/rust/ql/lib/codeql-pack.release.yml index 6d3c0021858..66ad7f587f8 100644 --- a/rust/ql/lib/codeql-pack.release.yml +++ b/rust/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.2.7 +lastReleaseVersion: 0.2.8 diff --git a/rust/ql/lib/qlpack.yml b/rust/ql/lib/qlpack.yml index c260a6a9aaf..bce0d1b8fa5 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-dev +version: 0.2.8 groups: rust extractor: rust dbscheme: rust.dbscheme diff --git a/rust/ql/src/CHANGELOG.md b/rust/ql/src/CHANGELOG.md index d5f4e6540a7..a3b3c7b516e 100644 --- a/rust/ql/src/CHANGELOG.md +++ b/rust/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.29 + +No user-facing changes. + ## 0.1.28 ### Minor Analysis Improvements diff --git a/rust/ql/src/change-notes/released/0.1.29.md b/rust/ql/src/change-notes/released/0.1.29.md new file mode 100644 index 00000000000..040d04d51d3 --- /dev/null +++ b/rust/ql/src/change-notes/released/0.1.29.md @@ -0,0 +1,3 @@ +## 0.1.29 + +No user-facing changes. diff --git a/rust/ql/src/codeql-pack.release.yml b/rust/ql/src/codeql-pack.release.yml index edc267eb31d..7517c5cff32 100644 --- a/rust/ql/src/codeql-pack.release.yml +++ b/rust/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.28 +lastReleaseVersion: 0.1.29 diff --git a/rust/ql/src/qlpack.yml b/rust/ql/src/qlpack.yml index 3e0968929b4..e3cb21b0a45 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-dev +version: 0.1.29 groups: - rust - queries diff --git a/shared/concepts/CHANGELOG.md b/shared/concepts/CHANGELOG.md index d5febfff59e..61720754dff 100644 --- a/shared/concepts/CHANGELOG.md +++ b/shared/concepts/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.18 + +No user-facing changes. + ## 0.0.17 No user-facing changes. diff --git a/shared/concepts/change-notes/released/0.0.18.md b/shared/concepts/change-notes/released/0.0.18.md new file mode 100644 index 00000000000..86c60b8abe7 --- /dev/null +++ b/shared/concepts/change-notes/released/0.0.18.md @@ -0,0 +1,3 @@ +## 0.0.18 + +No user-facing changes. diff --git a/shared/concepts/codeql-pack.release.yml b/shared/concepts/codeql-pack.release.yml index cbc3d3cd493..a0d2bc59d97 100644 --- a/shared/concepts/codeql-pack.release.yml +++ b/shared/concepts/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.17 +lastReleaseVersion: 0.0.18 diff --git a/shared/concepts/qlpack.yml b/shared/concepts/qlpack.yml index 0eb08ff7ef2..fc4c0b767d5 100644 --- a/shared/concepts/qlpack.yml +++ b/shared/concepts/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/concepts -version: 0.0.18-dev +version: 0.0.18 groups: shared library: true dependencies: diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index ba7a6e9710b..cd52e9f754d 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.28 + +No user-facing changes. + ## 2.0.27 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/2.0.28.md b/shared/controlflow/change-notes/released/2.0.28.md new file mode 100644 index 00000000000..3f9412b6e63 --- /dev/null +++ b/shared/controlflow/change-notes/released/2.0.28.md @@ -0,0 +1,3 @@ +## 2.0.28 + +No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index a047558f018..ec5bd6ba369 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.27 +lastReleaseVersion: 2.0.28 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 23365f4b00e..1376dbfe3cc 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 2.0.28-dev +version: 2.0.28 groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index 21334d74df3..d669cdf14da 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.1.0 + +### New Features + +* Two new flow features `FeatureEscapesSourceCallContext` and `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 `FeatureEqualSourceSinkCallContext` flow feature. + ## 2.0.27 No user-facing changes. diff --git a/shared/dataflow/change-notes/2026-03-04-flow-feature-escapes-source-call-context.md b/shared/dataflow/change-notes/released/2.1.0.md similarity index 89% rename from shared/dataflow/change-notes/2026-03-04-flow-feature-escapes-source-call-context.md rename to shared/dataflow/change-notes/released/2.1.0.md index b7b61b75411..3190a39d325 100644 --- a/shared/dataflow/change-notes/2026-03-04-flow-feature-escapes-source-call-context.md +++ b/shared/dataflow/change-notes/released/2.1.0.md @@ -1,4 +1,5 @@ ---- -category: feature ---- -* Two new flow features `FeatureEscapesSourceCallContext` and `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 `FeatureEqualSourceSinkCallContext` flow feature. \ No newline at end of file +## 2.1.0 + +### New Features + +* Two new flow features `FeatureEscapesSourceCallContext` and `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 `FeatureEqualSourceSinkCallContext` flow feature. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index a047558f018..487a1a58b2b 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.27 +lastReleaseVersion: 2.1.0 diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 148f7c22aea..09f2320911d 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 2.0.28-dev +version: 2.1.0 groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index 04d6328e1ad..ac2f534d1f0 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.44 + +No user-facing changes. + ## 1.0.43 No user-facing changes. diff --git a/shared/mad/change-notes/released/1.0.44.md b/shared/mad/change-notes/released/1.0.44.md new file mode 100644 index 00000000000..9a8d400d319 --- /dev/null +++ b/shared/mad/change-notes/released/1.0.44.md @@ -0,0 +1,3 @@ +## 1.0.44 + +No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index 950be6c1f2c..59728e63980 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.43 +lastReleaseVersion: 1.0.44 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 6d52d027c3c..370dcab571e 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.44-dev +version: 1.0.44 groups: shared library: true dependencies: diff --git a/shared/quantum/CHANGELOG.md b/shared/quantum/CHANGELOG.md index 2daa850c9cd..356c331b5df 100644 --- a/shared/quantum/CHANGELOG.md +++ b/shared/quantum/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.22 + +No user-facing changes. + ## 0.0.21 No user-facing changes. diff --git a/shared/quantum/change-notes/released/0.0.22.md b/shared/quantum/change-notes/released/0.0.22.md new file mode 100644 index 00000000000..00226747438 --- /dev/null +++ b/shared/quantum/change-notes/released/0.0.22.md @@ -0,0 +1,3 @@ +## 0.0.22 + +No user-facing changes. diff --git a/shared/quantum/codeql-pack.release.yml b/shared/quantum/codeql-pack.release.yml index 0c15c351db4..11aaa2243f5 100644 --- a/shared/quantum/codeql-pack.release.yml +++ b/shared/quantum/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.21 +lastReleaseVersion: 0.0.22 diff --git a/shared/quantum/qlpack.yml b/shared/quantum/qlpack.yml index 62eff53a70f..066a920be90 100644 --- a/shared/quantum/qlpack.yml +++ b/shared/quantum/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/quantum -version: 0.0.22-dev +version: 0.0.22 groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index 322f3e63d2a..7fe3864e2a9 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.44 + +No user-facing changes. + ## 1.0.43 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/1.0.44.md b/shared/rangeanalysis/change-notes/released/1.0.44.md new file mode 100644 index 00000000000..9a8d400d319 --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/1.0.44.md @@ -0,0 +1,3 @@ +## 1.0.44 + +No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index 950be6c1f2c..59728e63980 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.43 +lastReleaseVersion: 1.0.44 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index 52088206123..e3d15e3fb29 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.44-dev +version: 1.0.44 groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index 91f48e63783..76740aca838 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.44 + +No user-facing changes. + ## 1.0.43 No user-facing changes. diff --git a/shared/regex/change-notes/released/1.0.44.md b/shared/regex/change-notes/released/1.0.44.md new file mode 100644 index 00000000000..9a8d400d319 --- /dev/null +++ b/shared/regex/change-notes/released/1.0.44.md @@ -0,0 +1,3 @@ +## 1.0.44 + +No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index 950be6c1f2c..59728e63980 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.43 +lastReleaseVersion: 1.0.44 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index de27548887a..0595120a7a8 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.44-dev +version: 1.0.44 groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index 3be528de762..8e2eb4bd049 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.20 + +No user-facing changes. + ## 2.0.19 No user-facing changes. diff --git a/shared/ssa/change-notes/released/2.0.20.md b/shared/ssa/change-notes/released/2.0.20.md new file mode 100644 index 00000000000..6756bd5f6c1 --- /dev/null +++ b/shared/ssa/change-notes/released/2.0.20.md @@ -0,0 +1,3 @@ +## 2.0.20 + +No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index 4aecf1e1f86..cde101f3516 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.19 +lastReleaseVersion: 2.0.20 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 26a6653166e..0e191175233 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 2.0.20-dev +version: 2.0.20 groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index 5940973b8ca..83afe3edcec 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.44 + +No user-facing changes. + ## 1.0.43 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/1.0.44.md b/shared/threat-models/change-notes/released/1.0.44.md new file mode 100644 index 00000000000..9a8d400d319 --- /dev/null +++ b/shared/threat-models/change-notes/released/1.0.44.md @@ -0,0 +1,3 @@ +## 1.0.44 + +No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index 950be6c1f2c..59728e63980 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.43 +lastReleaseVersion: 1.0.44 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index a7be7fa7472..34df8789554 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-dev +version: 1.0.44 library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index 1f381c3bc3e..403c4b8589a 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.44 + +No user-facing changes. + ## 1.0.43 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/1.0.44.md b/shared/tutorial/change-notes/released/1.0.44.md new file mode 100644 index 00000000000..9a8d400d319 --- /dev/null +++ b/shared/tutorial/change-notes/released/1.0.44.md @@ -0,0 +1,3 @@ +## 1.0.44 + +No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index 950be6c1f2c..59728e63980 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.43 +lastReleaseVersion: 1.0.44 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 55533a9215d..913f73c24fe 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-dev +version: 1.0.44 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/CHANGELOG.md b/shared/typeflow/CHANGELOG.md index 2750202de65..b57a022aa47 100644 --- a/shared/typeflow/CHANGELOG.md +++ b/shared/typeflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.44 + +No user-facing changes. + ## 1.0.43 No user-facing changes. diff --git a/shared/typeflow/change-notes/released/1.0.44.md b/shared/typeflow/change-notes/released/1.0.44.md new file mode 100644 index 00000000000..9a8d400d319 --- /dev/null +++ b/shared/typeflow/change-notes/released/1.0.44.md @@ -0,0 +1,3 @@ +## 1.0.44 + +No user-facing changes. diff --git a/shared/typeflow/codeql-pack.release.yml b/shared/typeflow/codeql-pack.release.yml index 950be6c1f2c..59728e63980 100644 --- a/shared/typeflow/codeql-pack.release.yml +++ b/shared/typeflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.43 +lastReleaseVersion: 1.0.44 diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index d1f7f3a6ee5..bba635a4797 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.44-dev +version: 1.0.44 groups: shared library: true dependencies: diff --git a/shared/typeinference/CHANGELOG.md b/shared/typeinference/CHANGELOG.md index 20ebb6b42c0..8d524a11a09 100644 --- a/shared/typeinference/CHANGELOG.md +++ b/shared/typeinference/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.25 + +No user-facing changes. + ## 0.0.24 No user-facing changes. diff --git a/shared/typeinference/change-notes/released/0.0.25.md b/shared/typeinference/change-notes/released/0.0.25.md new file mode 100644 index 00000000000..e41a9acfa06 --- /dev/null +++ b/shared/typeinference/change-notes/released/0.0.25.md @@ -0,0 +1,3 @@ +## 0.0.25 + +No user-facing changes. diff --git a/shared/typeinference/codeql-pack.release.yml b/shared/typeinference/codeql-pack.release.yml index b956773a07f..6d0e80a50c3 100644 --- a/shared/typeinference/codeql-pack.release.yml +++ b/shared/typeinference/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.24 +lastReleaseVersion: 0.0.25 diff --git a/shared/typeinference/qlpack.yml b/shared/typeinference/qlpack.yml index 3083c027155..278398e2487 100644 --- a/shared/typeinference/qlpack.yml +++ b/shared/typeinference/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeinference -version: 0.0.25-dev +version: 0.0.25 groups: shared library: true dependencies: diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index edd15f80a3f..553f1b75bfd 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.28 + +No user-facing changes. + ## 2.0.27 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/2.0.28.md b/shared/typetracking/change-notes/released/2.0.28.md new file mode 100644 index 00000000000..3f9412b6e63 --- /dev/null +++ b/shared/typetracking/change-notes/released/2.0.28.md @@ -0,0 +1,3 @@ +## 2.0.28 + +No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index a047558f018..ec5bd6ba369 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.27 +lastReleaseVersion: 2.0.28 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index 7b154125281..3c3316da7fc 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 2.0.28-dev +version: 2.0.28 groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index 50d7c3b9dab..277af7bfafe 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.44 + +No user-facing changes. + ## 1.0.43 No user-facing changes. diff --git a/shared/typos/change-notes/released/1.0.44.md b/shared/typos/change-notes/released/1.0.44.md new file mode 100644 index 00000000000..9a8d400d319 --- /dev/null +++ b/shared/typos/change-notes/released/1.0.44.md @@ -0,0 +1,3 @@ +## 1.0.44 + +No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index 950be6c1f2c..59728e63980 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.43 +lastReleaseVersion: 1.0.44 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index a01e2c21ac3..56557152de7 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.44-dev +version: 1.0.44 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index 550586e22aa..4f086cb994a 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.31 + +No user-facing changes. + ## 2.0.30 No user-facing changes. diff --git a/shared/util/change-notes/released/2.0.31.md b/shared/util/change-notes/released/2.0.31.md new file mode 100644 index 00000000000..b3cd05e3de4 --- /dev/null +++ b/shared/util/change-notes/released/2.0.31.md @@ -0,0 +1,3 @@ +## 2.0.31 + +No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index 19c80429585..783d47207cd 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.30 +lastReleaseVersion: 2.0.31 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index 43291623fec..b7e3b89b39e 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 2.0.31-dev +version: 2.0.31 groups: shared library: true dependencies: null diff --git a/shared/xml/CHANGELOG.md b/shared/xml/CHANGELOG.md index 988f07dd919..ecdc24c85be 100644 --- a/shared/xml/CHANGELOG.md +++ b/shared/xml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.44 + +No user-facing changes. + ## 1.0.43 No user-facing changes. diff --git a/shared/xml/change-notes/released/1.0.44.md b/shared/xml/change-notes/released/1.0.44.md new file mode 100644 index 00000000000..9a8d400d319 --- /dev/null +++ b/shared/xml/change-notes/released/1.0.44.md @@ -0,0 +1,3 @@ +## 1.0.44 + +No user-facing changes. diff --git a/shared/xml/codeql-pack.release.yml b/shared/xml/codeql-pack.release.yml index 950be6c1f2c..59728e63980 100644 --- a/shared/xml/codeql-pack.release.yml +++ b/shared/xml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.43 +lastReleaseVersion: 1.0.44 diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index c86bb266ce5..33bf92658f8 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.44-dev +version: 1.0.44 groups: shared library: true dependencies: diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index 323fcc5e351..62c04d103a4 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.44 + +No user-facing changes. + ## 1.0.43 No user-facing changes. diff --git a/shared/yaml/change-notes/released/1.0.44.md b/shared/yaml/change-notes/released/1.0.44.md new file mode 100644 index 00000000000..9a8d400d319 --- /dev/null +++ b/shared/yaml/change-notes/released/1.0.44.md @@ -0,0 +1,3 @@ +## 1.0.44 + +No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index 950be6c1f2c..59728e63980 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.43 +lastReleaseVersion: 1.0.44 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index c374e16c9cd..ac65e0bcb80 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.44-dev +version: 1.0.44 groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index 793cfd9cc20..f105831909f 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,3 +1,13 @@ +## 6.3.0 + +### Major Analysis Improvements + +* Upgraded to allow analysis of Swift 6.2.4. + +### Minor Analysis Improvements + +* Inline expectations test comments, which are of the form `// $ tag` or `// $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the `$` symbol. + ## 6.2.3 No user-facing changes. diff --git a/swift/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md b/swift/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md deleted file mode 100644 index 23fdce9b615..00000000000 --- a/swift/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Inline expectations test comments, which are of the form `// $ tag` or `// $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the `$` symbol. diff --git a/swift/ql/lib/change-notes/2026-03-06-swift-6.2.4.md b/swift/ql/lib/change-notes/2026-03-06-swift-6.2.4.md deleted file mode 100644 index f507df1c2df..00000000000 --- a/swift/ql/lib/change-notes/2026-03-06-swift-6.2.4.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: majorAnalysis ---- -* Upgraded to allow analysis of Swift 6.2.4. diff --git a/go/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md b/swift/ql/lib/change-notes/released/6.3.0.md similarity index 61% rename from go/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md rename to swift/ql/lib/change-notes/released/6.3.0.md index 23fdce9b615..5d010b9d110 100644 --- a/go/ql/lib/change-notes/2026-03-05-inline-expectation-space-after-$.md +++ b/swift/ql/lib/change-notes/released/6.3.0.md @@ -1,4 +1,9 @@ ---- -category: minorAnalysis ---- +## 6.3.0 + +### Major Analysis Improvements + +* Upgraded to allow analysis of Swift 6.2.4. + +### Minor Analysis Improvements + * Inline expectations test comments, which are of the form `// $ tag` or `// $ tag=value`, are now parsed more strictly and will not be recognized if there isn't a space after the `$` symbol. diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index e3651327c5b..ae5210e925a 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 6.2.3 +lastReleaseVersion: 6.3.0 diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 6689881badc..d2983f8bd94 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 6.2.4-dev +version: 6.3.0 groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index 2b609c7f270..40371bcbb8d 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.2.18 + +No user-facing changes. + ## 1.2.17 No user-facing changes. diff --git a/swift/ql/src/change-notes/released/1.2.18.md b/swift/ql/src/change-notes/released/1.2.18.md new file mode 100644 index 00000000000..e7b808777a2 --- /dev/null +++ b/swift/ql/src/change-notes/released/1.2.18.md @@ -0,0 +1,3 @@ +## 1.2.18 + +No user-facing changes. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index e8e4a1b8f7d..e414238818d 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.2.17 +lastReleaseVersion: 1.2.18 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 866219f0753..39171058590 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-dev +version: 1.2.18 groups: - swift - queries From e70727524aa1d57d34211101d0b9bf9afe65c9c4 Mon Sep 17 00:00:00 2001 From: Taus Date: Mon, 16 Mar 2026 12:37:00 +0000 Subject: [PATCH 059/111] 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 060/111] 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 061/111] 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 062/111] 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 063/111] 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 064/111] 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 065/111] 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 066/111] 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 067/111] 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 068/111] 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 069/111] 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 070/111] 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 071/111] 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 072/111] 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 073/111] 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 074/111] 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 075/111] 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 076/111] 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 077/111] 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 078/111] 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 079/111] 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 080/111] 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 081/111] 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 082/111] 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 083/111] 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 084/111] 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 085/111] 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 086/111] 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 087/111] 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 088/111] 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 089/111] 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 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 090/111] 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 091/111] 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 092/111] 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 093/111] 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 094/111] 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 095/111] 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 096/111] 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 097/111] 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 098/111] 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 099/111] 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 100/111] 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 101/111] 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 102/111] 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 103/111] 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 104/111] 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 105/111] 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 d2fcced5adf53ee9dde4338ceae57c49b5290736 Mon Sep 17 00:00:00 2001 From: Jeongsoo Lee Date: Fri, 20 Mar 2026 09:59:12 -0700 Subject: [PATCH 106/111] 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 107/111] 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 108/111] 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 109/111] 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 110/111] 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 111/111] 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.