From 09097128c39ec7834ce3dac83753e3f6231b76bc Mon Sep 17 00:00:00 2001 From: joboet Date: Thu, 25 Sep 2025 17:48:08 +0200 Subject: [PATCH 01/31] alloc: fix `Debug` implementation of `ExtractIf` --- library/alloc/src/vec/extract_if.rs | 15 ++++++++++++++- library/alloctests/tests/vec.rs | 11 +++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/library/alloc/src/vec/extract_if.rs b/library/alloc/src/vec/extract_if.rs index a456d3d9e602d..c0c0060175362 100644 --- a/library/alloc/src/vec/extract_if.rs +++ b/library/alloc/src/vec/extract_if.rs @@ -115,7 +115,20 @@ where A: Allocator, { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - let peek = if self.idx < self.end { self.vec.get(self.idx) } else { None }; + let peek = if self.idx < self.end { + // This has to use pointer arithmetic as `self.vec[self.idx]` or + // `self.vec.get_unchecked(self.idx)` wouldn't work since we + // temporarily set the length of `self.vec` to zero. + // + // SAFETY: + // Since `self.idx` is smaller than `self.end` and `self.end` is + // smaller than `self.old_len`, `idx` is valid for indexing the + // buffer. Also, per the invariant of `self.idx`, this element + // has not been inspected/moved out yet. + Some(unsafe { &*self.vec.as_ptr().add(self.idx) }) + } else { + None + }; f.debug_struct("ExtractIf").field("peek", &peek).finish_non_exhaustive() } } diff --git a/library/alloctests/tests/vec.rs b/library/alloctests/tests/vec.rs index 33a34daccbfd2..ad5e3c5ecd44f 100644 --- a/library/alloctests/tests/vec.rs +++ b/library/alloctests/tests/vec.rs @@ -1635,6 +1635,17 @@ fn extract_if_unconsumed() { assert_eq!(vec, [1, 2, 3, 4]); } +#[test] +fn extract_if_debug() { + let mut vec = vec![1, 2]; + let mut drain = vec.extract_if(.., |&mut x| x % 2 != 0); + assert!(format!("{drain:?}").contains("Some(1)")); + drain.next(); + assert!(format!("{drain:?}").contains("Some(2)")); + drain.next(); + assert!(format!("{drain:?}").contains("None")); +} + #[test] fn test_reserve_exact() { // This is all the same as test_reserve From 0d6a313e6e97cbb63e7ea2111d461ac0ac1aad3d Mon Sep 17 00:00:00 2001 From: LemonJ <1632798336@qq.com> Date: Tue, 23 Sep 2025 16:42:55 +0800 Subject: [PATCH 02/31] add doc for va_list APIs --- library/core/src/ffi/va_list.rs | 7 ++++--- library/core/src/intrinsics/mod.rs | 25 ++++++++++++++++++++++--- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/library/core/src/ffi/va_list.rs b/library/core/src/ffi/va_list.rs index 0d4ccb5aeb28c..3d8ce6508bf3f 100644 --- a/library/core/src/ffi/va_list.rs +++ b/library/core/src/ffi/va_list.rs @@ -243,10 +243,11 @@ impl<'f> VaListImpl<'f> { /// /// # Safety /// - /// This function is only sound to call when the next variable argument: + /// This function is only sound to call when: /// - /// - has a type that is ABI-compatible with the type `T` - /// - has a value that is a properly initialized value of type `T` + /// - there is a next variable argument available. + /// - the next argument's type must be ABI-compatible with the type `T`. + /// - the next argument must have a properly initialized value of type `T`. /// /// Calling this function with an incompatible type, an invalid value, or when there /// are no more variable arguments, is unsound. diff --git a/library/core/src/intrinsics/mod.rs b/library/core/src/intrinsics/mod.rs index a174ced5a2a63..af0356be26498 100644 --- a/library/core/src/intrinsics/mod.rs +++ b/library/core/src/intrinsics/mod.rs @@ -3295,7 +3295,13 @@ pub(crate) const fn miri_promise_symbolic_alignment(ptr: *const (), align: usize /// Copies the current location of arglist `src` to the arglist `dst`. /// -/// FIXME: document safety requirements +/// # Safety +/// +/// You must check the following invariants before you call this function: +/// +/// - `dest` must be non-null and point to valid, writable memory. +/// - `dest` must not alias `src`. +/// #[rustc_intrinsic] #[rustc_nounwind] pub unsafe fn va_copy<'f>(dest: *mut VaListImpl<'f>, src: &VaListImpl<'f>); @@ -3303,14 +3309,27 @@ pub unsafe fn va_copy<'f>(dest: *mut VaListImpl<'f>, src: &VaListImpl<'f>); /// Loads an argument of type `T` from the `va_list` `ap` and increment the /// argument `ap` points to. /// -/// FIXME: document safety requirements +/// # Safety +/// +/// This function is only sound to call when: +/// +/// - there is a next variable argument available. +/// - the next argument's type must be ABI-compatible with the type `T`. +/// - the next argument must have a properly initialized value of type `T`. +/// +/// Calling this function with an incompatible type, an invalid value, or when there +/// are no more variable arguments, is unsound. +/// #[rustc_intrinsic] #[rustc_nounwind] pub unsafe fn va_arg(ap: &mut VaListImpl<'_>) -> T; /// Destroy the arglist `ap` after initialization with `va_start` or `va_copy`. /// -/// FIXME: document safety requirements +/// # Safety +/// +/// `ap` must not be used to access variable arguments after this call. +/// #[rustc_intrinsic] #[rustc_nounwind] pub unsafe fn va_end(ap: &mut VaListImpl<'_>); From d8b6752640113e0834ff7c5253cc0e840eac32be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jana=20D=C3=B6nszelmann?= Date: Wed, 12 Nov 2025 16:20:02 +0100 Subject: [PATCH 03/31] describe bors try parent=sha builds --- src/doc/rustc-dev-guide/src/tests/ci.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/doc/rustc-dev-guide/src/tests/ci.md b/src/doc/rustc-dev-guide/src/tests/ci.md index 5b6accec476bf..e41893a15f126 100644 --- a/src/doc/rustc-dev-guide/src/tests/ci.md +++ b/src/doc/rustc-dev-guide/src/tests/ci.md @@ -173,6 +173,11 @@ of [`jobs.yml`]: - `optional` jobs are executed only when explicitly requested via a try build. They are typically used for tier 2 and tier 3 targets. +One reason to do a try build is to do a perf run, as described above, with `@rust-timer queue`. +This perf build then compares against some commit on main. +With `@bors try parent=` you can base your try build and subsequent perf run on a specific commit on `main`, +to help make the perf comparison as fair as possible. + > **Using `try-job` PR description directives** > > 1. Identify which set of try-jobs you would like to exercise. You can From 9d1c2734f5414da22f5ce77d6b862e29497f59b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jana=20D=C3=B6nszelmann?= Date: Wed, 12 Nov 2025 16:22:35 +0100 Subject: [PATCH 04/31] update some uses of `master` in the devguide --- .../src/building/how-to-build-and-run.md | 4 +- .../rustc-dev-guide/src/building/suggested.md | 8 +-- src/doc/rustc-dev-guide/src/contributing.md | 16 ++--- src/doc/rustc-dev-guide/src/external-repos.md | 4 +- src/doc/rustc-dev-guide/src/git.md | 66 +++++++++---------- src/doc/rustc-dev-guide/src/tests/adding.md | 2 +- src/doc/rustc-dev-guide/src/tests/ci.md | 18 ++--- 7 files changed, 59 insertions(+), 59 deletions(-) diff --git a/src/doc/rustc-dev-guide/src/building/how-to-build-and-run.md b/src/doc/rustc-dev-guide/src/building/how-to-build-and-run.md index efb21726e3c6a..c924216b8cd30 100644 --- a/src/doc/rustc-dev-guide/src/building/how-to-build-and-run.md +++ b/src/doc/rustc-dev-guide/src/building/how-to-build-and-run.md @@ -68,7 +68,7 @@ This instructs `git` to perform a "shallow clone", cloning the repository but tr the last `N` commits. Passing `--depth 1` tells `git` to clone the repository but truncate the history to the latest -commit that is on the `master` branch, which is usually fine for browsing the source code or +commit that is on the `main` branch, which is usually fine for browsing the source code or building the compiler. ```bash @@ -172,7 +172,7 @@ You can install it with `cargo install --path src/tools/x`. To clarify that this is another global installed binary util, which is similar to the one declared in section [What is `x.py`](#what-is-xpy), but -it works as an independent process to execute the `x.py` rather than calling the +it works as an independent process to execute the `x.py` rather than calling the shell to run the platform related scripts. ## Create a `bootstrap.toml` diff --git a/src/doc/rustc-dev-guide/src/building/suggested.md b/src/doc/rustc-dev-guide/src/building/suggested.md index 6d7d340e633e2..1c75de3e90421 100644 --- a/src/doc/rustc-dev-guide/src/building/suggested.md +++ b/src/doc/rustc-dev-guide/src/building/suggested.md @@ -296,7 +296,7 @@ lets you use `cargo fmt`. [the section on vscode]: suggested.md#configuring-rust-analyzer-for-rustc [the section on rustup]: how-to-build-and-run.md?highlight=rustup#creating-a-rustup-toolchain -## Faster Builds with CI-rustc +## Faster Builds with CI-rustc If you are not working on the compiler, you often don't need to build the compiler tree. For example, you can skip building the compiler and only build the `library` tree or the @@ -389,7 +389,7 @@ times, and having to update each clone individually. Fortunately, Git has a better solution called [worktrees]. This lets you create multiple "working trees", which all share the same Git database. Moreover, because all of the worktrees share the same object database, if you update a -branch (e.g. master) in any of them, you can use the new commits from any of the +branch (e.g. `main`) in any of them, you can use the new commits from any of the worktrees. One caveat, though, is that submodules do not get shared. They will still be cloned multiple times. @@ -403,10 +403,10 @@ command: git worktree add ../rust2 ``` -Creating a new worktree for a new branch based on `master` looks like: +Creating a new worktree for a new branch based on `main` looks like: ```bash -git worktree add -b my-feature ../rust2 master +git worktree add -b my-feature ../rust2 main ``` You can then use that rust2 folder as a separate workspace for modifying and diff --git a/src/doc/rustc-dev-guide/src/contributing.md b/src/doc/rustc-dev-guide/src/contributing.md index e30819ebccae0..1b4f04dbb5ef9 100644 --- a/src/doc/rustc-dev-guide/src/contributing.md +++ b/src/doc/rustc-dev-guide/src/contributing.md @@ -55,7 +55,7 @@ Instead, we have 3 release channels: stable, beta, and nightly. - **Stable**: this is the latest stable release for general usage. - **Beta**: this is the next release (will be stable within 6 weeks). -- **Nightly**: follows the `master` branch of the repo. +- **Nightly**: follows the `main` branch of the repo. This is the only channel where unstable features are intended to be used, which happens via opt-in feature gates. @@ -97,7 +97,7 @@ before approving). This is yet another bot that will compile a collection of benchmarks on a compiler with your changes. The numbers are reported -[here][perf], and you can see a comparison of your changes against the latest master. +[here][perf], and you can see a comparison of your changes against the latest `main`. > For an introduction to the performance of Rust code in general > which would also be useful in rustc development, see [The Rust Performance Book]. @@ -153,7 +153,7 @@ We have [a chapter](git.md) on how to use Git when contributing to Rust. ### Keeping your branch up-to-date -The CI in rust-lang/rust applies your patches directly against the current master, +The CI in rust-lang/rust applies your patches directly against the current `main`, not against the commit your branch is based on. This can lead to unexpected failures if your branch is outdated, even when there are no explicit merge conflicts. @@ -164,7 +164,7 @@ During review, make incremental commits to address feedback. Prefer to squash or rebase only at the end, or when a reviewer requests it. When updating, use `git push --force-with-lease` and leave a brief comment explaining what changed. -Some repos prefer merging from `upstream/master` instead of rebasing; +Some repos prefer merging from `upstream/main` instead of rebasing; follow the project's conventions. See [keeping things up to date](git.md#keeping-things-up-to-date) for detailed instructions. @@ -264,7 +264,7 @@ It will look something like this: This tells [@bors], our lovable integration bot, that your pull request has been approved. The PR then enters the [merge queue], where [@bors] will run *all* the tests on *every* platform we support. -If it all works out, [@bors] will merge your code into `master` and close the pull request. +If it all works out, [@bors] will merge your code into `main` and close the pull request. Depending on the scale of the change, you may see a slightly different form of `r+`: @@ -288,7 +288,7 @@ You are now ready to file a pull request (PR)? Great! Here are a few points you should be aware of. -All pull requests should be filed against the `master` branch, +All pull requests should be filed against the `main` branch, unless you know for sure that you should target a different branch. Run some style checks before you submit the PR: @@ -303,7 +303,7 @@ Rust follows a _no merge-commit policy_, meaning that when you encounter merge conflicts, you are expected to always rebase instead of merging. For example, -always use rebase when bringing the latest changes from the master branch to your feature branch. +always use rebase when bringing the latest changes from the `main` branch to your feature branch. If your PR contains merge commits, it will get marked as `has-merge-commits`. Once you have removed the merge commits, e.g., through an interactive rebase, you should remove the label again: @@ -328,7 +328,7 @@ the issue in question. However, if your PR fixes a stable-to-beta or stable-to-stable regression and has been accepted for a beta and/or stable backport (i.e., it is marked `beta-accepted` and/or `stable-accepted`), please do *not* use any such keywords since we don't -want the corresponding issue to get auto-closed once the fix lands on master. +want the corresponding issue to get auto-closed once the fix lands on `main`. Please update the PR description while still mentioning the issue somewhere. For example, you could write `Fixes (after beta backport) #NNN.`. diff --git a/src/doc/rustc-dev-guide/src/external-repos.md b/src/doc/rustc-dev-guide/src/external-repos.md index fb291aa777ae7..6c38b3dc5e205 100644 --- a/src/doc/rustc-dev-guide/src/external-repos.md +++ b/src/doc/rustc-dev-guide/src/external-repos.md @@ -114,7 +114,7 @@ A `subtree pull` takes all changes since the last `subtree pull` from the tool repo and adds these commits to the rustc repo along with a merge commit that moves the tool changes into the specified directory in the Rust repository. -It is recommended that you always do a push first and get that merged to the tool master branch. +It is recommended that you always do a push first and get that merged to the tool `main`/`master` branch. Then, when you do a pull, the merge works without conflicts. While it's definitely possible to resolve conflicts during a pull, you may have to redo the conflict resolution if your PR doesn't get merged fast enough and there are new conflicts. Do not try to @@ -163,7 +163,7 @@ More information may be found on the Forge [Toolstate chapter]. In practice, it is very rare for documentation to have broken toolstate. Breakage is not allowed in the beta and stable channels, and must be addressed -before the PR is merged. They are also not allowed to be broken on master in +before the PR is merged. They are also not allowed to be broken on `main` in the week leading up to the beta cut. [git submodules]: https://git-scm.com/book/en/v2/Git-Tools-Submodules diff --git a/src/doc/rustc-dev-guide/src/git.md b/src/doc/rustc-dev-guide/src/git.md index 56f1f01f26dbf..a01a156fa64cd 100644 --- a/src/doc/rustc-dev-guide/src/git.md +++ b/src/doc/rustc-dev-guide/src/git.md @@ -57,9 +57,9 @@ useful when contributing to other repositories in the Rust project. Below is the normal procedure that you're likely to use for most minor changes and PRs: - 1. Ensure that you're making your changes on top of master: - `git checkout master`. - 2. Get the latest changes from the Rust repo: `git pull upstream master --ff-only`. + 1. Ensure that you're making your changes on top of `main`: + `git checkout main`. + 2. Get the latest changes from the Rust repo: `git pull upstream main --ff-only`. (see [No-Merge Policy][no-merge-policy] for more info about this). 3. Make a new branch for your change: `git checkout -b issue-12345-fix`. 4. Make some changes to the repo and test them. @@ -72,7 +72,7 @@ and PRs: 6. Push your changes to your fork: `git push --set-upstream origin issue-12345-fix` (After adding commits, you can use `git push` and after rebasing or pulling-and-rebasing, you can use `git push --force-with-lease`). - 7. [Open a PR][ghpullrequest] from your fork to `rust-lang/rust`'s master branch. + 7. [Open a PR][ghpullrequest] from your fork to `rust-lang/rust`'s `main` branch. [ghpullrequest]: https://guides.github.com/activities/forking/#making-a-pull-request @@ -101,7 +101,7 @@ Here are some common issues you might run into: Git has two ways to update your branch with the newest changes: merging and rebasing. Rust [uses rebasing][no-merge-policy]. If you make a merge commit, it's not too hard to fix: -`git rebase -i upstream/master`. +`git rebase -i upstream/main`. See [Rebasing](#rebasing) for more about rebasing. @@ -151,7 +151,7 @@ replace `src/tools/cargo` with the path to that submodule): - If you modified the submodule in several different commits, you will need to repeat steps 1-3 for each commit you modified. You'll know when to stop when the `git log` command shows a commit that's not authored by you. -5. Squash your changes into the existing commits: `git rebase --autosquash -i upstream/master` +5. Squash your changes into the existing commits: `git rebase --autosquash -i upstream/main` 6. [Push your changes](#standard-process). ### I see "error: cannot rebase" when I try to rebase @@ -197,7 +197,7 @@ and just want to get a clean copy of the repository back, you can use `git reset ```console # WARNING: this throws out any local changes you've made! Consider resolving the conflicts instead. -git reset --hard master +git reset --hard main ``` ### failed to push some refs @@ -222,12 +222,12 @@ rebase! Use `git push --force-with-lease` instead. If you see many commits in your rebase list, or merge commits, or commits by other people that you didn't write, it likely means you're trying to rebase over the wrong branch. For example, you may -have a `rust-lang/rust` remote `upstream`, but ran `git rebase origin/master` instead of `git rebase -upstream/master`. The fix is to abort the rebase and use the correct branch instead: +have a `rust-lang/rust` remote `upstream`, but ran `git rebase origin/main` instead of `git rebase +upstream/main`. The fix is to abort the rebase and use the correct branch instead: ```console git rebase --abort -git rebase -i upstream/master +git rebase -i upstream/main ```
Click here to see an example of rebasing over the wrong branch @@ -243,8 +243,8 @@ Git says you have modified some files that you have never edited. For example, running `git status` gives you something like (note the `new commits` mention): ```console -On branch master -Your branch is up to date with 'origin/master'. +On branch main +Your branch is up to date with 'origin/main'. Changes not staged for commit: (use "git add ..." to update what will be committed) @@ -277,11 +277,11 @@ merged. To do that, you need to rebase your work on top of rust-lang/rust. ### Rebasing -To rebase your feature branch on top of the newest version of the master branch +To rebase your feature branch on top of the newest version of the `main` branch of rust-lang/rust, checkout your branch, and then run this command: ```console -git pull --rebase https://github.com/rust-lang/rust.git master +git pull --rebase https://github.com/rust-lang/rust.git main ``` > If you are met with the following error: @@ -293,10 +293,10 @@ git pull --rebase https://github.com/rust-lang/rust.git master > case, run `git stash` before rebasing, and then `git stash pop` after you > have rebased and fixed all conflicts. -When you rebase a branch on master, all the changes on your branch are -reapplied to the most recent version of master. In other words, Git tries to -pretend that the changes you made to the old version of master were instead -made to the new version of master. During this process, you should expect to +When you rebase a branch on main, all the changes on your branch are +reapplied to the most recent version of `main`. In other words, Git tries to +pretend that the changes you made to the old version of `main` were instead +made to the new version of `main`. During this process, you should expect to encounter at least one "rebase conflict." This happens when Git's attempt to reapply the changes fails because your changes conflicted with other changes that have been made. You can tell that this happened because you'll see @@ -318,9 +318,9 @@ Your code This represents the lines in the file that Git could not figure out how to rebase. The section between `<<<<<<< HEAD` and `=======` has the code from -master, while the other side has your version of the code. You'll need to +`main`, while the other side has your version of the code. You'll need to decide how to deal with the conflict. You may want to keep your changes, -keep the changes on master, or combine the two. +keep the changes on `main`, or combine the two. Generally, resolving the conflict consists of two steps: First, fix the particular conflict. Edit the file to make the changes you want and remove the @@ -343,15 +343,15 @@ guide on rebasing work and dealing with merge conflicts. Here is some general advice about how to keep your local repo up-to-date with upstream changes: -Using `git pull upstream master` while on your local master branch regularly +Using `git pull upstream main` while on your local `main` branch regularly will keep it up-to-date. You will also want to keep your feature branches up-to-date as well. After pulling, you can checkout the feature branches and rebase them: ```console -git checkout master -git pull upstream master --ff-only # to make certain there are no merge commits -git rebase master feature_branch +git checkout main +git pull upstream main --ff-only # to make certain there are no merge commits +git rebase main feature_branch git push --force-with-lease # (set origin to be the same as local) ``` @@ -360,7 +360,7 @@ To avoid merges as per the [No-Merge Policy](#no-merge-policy), you may want to to ensure that Git doesn't create merge commits when `git pull`ing, without needing to pass `--ff-only` or `--rebase` every time. -You can also `git push --force-with-lease` from master to double-check that your +You can also `git push --force-with-lease` from main to double-check that your feature branches are in sync with their state on the Github side. ## Advanced Rebasing @@ -373,14 +373,14 @@ On the one hand, you lose track of the steps in which changes were made, but the history becomes easier to work with. If there are no conflicts and you are just squashing to clean up the history, -use `git rebase --interactive --keep-base master`. This keeps the fork point +use `git rebase --interactive --keep-base main`. This keeps the fork point of your PR the same, making it easier to review the diff of what happened across your rebases. Squashing can also be useful as part of conflict resolution. If your branch contains multiple consecutive rewrites of the same code, or if the rebase conflicts are extremely severe, you can use -`git rebase --interactive master` to gain more control over the process. This +`git rebase --interactive main` to gain more control over the process. This allows you to choose to skip commits, edit the commits that you do not skip, change the order in which they are applied, or "squash" them into each other. @@ -388,8 +388,8 @@ Alternatively, you can sacrifice the commit history like this: ```console # squash all the changes into one commit so you only have to worry about conflicts once -git rebase -i --keep-base master # and squash all changes along the way -git rebase master +git rebase -i --keep-base main # and squash all changes along the way +git rebase main # fix all merge conflicts git rebase --continue ``` @@ -402,9 +402,9 @@ because they only represent "fixups" and not real changes. For example, After completing a rebase, and before pushing up your changes, you may want to review the changes between your old branch and your new one. You can do that -with `git range-diff master @{upstream} HEAD`. +with `git range-diff main @{upstream} HEAD`. -The first argument to `range-diff`, `master` in this case, is the base revision +The first argument to `range-diff`, `main` in this case, is the base revision that you're comparing your old and new branch against. The second argument is the old version of your branch; in this case, `@upstream` means the version that you've pushed to GitHub, which is the same as what people will see in your pull @@ -413,7 +413,7 @@ your branch; in this case, it is `HEAD`, which is the commit that is currently checked-out in your local repo. Note that you can also use the equivalent, abbreviated form `git range-diff -master @{u} HEAD`. +main @{u} HEAD`. Unlike in regular Git diffs, you'll see a `-` or `+` next to another `-` or `+` in the range-diff output. The marker on the left indicates a change between the @@ -481,7 +481,7 @@ to follow and understand. ### Hiding whitespace Github has a button for disabling whitespace changes that may be useful. -You can also use `git diff -w origin/master` to view changes locally. +You can also use `git diff -w origin/main` to view changes locally. ![hide whitespace](./img/github-whitespace-changes.png) diff --git a/src/doc/rustc-dev-guide/src/tests/adding.md b/src/doc/rustc-dev-guide/src/tests/adding.md index b02d8a0f02077..ebbbb1cfc0d3a 100644 --- a/src/doc/rustc-dev-guide/src/tests/adding.md +++ b/src/doc/rustc-dev-guide/src/tests/adding.md @@ -1,7 +1,7 @@ # Adding new tests **In general, we expect every PR that fixes a bug in rustc to come accompanied -by a regression test of some kind.** This test should fail in master but pass +by a regression test of some kind.** This test should fail in `main` but pass after the PR. These tests are really useful for preventing us from repeating the mistakes of the past. diff --git a/src/doc/rustc-dev-guide/src/tests/ci.md b/src/doc/rustc-dev-guide/src/tests/ci.md index e41893a15f126..a30af309a54eb 100644 --- a/src/doc/rustc-dev-guide/src/tests/ci.md +++ b/src/doc/rustc-dev-guide/src/tests/ci.md @@ -1,6 +1,6 @@ # Testing with CI -The primary goal of our CI system is to ensure that the `master` branch of +The primary goal of our CI system is to ensure that the `main` branch of `rust-lang/rust` is always in a valid state by passing our test suite. From a high-level point of view, when you open a pull request at @@ -16,7 +16,7 @@ From a high-level point of view, when you open a pull request at combines multiple PRs together, to reduce CI costs and merge delays. - Once the whole test suite finishes, two things can happen. Either CI fails with an error that needs to be addressed by the developer, or CI succeeds and - the merge commit is then pushed to the `master` branch. + the merge commit is then pushed to the `main` branch. If you want to modify what gets executed on CI, see [Modifying CI jobs](#modifying-ci-jobs). @@ -93,7 +93,7 @@ directly on the PR, in the "CI checks" section at the bottom of the PR page. ### Auto builds -Before a commit can be merged into the `master` branch, it needs to pass our complete test suite. +Before a commit can be merged into the `main` branch, it needs to pass our complete test suite. We call this an `auto` build. This build runs tens of CI jobs that exercise various tests across operating systems and targets. The full test suite is quite slow; @@ -169,7 +169,7 @@ the `@bors jobs=` parameter. The job pattern needs to match one or more jobs defined in the `auto` or `optional` sections of [`jobs.yml`]: -- `auto` jobs are executed before a commit is merged into the `master` branch. +- `auto` jobs are executed before a commit is merged into the `main` branch. - `optional` jobs are executed only when explicitly requested via a try build. They are typically used for tier 2 and tier 3 targets. @@ -275,12 +275,12 @@ one or two should be sufficient in most cases. ## Merging PRs serially with bors CI services usually test the last commit of a branch merged with the last commit -in `master`, and while that’s great to check if the feature works in isolation, +in `main`, and while that’s great to check if the feature works in isolation, it doesn’t provide any guarantee the code is going to work once it’s merged. Breakages like these usually happen when another, incompatible PR is merged after the build happened. -To ensure a `master` branch that works all the time, we forbid manual merges. +To ensure a `main` branch that works all the time, we forbid manual merges. Instead, all PRs have to be approved through our bot, [bors] (the software behind it is called [homu]). All the approved PRs are put in a [merge queue] @@ -293,8 +293,8 @@ merge commit it wants to test to specific branches (like `auto` or `try`), which are configured to execute CI checks. Bors then detects the outcome of the build by listening for either Commit Statuses or Check Runs. Since the merge commit is -based on the latest `master` and only one can be tested at the same time, when -the results are green, `master` is fast-forwarded to that merge commit. +based on the latest `main` and only one can be tested at the same time, when +the results are green, `main` is fast-forwarded to that merge commit. Unfortunately, testing a single PR at a time, combined with our long CI (~2 hours for a full run), means we can’t merge a lot of PRs in a single day, and a @@ -364,7 +364,7 @@ caching], with the intermediate artifacts being stored on [ghcr.io]. We also push the built Docker images to ghcr, so that they can be reused by other tools (rustup) or by developers running the Docker build locally (to speed up their build). -Since we test multiple, diverged branches (`master`, `beta` and `stable`), we +Since we test multiple, diverged branches (`main`, `beta` and `stable`), we can’t rely on a single cache for the images, otherwise builds on a branch would override the cache for the others. Instead, we store the images under different From f6bc9d5c0592e5c31b7b2bc8b202b2e80a7ebb53 Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Wed, 12 Nov 2025 19:05:33 +0200 Subject: [PATCH 05/31] some updates and improvements ... inspired from downstream default branch name change --- src/doc/rustc-dev-guide/src/contributing.md | 2 +- src/doc/rustc-dev-guide/src/conventions.md | 2 +- src/doc/rustc-dev-guide/src/external-repos.md | 2 +- src/doc/rustc-dev-guide/src/getting-started.md | 2 +- src/doc/rustc-dev-guide/src/git.md | 4 ++-- .../src/rustdoc-internals/rustdoc-gui-test-suite.md | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/doc/rustc-dev-guide/src/contributing.md b/src/doc/rustc-dev-guide/src/contributing.md index 1b4f04dbb5ef9..8c764c31dbfa3 100644 --- a/src/doc/rustc-dev-guide/src/contributing.md +++ b/src/doc/rustc-dev-guide/src/contributing.md @@ -153,7 +153,7 @@ We have [a chapter](git.md) on how to use Git when contributing to Rust. ### Keeping your branch up-to-date -The CI in rust-lang/rust applies your patches directly against the current `main`, +The CI in rust-lang/rust applies your patches directly against current `main`, not against the commit your branch is based on. This can lead to unexpected failures if your branch is outdated, even when there are no explicit merge conflicts. diff --git a/src/doc/rustc-dev-guide/src/conventions.md b/src/doc/rustc-dev-guide/src/conventions.md index 4356cf246f89e..cce1d18506946 100644 --- a/src/doc/rustc-dev-guide/src/conventions.md +++ b/src/doc/rustc-dev-guide/src/conventions.md @@ -165,7 +165,7 @@ individually using `./x fmt`. **No merges.** We do not allow merge commits into our history, other than those by bors. If you get a merge conflict, rebase instead via a -command like `git rebase -i rust-lang/master` (presuming you use the +command like `git rebase --interactive rust-lang/main` (presuming you use the name `rust-lang` for your remote). **Individual commits do not have to build (but it's nice).** We do not diff --git a/src/doc/rustc-dev-guide/src/external-repos.md b/src/doc/rustc-dev-guide/src/external-repos.md index 6c38b3dc5e205..d2b4e791df0e2 100644 --- a/src/doc/rustc-dev-guide/src/external-repos.md +++ b/src/doc/rustc-dev-guide/src/external-repos.md @@ -114,7 +114,7 @@ A `subtree pull` takes all changes since the last `subtree pull` from the tool repo and adds these commits to the rustc repo along with a merge commit that moves the tool changes into the specified directory in the Rust repository. -It is recommended that you always do a push first and get that merged to the tool `main`/`master` branch. +It is recommended that you always do a push first and get that merged to the default branch of the tool. Then, when you do a pull, the merge works without conflicts. While it's definitely possible to resolve conflicts during a pull, you may have to redo the conflict resolution if your PR doesn't get merged fast enough and there are new conflicts. Do not try to diff --git a/src/doc/rustc-dev-guide/src/getting-started.md b/src/doc/rustc-dev-guide/src/getting-started.md index 64abd94c69e27..34bc5b59dd03c 100644 --- a/src/doc/rustc-dev-guide/src/getting-started.md +++ b/src/doc/rustc-dev-guide/src/getting-started.md @@ -140,7 +140,7 @@ You can find the list of such PRs [here][abandoned-prs]. If the PR has been implemented in some other way in the meantime, the `S-inactive` label should be removed from it. If not, and it seems that there is still interest in the change, -you can try to rebase the pull request on top of the latest `master` branch and send a new +you can try to rebase the pull request on top of the latest `main` branch and send a new pull request, continuing the work on the feature. [abandoned-prs]: https://github.com/rust-lang/rust/pulls?q=is%3Apr+label%3AS-inactive+is%3Aclosed diff --git a/src/doc/rustc-dev-guide/src/git.md b/src/doc/rustc-dev-guide/src/git.md index a01a156fa64cd..e7e84e2ea7f54 100644 --- a/src/doc/rustc-dev-guide/src/git.md +++ b/src/doc/rustc-dev-guide/src/git.md @@ -227,7 +227,7 @@ upstream/main`. The fix is to abort the rebase and use the correct branch instea ```console git rebase --abort -git rebase -i upstream/main +git rebase --interactive upstream/main ```
Click here to see an example of rebasing over the wrong branch @@ -388,7 +388,7 @@ Alternatively, you can sacrifice the commit history like this: ```console # squash all the changes into one commit so you only have to worry about conflicts once -git rebase -i --keep-base main # and squash all changes along the way +git rebase --interactive --keep-base main # and squash all changes along the way git rebase main # fix all merge conflicts git rebase --continue diff --git a/src/doc/rustc-dev-guide/src/rustdoc-internals/rustdoc-gui-test-suite.md b/src/doc/rustc-dev-guide/src/rustdoc-internals/rustdoc-gui-test-suite.md index 419f03d020a83..d18021bf278d9 100644 --- a/src/doc/rustc-dev-guide/src/rustdoc-internals/rustdoc-gui-test-suite.md +++ b/src/doc/rustc-dev-guide/src/rustdoc-internals/rustdoc-gui-test-suite.md @@ -11,4 +11,4 @@ These use a NodeJS-based tool called [`browser-UI-test`] that uses [puppeteer] t [`browser-UI-test`]: https://github.com/GuillaumeGomez/browser-UI-test/ [puppeteer]: https://pptr.dev/ [rustdoc-gui-readme]: https://github.com/rust-lang/rust/blob/HEAD/tests/rustdoc-gui/README.md -[goml-script]: https://github.com/GuillaumeGomez/browser-UI-test/blob/master/goml-script.md +[goml-script]: https://github.com/GuillaumeGomez/browser-UI-test/blob/main/goml-script.md From 7b0c21815a506e1887e7fe3637e25676b0b83c57 Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Wed, 12 Nov 2025 19:29:24 +0200 Subject: [PATCH 06/31] sembr implementing_new_features.md --- .../src/implementing_new_features.md | 66 ++++++++++++++----- 1 file changed, 48 insertions(+), 18 deletions(-) diff --git a/src/doc/rustc-dev-guide/src/implementing_new_features.md b/src/doc/rustc-dev-guide/src/implementing_new_features.md index 00bce8599e430..b8d0520bf0907 100644 --- a/src/doc/rustc-dev-guide/src/implementing_new_features.md +++ b/src/doc/rustc-dev-guide/src/implementing_new_features.md @@ -11,17 +11,25 @@ See also [the Rust Language Design Team's procedures][lang-propose] for proposin ## The @rfcbot FCP process -When the change is small, uncontroversial, non-breaking, and does not affect the stable language in any user-observable ways or add any new unstable features, then it can be done with just writing a PR and getting an r+ from someone who knows that part of the code. However, if not, more must be done. Even for compiler-internal work, it would be a bad idea to push a controversial change without consensus from the rest of the team (both in the "distributed system" sense to make sure you don't break anything you don't know about, and in the social sense to avoid PR fights). +When the change is small, uncontroversial, non-breaking, and does not affect the stable language in any user-observable ways or add any new unstable features, then it can be done with just writing a PR and getting an r+ from someone who knows that part of the code. +However, if not, more must be done. +Even for compiler-internal work, it would be a bad idea to push a controversial change without consensus from the rest of the team (both in the "distributed system" sense to make sure you don't break anything you don't know about, and in the social sense to avoid PR fights). -For changes that need the consensus of a team, we us the process of proposing a final comment period (FCP). If you're not on the relevant team (and thus don't have @rfcbot permissions), ask someone who is to start one; unless they have a concern themselves, they should. +For changes that need the consensus of a team, we us the process of proposing a final comment period (FCP). +If you're not on the relevant team (and thus don't have @rfcbot permissions), ask someone who is to start one; +unless they have a concern themselves, they should. -The FCP process is only needed if you need consensus – if no processes require consensus for your change and you don't think anyone would have a problem with it, it's OK to rely on only an r+. For example, it is OK to add or modify unstable command-line flags or attributes in the reserved compiler-internal `rustc_` namespace without an FCP for compiler development or standard library use, as long as you don't expect them to be in wide use in the nightly ecosystem. Some teams have lighter weight processes that they use in scenarios like this; for example, the compiler team recommends filing a Major Change Proposal ([MCP][mcp]) as a lightweight way to garner support and feedback without requiring full consensus. +The FCP process is only needed if you need consensus – if no processes require consensus for your change and you don't think anyone would have a problem with it, it's OK to rely on only an r+. +For example, it is OK to add or modify unstable command-line flags or attributes in the reserved compiler-internal `rustc_` namespace without an FCP for compiler development or standard library use, as long as you don't expect them to be in wide use in the nightly ecosystem. +Some teams have lighter weight processes that they use in scenarios like this; +for example, the compiler team recommends filing a Major Change Proposal ([MCP][mcp]) as a lightweight way to garner support and feedback without requiring full consensus. [mcp]: https://forge.rust-lang.org/compiler/proposals-and-stabilization.html#how-do-i-submit-an-mcp You don't need to have the implementation fully ready for r+ to propose an FCP, but it is generally a good idea to have at least a proof of concept so that people can see what you are talking about. -When an FCP is proposed, it requires all members of the team to sign off on the FCP. After they all do so, there's a 10-day-long "final comment period" (hence the name) where everybody can comment, and if no concerns are raised, the PR/issue gets FCP approval. +When an FCP is proposed, it requires all members of the team to sign off on the FCP. +After they all do so, there's a 10-day-long "final comment period" (hence the name) where everybody can comment, and if no concerns are raised, the PR/issue gets FCP approval. ## The logistics of writing features @@ -29,27 +37,36 @@ There are a few "logistical" hoops you might need to go through in order to impl ### Warning Cycles -In some cases, a feature or bugfix might break some existing programs in some edge cases. In that case, you'll want to do a crater run to assess the impact and possibly add a future-compatibility lint, similar to those used for [edition-gated lints](diagnostics.md#edition-gated-lints). +In some cases, a feature or bugfix might break some existing programs in some edge cases. +In that case, you'll want to do a crater run to assess the impact and possibly add a future-compatibility lint, similar to those used for [edition-gated lints](diagnostics.md#edition-gated-lints). ### Stability -We [value the stability of Rust]. Code that works and runs on stable should (mostly) not break. Because of that, we don't want to release a feature to the world with only team consensus and code review - we want to gain real-world experience on using that feature on nightly, and we might want to change the feature based on that experience. +We [value the stability of Rust]. +Code that works and runs on stable should (mostly) not break. +Because of that, we don't want to release a feature to the world with only team consensus and code review - we want to gain real-world experience on using that feature on nightly, and we might want to change the feature based on that experience. To allow for that, we must make sure users don't accidentally depend on that new feature - otherwise, especially if experimentation takes time or is delayed and the feature takes the trains to stable, it would end up de facto stable and we'll not be able to make changes in it without breaking people's code. -The way we do that is that we make sure all new features are feature gated - they can't be used without enabling a feature gate (`#[feature(foo)]`), which can't be done in a stable/beta compiler. See the [stability in code] section for the technical details. +The way we do that is that we make sure all new features are feature gated - they can't be used without enabling a feature gate (`#[feature(foo)]`), which can't be done in a stable/beta compiler. +See the [stability in code] section for the technical details. -Eventually, after we gain enough experience using the feature, make the necessary changes, and are satisfied, we expose it to the world using the stabilization process described [here]. Until then, the feature is not set in stone: every part of the feature can be changed, or the feature might be completely rewritten or removed. Features do not gain tenure by being unstable and unchanged for long periods of time. +Eventually, after we gain enough experience using the feature, make the necessary changes, and are satisfied, we expose it to the world using the stabilization process described [here]. +Until then, the feature is not set in stone: every part of the feature can be changed, or the feature might be completely rewritten or removed. +Features do not gain tenure by being unstable and unchanged for long periods of time. ### Tracking Issues To keep track of the status of an unstable feature, the experience we get while using it on nightly, and of the concerns that block its stabilization, every feature-gate needs a tracking -issue. When creating issues and PRs related to the feature, reference this tracking issue, and when there are updates about the feature's progress, post those to the tracking issue. +issue. +When creating issues and PRs related to the feature, reference this tracking issue, and when there are updates about the feature's progress, post those to the tracking issue. For features that are part of an accept RFC or approved lang experiment, use the tracking issue for that. -For other features, create a tracking issue for that feature. The issue title should be "Tracking issue for YOUR FEATURE". Use the ["Tracking Issue" issue template][template]. +For other features, create a tracking issue for that feature. +The issue title should be "Tracking issue for YOUR FEATURE". +Use the ["Tracking Issue" issue template][template]. [template]: https://github.com/rust-lang/rust/issues/new?template=tracking_issue.md @@ -57,7 +74,10 @@ For other features, create a tracking issue for that feature. The issue title sh To land in the compiler, features that have user-visible effects on the language (even unstable ones) must either be part of an accepted RFC or an approved [lang experiment]. -To propose a new lang experiment, open an issue in `rust-lang/rust` that describes the motivation and the intended solution. If it's accepted, this issue will become the tracking issue for the experiment, so use the tracking issue [template] while also including these other details. Nominate the issue for the lang team and CC `@rust-lang/lang` and `@rust-lang/lang-advisors`. When the experiment is approved, the tracking issue will be marked as `B-experimental`. +To propose a new lang experiment, open an issue in `rust-lang/rust` that describes the motivation and the intended solution. +If it's accepted, this issue will become the tracking issue for the experiment, so use the tracking issue [template] while also including these other details. +Nominate the issue for the lang team and CC `@rust-lang/lang` and `@rust-lang/lang-advisors`. +When the experiment is approved, the tracking issue will be marked as `B-experimental`. Feature flags related to a lang experiment must be marked as `incomplete` until an RFC is accepted for the feature. @@ -110,11 +130,15 @@ The below steps needs to be followed in order to implement a new unstable featur 1. Prevent usage of the new feature unless the feature gate is set. You can check it in most places in the compiler using the expression `tcx.features().$feature_name()`. - If the feature gate is not set, you should either maintain the pre-feature behavior or raise an error, depending on what makes sense. Errors should generally use [`rustc_session::parse::feature_err`]. For an example of adding an error, see [#81015]. + If the feature gate is not set, you should either maintain the pre-feature behavior or raise an error, depending on what makes sense. + Errors should generally use [`rustc_session::parse::feature_err`]. + For an example of adding an error, see [#81015]. - For features introducing new syntax, pre-expansion gating should be used instead. During parsing, when the new syntax is parsed, the symbol must be inserted to the current crate's [`GatedSpans`] via `self.sess.gated_span.gate(sym::my_feature, span)`. + For features introducing new syntax, pre-expansion gating should be used instead. + During parsing, when the new syntax is parsed, the symbol must be inserted to the current crate's [`GatedSpans`] via `self.sess.gated_span.gate(sym::my_feature, span)`. - After being inserted to the gated spans, the span must be checked in the [`rustc_ast_passes::feature_gate::check_crate`] function, which actually denies features. Exactly how it is gated depends on the exact type of feature, but most likely will use the `gate_all!()` macro. + After being inserted to the gated spans, the span must be checked in the [`rustc_ast_passes::feature_gate::check_crate`] function, which actually denies features. + Exactly how it is gated depends on the exact type of feature, but most likely will use the `gate_all!()` macro. 1. Add a test to ensure the feature cannot be used without a feature gate, by creating `tests/ui/feature-gates/feature-gate-$feature_name.rs`. You can generate the corresponding `.stderr` file by running `./x test tests/ui/feature-gates/ --bless`. @@ -136,7 +160,8 @@ The below steps needs to be followed in order to implement a new unstable featur ## Call for testing -Once the implementation is complete, the feature will be available to nightly users but not yet part of stable Rust. This is a good time to write a blog post on [the main Rust blog][rust-blog] and issue a "call for testing". +Once the implementation is complete, the feature will be available to nightly users but not yet part of stable Rust. +This is a good time to write a blog post on [the main Rust blog][rust-blog] and issue a "call for testing". Some earlier such blog posts include: @@ -144,7 +169,8 @@ Some earlier such blog posts include: 2. [Changes to `impl Trait` in Rust 2024](https://blog.rust-lang.org/2024/09/05/impl-trait-capture-rules.html) 3. [Async Closures MVP: Call for Testing!](https://blog.rust-lang.org/inside-rust/2024/08/09/async-closures-call-for-testing/) -Alternatively, [*This Week in Rust*][twir] has a [section][twir-cft] for this. One example of this having been used is: +Alternatively, [*This Week in Rust*][twir] has a [section][twir-cft] for this. +One example of this having been used is: - [Call for testing on boolean literals as cfg predicates](https://github.com/rust-lang/rust/issues/131204#issuecomment-2569314526) @@ -152,7 +178,9 @@ Which option to choose might depend on how significant the language change is, t ## Polishing -Giving users a polished experience means more than just implementing the feature in rustc. We need to think about all of the tools and resources that we ship. This work includes: +Giving users a polished experience means more than just implementing the feature in rustc. +We need to think about all of the tools and resources that we ship. +This work includes: - Documenting the language feature in the [Rust Reference][reference]. - Extending [`rustfmt`] to format any new syntax (if applicable). @@ -162,7 +190,9 @@ Giving users a polished experience means more than just implementing the feature ## Stabilization -The final step in the feature lifecycle is [stabilization][stab], which is when the feature becomes available to all Rust users. At this point, backward incompatible changes are generally no longer permitted (see the lang team's [defined semver policies](https://rust-lang.github.io/rfcs/1122-language-semver.html) for details). To learn more about stabilization, see the [stabilization guide][stab]. +The final step in the feature lifecycle is [stabilization][stab], which is when the feature becomes available to all Rust users. +At this point, backward incompatible changes are generally no longer permitted (see the lang team's [defined semver policies](https://rust-lang.github.io/rfcs/1122-language-semver.html) for details). +To learn more about stabilization, see the [stabilization guide][stab]. [stab]: ./stabilization_guide.md From 4a845a60e3e7c09ac8844c1d07083c02ce171551 Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Wed, 12 Nov 2025 19:50:43 +0200 Subject: [PATCH 07/31] typo --- src/doc/rustc-dev-guide/src/implementing_new_features.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/doc/rustc-dev-guide/src/implementing_new_features.md b/src/doc/rustc-dev-guide/src/implementing_new_features.md index b8d0520bf0907..b45440ea3da84 100644 --- a/src/doc/rustc-dev-guide/src/implementing_new_features.md +++ b/src/doc/rustc-dev-guide/src/implementing_new_features.md @@ -15,7 +15,7 @@ When the change is small, uncontroversial, non-breaking, and does not affect the However, if not, more must be done. Even for compiler-internal work, it would be a bad idea to push a controversial change without consensus from the rest of the team (both in the "distributed system" sense to make sure you don't break anything you don't know about, and in the social sense to avoid PR fights). -For changes that need the consensus of a team, we us the process of proposing a final comment period (FCP). +For changes that need the consensus of a team, we use the process of proposing a final comment period (FCP). If you're not on the relevant team (and thus don't have @rfcbot permissions), ask someone who is to start one; unless they have a concern themselves, they should. From de3b0537d622f41a871176ccc16ef625aea7aaee Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Wed, 12 Nov 2025 19:51:28 +0200 Subject: [PATCH 08/31] add date marker --- src/doc/rustc-dev-guide/src/implementing_new_features.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/doc/rustc-dev-guide/src/implementing_new_features.md b/src/doc/rustc-dev-guide/src/implementing_new_features.md index b45440ea3da84..19babcceda1fd 100644 --- a/src/doc/rustc-dev-guide/src/implementing_new_features.md +++ b/src/doc/rustc-dev-guide/src/implementing_new_features.md @@ -1,3 +1,5 @@ + + # Implementing new language features When you want to implement a new significant feature in the compiler, you need to go through this process to make sure everything goes smoothly. From 407da40e932d6ab76cbeb7fdce6ba212958c6531 Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Wed, 12 Nov 2025 22:52:39 +0200 Subject: [PATCH 09/31] reduce overlong physical lines --- .../src/implementing_new_features.md | 186 +++++++++++++----- 1 file changed, 133 insertions(+), 53 deletions(-) diff --git a/src/doc/rustc-dev-guide/src/implementing_new_features.md b/src/doc/rustc-dev-guide/src/implementing_new_features.md index 19babcceda1fd..88375446afefd 100644 --- a/src/doc/rustc-dev-guide/src/implementing_new_features.md +++ b/src/doc/rustc-dev-guide/src/implementing_new_features.md @@ -2,9 +2,11 @@ # Implementing new language features -When you want to implement a new significant feature in the compiler, you need to go through this process to make sure everything goes smoothly. +When you want to implement a new significant feature in the compiler, +you need to go through this process to make sure everything goes smoothly. -**NOTE: This section is for *language* features, not *library* features, which use [a different process].** +**NOTE: This section is for *language* features, not *library* features, +which use [a different process].** See also [the Rust Language Design Team's procedures][lang-propose] for proposing changes to the language. @@ -13,58 +15,95 @@ See also [the Rust Language Design Team's procedures][lang-propose] for proposin ## The @rfcbot FCP process -When the change is small, uncontroversial, non-breaking, and does not affect the stable language in any user-observable ways or add any new unstable features, then it can be done with just writing a PR and getting an r+ from someone who knows that part of the code. +When the change is small, uncontroversial, non-breaking, +and does not affect the stable language in any user-observable ways or add any new unstable features, +then it can be done with just writing a PR and getting an r+ from someone who knows that part of the code. However, if not, more must be done. -Even for compiler-internal work, it would be a bad idea to push a controversial change without consensus from the rest of the team (both in the "distributed system" sense to make sure you don't break anything you don't know about, and in the social sense to avoid PR fights). - -For changes that need the consensus of a team, we use the process of proposing a final comment period (FCP). -If you're not on the relevant team (and thus don't have @rfcbot permissions), ask someone who is to start one; +Even for compiler-internal work, +it would be a bad idea to push a controversial change without consensus from the rest of the team +(both in the "distributed system" sense to make sure you don't break anything you don't know about, +and in the social sense to avoid PR fights). + +For changes that need the consensus of a team, +we use the process of proposing a final comment period (FCP). +If you're not on the relevant team (and thus don't have @rfcbot permissions), +ask someone who is to start one; unless they have a concern themselves, they should. -The FCP process is only needed if you need consensus – if no processes require consensus for your change and you don't think anyone would have a problem with it, it's OK to rely on only an r+. -For example, it is OK to add or modify unstable command-line flags or attributes in the reserved compiler-internal `rustc_` namespace without an FCP for compiler development or standard library use, as long as you don't expect them to be in wide use in the nightly ecosystem. +The FCP process is only needed if you need consensus – +if no processes require consensus for your change +and you don't think anyone would have a problem with it, it's OK to rely on only an r+. +For example, +it is OK to add or modify unstable command-line flags +or attributes in the reserved compiler-internal `rustc_` namespace +without an FCP for compiler development or standard library use, +as long as you don't expect them to be in wide use in the nightly ecosystem. Some teams have lighter weight processes that they use in scenarios like this; -for example, the compiler team recommends filing a Major Change Proposal ([MCP][mcp]) as a lightweight way to garner support and feedback without requiring full consensus. +for example, +the compiler team recommends filing a Major Change Proposal ([MCP][mcp]) +as a lightweight way to garner support and feedback without requiring full consensus. [mcp]: https://forge.rust-lang.org/compiler/proposals-and-stabilization.html#how-do-i-submit-an-mcp -You don't need to have the implementation fully ready for r+ to propose an FCP, but it is generally a good idea to have at least a proof of concept so that people can see what you are talking about. +You don't need to have the implementation fully ready for r+ to propose an FCP, +but it is generally a good idea to have at least a proof of concept +so that people can see what you are talking about. When an FCP is proposed, it requires all members of the team to sign off on the FCP. -After they all do so, there's a 10-day-long "final comment period" (hence the name) where everybody can comment, and if no concerns are raised, the PR/issue gets FCP approval. +After they all do so, +there's a 10-day-long "final comment period" (hence the name) where everybody can comment, +and if no concerns are raised, the PR/issue gets FCP approval. ## The logistics of writing features -There are a few "logistical" hoops you might need to go through in order to implement a feature in a working way. +There are a few "logistical" hoops you might need to go through +in order to implement a feature in a working way. ### Warning Cycles In some cases, a feature or bugfix might break some existing programs in some edge cases. -In that case, you'll want to do a crater run to assess the impact and possibly add a future-compatibility lint, similar to those used for [edition-gated lints](diagnostics.md#edition-gated-lints). +In that case, +you'll want to do a crater run to assess the impact and possibly add a future-compatibility lint, +similar to those used for [edition-gated lints](diagnostics.md#edition-gated-lints). ### Stability We [value the stability of Rust]. Code that works and runs on stable should (mostly) not break. -Because of that, we don't want to release a feature to the world with only team consensus and code review - we want to gain real-world experience on using that feature on nightly, and we might want to change the feature based on that experience. - -To allow for that, we must make sure users don't accidentally depend on that new feature - otherwise, especially if experimentation takes time or is delayed and the feature takes the trains to stable, it would end up de facto stable and we'll not be able to make changes in it without breaking people's code. - -The way we do that is that we make sure all new features are feature gated - they can't be used without enabling a feature gate (`#[feature(foo)]`), which can't be done in a stable/beta compiler. +Because of that, +we don't want to release a feature to the world with only team consensus and code review - +we want to gain real-world experience on using that feature on nightly, +and we might want to change the feature based on that experience. + +To allow for that, +we must make sure users don't accidentally depend on that new feature - +otherwise, +especially if experimentation takes time or is delayed and the feature takes the trains to stable, +it would end up de facto stable +and we'll not be able to make changes in it without breaking people's code. + +The way we do that is that we make sure all new features are feature gated - +they can't be used without enabling a feature gate (`#[feature(foo)]`), +which can't be done in a stable/beta compiler. See the [stability in code] section for the technical details. -Eventually, after we gain enough experience using the feature, make the necessary changes, and are satisfied, we expose it to the world using the stabilization process described [here]. -Until then, the feature is not set in stone: every part of the feature can be changed, or the feature might be completely rewritten or removed. +Eventually, after we gain enough experience using the feature, make the necessary changes, +and are satisfied, we expose it to the world using the stabilization process described [here]. +Until then, the feature is not set in stone: +every part of the feature can be changed, or the feature might be completely rewritten or removed. Features do not gain tenure by being unstable and unchanged for long periods of time. ### Tracking Issues -To keep track of the status of an unstable feature, the experience we get while using it on -nightly, and of the concerns that block its stabilization, every feature-gate needs a tracking -issue. -When creating issues and PRs related to the feature, reference this tracking issue, and when there are updates about the feature's progress, post those to the tracking issue. +To keep track of the status of an unstable feature, +the experience we get while using it on nightly, +and of the concerns that block its stabilization, +every feature-gate needs a tracking issue. +When creating issues and PRs related to the feature, reference this tracking issue, +and when there are updates about the feature's progress, post those to the tracking issue. -For features that are part of an accept RFC or approved lang experiment, use the tracking issue for that. +For features that are part of an accept RFC or approved lang experiment, +use the tracking issue for that. For other features, create a tracking issue for that feature. The issue title should be "Tracking issue for YOUR FEATURE". @@ -74,14 +113,19 @@ Use the ["Tracking Issue" issue template][template]. ### Lang experiments -To land in the compiler, features that have user-visible effects on the language (even unstable ones) must either be part of an accepted RFC or an approved [lang experiment]. +To land in the compiler, +features that have user-visible effects on the language (even unstable ones) +must either be part of an accepted RFC or an approved [lang experiment]. -To propose a new lang experiment, open an issue in `rust-lang/rust` that describes the motivation and the intended solution. -If it's accepted, this issue will become the tracking issue for the experiment, so use the tracking issue [template] while also including these other details. +To propose a new lang experiment, +open an issue in `rust-lang/rust` that describes the motivation and the intended solution. +If it's accepted, this issue will become the tracking issue for the experiment, +so use the tracking issue [template] while also including these other details. Nominate the issue for the lang team and CC `@rust-lang/lang` and `@rust-lang/lang-advisors`. When the experiment is approved, the tracking issue will be marked as `B-experimental`. -Feature flags related to a lang experiment must be marked as `incomplete` until an RFC is accepted for the feature. +Feature flags related to a lang experiment must be marked as `incomplete` +until an RFC is accepted for the feature. [lang experiment]: https://lang-team.rust-lang.org/how_to/experiment.html @@ -89,9 +133,12 @@ Feature flags related to a lang experiment must be marked as `incomplete` until The below steps needs to be followed in order to implement a new unstable feature: -1. Open or identify the [tracking issue]. For features that are part of an accept RFC or approved lang experiment, use the tracking issue for that. +1. Open or identify the [tracking issue]. + For features that are part of an accept RFC or approved lang experiment, + use the tracking issue for that. - Label the tracking issue with `C-tracking-issue` and the relevant `F-feature_name` label (adding that label if needed). + Label the tracking issue with `C-tracking-issue` and the relevant `F-feature_name` label + (adding that label if needed). 1. Pick a name for the feature gate (for RFCs, use the name in the RFC). @@ -99,14 +146,17 @@ The below steps needs to be followed in order to implement a new unstable featur Note that this block must be in alphabetical order. -1. Add a feature gate declaration to `rustc_feature/src/unstable.rs` in the unstable `declare_features` block. +1. Add a feature gate declaration to `rustc_feature/src/unstable.rs` + in the unstable `declare_features` block. ```rust ignore /// description of feature (unstable, $feature_name, "CURRENT_RUSTC_VERSION", Some($tracking_issue_number)) ``` - If you haven't yet opened a tracking issue (e.g. because you want initial feedback on whether the feature is likely to be accepted), you can temporarily use `None` - but make sure to update it before the PR is merged! + If you haven't yet opened a tracking issue + (e.g. because you want initial feedback on whether the feature is likely to be accepted), + you can temporarily use `None` - but make sure to update it before the PR is merged! For example: @@ -115,7 +165,9 @@ The below steps needs to be followed in order to implement a new unstable featur (unstable, non_ascii_idents, "CURRENT_RUSTC_VERSION", Some(55467), None), ``` - Features can be marked as incomplete, and trigger the warn-by-default [`incomplete_features` lint] by setting their type to `incomplete`: + Features can be marked as incomplete, + and trigger the warn-by-default [`incomplete_features` lint] + by setting their type to `incomplete`: [`incomplete_features` lint]: https://doc.rust-lang.org/rustc/lints/listing/warn-by-default.html#incomplete-features @@ -124,29 +176,45 @@ The below steps needs to be followed in order to implement a new unstable featur (incomplete, deref_patterns, "CURRENT_RUSTC_VERSION", Some(87121), None), ``` - Feature flags related to a lang experiment must be marked as `incomplete` until an RFC is accepted for the feature. + Feature flags related to a lang experiment must be marked as `incomplete` + until an RFC is accepted for the feature. - To avoid [semantic merge conflicts], use `CURRENT_RUSTC_VERSION` instead of `1.70` or another explicit version number. + To avoid [semantic merge conflicts], + use `CURRENT_RUSTC_VERSION` instead of `1.70` or another explicit version number. [semantic merge conflicts]: https://bors.tech/essay/2017/02/02/pitch/ -1. Prevent usage of the new feature unless the feature gate is set. You can check it in most places in the compiler using the expression `tcx.features().$feature_name()`. +1. Prevent usage of the new feature unless the feature gate is set. + You can check it in most places in the compiler + using the expression `tcx.features().$feature_name()`. - If the feature gate is not set, you should either maintain the pre-feature behavior or raise an error, depending on what makes sense. + If the feature gate is not set, + you should either maintain the pre-feature behavior or raise an error, + depending on what makes sense. Errors should generally use [`rustc_session::parse::feature_err`]. For an example of adding an error, see [#81015]. For features introducing new syntax, pre-expansion gating should be used instead. - During parsing, when the new syntax is parsed, the symbol must be inserted to the current crate's [`GatedSpans`] via `self.sess.gated_span.gate(sym::my_feature, span)`. + During parsing, when the new syntax is parsed, + the symbol must be inserted to the current crate's [`GatedSpans`] + via `self.sess.gated_span.gate(sym::my_feature, span)`. - After being inserted to the gated spans, the span must be checked in the [`rustc_ast_passes::feature_gate::check_crate`] function, which actually denies features. - Exactly how it is gated depends on the exact type of feature, but most likely will use the `gate_all!()` macro. + After being inserted to the gated spans, + the span must be checked in the [`rustc_ast_passes::feature_gate::check_crate`] function, + which actually denies features. + Exactly how it is gated depends on the exact type of feature, + but most likely will use the `gate_all!()` macro. -1. Add a test to ensure the feature cannot be used without a feature gate, by creating `tests/ui/feature-gates/feature-gate-$feature_name.rs`. You can generate the corresponding `.stderr` file by running `./x test tests/ui/feature-gates/ --bless`. +1. Add a test to ensure the feature cannot be used without a feature gate, + by creating `tests/ui/feature-gates/feature-gate-$feature_name.rs`. + You can generate the corresponding `.stderr` file + by running `./x test tests/ui/feature-gates/ --bless`. -1. Add a section to the unstable book, in `src/doc/unstable-book/src/language-features/$feature_name.md`. +1. Add a section to the unstable book, + in `src/doc/unstable-book/src/language-features/$feature_name.md`. -1. Write a lot of tests for the new feature, preferably in `tests/ui/$feature_name/`. PRs without tests will not be accepted! +1. Write a lot of tests for the new feature, preferably in `tests/ui/$feature_name/`. + PRs without tests will not be accepted! 1. Get your PR reviewed and land it. You have now successfully implemented a feature in Rust! @@ -162,8 +230,10 @@ The below steps needs to be followed in order to implement a new unstable featur ## Call for testing -Once the implementation is complete, the feature will be available to nightly users but not yet part of stable Rust. -This is a good time to write a blog post on [the main Rust blog][rust-blog] and issue a "call for testing". +Once the implementation is complete, +the feature will be available to nightly users but not yet part of stable Rust. +This is a good time to write a blog post on [the main Rust blog][rust-blog] +and issue a "call for testing". Some earlier such blog posts include: @@ -176,7 +246,9 @@ One example of this having been used is: - [Call for testing on boolean literals as cfg predicates](https://github.com/rust-lang/rust/issues/131204#issuecomment-2569314526) -Which option to choose might depend on how significant the language change is, though note that the [*This Week in Rust*][twir] section might be less visible than a dedicated post on the main Rust blog. +Which option to choose might depend on how significant the language change is, +though note that the [*This Week in Rust*][twir] section might be less visible +than a dedicated post on the main Rust blog. ## Polishing @@ -186,14 +258,22 @@ This work includes: - Documenting the language feature in the [Rust Reference][reference]. - Extending [`rustfmt`] to format any new syntax (if applicable). -- Extending [`rust-analyzer`] (if applicable). The extent of this work can depend on the nature of the language feature, as some features don't need to be blocked on *full* support. - - When a language feature degrades the user experience simply by existing before support is implemented in [`rust-analyzer`], that may lead the lang team to raise a blocking concern. - - Examples of such might include new syntax that [`rust-analyzer`] can't parse or type inference changes it doesn't understand when those lead to bogus diagnostics. +- Extending [`rust-analyzer`] (if applicable). + The extent of this work can depend on the nature of the language feature, + as some features don't need to be blocked on *full* support. + - When a language feature degrades the user experience + simply by existing before support is implemented in [`rust-analyzer`], + that may lead the lang team to raise a blocking concern. + - Examples of such might include new syntax that [`rust-analyzer`] can't parse + or type inference changes it doesn't understand when those lead to bogus diagnostics. ## Stabilization -The final step in the feature lifecycle is [stabilization][stab], which is when the feature becomes available to all Rust users. -At this point, backward incompatible changes are generally no longer permitted (see the lang team's [defined semver policies](https://rust-lang.github.io/rfcs/1122-language-semver.html) for details). +The final step in the feature lifecycle is [stabilization][stab], +which is when the feature becomes available to all Rust users. +At this point, +backward incompatible changes are generally no longer permitted +(see the lang team's [defined semver policies](https://rust-lang.github.io/rfcs/1122-language-semver.html) for details). To learn more about stabilization, see the [stabilization guide][stab]. From 0f497cea9a891cd85953aa1968bf0b6f31aaf258 Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Wed, 12 Nov 2025 23:06:49 +0200 Subject: [PATCH 10/31] needless repetition --- src/doc/rustc-dev-guide/src/implementing_new_features.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/doc/rustc-dev-guide/src/implementing_new_features.md b/src/doc/rustc-dev-guide/src/implementing_new_features.md index 88375446afefd..c3e8c0c066234 100644 --- a/src/doc/rustc-dev-guide/src/implementing_new_features.md +++ b/src/doc/rustc-dev-guide/src/implementing_new_features.md @@ -40,10 +40,10 @@ without an FCP for compiler development or standard library use, as long as you don't expect them to be in wide use in the nightly ecosystem. Some teams have lighter weight processes that they use in scenarios like this; for example, -the compiler team recommends filing a Major Change Proposal ([MCP][mcp]) +the compiler team recommends filing a Major Change Proposal ([MCP]) as a lightweight way to garner support and feedback without requiring full consensus. -[mcp]: https://forge.rust-lang.org/compiler/proposals-and-stabilization.html#how-do-i-submit-an-mcp +[MCP]: https://forge.rust-lang.org/compiler/proposals-and-stabilization.html#how-do-i-submit-an-mcp You don't need to have the implementation fully ready for r+ to propose an FCP, but it is generally a good idea to have at least a proof of concept From 6d42077573a8fa799c258caf745696d605be35e3 Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Thu, 13 Nov 2025 02:01:33 +0200 Subject: [PATCH 11/31] do not ignore lines that are list entries --- src/doc/rustc-dev-guide/ci/sembr/src/main.rs | 47 +++++++++++++------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/src/doc/rustc-dev-guide/ci/sembr/src/main.rs b/src/doc/rustc-dev-guide/ci/sembr/src/main.rs index b50190c78b7b2..23b9fc9f67d12 100644 --- a/src/doc/rustc-dev-guide/ci/sembr/src/main.rs +++ b/src/doc/rustc-dev-guide/ci/sembr/src/main.rs @@ -22,13 +22,14 @@ struct Cli { show_diff: bool, } -static REGEX_IGNORE: LazyLock = - LazyLock::new(|| Regex::new(r"^\s*(\d\.|\-|\*)\s+").unwrap()); static REGEX_IGNORE_END: LazyLock = LazyLock::new(|| Regex::new(r"(\.|\?|;|!)$").unwrap()); static REGEX_IGNORE_LINK_TARGETS: LazyLock = LazyLock::new(|| Regex::new(r"^\[.+\]: ").unwrap()); static REGEX_SPLIT: LazyLock = - LazyLock::new(|| Regex::new(r"([^\.]\.|[^r]\?|;|!)\s+").unwrap()); + LazyLock::new(|| Regex::new(r"([^\.\d\-\*]\.|[^r]\?|;|!)\s").unwrap()); +// list elements, numbered (1.) or not (- and *) +static REGEX_LIST_ENTRY: LazyLock = + LazyLock::new(|| Regex::new(r"^\s*(\d\.|\-|\*)\s+").unwrap()); fn main() -> Result<()> { let cli = Cli::parse(); @@ -99,7 +100,6 @@ fn ignore(line: &str, in_code_block: bool) -> bool { || line.trim_start().starts_with('>') || line.starts_with('#') || line.trim().is_empty() - || REGEX_IGNORE.is_match(line) || REGEX_IGNORE_LINK_TARGETS.is_match(line) } @@ -120,11 +120,19 @@ fn comply(content: &str) -> String { continue; } if REGEX_SPLIT.is_match(&line) { - let indent = line.find(|ch: char| !ch.is_whitespace()).unwrap(); - let new_lines: Vec<_> = line - .split_inclusive(&*REGEX_SPLIT) - .map(|portion| format!("{:indent$}{}", "", portion.trim())) + let indent = if let Some(regex_match) = REGEX_LIST_ENTRY.find(&line) { + regex_match.len() + } else { + line.find(|ch: char| !ch.is_whitespace()).unwrap() + }; + let mut newly_split_lines = line.split_inclusive(&*REGEX_SPLIT); + let first = newly_split_lines.next().unwrap().trim_end().to_owned(); + let mut remaining: Vec<_> = newly_split_lines + .map(|portion| format!("{:indent$}{}", "", portion.trim_end())) .collect(); + let mut new_lines = Vec::new(); + new_lines.push(first); + new_lines.append(&mut remaining); new_content.splice(new_n..=new_n, new_lines.clone()); new_n += new_lines.len() - 1; } @@ -184,40 +192,45 @@ fn lengthen_lines(content: &str, limit: usize) -> String { fn test_sembr() { let original = "\ # some. heading -must! be; split? and. normalizes space -1. ignore numbered +must! be; split? +1. ignore a dot after number. but no further ignore | tables ignore e.g. and ignore i.e. and ignore E.g. too -- ignore. list -* ignore. list +- list. entry + * list. entry ``` some code. block ``` sentence with *italics* should not be ignored. truly. git log main.. compiler + foo. bar. baz "; let expected = "\ # some. heading must! be; split? -and. -normalizes space -1. ignore numbered +1. ignore a dot after number. + but no further ignore | tables ignore e.g. and ignore i.e. and ignore E.g. too -- ignore. list -* ignore. list +- list. + entry + * list. + entry ``` some code. block ``` sentence with *italics* should not be ignored. truly. git log main.. compiler + foo. + bar. + baz "; assert_eq!(expected, comply(original)); } From e4ef199039bd5e923446fe188013c8ea7df80570 Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Thu, 13 Nov 2025 02:03:18 +0200 Subject: [PATCH 12/31] avoid surprising string handling behavior --- src/doc/rustc-dev-guide/ci/sembr/src/main.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/doc/rustc-dev-guide/ci/sembr/src/main.rs b/src/doc/rustc-dev-guide/ci/sembr/src/main.rs index 23b9fc9f67d12..d8f20327b82d6 100644 --- a/src/doc/rustc-dev-guide/ci/sembr/src/main.rs +++ b/src/doc/rustc-dev-guide/ci/sembr/src/main.rs @@ -190,7 +190,7 @@ fn lengthen_lines(content: &str, limit: usize) -> String { #[test] fn test_sembr() { - let original = "\ + let original = " # some. heading must! be; split? 1. ignore a dot after number. but no further @@ -207,7 +207,7 @@ sentence with *italics* should not be ignored. truly. git log main.. compiler foo. bar. baz "; - let expected = "\ + let expected = " # some. heading must! be; @@ -276,13 +276,13 @@ fn test_prettify_ignore_link_targets() { #[test] fn test_sembr_then_prettify() { - let original = "\ + let original = " hi there. do not split short sentences. hi again. "; - let expected = "\ + let expected = " hi there. do not split @@ -291,7 +291,7 @@ hi again. "; let processed = comply(original); assert_eq!(expected, processed); - let expected = "\ + let expected = " hi there. do not split short sentences. @@ -299,7 +299,7 @@ hi again. "; let processed = lengthen_lines(&processed, 50); assert_eq!(expected, processed); - let expected = "\ + let expected = " hi there. do not split short sentences. hi again. @@ -310,12 +310,12 @@ hi again. #[test] fn test_sembr_question_mark() { - let original = "\ + let original = " o? whatever r? @reviewer r? @reviewer "; - let expected = "\ + let expected = " o? whatever r? @reviewer From 5517b2c1fd7e7c83f63f9b4f98a068399ae433bd Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Thu, 13 Nov 2025 02:09:12 +0200 Subject: [PATCH 13/31] sembr src/stabilization_guide.md --- .../src/stabilization_guide.md | 56 +++++++++++++------ 1 file changed, 40 insertions(+), 16 deletions(-) diff --git a/src/doc/rustc-dev-guide/src/stabilization_guide.md b/src/doc/rustc-dev-guide/src/stabilization_guide.md index c4b265ba034f7..c205531ad2db9 100644 --- a/src/doc/rustc-dev-guide/src/stabilization_guide.md +++ b/src/doc/rustc-dev-guide/src/stabilization_guide.md @@ -1,10 +1,12 @@ # Request for stabilization -**NOTE**: This page is about stabilizing *language* features. For stabilizing *library* features, see [Stabilizing a library feature]. +**NOTE**: This page is about stabilizing *language* features. +For stabilizing *library* features, see [Stabilizing a library feature]. [Stabilizing a library feature]: ./stability.md#stabilizing-a-library-feature -Once an unstable feature has been well-tested with no outstanding concerns, anyone may push for its stabilization, though involving the people who have worked on it is prudent. Follow these steps: +Once an unstable feature has been well-tested with no outstanding concerns, anyone may push for its stabilization, though involving the people who have worked on it is prudent. +Follow these steps: ## Write an RFC, if needed @@ -16,16 +18,23 @@ If the feature was part of a [lang experiment], the lang team generally will wan -The feature might be documented in the [`Unstable Book`], located at [`src/doc/unstable-book`]. Remove the page for the feature gate if it exists. Integrate any useful parts of that documentation in other places. +The feature might be documented in the [`Unstable Book`], located at [`src/doc/unstable-book`]. +Remove the page for the feature gate if it exists. +Integrate any useful parts of that documentation in other places. Places that may need updated documentation include: - [The Reference]: This must be updated, in full detail, and a member of the lang-docs team must review and approve the PR before the stabilization can be merged. -- [The Book]: This is updated as needed. If you're not sure, please open an issue on this repository and it can be discussed. -- Standard library documentation: This is updated as needed. Language features often don't need this, but if it's a feature that changes how idiomatic examples are written, such as when `?` was added to the language, updating these in the library documentation is important. Review also the keyword documentation and ABI documentation in the standard library, as these sometimes needs updates for language changes. +- [The Book]: This is updated as needed. + If you're not sure, please open an issue on this repository and it can be discussed. +- Standard library documentation: This is updated as needed. + Language features often don't need this, but if it's a feature that changes how idiomatic examples are written, such as when `?` was added to the language, updating these in the library documentation is important. + Review also the keyword documentation and ABI documentation in the standard library, as these sometimes needs updates for language changes. - [Rust by Example]: This is updated as needed. -Prepare PRs to update documentation involving this new feature for the repositories mentioned above. Maintainers of these repositories will keep these PRs open until the whole stabilization process has completed. Meanwhile, we can proceed to the next step. +Prepare PRs to update documentation involving this new feature for the repositories mentioned above. +Maintainers of these repositories will keep these PRs open until the whole stabilization process has completed. +Meanwhile, we can proceed to the next step. ## Write a stabilization report @@ -34,7 +43,8 @@ Author a stabilization report using the [template found in this repository][srt] The stabilization reports summarizes: - The main design decisions and deviations since the RFC was accepted, including both decisions that were FCP'd or otherwise accepted by the language team as well as those being presented to the lang team for the first time. - - Often, the final stabilized language feature has significant design deviations from the original RFC. That's OK, but these deviations must be highlighted and explained carefully. + - Often, the final stabilized language feature has significant design deviations from the original RFC. + That's OK, but these deviations must be highlighted and explained carefully. - The work that has been done since the RFC was accepted, acknowledging the main contributors that helped drive the language feature forward. The [*Stabilization Template*][srt] includes a series of questions that aim to surface connections between this feature and lang's subteams (e.g. types, opsem, lang-docs, etc.) and to identify items that are commonly overlooked. @@ -51,14 +61,18 @@ Before the stabilization will be considered by the lang team, there must be a co ### Updating the feature-gate listing -There is a central listing of unstable feature-gates in [`compiler/rustc_feature/src/unstable.rs`]. Search for the `declare_features!` macro. There should be an entry for the feature you are aiming to stabilize, something like (this example is taken from [rust-lang/rust#32409]: +There is a central listing of unstable feature-gates in [`compiler/rustc_feature/src/unstable.rs`]. +Search for the `declare_features!` macro. +There should be an entry for the feature you are aiming to stabilize, something like (this example is taken from [rust-lang/rust#32409]: ```rust,ignore // pub(restricted) visibilities (RFC 1422) (unstable, pub_restricted, "CURRENT_RUSTC_VERSION", Some(32409)), ``` -The above line should be moved to [`compiler/rustc_feature/src/accepted.rs`]. Entries in the `declare_features!` call are sorted, so find the correct place. When it is done, it should look like: +The above line should be moved to [`compiler/rustc_feature/src/accepted.rs`]. +Entries in the `declare_features!` call are sorted, so find the correct place. +When it is done, it should look like: ```rust,ignore // pub(restricted) visibilities (RFC 1422) @@ -70,19 +84,24 @@ The above line should be moved to [`compiler/rustc_feature/src/accepted.rs`]. En ### Removing existing uses of the feature-gate -Next, search for the feature string (in this case, `pub_restricted`) in the codebase to find where it appears. Change uses of `#![feature(XXX)]` from the `std` and any rustc crates (this includes test folders under `library/` and `compiler/` but not the toplevel `tests/` one) to be `#![cfg_attr(bootstrap, feature(XXX))]`. This includes the feature-gate only for stage0, which is built using the current beta (this is needed because the feature is still unstable in the current beta). +Next, search for the feature string (in this case, `pub_restricted`) in the codebase to find where it appears. +Change uses of `#![feature(XXX)]` from the `std` and any rustc crates (this includes test folders under `library/` and `compiler/` but not the toplevel `tests/` one) to be `#![cfg_attr(bootstrap, feature(XXX))]`. +This includes the feature-gate only for stage0, which is built using the current beta (this is needed because the feature is still unstable in the current beta). Also, remove those strings from any tests (e.g. under `tests/`). If there are tests specifically targeting the feature-gate (i.e., testing that the feature-gate is required to use the feature, but nothing else), simply remove the test. ### Do not require the feature-gate to use the feature -Most importantly, remove the code which flags an error if the feature-gate is not present (since the feature is now considered stable). If the feature can be detected because it employs some new syntax, then a common place for that code to be is in `compiler/rustc_ast_passes/src/feature_gate.rs`. For example, you might see code like this: +Most importantly, remove the code which flags an error if the feature-gate is not present (since the feature is now considered stable). +If the feature can be detected because it employs some new syntax, then a common place for that code to be is in `compiler/rustc_ast_passes/src/feature_gate.rs`. +For example, you might see code like this: ```rust,ignore gate_all!(pub_restricted, "`pub(restricted)` syntax is experimental"); ``` -The `gate_all!` macro reports an error if the `pub_restricted` feature is not enabled. It is not needed now that `pub(restricted)` is stable. +The `gate_all!` macro reports an error if the `pub_restricted` feature is not enabled. +It is not needed now that `pub(restricted)` is stable. For more subtle features, you may find code like this: @@ -90,7 +109,9 @@ For more subtle features, you may find code like this: if self.tcx.features().async_fn_in_dyn_trait() { /* XXX */ } ``` -This `pub_restricted` field (named after the feature) would ordinarily be false if the feature flag is not present and true if it is. So transform the code to assume that the field is true. In this case, that would mean removing the `if` and leaving just the `/* XXX */`. +This `pub_restricted` field (named after the feature) would ordinarily be false if the feature flag is not present and true if it is. +So transform the code to assume that the field is true. +In this case, that would mean removing the `if` and leaving just the `/* XXX */`. ```rust,ignore if self.tcx.sess.features.borrow().pub_restricted { /* XXX */ } @@ -126,7 +147,8 @@ When opening the stabilization PR, CC the lang team and its advisors (`@rust-lan - `@rust-lang/libs-api`, for changes to the standard library API or its guarantees. - `@rust-lang/lang-docs`, for questions about how this should be documented in the Reference. -After the stabilization PR is opened with the stabilization report, wait a bit for any immediate comments. When such comments "simmer down" and you feel the PR is ready for consideration by the lang team, [nominate the PR](https://lang-team.rust-lang.org/how_to/nominate.html) to get it on the agenda for consideration in an upcoming lang meeting. +After the stabilization PR is opened with the stabilization report, wait a bit for any immediate comments. +When such comments "simmer down" and you feel the PR is ready for consideration by the lang team, [nominate the PR](https://lang-team.rust-lang.org/how_to/nominate.html) to get it on the agenda for consideration in an upcoming lang meeting. If you are not a `rust-lang` organization member, you can ask your assigned reviewer to CC the relevant teams on your behalf. @@ -138,7 +160,8 @@ After the lang team and other relevant teams review the stabilization, and after @rfcbot fcp merge ``` -Once enough team members have reviewed, the PR will move into a "final comment period" (FCP). If no new concerns are raised, this period will complete and the PR can be merged after implementation review in the usual way. +Once enough team members have reviewed, the PR will move into a "final comment period" (FCP). +If no new concerns are raised, this period will complete and the PR can be merged after implementation review in the usual way. ## Reviewing and merging stabilizations @@ -151,4 +174,5 @@ On a stabilization, before giving it the `r+`, ensure that the PR: - Has sufficient tests to convincingly demonstrate these things. - Is accompanied by a PR to the Reference than has been reviewed and approved by a member of lang-docs. -In particular, when reviewing the PR, keep an eye out for any user-visible details that the lang team failed to consider and specify. If you find one, describe it and nominate the PR for the lang team. +In particular, when reviewing the PR, keep an eye out for any user-visible details that the lang team failed to consider and specify. +If you find one, describe it and nominate the PR for the lang team. From aefdfa8b41c30c2228cdd168f899c71d3b72ef0d Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Thu, 13 Nov 2025 02:18:29 +0200 Subject: [PATCH 14/31] some text improvements --- src/doc/rustc-dev-guide/src/stabilization_guide.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/doc/rustc-dev-guide/src/stabilization_guide.md b/src/doc/rustc-dev-guide/src/stabilization_guide.md index c205531ad2db9..19296b22cecf1 100644 --- a/src/doc/rustc-dev-guide/src/stabilization_guide.md +++ b/src/doc/rustc-dev-guide/src/stabilization_guide.md @@ -29,7 +29,7 @@ Places that may need updated documentation include: If you're not sure, please open an issue on this repository and it can be discussed. - Standard library documentation: This is updated as needed. Language features often don't need this, but if it's a feature that changes how idiomatic examples are written, such as when `?` was added to the language, updating these in the library documentation is important. - Review also the keyword documentation and ABI documentation in the standard library, as these sometimes needs updates for language changes. + Review also the keyword documentation and ABI documentation in the standard library, as these sometimes need updates for language changes. - [Rust by Example]: This is updated as needed. Prepare PRs to update documentation involving this new feature for the repositories mentioned above. @@ -63,7 +63,8 @@ Before the stabilization will be considered by the lang team, there must be a co There is a central listing of unstable feature-gates in [`compiler/rustc_feature/src/unstable.rs`]. Search for the `declare_features!` macro. -There should be an entry for the feature you are aiming to stabilize, something like (this example is taken from [rust-lang/rust#32409]: +There should be an entry for the feature you are aiming to stabilize, +something like the following (taken from [rust-lang/rust#32409]: ```rust,ignore // pub(restricted) visibilities (RFC 1422) @@ -85,7 +86,9 @@ When it is done, it should look like: ### Removing existing uses of the feature-gate Next, search for the feature string (in this case, `pub_restricted`) in the codebase to find where it appears. -Change uses of `#![feature(XXX)]` from the `std` and any rustc crates (this includes test folders under `library/` and `compiler/` but not the toplevel `tests/` one) to be `#![cfg_attr(bootstrap, feature(XXX))]`. +Change uses of `#![feature(XXX)]` from the `std` and any rustc crates +(which includes test folders under `library/` and `compiler/` but not the toplevel `tests/` one) +to be `#![cfg_attr(bootstrap, feature(XXX))]`. This includes the feature-gate only for stage0, which is built using the current beta (this is needed because the feature is still unstable in the current beta). Also, remove those strings from any tests (e.g. under `tests/`). If there are tests specifically targeting the feature-gate (i.e., testing that the feature-gate is required to use the feature, but nothing else), simply remove the test. @@ -110,7 +113,7 @@ if self.tcx.features().async_fn_in_dyn_trait() { /* XXX */ } ``` This `pub_restricted` field (named after the feature) would ordinarily be false if the feature flag is not present and true if it is. -So transform the code to assume that the field is true. +So, transform the code to assume that the field is true. In this case, that would mean removing the `if` and leaving just the `/* XXX */`. ```rust,ignore From 74caf6dcbeef8128f13420eb5edb85d2bdd0cbd9 Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Thu, 13 Nov 2025 02:25:57 +0200 Subject: [PATCH 15/31] sembr implementing_new_features.md again --- src/doc/rustc-dev-guide/ci/sembr/src/main.rs | 3 ++- src/doc/rustc-dev-guide/src/implementing_new_features.md | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/doc/rustc-dev-guide/ci/sembr/src/main.rs b/src/doc/rustc-dev-guide/ci/sembr/src/main.rs index d8f20327b82d6..7590fbc41c73b 100644 --- a/src/doc/rustc-dev-guide/ci/sembr/src/main.rs +++ b/src/doc/rustc-dev-guide/ci/sembr/src/main.rs @@ -22,7 +22,8 @@ struct Cli { show_diff: bool, } -static REGEX_IGNORE_END: LazyLock = LazyLock::new(|| Regex::new(r"(\.|\?|;|!)$").unwrap()); +static REGEX_IGNORE_END: LazyLock = + LazyLock::new(|| Regex::new(r"(\.|\?|;|!|,|\-)$").unwrap()); static REGEX_IGNORE_LINK_TARGETS: LazyLock = LazyLock::new(|| Regex::new(r"^\[.+\]: ").unwrap()); static REGEX_SPLIT: LazyLock = diff --git a/src/doc/rustc-dev-guide/src/implementing_new_features.md b/src/doc/rustc-dev-guide/src/implementing_new_features.md index c3e8c0c066234..4526a7af0f463 100644 --- a/src/doc/rustc-dev-guide/src/implementing_new_features.md +++ b/src/doc/rustc-dev-guide/src/implementing_new_features.md @@ -216,7 +216,8 @@ The below steps needs to be followed in order to implement a new unstable featur 1. Write a lot of tests for the new feature, preferably in `tests/ui/$feature_name/`. PRs without tests will not be accepted! -1. Get your PR reviewed and land it. You have now successfully implemented a feature in Rust! +1. Get your PR reviewed and land it. + You have now successfully implemented a feature in Rust! [`GatedSpans`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_session/parse/struct.GatedSpans.html [#81015]: https://github.com/rust-lang/rust/pull/81015 From d5f14ae17e92be69f5bdfa27e85a7ddd1f9d946f Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Thu, 13 Nov 2025 02:43:02 +0200 Subject: [PATCH 16/31] use latest checkout action https://github.com/actions/checkout?tab=readme-ov-file#checkout-v5 --- src/doc/rustc-dev-guide/.github/workflows/ci.yml | 2 +- src/doc/rustc-dev-guide/.github/workflows/date-check.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/doc/rustc-dev-guide/.github/workflows/ci.yml b/src/doc/rustc-dev-guide/.github/workflows/ci.yml index c9c23bf9935a9..a2159527e4454 100644 --- a/src/doc/rustc-dev-guide/.github/workflows/ci.yml +++ b/src/doc/rustc-dev-guide/.github/workflows/ci.yml @@ -22,7 +22,7 @@ jobs: BASE_SHA: ${{ github.event.pull_request.base.sha }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: # linkcheck needs the base commit. fetch-depth: 0 diff --git a/src/doc/rustc-dev-guide/.github/workflows/date-check.yml b/src/doc/rustc-dev-guide/.github/workflows/date-check.yml index 356aeb4e29739..3bac68d23b748 100644 --- a/src/doc/rustc-dev-guide/.github/workflows/date-check.yml +++ b/src/doc/rustc-dev-guide/.github/workflows/date-check.yml @@ -15,7 +15,7 @@ jobs: steps: - name: Checkout repo - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Ensure Rust is up-to-date run: | From 662facc51068d582fce8a5dd128b68a0c969a7e3 Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Thu, 13 Nov 2025 04:17:04 +0200 Subject: [PATCH 17/31] ci: avoid sembr getting rebuilt on every push --- src/doc/rustc-dev-guide/.github/workflows/ci.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/doc/rustc-dev-guide/.github/workflows/ci.yml b/src/doc/rustc-dev-guide/.github/workflows/ci.yml index a2159527e4454..d96cb01d52567 100644 --- a/src/doc/rustc-dev-guide/.github/workflows/ci.yml +++ b/src/doc/rustc-dev-guide/.github/workflows/ci.yml @@ -83,6 +83,16 @@ jobs: git commit -m "Deploy ${GITHUB_SHA} to gh-pages" git push --quiet -f "https://x-token:${{ secrets.GITHUB_TOKEN }}@github.com/${GITHUB_REPOSITORY}" HEAD:gh-pages + - name: Cache sembr build + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + ci/sembr/target/ + key: sembr-${{ hashFiles('ci/sembr/Cargo.lock') }} + - name: Check if files comply with semantic line breaks continue-on-error: true run: | From e7cd6c66a88aa82345cf15483ae1e43a9c7a5b45 Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Thu, 13 Nov 2025 04:17:26 +0200 Subject: [PATCH 18/31] ci: run sembr in release mode --- src/doc/rustc-dev-guide/.github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/doc/rustc-dev-guide/.github/workflows/ci.yml b/src/doc/rustc-dev-guide/.github/workflows/ci.yml index d96cb01d52567..76e1d0a8f7cf3 100644 --- a/src/doc/rustc-dev-guide/.github/workflows/ci.yml +++ b/src/doc/rustc-dev-guide/.github/workflows/ci.yml @@ -97,4 +97,4 @@ jobs: continue-on-error: true run: | # using split_inclusive that uses regex feature that uses an unstable feature - RUSTC_BOOTSTRAP=1 cargo run --manifest-path ci/sembr/Cargo.toml src + RUSTC_BOOTSTRAP=1 cargo run --release --manifest-path ci/sembr/Cargo.toml src From a70b5c6f7a95c5e4d3effb133dfe99d39917273f Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Thu, 13 Nov 2025 04:57:08 +0200 Subject: [PATCH 19/31] sembr sanitizers.md again --- src/doc/rustc-dev-guide/src/sanitizers.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/doc/rustc-dev-guide/src/sanitizers.md b/src/doc/rustc-dev-guide/src/sanitizers.md index 7b84335e3b906..673d650e6050b 100644 --- a/src/doc/rustc-dev-guide/src/sanitizers.md +++ b/src/doc/rustc-dev-guide/src/sanitizers.md @@ -2,8 +2,8 @@ The rustc compiler contains support for following sanitizers: -* [AddressSanitizer][clang-asan] a faster memory error detector. Can - detect out-of-bounds access to heap, stack, and globals, use after free, use +* [AddressSanitizer][clang-asan] a faster memory error detector. + Can detect out-of-bounds access to heap, stack, and globals, use after free, use after return, double free, invalid free, memory leaks. * [ControlFlowIntegrity][clang-cfi] LLVM Control Flow Integrity (CFI) provides forward-edge control flow protection. From fe3871f1e6fb2d82d5632a0dc7a044b969558080 Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Thu, 13 Nov 2025 04:25:23 +0200 Subject: [PATCH 20/31] sembr: update lockfile --- src/doc/rustc-dev-guide/ci/sembr/Cargo.lock | 32 ++++++++++----------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/doc/rustc-dev-guide/ci/sembr/Cargo.lock b/src/doc/rustc-dev-guide/ci/sembr/Cargo.lock index 1e690cc7f1e7c..077fa42d2e5b6 100644 --- a/src/doc/rustc-dev-guide/ci/sembr/Cargo.lock +++ b/src/doc/rustc-dev-guide/ci/sembr/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] @@ -69,9 +69,9 @@ checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" [[package]] name = "bstr" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" +checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" dependencies = [ "memchr", "serde", @@ -79,9 +79,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.50" +version = "4.5.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c2cfd7bf8a6017ddaa4e32ffe7403d547790db06bd171c1c53926faab501623" +checksum = "4c26d721170e0295f191a69bd9a1f93efcdb0aff38684b61ab5750468972e5f5" dependencies = [ "clap_builder", "clap_derive", @@ -89,9 +89,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.50" +version = "4.5.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a4c05b9e80c5ccd3a7ef080ad7b6ba7d6fc00a985b8b157197075677c82c7a0" +checksum = "75835f0c7bf681bfd05abe44e965760fea999a5286c6eb2d59883634fd02011a" dependencies = [ "anstream", "anstyle", @@ -184,9 +184,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "ignore" -version = "0.4.24" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81776e6f9464432afcc28d03e52eb101c93b6f0566f52aef2427663e700f0403" +checksum = "d3d782a365a015e0f5c04902246139249abf769125006fbe7649e2ee88169b4a" dependencies = [ "crossbeam-deque", "globset", @@ -243,9 +243,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.41" +version = "1.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" dependencies = [ "proc-macro2", ] @@ -336,9 +336,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "syn" -version = "2.0.108" +version = "2.0.110" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" +checksum = "a99801b5bd34ede4cf3fc688c5919368fea4e4814a4664359503e6015b280aea" dependencies = [ "proc-macro2", "quote", @@ -347,9 +347,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.20" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "462eeb75aeb73aea900253ce739c8e18a67423fadf006037cd3ff27e82748a06" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" [[package]] name = "utf8parse" From 5d1dc38ba820a793bbe51461ae3b13eb4088985d Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Thu, 13 Nov 2025 04:56:43 +0200 Subject: [PATCH 21/31] handle another edge case --- src/doc/rustc-dev-guide/ci/sembr/src/main.rs | 21 +++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/doc/rustc-dev-guide/ci/sembr/src/main.rs b/src/doc/rustc-dev-guide/ci/sembr/src/main.rs index 7590fbc41c73b..b74dbbe56bfe6 100644 --- a/src/doc/rustc-dev-guide/ci/sembr/src/main.rs +++ b/src/doc/rustc-dev-guide/ci/sembr/src/main.rs @@ -177,7 +177,10 @@ fn lengthen_lines(content: &str, limit: usize) -> String { let Some(next_line) = content.get(n + 1) else { continue; }; - if ignore(next_line, in_code_block) || REGEX_IGNORE_END.is_match(line) { + if ignore(next_line, in_code_block) + || REGEX_LIST_ENTRY.is_match(next_line) + || REGEX_IGNORE_END.is_match(line) + { continue; } if line.len() + next_line.len() < limit { @@ -244,12 +247,28 @@ short sentences
a bit of text inside
+preserve next line +1. one + +preserve next line +- two + +preserve next line +* three "; let expected = "\ do not split short sentences
a bit of text inside
+preserve next line +1. one + +preserve next line +- two + +preserve next line +* three "; assert_eq!(expected, lengthen_lines(original, 50)); } From 3dcaf9bc41576a842a43d7901c284302f6ae9c4f Mon Sep 17 00:00:00 2001 From: Manuel Drehwald Date: Fri, 14 Nov 2025 13:41:07 -0500 Subject: [PATCH 22/31] add missing " and -Zoffload=Enable flag --- src/doc/rustc-dev-guide/src/offload/usage.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/doc/rustc-dev-guide/src/offload/usage.md b/src/doc/rustc-dev-guide/src/offload/usage.md index 9d5839334b1a9..7abf90aa6e0b6 100644 --- a/src/doc/rustc-dev-guide/src/offload/usage.md +++ b/src/doc/rustc-dev-guide/src/offload/usage.md @@ -76,7 +76,7 @@ rustc +offload --edition 2024 src/lib.rs -g --crate-type cdylib -C opt-level=3 - Now we generate the device code. Replace the target-cpu with the right code for your gpu. ``` -RUSTFLAGS="-Ctarget-cpu=gfx90a --emit=llvm-bc,llvm-ir" cargo +offload build -Zunstable-options -r -v --target amdgcn-amd-amdhsa -Zbuild-std=core +RUSTFLAGS="-Ctarget-cpu=gfx90a --emit=llvm-bc,llvm-ir -Zoffload=Enable -Zunstable-options" cargo +offload build -Zunstable-options -r -v --target amdgcn-amd-amdhsa -Zbuild-std=core ``` Now find the `.ll` under target/amdgcn-amd-amdhsa folder and copy it to a device.ll file (or adjust the file names below). @@ -90,13 +90,13 @@ rm bare.amdgcn.gfx90a.img* ``` ``` -clang-offload-packager" "-o" "host.out" "--image=file=device.bc,triple=amdgcn-amd-amdhsa,arch=gfx90a,kind=openmp" +"clang-offload-packager" "-o" "host.out" "--image=file=device.bc,triple=amdgcn-amd-amdhsa,arch=gfx90a,kind=openmp" -clang-21" "-cc1" "-triple" "x86_64-unknown-linux-gnu" "-S" "-save-temps=cwd" "-disable-free" "-clear-ast-before-backend" "-main-file-name" "lib.rs" "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" "-mframe-pointer=all" "-fmath-errno" "-ffp-contract=on" "-fno-rounding-math" "-mconstructor-aliases" "-funwind-tables=2" "-target-cpu" "x86-64" "-tune-cpu" "generic" "-resource-dir" "//rust/build/x86_64-unknown-linux-gnu/llvm/lib/clang/21" "-ferror-limit" "19" "-fopenmp" "-fopenmp-offload-mandatory" "-fgnuc-version=4.2.1" "-fskip-odr-check-in-gmf" "-fembed-offload-object=host.out" "-fopenmp-targets=amdgcn-amd-amdhsa" "-faddrsig" "-D__GCC_HAVE_DWARF2_CFI_ASM=1" "-o" "host.s" "-x" "ir" "lib.bc" +"clang-21" "-cc1" "-triple" "x86_64-unknown-linux-gnu" "-S" "-save-temps=cwd" "-disable-free" "-clear-ast-before-backend" "-main-file-name" "lib.rs" "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" "-mframe-pointer=all" "-fmath-errno" "-ffp-contract=on" "-fno-rounding-math" "-mconstructor-aliases" "-funwind-tables=2" "-target-cpu" "x86-64" "-tune-cpu" "generic" "-resource-dir" "//rust/build/x86_64-unknown-linux-gnu/llvm/lib/clang/21" "-ferror-limit" "19" "-fopenmp" "-fopenmp-offload-mandatory" "-fgnuc-version=4.2.1" "-fskip-odr-check-in-gmf" "-fembed-offload-object=host.out" "-fopenmp-targets=amdgcn-amd-amdhsa" "-faddrsig" "-D__GCC_HAVE_DWARF2_CFI_ASM=1" "-o" "host.s" "-x" "ir" "lib.bc" -clang-21" "-cc1as" "-triple" "x86_64-unknown-linux-gnu" "-filetype" "obj" "-main-file-name" "lib.rs" "-target-cpu" "x86-64" "-mrelocation-model" "pic" "-o" "host.o" "host.s" +"clang-21" "-cc1as" "-triple" "x86_64-unknown-linux-gnu" "-filetype" "obj" "-main-file-name" "lib.rs" "-target-cpu" "x86-64" "-mrelocation-model" "pic" "-o" "host.o" "host.s" -clang-linker-wrapper" "--should-extract=gfx90a" "--device-compiler=amdgcn-amd-amdhsa=-g" "--device-compiler=amdgcn-amd-amdhsa=-save-temps=cwd" "--device-linker=amdgcn-amd-amdhsa=-lompdevice" "--host-triple=x86_64-unknown-linux-gnu" "--save-temps" "--linker-path=/ABSOlUTE_PATH_TO/rust/build/x86_64-unknown-linux-gnu/lld/bin/ld.lld" "--hash-style=gnu" "--eh-frame-hdr" "-m" "elf_x86_64" "-pie" "-dynamic-linker" "/lib64/ld-linux-x86-64.so.2" "-o" "bare" "/lib/../lib64/Scrt1.o" "/lib/../lib64/crti.o" "/ABSOLUTE_PATH_TO/crtbeginS.o" "-L/ABSOLUTE_PATH_TO/rust/build/x86_64-unknown-linux-gnu/llvm/bin/../lib/x86_64-unknown-linux-gnu" "-L/ABSOLUTE_PATH_TO/rust/build/x86_64-unknown-linux-gnu/llvm/lib/clang/21/lib/x86_64-unknown-linux-gnu" "-L/lib/../lib64" "-L/usr/lib64" "-L/lib" "-L/usr/lib" "host.o" "-lstdc++" "-lm" "-lomp" "-lomptarget" "-L/ABSOLUTE_PATH_TO/rust/build/x86_64-unknown-linux-gnu/llvm/lib" "-lgcc_s" "-lgcc" "-lpthread" "-lc" "-lgcc_s" "-lgcc" "/ABSOLUTE_PATH_TO/crtendS.o" "/lib/../lib64/crtn.o" +"clang-linker-wrapper" "--should-extract=gfx90a" "--device-compiler=amdgcn-amd-amdhsa=-g" "--device-compiler=amdgcn-amd-amdhsa=-save-temps=cwd" "--device-linker=amdgcn-amd-amdhsa=-lompdevice" "--host-triple=x86_64-unknown-linux-gnu" "--save-temps" "--linker-path=/ABSOlUTE_PATH_TO/rust/build/x86_64-unknown-linux-gnu/lld/bin/ld.lld" "--hash-style=gnu" "--eh-frame-hdr" "-m" "elf_x86_64" "-pie" "-dynamic-linker" "/lib64/ld-linux-x86-64.so.2" "-o" "bare" "/lib/../lib64/Scrt1.o" "/lib/../lib64/crti.o" "/ABSOLUTE_PATH_TO/crtbeginS.o" "-L/ABSOLUTE_PATH_TO/rust/build/x86_64-unknown-linux-gnu/llvm/bin/../lib/x86_64-unknown-linux-gnu" "-L/ABSOLUTE_PATH_TO/rust/build/x86_64-unknown-linux-gnu/llvm/lib/clang/21/lib/x86_64-unknown-linux-gnu" "-L/lib/../lib64" "-L/usr/lib64" "-L/lib" "-L/usr/lib" "host.o" "-lstdc++" "-lm" "-lomp" "-lomptarget" "-L/ABSOLUTE_PATH_TO/rust/build/x86_64-unknown-linux-gnu/llvm/lib" "-lgcc_s" "-lgcc" "-lpthread" "-lc" "-lgcc_s" "-lgcc" "/ABSOLUTE_PATH_TO/crtendS.o" "/lib/../lib64/crtn.o" ``` Especially for the last command I recommend to not fix the paths, but rather just re-generate them by copying a bare-mode openmp example and compiling it with your clang. By adding `-###` to your clang invocation, you can see the invidual steps. From ecfc64207a7e761cbebe4b7da0202f12abea63a1 Mon Sep 17 00:00:00 2001 From: Brian Cain Date: Mon, 29 Sep 2025 23:39:22 -0500 Subject: [PATCH 23/31] Add support for hexagon-unknown-qurt target --- compiler/rustc_target/src/spec/mod.rs | 2 + .../src/spec/targets/hexagon_unknown_qurt.rs | 45 +++++ src/bootstrap/src/core/sanity.rs | 1 + src/doc/rustc/src/SUMMARY.md | 1 + src/doc/rustc/src/platform-support.md | 1 + .../platform-support/hexagon-unknown-qurt.md | 180 ++++++++++++++++++ tests/assembly-llvm/targets/targets-elf.rs | 3 + tests/ui/check-cfg/cfg-crate-features.stderr | 2 +- tests/ui/check-cfg/well-known-values.stderr | 4 +- 9 files changed, 236 insertions(+), 3 deletions(-) create mode 100644 compiler/rustc_target/src/spec/targets/hexagon_unknown_qurt.rs create mode 100644 src/doc/rustc/src/platform-support/hexagon-unknown-qurt.md diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs index 62d3809c2c64e..1a71e344276a8 100644 --- a/compiler/rustc_target/src/spec/mod.rs +++ b/compiler/rustc_target/src/spec/mod.rs @@ -1490,6 +1490,7 @@ supported_targets! { ("mips64el-unknown-linux-muslabi64", mips64el_unknown_linux_muslabi64), ("hexagon-unknown-linux-musl", hexagon_unknown_linux_musl), ("hexagon-unknown-none-elf", hexagon_unknown_none_elf), + ("hexagon-unknown-qurt", hexagon_unknown_qurt), ("mips-unknown-linux-uclibc", mips_unknown_linux_uclibc), ("mipsel-unknown-linux-uclibc", mipsel_unknown_linux_uclibc), @@ -1958,6 +1959,7 @@ crate::target_spec_enum! { OpenBsd = "openbsd", Psp = "psp", Psx = "psx", + Qurt = "qurt", Redox = "redox", Rtems = "rtems", Solaris = "solaris", diff --git a/compiler/rustc_target/src/spec/targets/hexagon_unknown_qurt.rs b/compiler/rustc_target/src/spec/targets/hexagon_unknown_qurt.rs new file mode 100644 index 0000000000000..746e0cb11dcbe --- /dev/null +++ b/compiler/rustc_target/src/spec/targets/hexagon_unknown_qurt.rs @@ -0,0 +1,45 @@ +use crate::spec::{Arch, Cc, LinkerFlavor, Lld, Os, Target, TargetMetadata, TargetOptions, cvs}; + +pub(crate) fn target() -> Target { + let mut base = TargetOptions::default(); + base.add_pre_link_args(LinkerFlavor::Gnu(Cc::No, Lld::No), &["-G0"]); + + Target { + llvm_target: "hexagon-unknown-elf".into(), + metadata: TargetMetadata { + description: Some("Hexagon QuRT".into()), + tier: Some(3), + host_tools: Some(false), + std: Some(false), + }, + pointer_width: 32, + data_layout: "\ + e-m:e-p:32:32:32-a:0-n16:32-i64:64:64-i32:32\ + :32-i16:16:16-i1:8:8-f32:32:32-f64:64:64-v32\ + :32:32-v64:64:64-v512:512:512-v1024:1024:1024-v2048\ + :2048:2048" + .into(), + arch: Arch::Hexagon, + options: TargetOptions { + os: Os::Qurt, + vendor: "unknown".into(), + cpu: "hexagonv69".into(), + linker: Some("rust-lld".into()), + linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes), + exe_suffix: ".elf".into(), + dynamic_linking: true, + executables: true, + families: cvs!["unix"], + has_thread_local: true, + has_rpath: false, + crt_static_default: false, + crt_static_respected: true, + crt_static_allows_dylibs: true, + no_default_libraries: false, + max_atomic_width: Some(32), + features: "-small-data,+hvx-length128b".into(), + c_enum_min_bits: Some(8), + ..base + }, + } +} diff --git a/src/bootstrap/src/core/sanity.rs b/src/bootstrap/src/core/sanity.rs index 78cd7ab2539fc..00aae9cce220a 100644 --- a/src/bootstrap/src/core/sanity.rs +++ b/src/bootstrap/src/core/sanity.rs @@ -41,6 +41,7 @@ const STAGE0_MISSING_TARGETS: &[&str] = &[ "sparc64-unknown-helenos", // just a dummy comment so the list doesn't get onelined "riscv64gc-unknown-redox", + "hexagon-unknown-qurt", ]; /// Minimum version threshold for libstdc++ required when using prebuilt LLVM diff --git a/src/doc/rustc/src/SUMMARY.md b/src/doc/rustc/src/SUMMARY.md index e4623a2a87f48..4cf95a04465a6 100644 --- a/src/doc/rustc/src/SUMMARY.md +++ b/src/doc/rustc/src/SUMMARY.md @@ -87,6 +87,7 @@ - [csky-unknown-linux-gnuabiv2\*](platform-support/csky-unknown-linux-gnuabiv2.md) - [hexagon-unknown-linux-musl](platform-support/hexagon-unknown-linux-musl.md) - [hexagon-unknown-none-elf](platform-support/hexagon-unknown-none-elf.md) + - [hexagon-unknown-qurt](platform-support/hexagon-unknown-qurt.md) - [illumos](platform-support/illumos.md) - [loongarch\*-unknown-linux-\*](platform-support/loongarch-linux.md) - [loongarch\*-unknown-none\*](platform-support/loongarch-none.md) diff --git a/src/doc/rustc/src/platform-support.md b/src/doc/rustc/src/platform-support.md index 39bf9c7776401..c0e9ed8aa4130 100644 --- a/src/doc/rustc/src/platform-support.md +++ b/src/doc/rustc/src/platform-support.md @@ -315,6 +315,7 @@ target | std | host | notes `csky-unknown-linux-gnuabiv2hf` | ✓ | | C-SKY abiv2 Linux, hardfloat (little endian) [`hexagon-unknown-linux-musl`](platform-support/hexagon-unknown-linux-musl.md) | ✓ | | Hexagon Linux with musl 1.2.5 [`hexagon-unknown-none-elf`](platform-support/hexagon-unknown-none-elf.md)| * | | Bare Hexagon (v60+, HVX) +[`hexagon-unknown-qurt`](platform-support/hexagon-unknown-qurt.md)| * | | Hexagon QuRT [`i386-apple-ios`](platform-support/apple-ios.md) | ✓ | | 32-bit x86 iOS (Penryn) [^x86_32-floats-return-ABI] [`i586-unknown-netbsd`](platform-support/netbsd.md) | ✓ | | 32-bit x86 (original Pentium) [^x86_32-floats-x87] [`i586-unknown-redox`](platform-support/redox.md) | ✓ | | 32-bit x86 Redox OS (PentiumPro) [^x86_32-floats-x87] diff --git a/src/doc/rustc/src/platform-support/hexagon-unknown-qurt.md b/src/doc/rustc/src/platform-support/hexagon-unknown-qurt.md new file mode 100644 index 0000000000000..7928804d09545 --- /dev/null +++ b/src/doc/rustc/src/platform-support/hexagon-unknown-qurt.md @@ -0,0 +1,180 @@ +# `hexagon-unknown-qurt` + +**Tier: 3** + +Rust for Hexagon QuRT (Qualcomm Real-Time OS). + +| Target | Description | +| -------------------- | ------------| +| hexagon-unknown-qurt | Hexagon 32-bit QuRT | + +## Target maintainers + +[@androm3da](https://github.com/androm3da) + +## Requirements + +This target is cross-compiled. There is support for `std`. The target uses +QuRT's standard library and runtime. + +By default, code generated with this target should run on Hexagon DSP hardware +running the QuRT real-time operating system. + +- `-Ctarget-cpu=hexagonv69` targets Hexagon V69 architecture (default) +- `-Ctarget-cpu=hexagonv73` adds support for instructions defined up to Hexagon V73 + +Functions marked `extern "C"` use the [Hexagon architecture calling convention](https://lists.llvm.org/pipermail/llvm-dev/attachments/20190916/21516a52/attachment-0001.pdf). + +This target generates position-independent ELF binaries by default, making it +suitable for both static images and dynamic shared objects. + +The [Hexagon SDK](https://softwarecenter.qualcomm.com/catalog/item/Hexagon_SDK) is +required for building programs for this target. + +## Linking + +This target selects `rust-lld` by default. Another option to use is +[eld](https://github.com/qualcomm/eld), which is also provided with +[the opensource hexagon toolchain](https://github.com/quic/toolchain_for_hexagon) +and the Hexagon SDK. + +## Building the target + +You can build Rust with support for the target by adding it to the `target` +list in `bootstrap.toml`: + +```toml +[build] +build-stage = 1 +host = [""] +target = ["", "hexagon-unknown-qurt"] + +[target.hexagon-unknown-qurt] +cc = "hexagon-clang" +cxx = "hexagon-clang++" +ranlib = "llvm-ranlib" +ar = "llvm-ar" +llvm-libunwind = 'in-tree' +``` + +Replace `` with `x86_64-unknown-linux-gnu` or whatever +else is appropriate for your host machine. + +## Building Rust programs + +Rust does not yet ship pre-compiled artifacts for this target. To compile for +this target, you will either need to build Rust with the target enabled (see +"Building the target" above), or build your own copy of `core` by using +`build-std` or similar. + +## Static Image Targeting + +For static executables that run directly on QuRT, use the default target +configuration with additional linker flags: + +```sh +# Build a static executable for QuRT +cargo rustc --target hexagon-unknown-qurt -- \ + -C link-args="-static -nostdlib" \ + -C link-args="-L/opt/Hexagon_SDK/6.3.0.0/rtos/qurt/computev69/lib" \ + -C link-args="-lqurt -lc" +``` + +This approach is suitable for: +- Standalone QuRT applications +- System-level services +- Boot-time initialization code +- Applications that need deterministic memory layout + +## User-Loadable Shared Object Targeting + +For shared libraries that can be dynamically loaded by QuRT applications: + +```sh +# Build a shared object for QuRT +cargo rustc --target hexagon-unknown-qurt \ + --crate-type=cdylib -- \ + -C link-args="-shared -fPIC" \ + -C link-args="-L/opt/Hexagon_SDK/6.3.0.0/rtos/qurt/computev69/lib" +``` + +This approach is suitable for: +- Plugin architectures +- Runtime-loadable modules +- Libraries shared between multiple applications +- Code that needs to be updated without system restart + +## Configuration Options + +The target can be customized for different use cases: + +### For Static Images +```toml +# In .cargo/config.toml +[target.hexagon-unknown-qurt] +rustflags = [ + "-C", "link-args=-static", + "-C", "link-args=-nostdlib", + "-C", "target-feature=-small-data" +] +``` + +### For Shared Objects +```toml +# In .cargo/config.toml +[target.hexagon-unknown-qurt] +rustflags = [ + "-C", "link-args=-shared", + "-C", "link-args=-fPIC", + "-C", "relocation-model=pic" +] +``` + +## Testing + +Since `hexagon-unknown-qurt` requires the QuRT runtime environment, testing requires +either: +- Hexagon hardware with QuRT +- `hexagon-sim` +- QEMU (`qemu-system-hexagon`) + +## Cross-compilation toolchains and C code + +This target requires the proprietary [Hexagon SDK toolchain for C interoperability](https://softwarecenter.qualcomm.com/catalog/item/Hexagon_SDK): + +- **Sample SDK Path**: `/opt/Hexagon_SDK/6.3.0.0/` +- **Toolchain**: Use `hexagon-clang` from the Hexagon SDK +- **Libraries**: Link against QuRT system libraries as needed + +### C Interoperability Example + +```rust +// lib.rs +#![no_std] +extern crate std; + +#[unsafe(no_mangle)] +pub extern "C" fn rust_function() -> i32 { + // Your Rust code here + 42 +} + +fn main() { + // Example usage + let result = rust_function(); + assert_eq!(result, 42); +} +``` + +```c +// wrapper.c +extern int rust_function(void); + +int main() { + return rust_function(); +} +``` + +The target supports both static linking for standalone applications and dynamic +linking for modular architectures, making it flexible for various QuRT +deployment scenarios. diff --git a/tests/assembly-llvm/targets/targets-elf.rs b/tests/assembly-llvm/targets/targets-elf.rs index 4ca46013b5743..324c7fc9da4ee 100644 --- a/tests/assembly-llvm/targets/targets-elf.rs +++ b/tests/assembly-llvm/targets/targets-elf.rs @@ -235,6 +235,9 @@ //@ revisions: hexagon_unknown_none_elf //@ [hexagon_unknown_none_elf] compile-flags: --target hexagon-unknown-none-elf //@ [hexagon_unknown_none_elf] needs-llvm-components: hexagon +//@ revisions: hexagon_unknown_qurt +//@ [hexagon_unknown_qurt] compile-flags: --target hexagon-unknown-qurt +//@ [hexagon_unknown_qurt] needs-llvm-components: hexagon //@ revisions: i686_pc_nto_qnx700 //@ [i686_pc_nto_qnx700] compile-flags: --target i686-pc-nto-qnx700 //@ [i686_pc_nto_qnx700] needs-llvm-components: x86 diff --git a/tests/ui/check-cfg/cfg-crate-features.stderr b/tests/ui/check-cfg/cfg-crate-features.stderr index 38301f470bf73..242883995488e 100644 --- a/tests/ui/check-cfg/cfg-crate-features.stderr +++ b/tests/ui/check-cfg/cfg-crate-features.stderr @@ -24,7 +24,7 @@ warning: unexpected `cfg` condition value: `does_not_exist` LL | #![cfg(not(target(os = "does_not_exist")))] | ^^^^^^^^^^^^^^^^^^^^^ | - = note: expected values for `target_os` are: `aix`, `amdhsa`, `android`, `cuda`, `cygwin`, `dragonfly`, `emscripten`, `espidf`, `freebsd`, `fuchsia`, `haiku`, `helenos`, `hermit`, `horizon`, `hurd`, `illumos`, `ios`, `l4re`, `linux`, `lynxos178`, `macos`, `managarm`, `motor`, `netbsd`, `none`, `nto`, `nuttx`, `openbsd`, `psp`, `psx`, `redox`, `rtems`, `solaris`, `solid_asp3`, and `teeos` and 13 more + = note: expected values for `target_os` are: `aix`, `amdhsa`, `android`, `cuda`, `cygwin`, `dragonfly`, `emscripten`, `espidf`, `freebsd`, `fuchsia`, `haiku`, `helenos`, `hermit`, `horizon`, `hurd`, `illumos`, `ios`, `l4re`, `linux`, `lynxos178`, `macos`, `managarm`, `motor`, `netbsd`, `none`, `nto`, `nuttx`, `openbsd`, `psp`, `psx`, `qurt`, `redox`, `rtems`, `solaris`, and `solid_asp3` and 14 more = note: see for more information about checking conditional configuration = note: `#[warn(unexpected_cfgs)]` on by default diff --git a/tests/ui/check-cfg/well-known-values.stderr b/tests/ui/check-cfg/well-known-values.stderr index d9a9981177d23..efa0a7f4af9ac 100644 --- a/tests/ui/check-cfg/well-known-values.stderr +++ b/tests/ui/check-cfg/well-known-values.stderr @@ -201,7 +201,7 @@ warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE` LL | target_os = "_UNEXPECTED_VALUE", | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | - = note: expected values for `target_os` are: `aix`, `amdhsa`, `android`, `cuda`, `cygwin`, `dragonfly`, `emscripten`, `espidf`, `freebsd`, `fuchsia`, `haiku`, `helenos`, `hermit`, `horizon`, `hurd`, `illumos`, `ios`, `l4re`, `linux`, `lynxos178`, `macos`, `managarm`, `motor`, `netbsd`, `none`, `nto`, `nuttx`, `openbsd`, `psp`, `psx`, `redox`, `rtems`, `solaris`, `solid_asp3`, `teeos`, `trusty`, `tvos`, `uefi`, `unknown`, `vexos`, `visionos`, `vita`, `vxworks`, `wasi`, `watchos`, `windows`, `xous`, and `zkvm` + = note: expected values for `target_os` are: `aix`, `amdhsa`, `android`, `cuda`, `cygwin`, `dragonfly`, `emscripten`, `espidf`, `freebsd`, `fuchsia`, `haiku`, `helenos`, `hermit`, `horizon`, `hurd`, `illumos`, `ios`, `l4re`, `linux`, `lynxos178`, `macos`, `managarm`, `motor`, `netbsd`, `none`, `nto`, `nuttx`, `openbsd`, `psp`, `psx`, `qurt`, `redox`, `rtems`, `solaris`, `solid_asp3`, `teeos`, `trusty`, `tvos`, `uefi`, `unknown`, `vexos`, `visionos`, `vita`, `vxworks`, `wasi`, `watchos`, `windows`, `xous`, and `zkvm` = note: see for more information about checking conditional configuration warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE` @@ -274,7 +274,7 @@ LL | #[cfg(target_os = "linuz")] // testing that we suggest `linux` | | | help: there is a expected value with a similar name: `"linux"` | - = note: expected values for `target_os` are: `aix`, `amdhsa`, `android`, `cuda`, `cygwin`, `dragonfly`, `emscripten`, `espidf`, `freebsd`, `fuchsia`, `haiku`, `helenos`, `hermit`, `horizon`, `hurd`, `illumos`, `ios`, `l4re`, `linux`, `lynxos178`, `macos`, `managarm`, `motor`, `netbsd`, `none`, `nto`, `nuttx`, `openbsd`, `psp`, `psx`, `redox`, `rtems`, `solaris`, `solid_asp3`, `teeos`, `trusty`, `tvos`, `uefi`, `unknown`, `vexos`, `visionos`, `vita`, `vxworks`, `wasi`, `watchos`, `windows`, `xous`, and `zkvm` + = note: expected values for `target_os` are: `aix`, `amdhsa`, `android`, `cuda`, `cygwin`, `dragonfly`, `emscripten`, `espidf`, `freebsd`, `fuchsia`, `haiku`, `helenos`, `hermit`, `horizon`, `hurd`, `illumos`, `ios`, `l4re`, `linux`, `lynxos178`, `macos`, `managarm`, `motor`, `netbsd`, `none`, `nto`, `nuttx`, `openbsd`, `psp`, `psx`, `qurt`, `redox`, `rtems`, `solaris`, `solid_asp3`, `teeos`, `trusty`, `tvos`, `uefi`, `unknown`, `vexos`, `visionos`, `vita`, `vxworks`, `wasi`, `watchos`, `windows`, `xous`, and `zkvm` = note: see for more information about checking conditional configuration warning: 28 warnings emitted From 901183b91afe29f56ac1ddd893c681fdeb57195e Mon Sep 17 00:00:00 2001 From: The rustc-josh-sync Cronjob Bot Date: Mon, 17 Nov 2025 04:16:56 +0000 Subject: [PATCH 24/31] Prepare for merging from rust-lang/rust This updates the rust-version file to 69d4d5fc0e4db60272aac85ef27ecccef5764f3a. --- src/doc/rustc-dev-guide/rust-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/doc/rustc-dev-guide/rust-version b/src/doc/rustc-dev-guide/rust-version index 04d41c96f5c08..25bb5e923183c 100644 --- a/src/doc/rustc-dev-guide/rust-version +++ b/src/doc/rustc-dev-guide/rust-version @@ -1 +1 @@ -8401398e1f14a24670ee1a3203713dc2f0f8b3a8 +69d4d5fc0e4db60272aac85ef27ecccef5764f3a From 6766db0eb7d72f03e44387574b600d40e47e204e Mon Sep 17 00:00:00 2001 From: The rustc-josh-sync Cronjob Bot Date: Mon, 17 Nov 2025 13:11:54 +0000 Subject: [PATCH 25/31] Prepare for merging from rust-lang/rust This updates the rust-version file to cc328c12382f05d8ddf6ffc8139deb7985270ad8. --- src/doc/rustc-dev-guide/rust-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/doc/rustc-dev-guide/rust-version b/src/doc/rustc-dev-guide/rust-version index 25bb5e923183c..8c841aac8eb60 100644 --- a/src/doc/rustc-dev-guide/rust-version +++ b/src/doc/rustc-dev-guide/rust-version @@ -1 +1 @@ -69d4d5fc0e4db60272aac85ef27ecccef5764f3a +cc328c12382f05d8ddf6ffc8139deb7985270ad8 From bbf7dc0ddf6c920bb4ed1bf2fe8a7b889b9650a2 Mon Sep 17 00:00:00 2001 From: Folkert de Vries Date: Sun, 16 Nov 2025 23:01:37 +0100 Subject: [PATCH 26/31] ignore unsized types in mips64 and sparc64 callconvs --- compiler/rustc_target/src/callconv/mips64.rs | 4 ++-- compiler/rustc_target/src/callconv/sparc64.rs | 5 ++++- tests/ui/abi/compatibility.rs | 3 ++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/compiler/rustc_target/src/callconv/mips64.rs b/compiler/rustc_target/src/callconv/mips64.rs index 313ad6ddce800..a4e94ce816051 100644 --- a/compiler/rustc_target/src/callconv/mips64.rs +++ b/compiler/rustc_target/src/callconv/mips64.rs @@ -148,12 +148,12 @@ where Ty: TyAbiInterface<'a, C> + Copy, C: HasDataLayout, { - if !fn_abi.ret.is_ignore() { + if !fn_abi.ret.is_ignore() && fn_abi.ret.layout.is_sized() { classify_ret(cx, &mut fn_abi.ret); } for arg in fn_abi.args.iter_mut() { - if arg.is_ignore() { + if arg.is_ignore() || !arg.layout.is_sized() { continue; } classify_arg(cx, arg); diff --git a/compiler/rustc_target/src/callconv/sparc64.rs b/compiler/rustc_target/src/callconv/sparc64.rs index 73e9a46ed5b2d..fc732170dcb73 100644 --- a/compiler/rustc_target/src/callconv/sparc64.rs +++ b/compiler/rustc_target/src/callconv/sparc64.rs @@ -216,11 +216,14 @@ where Ty: TyAbiInterface<'a, C> + Copy, C: HasDataLayout + HasTargetSpec, { - if !fn_abi.ret.is_ignore() { + if !fn_abi.ret.is_ignore() && fn_abi.ret.layout.is_sized() { classify_arg(cx, &mut fn_abi.ret, Size::from_bytes(32)); } for arg in fn_abi.args.iter_mut() { + if !arg.layout.is_sized() { + continue; + } if arg.is_ignore() { // sparc64-unknown-linux-{gnu,musl,uclibc} doesn't ignore ZSTs. if cx.target_spec().os == Os::Linux diff --git a/tests/ui/abi/compatibility.rs b/tests/ui/abi/compatibility.rs index ce662d3fe28b0..84294ab343111 100644 --- a/tests/ui/abi/compatibility.rs +++ b/tests/ui/abi/compatibility.rs @@ -280,7 +280,8 @@ macro_rules! test_transparent_unsized { }; } -#[cfg(not(any(target_arch = "mips64", target_arch = "sparc64")))] +// NOTE: non-rustic ABIs do not support unsized types: they are skipped during ABI generation, and +// will trigger an error if they make it to rustc_monomorphize/src/mono_checks/abi_check.rs mod unsized_ { use super::*; test_transparent_unsized!(str_, str); From 4987db367bc4025e4023017cf7d66890d5494b05 Mon Sep 17 00:00:00 2001 From: Jamie Hill-Daniel Date: Sun, 16 Nov 2025 19:57:04 +0000 Subject: [PATCH 27/31] Bump compiler dependencies --- Cargo.lock | 1064 ++++++++++---------- compiler/rustc/Cargo.toml | 7 + src/bootstrap/src/utils/proc_macro_deps.rs | 4 - src/tools/tidy/src/deps.rs | 11 +- 4 files changed, 517 insertions(+), 569 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9dce64ce66ab6..31b869f705c03 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,11 +4,11 @@ version = 4 [[package]] name = "addr2line" -version = "0.24.2" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" dependencies = [ - "gimli 0.31.1", + "gimli 0.32.3", ] [[package]] @@ -30,9 +30,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] @@ -43,12 +43,6 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - [[package]] name = "android_system_properties" version = "0.1.5" @@ -90,9 +84,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.20" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ "anstyle", "anstyle-parse", @@ -129,11 +123,11 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -151,20 +145,20 @@ dependencies = [ [[package]] name = "anstyle-wincon" -version = "3.0.10" +version = "3.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] name = "anyhow" -version = "1.0.99" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" [[package]] name = "ar_archive_writer" @@ -214,7 +208,7 @@ dependencies = [ "rustc-hash 2.1.1", "serde", "serde_derive", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] @@ -237,17 +231,17 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "backtrace" -version = "0.3.75" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" +checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" dependencies = [ "addr2line", "cfg-if", "libc", "miniz_oxide", - "object 0.36.7", + "object 0.37.3", "rustc-demangle", - "windows-targets 0.52.6", + "windows-link 0.2.1", ] [[package]] @@ -276,9 +270,9 @@ dependencies = [ [[package]] name = "bitflags" -version = "2.9.3" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34efbcccd345379ca2868b2b2c9d3782e9cc58ba87bc7d79d5b53d9c9ae6f25d" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "blake3" @@ -302,14 +296,23 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" +dependencies = [ + "objc2", +] + [[package]] name = "bstr" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" +checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" dependencies = [ "memchr", - "regex-automata 0.4.9", + "regex-automata", "serde", ] @@ -365,11 +368,11 @@ checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e" [[package]] name = "camino" -version = "1.1.11" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d07aa9a93b00c76f71bc35d598bed923f6d4f3a9ca5c24b7737ae1a292841c0" +checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" dependencies = [ - "serde", + "serde_core", ] [[package]] @@ -442,7 +445,7 @@ dependencies = [ "serde", "serde-untagged", "serde-value", - "thiserror 2.0.15", + "thiserror 2.0.17", "toml 0.8.23", "unicode-xid", "url", @@ -474,7 +477,7 @@ dependencies = [ "semver", "serde", "serde_json", - "thiserror 2.0.15", + "thiserror 2.0.17", ] [[package]] @@ -488,7 +491,7 @@ dependencies = [ "semver", "serde", "serde_json", - "thiserror 2.0.15", + "thiserror 2.0.17", ] [[package]] @@ -508,9 +511,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.1" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" @@ -520,15 +523,14 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.41" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "android-tzdata", "iana-time-zone", "num-traits", "serde", - "windows-link 0.1.3", + "windows-link 0.2.1", ] [[package]] @@ -553,9 +555,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.45" +version = "4.5.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc0e74a703892159f5ae7d3aac52c8e6c392f5ae5f359c70b5881d60aaac318" +checksum = "4c26d721170e0295f191a69bd9a1f93efcdb0aff38684b61ab5750468972e5f5" dependencies = [ "clap_builder", "clap_derive", @@ -573,9 +575,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.44" +version = "4.5.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3e7f4214277f3c7aa526a59dd3fbe306a370daee1f8b7b8c987069cd8e888a8" +checksum = "75835f0c7bf681bfd05abe44e965760fea999a5286c6eb2d59883634fd02011a" dependencies = [ "anstream", "anstyle", @@ -585,21 +587,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.45" +version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14cb31bb0a7d536caef2639baa7fad459e15c3144efefa6dbd1c84562c4739f6" +checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] name = "clap_lex" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" +checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" [[package]] name = "clippy" @@ -623,7 +625,7 @@ dependencies = [ "serde_json", "tempfile", "termize", - "toml 0.9.7", + "toml 0.9.8", "ui_test", "walkdir", ] @@ -662,10 +664,10 @@ dependencies = [ "declare_clippy_lint", "itertools", "quine-mc_cluskey", - "regex-syntax 0.8.5", + "regex-syntax", "semver", "serde", - "toml 0.9.7", + "toml 0.9.8", "unicode-normalization", "unicode-script", "url", @@ -704,9 +706,9 @@ dependencies = [ [[package]] name = "codespan-reporting" -version = "0.12.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" +checksum = "af491d569909a7e4dee0ad7db7f5341fef5c614d5b8ec8cf765732aba3cff681" dependencies = [ "serde", "termcolor", @@ -735,7 +737,7 @@ dependencies = [ "eyre", "indenter", "once_cell", - "owo-colors 4.2.2", + "owo-colors", "tracing-error", ] @@ -757,7 +759,7 @@ dependencies = [ "nom", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] @@ -767,7 +769,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8b88ea9df13354b55bc7234ebcce36e6ef896aca2e42a15de9e10edce01b427" dependencies = [ "once_cell", - "owo-colors 4.2.2", + "owo-colors", "tracing-core", "tracing-error", ] @@ -829,7 +831,7 @@ dependencies = [ "tracing-subscriber", "unified-diff", "walkdir", - "windows 0.61.3", + "windows", ] [[package]] @@ -924,9 +926,9 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crypto-common" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ "generic-array", "typenum", @@ -934,12 +936,13 @@ dependencies = [ [[package]] name = "ctrlc" -version = "3.4.7" +version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46f93780a459b7d656ef7f071fe699c4d3d2cb201c4b24d085b6ddc505276e73" +checksum = "73736a89c4aff73035ba2ed2e565061954da00d4970fc9ac25dcc85a2a20d790" dependencies = [ + "dispatch2", "nix", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -959,9 +962,9 @@ dependencies = [ [[package]] name = "curl-sys" -version = "0.4.83+curl-8.15.0" +version = "0.4.84+curl-8.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5830daf304027db10c82632a464879d46a3f7c4ba17a31592657ad16c719b483" +checksum = "abc4294dc41b882eaff37973c2ec3ae203d0091341ee68fbadd1d06e0c18a73b" dependencies = [ "cc", "libc", @@ -974,9 +977,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.185" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f81de88da10862f22b5b3a60f18f6f42bbe7cb8faa24845dd7b1e4e22190e77" +checksum = "47ac4eaf7ebe29e92f1b091ceefec7710a53a6f6154b2460afda626c113b65b9" dependencies = [ "cc", "cxx-build", @@ -989,9 +992,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.185" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5edd58bf75c3fdfc80d79806403af626570662f7b6cc782a7fabe156166bd6d6" +checksum = "2abd4c3021eefbac5149f994c117b426852bca3a0aad227698527bca6d4ea657" dependencies = [ "cc", "codespan-reporting", @@ -999,40 +1002,39 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] name = "cxxbridge-cmd" -version = "1.0.185" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd46bf2b541a4e0c2d5abba76607379ee05d68e714868e3cb406dc8d591ce2d2" +checksum = "6f12fbc5888b2311f23e52a601e11ad7790d8f0dbb903ec26e2513bf5373ed70" dependencies = [ "clap", "codespan-reporting", "indexmap", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] name = "cxxbridge-flags" -version = "1.0.185" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c79b68f6a3a8f809d39b38ae8af61305a6113819b19b262643b9c21353b92d9" +checksum = "83d3dd7870af06e283f3f8ce0418019c96171c9ce122cfb9c8879de3d84388fd" [[package]] name = "cxxbridge-macro" -version = "1.0.185" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862b7fdb048ff9ef0779a0d0a03affd09746c4c875543746b640756be9cff2af" +checksum = "a26f0d82da663316786791c3d0e9f9edc7d1ee1f04bdad3d2643086a69d6256c" dependencies = [ "indexmap", "proc-macro2", "quote", - "rustversion", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] @@ -1056,7 +1058,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] @@ -1067,7 +1069,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] @@ -1078,13 +1080,13 @@ checksum = "a0afaad2b26fa326569eb264b1363e8ae3357618c43982b3f285f0774ce76b69" [[package]] name = "dbus" -version = "0.9.7" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bb21987b9fb1613058ba3843121dd18b163b254d8a6e797e144cbac14d96d1b" +checksum = "190b6255e8ab55a7b568df5a883e9497edc3e4821c06396612048b430e5ad1e9" dependencies = [ "libc", "libdbus-sys", - "winapi", + "windows-sys 0.59.0", ] [[package]] @@ -1099,7 +1101,7 @@ checksum = "ef941ded77d15ca19b40374869ac6000af1c9f2a4c0f3d4c70926287e6364a8f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] @@ -1120,7 +1122,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] @@ -1130,7 +1132,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] @@ -1142,7 +1144,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] @@ -1212,6 +1214,18 @@ dependencies = [ "winapi", ] +[[package]] +name = "dispatch2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" +dependencies = [ + "bitflags", + "block2", + "libc", + "objc2", +] + [[package]] name = "displaydoc" version = "0.2.5" @@ -1220,7 +1234,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] @@ -1231,9 +1245,9 @@ checksum = "8975ffdaa0ef3661bfe02dbdcc06c9f829dfafe6a3c474de366a8d5e44276921" [[package]] name = "dyn-clone" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "either" @@ -1267,9 +1281,9 @@ checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" [[package]] name = "env_filter" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" +checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2" dependencies = [ "log", "regex", @@ -1296,22 +1310,23 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "erased-serde" -version = "0.4.6" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7" +checksum = "89e8918065695684b2b0702da20382d5ae6065cf3327bc2d6436bd49a71ce9f3" dependencies = [ "serde", + "serde_core", "typeid", ] [[package]] name = "errno" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -1359,27 +1374,27 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.25" +version = "0.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" +checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" dependencies = [ "cfg-if", "libc", "libredox", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "find-msvc-tools" -version = "0.1.2" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ced73b1dacfc750a6db6c0a0c3a3853c8b41997e2e2c563dc90804ae6867959" +checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" [[package]] name = "flate2" -version = "1.1.2" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" +checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" dependencies = [ "crc32fast", "miniz_oxide", @@ -1403,9 +1418,9 @@ dependencies = [ [[package]] name = "fluent-langneg" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c4ad0989667548f06ccd0e306ed56b61bd4d35458d54df5ec7587c0e8ed5e94" +checksum = "7eebbe59450baee8282d71676f3bfed5689aeab00b27545e83e5f14b1195e8b0" dependencies = [ "unic-langid", ] @@ -1417,7 +1432,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54f0d287c53ffd184d04d8677f590f4ac5379785529e5e08b1c8083acdd5c198" dependencies = [ "memchr", - "thiserror 2.0.15", + "thiserror 2.0.17", ] [[package]] @@ -1440,9 +1455,9 @@ checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "form_urlencoded" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] @@ -1557,9 +1572,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.32.0" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93563d740bc9ef04104f9ed6f86f1e3275c2cdafb95664e26584b9ca807a8ffe" +checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" dependencies = [ "fallible-iterator", "indexmap", @@ -1589,15 +1604,15 @@ checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "globset" -version = "0.4.16" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54a1028dfc5f5df5da8a56a73e6c153c9a9708ec57232470703592a3f18e49f5" +checksum = "52dfc19153a48bde0cbd630453615c8151bce3a5adfac7a0aebfbf0a1e1f57e3" dependencies = [ "aho-corasick", "bstr", "log", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", + "regex-automata", + "regex-syntax", ] [[package]] @@ -1621,6 +1636,12 @@ dependencies = [ "serde", ] +[[package]] +name = "hashbrown" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" + [[package]] name = "heck" version = "0.4.1" @@ -1647,11 +1668,11 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "home" -version = "0.5.11" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -1694,15 +1715,15 @@ dependencies = [ [[package]] name = "humantime" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f" +checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" [[package]] name = "iana-time-zone" -version = "0.1.63" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1710,7 +1731,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.61.2", + "windows-core 0.62.2", ] [[package]] @@ -1724,9 +1745,9 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" dependencies = [ "displaydoc", "potential_utf", @@ -1737,13 +1758,12 @@ dependencies = [ [[package]] name = "icu_list" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e26f94ec776bb8b28cedc7dcf91033b822c5cb4c1783cf7a3f796fc168aa0c8b" +checksum = "d3a0b7b126e2fc42777d3c348611553d540bd3683caa39b387c5dd1036bb21a8" dependencies = [ - "displaydoc", "icu_provider", - "regex-automata 0.4.9", + "regex-automata", "serde", "writeable", "zerovec", @@ -1751,11 +1771,10 @@ dependencies = [ [[package]] name = "icu_locale" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ae5921528335e91da1b6c695dbf1ec37df5ac13faa3f91e5640be93aa2fbefd" +checksum = "532b11722e350ab6bf916ba6eb0efe3ee54b932666afec989465f9243fe6dd60" dependencies = [ - "displaydoc", "icu_collections", "icu_locale_core", "icu_locale_data", @@ -1767,12 +1786,13 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" dependencies = [ "displaydoc", "litemap", + "serde", "tinystr", "writeable", "zerovec", @@ -1780,17 +1800,16 @@ dependencies = [ [[package]] name = "icu_locale_data" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fdef0c124749d06a743c69e938350816554eb63ac979166590e2b4ee4252765" +checksum = "f03e2fcaefecdf05619f3d6f91740e79ab969b4dd54f77cbf546b1d0d28e3147" [[package]] name = "icu_normalizer" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" dependencies = [ - "displaydoc", "icu_collections", "icu_normalizer_data", "icu_properties", @@ -1801,42 +1820,40 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" dependencies = [ - "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", "icu_provider", - "potential_utf", "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" +checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" [[package]] name = "icu_provider" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" dependencies = [ "displaydoc", "icu_locale_core", + "serde", "stable_deref_trait", - "tinystr", "writeable", "yoke", "zerofrom", @@ -1858,9 +1875,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", @@ -1879,15 +1896,15 @@ dependencies = [ [[package]] name = "ignore" -version = "0.4.23" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d89fd380afde86567dfba715db065673989d6253f42b88179abd3eae47bda4b" +checksum = "d3d782a365a015e0f5c04902246139249abf769125006fbe7649e2ee88169b4a" dependencies = [ "crossbeam-deque", "globset", "log", "memchr", - "regex-automata 0.4.9", + "regex-automata", "same-file", "walkdir", "winapi-util", @@ -1901,12 +1918,12 @@ checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" [[package]] name = "indexmap" -version = "2.11.4" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" +checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.16.0", "serde", "serde_core", ] @@ -1973,9 +1990,9 @@ dependencies = [ [[package]] name = "ipc-channel" -version = "0.20.1" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1700f6b8b9f00cdd675f32fbb3a5be882213140dfe045805273221ca266c43f8" +checksum = "f93600b5616c2d075f8af8dbd23c1d69278c5d24e4913d220cbc60b14c95c180" dependencies = [ "bincode", "crossbeam-channel", @@ -1986,14 +2003,14 @@ dependencies = [ "serde", "tempfile", "uuid", - "windows 0.58.0", + "windows", ] [[package]] name = "is_terminal_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" @@ -2012,33 +2029,33 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jiff" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49" +checksum = "49cce2b81f2098e7e3efc35bc2e0a6b7abec9d34128283d7a26fa8f32a6dbb35" dependencies = [ "jiff-static", "log", "portable-atomic", "portable-atomic-util", - "serde", + "serde_core", ] [[package]] name = "jiff-static" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" +checksum = "980af8b43c3ad5d8d349ace167ec8170839f753a42d233ba19e08afe1850fa69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] name = "jobserver" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ "getrandom 0.3.3", "libc", @@ -2046,9 +2063,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" dependencies = [ "once_cell", "wasm-bindgen", @@ -2089,7 +2106,7 @@ dependencies = [ "pest_derive", "regex", "serde_json", - "thiserror 2.0.15", + "thiserror 2.0.17", ] [[package]] @@ -2130,9 +2147,9 @@ checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" [[package]] name = "libdbus-sys" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06085512b750d640299b79be4bad3d2fa90a9c00b1fd9e1b46364f66f0485c72" +checksum = "5cbe856efeb50e4681f010e9aaa2bf0a644e10139e54cde10fc83a307c23bd9f" dependencies = [ "cc", "pkg-config", @@ -2172,12 +2189,12 @@ dependencies = [ [[package]] name = "libloading" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", - "windows-targets 0.53.3", + "windows-link 0.2.1", ] [[package]] @@ -2198,9 +2215,9 @@ checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libredox" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" +checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ "bitflags", "libc", @@ -2209,9 +2226,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.22" +version = "1.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" +checksum = "15d118bbf3771060e7311cc7bb0545b01d08a8b4a7de949198dec1fa0ca1c0f7" dependencies = [ "cc", "libc", @@ -2255,9 +2272,9 @@ checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" [[package]] name = "lld-wrapper" @@ -2276,19 +2293,18 @@ dependencies = [ [[package]] name = "lock_api" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "autocfg", "scopeguard", ] [[package]] name = "log" -version = "0.4.27" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "lzma-sys" @@ -2329,16 +2345,16 @@ checksum = "88a9689d8d44bf9964484516275f5cd4c9b59457a6940c1d5d0ecbb94510a36b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] name = "matchers" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" dependencies = [ - "regex-automata 0.1.10", + "regex-automata", ] [[package]] @@ -2399,17 +2415,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", + "simd-adler32", ] [[package]] name = "mio" -version = "1.0.4" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" dependencies = [ "libc", "wasi 0.11.1+wasi-snapshot-preview1", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -2485,30 +2502,20 @@ dependencies = [ [[package]] name = "normpath" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8911957c4b1549ac0dc74e30db9c8b0e66ddcd6d7acc33098f4c63a64a6d7ed" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +checksum = "bf23ab2b905654b4cb177e30b629937b3868311d4e1cba859f899c041046e69b" dependencies = [ - "overload", - "winapi", + "windows-sys 0.61.2", ] [[package]] name = "nu-ansi-term" -version = "0.50.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -2600,20 +2607,35 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" +[[package]] +name = "objc2" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" +dependencies = [ + "objc2-encode", +] + [[package]] name = "objc2-core-foundation" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ "bitflags", ] +[[package]] +name = "objc2-encode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + [[package]] name = "objc2-io-kit" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71c1c64d6120e51cd86033f67176b1cb66780c2efe34dec55176f77befd93c0a" +checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15" dependencies = [ "libc", "objc2-core-foundation", @@ -2627,7 +2649,7 @@ checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "crc32fast", "flate2", - "hashbrown", + "hashbrown 0.15.5", "indexmap", "memchr", "ruzstd 0.7.3", @@ -2641,10 +2663,10 @@ checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" dependencies = [ "crc32fast", "flate2", - "hashbrown", + "hashbrown 0.15.5", "indexmap", "memchr", - "ruzstd 0.8.1", + "ruzstd 0.8.2", "wasmparser 0.236.1", ] @@ -2665,9 +2687,9 @@ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "once_cell_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "opener" @@ -2689,9 +2711,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.109" +version = "0.9.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" +checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" dependencies = [ "cc", "libc", @@ -2737,32 +2759,11 @@ dependencies = [ "num-traits", ] -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "owo-colors" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" - [[package]] name = "owo-colors" -version = "4.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48dd4f4a2c8405440fd0462561f0e5806bd0f77e86f51c761481bdd4018b545e" - -[[package]] -name = "pad" -version = "0.1.6" +version = "4.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2ad9b889f1b12e0b9ee24db044b5129150d5eada288edc800f789928dc8c0e3" -dependencies = [ - "unicode-width 0.1.14", -] +checksum = "9c6901729fa79e91a0913333229e9ca5dc725089d1c363b2f4b4760709dc4a52" [[package]] name = "papergrid" @@ -2777,9 +2778,9 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", "parking_lot_core", @@ -2787,15 +2788,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.11" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-targets 0.52.6", + "windows-link 0.2.1", ] [[package]] @@ -2806,9 +2807,9 @@ checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "perf-event-open-sys" @@ -2821,20 +2822,19 @@ dependencies = [ [[package]] name = "pest" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" +checksum = "989e7521a040efde50c3ab6bbadafbe15ab6dc042686926be59ac35d74607df4" dependencies = [ "memchr", - "thiserror 2.0.15", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb056d9e8ea77922845ec74a1c4e8fb17e7c218cc4fc11a15c5d25e189aa40bc" +checksum = "187da9a3030dbafabbbfb20cb323b976dc7b7ce91fcd84f2f74d6e31d378e2de" dependencies = [ "pest", "pest_generator", @@ -2842,22 +2842,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87e404e638f781eb3202dc82db6760c8ae8a1eeef7fb3fa8264b2ef280504966" +checksum = "49b401d98f5757ebe97a26085998d6c0eecec4995cad6ab7fc30ffdf4b052843" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] name = "pest_meta" -version = "2.8.1" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd1101f170f5903fde0914f899bb503d9ff5271d7ba76bbb70bea63690cc0d5" +checksum = "72f27a2cfee9f9039c4d86faa5af122a0ac3851441a34865b8a043b46be0065a" dependencies = [ "pest", "sha2", @@ -2959,11 +2959,12 @@ dependencies = [ [[package]] name = "potential_utf" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" dependencies = [ - "serde", + "serde_core", + "writeable", "zerovec", ] @@ -2984,12 +2985,11 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "prettydiff" -version = "0.7.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abec3fb083c10660b3854367697da94c674e9e82aa7511014dc958beeb7215e9" +checksum = "ac17546d82912e64874e3d5b40681ce32eac4e5834344f51efcf689ff1550a65" dependencies = [ - "owo-colors 3.5.0", - "pad", + "owo-colors", ] [[package]] @@ -3000,9 +3000,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.101" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" dependencies = [ "unicode-ident", ] @@ -3048,9 +3048,9 @@ checksum = "07589615d719a60c8dd8a4622e7946465dfef20d1a428f969e3443e7386d5f45" [[package]] name = "quote" -version = "1.0.40" +version = "1.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" dependencies = [ "proc-macro2", ] @@ -3160,9 +3160,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.17" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ "bitflags", ] @@ -3186,78 +3186,63 @@ checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.16", "libredox", - "thiserror 2.0.15", + "thiserror 2.0.17", ] [[package]] name = "ref-cast" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] name = "regex" -version = "1.11.1" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", + "regex-automata", + "regex-syntax", ] [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.5", + "regex-syntax", ] [[package]] name = "regex-lite" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" - -[[package]] -name = "regex-syntax" -version = "0.6.29" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" +checksum = "8d942b98df5e658f56f20d592c7f868833fe38115e65c33003d8cd224b0155da" [[package]] name = "regex-syntax" -version = "0.8.5" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "remote-test-client" @@ -3281,7 +3266,7 @@ version = "0.0.0" dependencies = [ "bstr", "build_helper", - "gimli 0.32.0", + "gimli 0.32.3", "libc", "object 0.37.3", "regex", @@ -3331,6 +3316,7 @@ checksum = "e4ee29da77c5a54f42697493cd4c9b9f31b74df666a6c04dfc4fde77abe0438b" name = "rustc-main" version = "0.0.0" dependencies = [ + "getrandom 0.3.3", "rustc_codegen_ssa", "rustc_driver", "rustc_driver_impl", @@ -3338,6 +3324,7 @@ dependencies = [ "rustc_public_bridge", "rustc_windows_rc", "tikv-jemalloc-sys", + "wasi 0.14.2+wasi-0.2.4", ] [[package]] @@ -3646,7 +3633,7 @@ dependencies = [ "thorin-dwp", "tracing", "wasm-encoder 0.219.2", - "windows 0.61.3", + "windows", ] [[package]] @@ -3682,7 +3669,7 @@ dependencies = [ "either", "elsa", "ena", - "hashbrown", + "hashbrown 0.15.5", "indexmap", "jobserver", "libc", @@ -3704,7 +3691,7 @@ dependencies = [ "tempfile", "thin-vec", "tracing", - "windows 0.61.3", + "windows", ] [[package]] @@ -3768,7 +3755,7 @@ dependencies = [ "serde_json", "shlex", "tracing", - "windows 0.61.3", + "windows", ] [[package]] @@ -3820,7 +3807,7 @@ dependencies = [ "serde_json", "termize", "tracing", - "windows 0.61.3", + "windows", ] [[package]] @@ -3869,7 +3856,7 @@ dependencies = [ "fluent-syntax", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.110", "unic-langid", ] @@ -4029,7 +4016,7 @@ version = "0.0.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] @@ -4175,7 +4162,7 @@ version = "0.0.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.110", "synstructure", ] @@ -4185,7 +4172,7 @@ version = "0.0.0" dependencies = [ "bitflags", "libc", - "libloading 0.8.8", + "libloading 0.8.9", "odht", "rustc_abi", "rustc_ast", @@ -4298,7 +4285,7 @@ name = "rustc_mir_transform" version = "0.0.0" dependencies = [ "either", - "hashbrown", + "hashbrown 0.15.5", "itertools", "rustc_abi", "rustc_arena", @@ -4509,7 +4496,7 @@ dependencies = [ name = "rustc_query_system" version = "0.0.0" dependencies = [ - "hashbrown", + "hashbrown 0.15.5", "parking_lot", "rustc_abi", "rustc_ast", @@ -4611,7 +4598,7 @@ dependencies = [ "rustc_target", "termize", "tracing", - "windows 0.61.3", + "windows", ] [[package]] @@ -4798,7 +4785,7 @@ version = "0.0.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.110", "synstructure", ] @@ -4896,7 +4883,7 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] @@ -4958,11 +4945,11 @@ dependencies = [ [[package]] name = "ruzstd" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3640bec8aad418d7d03c72ea2de10d5c646a598f9883c7babc160d91e3c1b26c" +checksum = "e5ff0cc5e135c8870a775d3320910cd9b564ec036b4dc0b8741629020be63f01" dependencies = [ - "twox-hash 2.1.1", + "twox-hash 2.1.2", ] [[package]] @@ -4982,18 +4969,18 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "schemars" -version = "1.0.4" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" +checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289" dependencies = [ "dyn-clone", "ref-cast", @@ -5004,14 +4991,14 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "1.0.4" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d020396d1d138dc19f1165df7545479dcd58d93810dc5d646a16e55abefa80" +checksum = "301858a4023d78debd2353c7426dc486001bddc91ae31a76fb1f55132f7e2633" dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] @@ -5034,17 +5021,18 @@ checksum = "d68f2ec51b097e4c1a75b681a8bec621909b5e91f15bb7b840c4f2f7b01148b2" [[package]] name = "self_cell" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f7d95a54511e0c7be3f51e8867aa8cf35148d7b9445d44de2f943e2b206e749" +checksum = "16c2f82143577edb4921b71ede051dac62ca3c16084e918bf7b40c96ae10eb33" [[package]] name = "semver" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" dependencies = [ "serde", + "serde_core", ] [[package]] @@ -5059,12 +5047,13 @@ dependencies = [ [[package]] name = "serde-untagged" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34836a629bcbc6f1afdf0907a744870039b1e14c0561cb26094fa683b158eff3" +checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058" dependencies = [ "erased-serde", "serde", + "serde_core", "typeid", ] @@ -5095,7 +5084,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] @@ -5106,29 +5095,31 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] name = "serde_json" -version = "1.0.142" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ "itoa", "memchr", "ryu", "serde", + "serde_core", ] [[package]] name = "serde_path_to_error" -version = "0.1.17" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59fab13f937fa393d08645bf3a84bdfe86e296747b506ada67bb15f10f218b2a" +checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" dependencies = [ "itoa", "serde", + "serde_core", ] [[package]] @@ -5142,9 +5133,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5417783452c2be558477e104686f7de5dae53dba813c28435e0e70f82d9b04ee" +checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392" dependencies = [ "serde_core", ] @@ -5186,6 +5177,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + [[package]] name = "similar" version = "2.7.0" @@ -5206,12 +5203,12 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "socket2" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -5256,9 +5253,9 @@ dependencies = [ [[package]] name = "stable_deref_trait" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "stacker" @@ -5351,9 +5348,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.106" +version = "2.0.110" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +checksum = "a99801b5bd34ede4cf3fc688c5919368fea4e4814a4664359503e6015b280aea" dependencies = [ "proc-macro2", "quote", @@ -5368,19 +5365,19 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] name = "sysinfo" -version = "0.37.0" +version = "0.37.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07cec4dc2d2e357ca1e610cfb07de2fa7a10fc3e9fe89f72545f3d244ea87753" +checksum = "16607d5caffd1c07ce073528f9ed972d88db15dd44023fa57142963be3feb11f" dependencies = [ "libc", "objc2-core-foundation", "objc2-io-kit", - "windows 0.61.3", + "windows", ] [[package]] @@ -5406,15 +5403,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.20.0" +version = "3.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ "fastrand", "getrandom 0.3.3", "once_cell", "rustix", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -5450,12 +5447,12 @@ dependencies = [ [[package]] name = "termize" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8da106d1a19c5b9c53c03311936568a0439926a7607815bd3461139cbab1cc" +checksum = "61946f539e9ff67cbc8df5b2e9823d84e0d58d74e342707c2dfb85405995827b" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -5486,11 +5483,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.15" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d76d3f064b981389ecb4b6b7f45a0bf9fdac1d5b9204c7bd6714fecc302850" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" dependencies = [ - "thiserror-impl 2.0.15", + "thiserror-impl 2.0.17", ] [[package]] @@ -5501,18 +5498,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] name = "thiserror-impl" -version = "2.0.15" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d29feb33e986b6ea906bd9c3559a856983f92371b3eaa5e83782a351623de0" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] @@ -5522,7 +5519,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e9c1e705f82a260173f3eec93f2ff6d7807f23ad5a8cc2e7316a891733ea7a1" dependencies = [ "gimli 0.31.1", - "hashbrown", + "hashbrown 0.15.5", "object 0.36.7", "tracing", ] @@ -5570,9 +5567,9 @@ version = "0.1.0" [[package]] name = "tikv-jemalloc-sys" -version = "0.6.0+5.3.0-1-ge13ca993e8ccb9ba9847cc330696e02839f328f7" +version = "0.6.1+5.3.0-1-ge13ca993e8ccb9ba9847cc330696e02839f328f7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd3c60906412afa9c2b5b5a48ca6a5abe5736aec9eb48ad05037a677e52e4e2d" +checksum = "cd8aa5b2ab86a2cefa406d889139c162cbb230092f7d1d7cbc1716405d852a3b" dependencies = [ "cc", "libc", @@ -5580,19 +5577,20 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" dependencies = [ "displaydoc", + "serde_core", "zerovec", ] [[package]] name = "tinyvec" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] @@ -5630,14 +5628,14 @@ dependencies = [ [[package]] name = "toml" -version = "0.9.7" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00e5e5d9bf2475ac9d4f0d9edab68cc573dc2fd644b0dba36b0c30a92dd9eaa0" +checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" dependencies = [ "indexmap", "serde_core", - "serde_spanned 1.0.2", - "toml_datetime 0.7.2", + "serde_spanned 1.0.3", + "toml_datetime 0.7.3", "toml_parser", "toml_writer", "winnow 0.7.13", @@ -5654,9 +5652,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f1085dec27c2b6632b04c80b3bb1b4300d6495d1e129693bdda7d91e72eec1" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" dependencies = [ "serde_core", ] @@ -5690,9 +5688,9 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cf893c33be71572e0e9aa6dd15e6677937abd686b066eac3f8cd3531688a627" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" dependencies = [ "winnow 0.7.13", ] @@ -5705,9 +5703,9 @@ checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "toml_writer" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d163a63c116ce562a22cda521fcc4d79152e7aba014456fb5eb442f6d6a10109" +checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2" [[package]] name = "tracing" @@ -5728,7 +5726,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] @@ -5764,15 +5762,15 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.18" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" dependencies = [ "matchers", - "nu-ansi-term 0.46.0", + "nu-ansi-term", "once_cell", "parking_lot", - "regex", + "regex-automata", "sharded-slab", "smallvec", "thread_local", @@ -5787,7 +5785,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b56c62d2c80033cb36fae448730a2f2ef99410fe3ecbffc916681a32f6807dbe" dependencies = [ - "nu-ansi-term 0.50.1", + "nu-ansi-term", "tracing-core", "tracing-log", "tracing-subscriber", @@ -5806,9 +5804,9 @@ dependencies = [ [[package]] name = "twox-hash" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b907da542cbced5261bd3256de1b3a1bf340a3d37f93425a07362a1d687de56" +checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c" [[package]] name = "type-map" @@ -5827,9 +5825,9 @@ checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" [[package]] name = "typenum" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "ucd-parse" @@ -5848,9 +5846,9 @@ checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" [[package]] name = "ui_test" -version = "0.30.2" +version = "0.30.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b56a6897cc4bb6f8daf1939b0b39cd9645856997f46f4d0b3e3cb7122dfe9251" +checksum = "44eb652e1a8799d4e47f20851370e86247cbc5270ce677ab1e9409a6d45a9649" dependencies = [ "annotate-snippets 0.11.5", "anyhow", @@ -5858,7 +5856,7 @@ dependencies = [ "cargo-platform 0.1.9", "cargo_metadata 0.18.1", "color-eyre", - "colored 2.2.0", + "colored 3.0.0", "comma", "crossbeam-channel", "indicatif", @@ -5911,7 +5909,7 @@ checksum = "a1249a628de3ad34b821ecb1001355bca3940bcb2f88558f1a8bd82e977f75b5" dependencies = [ "proc-macro-hack", "quote", - "syn 2.0.106", + "syn 2.0.110", "unic-langid-impl", ] @@ -6008,13 +6006,14 @@ dependencies = [ [[package]] name = "url" -version = "2.5.4" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", "idna", "percent-encoding", + "serde", ] [[package]] @@ -6049,9 +6048,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.18.0" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f33196643e165781c20a5ead5582283a7dacbb87855d867fbc2df3f81eddc1be" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" dependencies = [ "getrandom 0.3.3", "js-sys", @@ -6109,35 +6108,22 @@ checksum = "7ec3ef3783e18f2457796ed91b1e6c2adc46f2905f740d1527ab3053fe8e5682" [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn 2.0.106", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6145,22 +6131,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" dependencies = [ + "bumpalo", "proc-macro2", "quote", - "syn 2.0.106", - "wasm-bindgen-backend", + "syn 2.0.110", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" dependencies = [ "unicode-ident", ] @@ -6251,7 +6237,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46d90019b1afd4b808c263e428de644f3003691f243387d30d673211ee0cb8e8" dependencies = [ "bitflags", - "hashbrown", + "hashbrown 0.15.5", "indexmap", "semver", "serde", @@ -6307,11 +6293,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -6320,16 +6306,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows" -version = "0.58.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" -dependencies = [ - "windows-core 0.58.0", - "windows-targets 0.52.6", -] - [[package]] name = "windows" version = "0.61.3" @@ -6365,28 +6341,28 @@ dependencies = [ [[package]] name = "windows-core" -version = "0.58.0" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ - "windows-implement 0.58.0", - "windows-interface 0.58.0", - "windows-result 0.2.0", - "windows-strings 0.1.0", - "windows-targets 0.52.6", + "windows-implement", + "windows-interface", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", ] [[package]] name = "windows-core" -version = "0.61.2" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ - "windows-implement 0.60.0", - "windows-interface 0.59.1", - "windows-link 0.1.3", - "windows-result 0.3.4", - "windows-strings 0.4.2", + "windows-implement", + "windows-interface", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", ] [[package]] @@ -6402,46 +6378,24 @@ dependencies = [ [[package]] name = "windows-implement" -version = "0.58.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "windows-implement" -version = "0.60.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "windows-interface" -version = "0.58.0" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] name = "windows-interface" -version = "0.59.1" +version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] @@ -6466,15 +6420,6 @@ dependencies = [ "windows-link 0.1.3", ] -[[package]] -name = "windows-result" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" -dependencies = [ - "windows-targets 0.52.6", -] - [[package]] name = "windows-result" version = "0.3.4" @@ -6485,13 +6430,12 @@ dependencies = [ ] [[package]] -name = "windows-strings" -version = "0.1.0" +name = "windows-result" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ - "windows-result 0.2.0", - "windows-targets 0.52.6", + "windows-link 0.2.1", ] [[package]] @@ -6504,12 +6448,12 @@ dependencies = [ ] [[package]] -name = "windows-sys" -version = "0.52.0" +name = "windows-strings" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ - "windows-targets 0.52.6", + "windows-link 0.2.1", ] [[package]] @@ -6527,7 +6471,7 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.3", + "windows-targets 0.53.5", ] [[package]] @@ -6557,19 +6501,19 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.3" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ - "windows-link 0.1.3", - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", + "windows-link 0.2.1", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", ] [[package]] @@ -6589,9 +6533,9 @@ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" [[package]] name = "windows_aarch64_msvc" @@ -6601,9 +6545,9 @@ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_aarch64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" [[package]] name = "windows_i686_gnu" @@ -6613,9 +6557,9 @@ checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" [[package]] name = "windows_i686_gnullvm" @@ -6625,9 +6569,9 @@ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" [[package]] name = "windows_i686_msvc" @@ -6637,9 +6581,9 @@ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_i686_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" [[package]] name = "windows_x86_64_gnu" @@ -6649,9 +6593,9 @@ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" [[package]] name = "windows_x86_64_gnullvm" @@ -6661,9 +6605,9 @@ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" [[package]] name = "windows_x86_64_msvc" @@ -6673,9 +6617,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "windows_x86_64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" @@ -6749,9 +6693,9 @@ dependencies = [ [[package]] name = "writeable" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" [[package]] name = "x" @@ -6759,9 +6703,9 @@ version = "0.1.1" [[package]] name = "xattr" -version = "1.5.1" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af3a19837351dc82ba89f8a125e22a3c475f05aba604acc023d62b2739ae2909" +checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" dependencies = [ "libc", "rustix", @@ -6787,11 +6731,10 @@ dependencies = [ [[package]] name = "yoke" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" dependencies = [ - "serde", "stable_deref_trait", "yoke-derive", "zerofrom", @@ -6799,34 +6742,34 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.110", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.110", ] [[package]] @@ -6846,15 +6789,15 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.110", "synstructure", ] [[package]] name = "zerotrie" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" dependencies = [ "displaydoc", "yoke", @@ -6863,10 +6806,11 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.4" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" dependencies = [ + "serde", "yoke", "zerofrom", "zerovec-derive", @@ -6874,11 +6818,11 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.110", ] diff --git a/compiler/rustc/Cargo.toml b/compiler/rustc/Cargo.toml index 9ef8fa75062a2..ea38e2806da51 100644 --- a/compiler/rustc/Cargo.toml +++ b/compiler/rustc/Cargo.toml @@ -20,6 +20,13 @@ rustc_public = { path = "../rustc_public" } rustc_public_bridge = { path = "../rustc_public_bridge" } # tidy-alphabetical-end +# Pin these to avoid pulling in a package with a binary blob +# +[target.'cfg(target_os = "wasi")'.dependencies] +getrandom = "=0.3.3" +wasi = "=0.14.2" + + [dependencies.tikv-jemalloc-sys] version = "0.6.0" optional = true diff --git a/src/bootstrap/src/utils/proc_macro_deps.rs b/src/bootstrap/src/utils/proc_macro_deps.rs index 83e5580eaa913..3873e0c928a50 100644 --- a/src/bootstrap/src/utils/proc_macro_deps.rs +++ b/src/bootstrap/src/utils/proc_macro_deps.rs @@ -3,7 +3,6 @@ /// See pub static CRATES: &[&str] = &[ // tidy-alphabetical-start - "allocator-api2", "annotate-snippets", "anstyle", "askama_parser", @@ -22,7 +21,6 @@ pub static CRATES: &[&str] = &[ "fluent-langneg", "fluent-syntax", "fnv", - "foldhash", "generic-array", "hashbrown", "heck", @@ -31,7 +29,6 @@ pub static CRATES: &[&str] = &[ "intl-memoizer", "intl_pluralrules", "libc", - "log", "memchr", "minimal-lexical", "nom", @@ -62,7 +59,6 @@ pub static CRATES: &[&str] = &[ "unicode-ident", "unicode-width", "version_check", - "wasm-bindgen-backend", "wasm-bindgen-macro-support", "wasm-bindgen-shared", "winnow", diff --git a/src/tools/tidy/src/deps.rs b/src/tools/tidy/src/deps.rs index 93d38d929c6d0..b60b709c8edac 100644 --- a/src/tools/tidy/src/deps.rs +++ b/src/tools/tidy/src/deps.rs @@ -55,6 +55,7 @@ const LICENSES_TOOLS: &[&str] = &[ "0BSD", "Apache-2.0 AND ISC", "Apache-2.0 OR BSL-1.0", // BSL is not acceptable, but we use it under Apache-2.0 + "Apache-2.0 OR GPL-2.0-only", "Apache-2.0 WITH LLVM-exception", "Apache-2.0", "BSD-2-Clause", @@ -279,10 +280,10 @@ const PERMITTED_RUSTC_DEPENDENCIES: &[&str] = &[ "ar_archive_writer", "arrayref", "arrayvec", - "autocfg", "bitflags", "blake3", "block-buffer", + "block2", "bstr", "cc", "cfg-if", @@ -303,6 +304,7 @@ const PERMITTED_RUSTC_DEPENDENCIES: &[&str] = &[ "derive-where", "derive_setters", "digest", + "dispatch2", "displaydoc", "dissimilar", "dyn-clone", @@ -359,11 +361,12 @@ const PERMITTED_RUSTC_DEPENDENCIES: &[&str] = &[ "miniz_oxide", "nix", "nu-ansi-term", + "objc2", + "objc2-encode", "object", "odht", "once_cell", "once_cell_polyfill", - "overload", "parking_lot", "parking_lot_core", "pathdiff", @@ -416,6 +419,7 @@ const PERMITTED_RUSTC_DEPENDENCIES: &[&str] = &[ "sha2", "sharded-slab", "shlex", + "simd-adler32", "smallvec", "stable_deref_trait", "stacker", @@ -461,9 +465,6 @@ const PERMITTED_RUSTC_DEPENDENCIES: &[&str] = &[ "wasi", "wasm-encoder", "wasmparser", - "winapi", - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", "windows", "windows-collections", "windows-core", From 10172d1c250c132894f49ec4fa25a8555adadf65 Mon Sep 17 00:00:00 2001 From: "Eddy (Eduard) Stefes" Date: Tue, 18 Nov 2025 11:39:00 +0100 Subject: [PATCH 28/31] disable the fragment_in_dst_padding_gets_overwritten test on s390x on s390x 128bit types have a smaller alignment then on x86[^1]. This leads to smaller structs and therefore the write_unaligned will write outside of the structs boundary. For now disable the tests on s390x. [^2] [^1]: s390x ELF ABI Table 1.1, Page 12 https://github.com/IBM/s390x-abi [^2]: https://github.com/rust-lang/rust/pull/149056#issuecomment-3547543222 Co-authored-by: Ralf Jung --- tests/ui/consts/const-eval/ptr_fragments.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/ui/consts/const-eval/ptr_fragments.rs b/tests/ui/consts/const-eval/ptr_fragments.rs index c251eea8add54..d27804084d73d 100644 --- a/tests/ui/consts/const-eval/ptr_fragments.rs +++ b/tests/ui/consts/const-eval/ptr_fragments.rs @@ -68,6 +68,7 @@ const _PARTIAL_OVERWRITE: () = { }; #[allow(dead_code)] +#[cfg(not(target_arch = "s390x"))] // u128 is less aligned on s390x, removing the padding fn fragment_in_dst_padding_gets_overwritten() { #[repr(C)] struct Pair { From cdd88963c8234c31db67b5e79fe0da1f7966bfdf Mon Sep 17 00:00:00 2001 From: Christian Poveda Date: Tue, 18 Nov 2025 19:07:34 -0500 Subject: [PATCH 29/31] Add test scaffolding for the `remote-test-client` --- Cargo.lock | 66 +++++++++++++++++++ src/bootstrap/src/core/build_steps/test.rs | 37 +++++++++++ .../builder/cli_paths/snapshots/x_test.snap | 4 ++ .../snapshots/x_test_skip_coverage.snap | 4 ++ .../snapshots/x_test_skip_tests.snap | 4 ++ .../snapshots/x_test_skip_tests_etc.snap | 4 ++ src/bootstrap/src/core/builder/mod.rs | 1 + src/tools/remote-test-client/Cargo.toml | 1 + src/tools/remote-test-client/tests/lib.rs | 10 +++ 9 files changed, 131 insertions(+) create mode 100644 src/tools/remote-test-client/tests/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 9dce64ce66ab6..cf16428f11b7b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -229,6 +229,21 @@ dependencies = [ "winnow 0.7.13", ] +[[package]] +name = "assert_cmd" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcbb6924530aa9e0432442af08bbcafdad182db80d2e560da42a6d442535bf85" +dependencies = [ + "anstyle", + "bstr", + "libc", + "predicates", + "predicates-core", + "predicates-tree", + "wait-timeout", +] + [[package]] name = "autocfg" version = "1.5.0" @@ -1151,6 +1166,12 @@ version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" +[[package]] +name = "difflib" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" + [[package]] name = "digest" version = "0.10.7" @@ -2982,6 +3003,33 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" +[[package]] +name = "predicates" +version = "3.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5d19ee57562043d37e82899fade9a22ebab7be9cef5026b07fda9cdd4293573" +dependencies = [ + "anstyle", + "difflib", + "predicates-core", +] + +[[package]] +name = "predicates-core" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "727e462b119fe9c93fd0eb1429a5f7647394014cf3c04ab2c0350eeb09095ffa" + +[[package]] +name = "predicates-tree" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72dd2d6d381dfb73a193c7fca536518d7caee39fc8503f74e7dc0be0531b425c" +dependencies = [ + "predicates-core", + "termtree", +] + [[package]] name = "prettydiff" version = "0.7.0" @@ -3262,6 +3310,9 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "remote-test-client" version = "0.1.0" +dependencies = [ + "assert_cmd", +] [[package]] name = "remote-test-server" @@ -5458,6 +5509,12 @@ dependencies = [ "windows-sys 0.60.2", ] +[[package]] +name = "termtree" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683" + [[package]] name = "test-float-parse" version = "0.1.0" @@ -6076,6 +6133,15 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "wait-timeout" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" +dependencies = [ + "libc", +] + [[package]] name = "walkdir" version = "2.5.0" diff --git a/src/bootstrap/src/core/build_steps/test.rs b/src/bootstrap/src/core/build_steps/test.rs index 2332256c1fbd3..4fc938d33c6c6 100644 --- a/src/bootstrap/src/core/build_steps/test.rs +++ b/src/bootstrap/src/core/build_steps/test.rs @@ -4003,3 +4003,40 @@ impl Step for CollectLicenseMetadata { dest } } + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct RemoteTestClientTests { + host: TargetSelection, +} + +impl Step for RemoteTestClientTests { + type Output = (); + const IS_HOST: bool = true; + const DEFAULT: bool = true; + + fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> { + run.path("src/tools/remote-test-client") + } + + fn make_run(run: RunConfig<'_>) { + run.builder.ensure(Self { host: run.target }); + } + + fn run(self, builder: &Builder<'_>) { + let bootstrap_host = builder.config.host_target; + let compiler = builder.compiler(0, bootstrap_host); + + let cargo = tool::prepare_tool_cargo( + builder, + compiler, + Mode::ToolBootstrap, + bootstrap_host, + Kind::Test, + "src/tools/remote-test-client", + SourceType::InTree, + &[], + ); + + run_cargo_test(cargo, &[], &[], "remote-test-client", bootstrap_host, builder); + } +} diff --git a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test.snap b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test.snap index b9cb897a75697..fd18b59a9c6d5 100644 --- a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test.snap +++ b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test.snap @@ -1,5 +1,6 @@ --- source: src/bootstrap/src/core/builder/cli_paths/tests.rs +assertion_line: 68 expression: test --- [Test] test::Tidy @@ -158,6 +159,9 @@ expression: test - Set({test::src/tools/jsondoclint}) - Set({test::src/tools/replace-version-placeholder}) - Set({test::tidyselftest}) +[Test] test::RemoteTestClientTests + targets: [x86_64-unknown-linux-gnu] + - Set({test::src/tools/remote-test-client}) [Test] test::Linkcheck targets: [x86_64-unknown-linux-gnu] - Set({test::src/tools/linkchecker}) diff --git a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_coverage.snap b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_coverage.snap index 04253bba5ef7c..1716805154760 100644 --- a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_coverage.snap +++ b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_coverage.snap @@ -1,5 +1,6 @@ --- source: src/bootstrap/src/core/builder/cli_paths/tests.rs +assertion_line: 68 expression: test --skip=coverage --- [Test] test::Tidy @@ -157,6 +158,9 @@ expression: test --skip=coverage - Set({test::src/tools/jsondoclint}) - Set({test::src/tools/replace-version-placeholder}) - Set({test::tidyselftest}) +[Test] test::RemoteTestClientTests + targets: [x86_64-unknown-linux-gnu] + - Set({test::src/tools/remote-test-client}) [Test] test::Linkcheck targets: [x86_64-unknown-linux-gnu] - Set({test::src/tools/linkchecker}) diff --git a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests.snap b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests.snap index f10589548f665..1468964c78189 100644 --- a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests.snap +++ b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests.snap @@ -1,5 +1,6 @@ --- source: src/bootstrap/src/core/builder/cli_paths/tests.rs +assertion_line: 68 expression: test --skip=tests --- [Test] test::Tidy @@ -121,6 +122,9 @@ expression: test --skip=tests - Set({test::src/tools/jsondoclint}) - Set({test::src/tools/replace-version-placeholder}) - Set({test::tidyselftest}) +[Test] test::RemoteTestClientTests + targets: [x86_64-unknown-linux-gnu] + - Set({test::src/tools/remote-test-client}) [Test] test::Linkcheck targets: [x86_64-unknown-linux-gnu] - Set({test::src/tools/linkchecker}) diff --git a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests_etc.snap b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests_etc.snap index 65e05dfaef2d9..7ff6a201e77a2 100644 --- a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests_etc.snap +++ b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests_etc.snap @@ -1,5 +1,6 @@ --- source: src/bootstrap/src/core/builder/cli_paths/tests.rs +assertion_line: 68 expression: test --skip=tests --skip=coverage-map --skip=coverage-run --skip=library --skip=tidyselftest --- [Test] test::Tidy @@ -100,6 +101,9 @@ expression: test --skip=tests --skip=coverage-map --skip=coverage-run --skip=lib - Set({test::src/tools/coverage-dump}) - Set({test::src/tools/jsondoclint}) - Set({test::src/tools/replace-version-placeholder}) +[Test] test::RemoteTestClientTests + targets: [x86_64-unknown-linux-gnu] + - Set({test::src/tools/remote-test-client}) [Test] test::Linkcheck targets: [x86_64-unknown-linux-gnu] - Set({test::src/tools/linkchecker}) diff --git a/src/bootstrap/src/core/builder/mod.rs b/src/bootstrap/src/core/builder/mod.rs index 9124442e7f376..c326fe27d2c81 100644 --- a/src/bootstrap/src/core/builder/mod.rs +++ b/src/bootstrap/src/core/builder/mod.rs @@ -904,6 +904,7 @@ impl<'a> Builder<'a> { test::CrateRustdoc, test::CrateRustdocJsonTypes, test::CrateBootstrap, + test::RemoteTestClientTests, test::Linkcheck, test::TierCheck, test::Cargotest, diff --git a/src/tools/remote-test-client/Cargo.toml b/src/tools/remote-test-client/Cargo.toml index d59cd6b3d8e22..6fe690ba20380 100644 --- a/src/tools/remote-test-client/Cargo.toml +++ b/src/tools/remote-test-client/Cargo.toml @@ -4,3 +4,4 @@ version = "0.1.0" edition = "2021" [dependencies] +assert_cmd = "2" diff --git a/src/tools/remote-test-client/tests/lib.rs b/src/tools/remote-test-client/tests/lib.rs new file mode 100644 index 0000000000000..663afbfb6c7dd --- /dev/null +++ b/src/tools/remote-test-client/tests/lib.rs @@ -0,0 +1,10 @@ +#[test] +fn test_help() { + let mut cmd = assert_cmd::cargo::cargo_bin_cmd!(); + cmd.arg("help"); + + let output = cmd.unwrap(); + + let stdout = String::from_utf8(output.stdout.clone()).unwrap(); + assert!(stdout.trim().starts_with("Usage:")); +} From e7b84604cbebc3c5228fb444087015fe0ed66a68 Mon Sep 17 00:00:00 2001 From: Alona Enraght-Moony Date: Wed, 29 Oct 2025 17:07:54 +0000 Subject: [PATCH 30/31] rustc_public: Make Id types !Send / !Sync These types are Id's to a table stored in TLS, so using them from another tread will either panic, or give wrong results. Therefor, I've added a `ThreadLocalIndex` marker type, which ensures types arn't `Send`/`Sync`. This is a breaking change for users of the `rustc_public` crate. Zulip Discussion: https://rust-lang.zulipchat.com/#narrow/channel/320896-project-stable-mir/topic/WDYM.20.22should.20not.20.20be.20shared.20across.20threads.22/with/547374171 --- Cargo.lock | 1 + compiler/rustc_public/Cargo.toml | 7 ++- compiler/rustc_public/src/abi.rs | 18 ++---- .../rustc_public/src/compiler_interface.rs | 4 +- compiler/rustc_public/src/crate_def.rs | 11 ++-- compiler/rustc_public/src/lib.rs | 44 +++++++++---- compiler/rustc_public/src/mir/alloc.rs | 18 ++---- compiler/rustc_public/src/mir/mono.rs | 18 ++---- .../rustc_public/src/rustc_internal/mod.rs | 2 +- compiler/rustc_public/src/tests.rs | 63 +++++++++++++++++++ compiler/rustc_public/src/ty.rs | 39 ++++++++---- .../src/unstable/convert/internal.rs | 2 +- 12 files changed, 153 insertions(+), 74 deletions(-) create mode 100644 compiler/rustc_public/src/tests.rs diff --git a/Cargo.lock b/Cargo.lock index 5e9ba9b432793..6f43b9b798eb2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4440,6 +4440,7 @@ dependencies = [ "rustc_target", "scoped-tls", "serde", + "serde_json", "tracing", ] diff --git a/compiler/rustc_public/Cargo.toml b/compiler/rustc_public/Cargo.toml index 70af30c1a5f46..c2b00b515adc6 100644 --- a/compiler/rustc_public/Cargo.toml +++ b/compiler/rustc_public/Cargo.toml @@ -13,10 +13,15 @@ rustc_session = { path = "../rustc_session" } rustc_span = { path = "../rustc_span" } rustc_target = { path = "../rustc_target" } scoped-tls = "1.0" -serde = { version = "1.0.125", features = [ "derive" ] } +serde = { version = "1.0.125", features = ["derive"] } tracing = "0.1" # tidy-alphabetical-end +[dev-dependencies] +# tidy-alphabetical-start +serde_json = "1.0.142" +# tidy-alphabetical-end + [features] # tidy-alphabetical-start # Provides access to APIs that expose internals of the rust compiler. diff --git a/compiler/rustc_public/src/abi.rs b/compiler/rustc_public/src/abi.rs index 7b0882caf1b3e..820c41acf5b23 100644 --- a/compiler/rustc_public/src/abi.rs +++ b/compiler/rustc_public/src/abi.rs @@ -7,8 +7,8 @@ use serde::Serialize; use crate::compiler_interface::with; use crate::mir::FieldIdx; use crate::target::{MachineInfo, MachineSize as Size}; -use crate::ty::{Align, Ty, VariantIdx}; -use crate::{Error, Opaque, error}; +use crate::ty::{Align, Ty, VariantIdx, index_impl}; +use crate::{Error, Opaque, ThreadLocalIndex, error}; /// A function ABI definition. #[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize)] @@ -109,8 +109,9 @@ impl LayoutShape { } } -#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize)] -pub struct Layout(usize); +#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)] +pub struct Layout(usize, ThreadLocalIndex); +index_impl!(Layout); impl Layout { pub fn shape(self) -> LayoutShape { @@ -118,15 +119,6 @@ impl Layout { } } -impl crate::IndexedVal for Layout { - fn to_val(index: usize) -> Self { - Layout(index) - } - fn to_index(&self) -> usize { - self.0 - } -} - /// Describes how the fields of a type are shaped in memory. #[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize)] pub enum FieldsShape { diff --git a/compiler/rustc_public/src/compiler_interface.rs b/compiler/rustc_public/src/compiler_interface.rs index 5a09c3b24f0f1..2af66fcaa5a48 100644 --- a/compiler/rustc_public/src/compiler_interface.rs +++ b/compiler/rustc_public/src/compiler_interface.rs @@ -25,7 +25,7 @@ use crate::ty::{ use crate::unstable::{RustcInternal, Stable, new_item_kind}; use crate::{ AssocItems, Crate, CrateDef, CrateItem, CrateItems, CrateNum, DefId, Error, Filename, - ImplTraitDecls, ItemKind, Symbol, TraitDecls, alloc, mir, + ImplTraitDecls, ItemKind, Symbol, ThreadLocalIndex, TraitDecls, alloc, mir, }; pub struct BridgeTys; @@ -1093,7 +1093,7 @@ fn smir_crate<'tcx>( ) -> Crate { let name = cx.crate_name(crate_num); let is_local = cx.crate_is_local(crate_num); - let id = cx.crate_num_id(crate_num); + let id = CrateNum(cx.crate_num_id(crate_num), ThreadLocalIndex); debug!(?name, ?crate_num, "smir_crate"); Crate { id, name, is_local } } diff --git a/compiler/rustc_public/src/crate_def.rs b/compiler/rustc_public/src/crate_def.rs index 75228135e4cb3..95a7908b19bdd 100644 --- a/compiler/rustc_public/src/crate_def.rs +++ b/compiler/rustc_public/src/crate_def.rs @@ -1,14 +1,13 @@ //! Module that define a common trait for things that represent a crate definition, //! such as, a function, a trait, an enum, and any other definitions. -use serde::Serialize; - -use crate::ty::{GenericArgs, Span, Ty}; -use crate::{AssocItems, Crate, Symbol, with}; +use crate::ty::{GenericArgs, Span, Ty, index_impl}; +use crate::{AssocItems, Crate, Symbol, ThreadLocalIndex, with}; /// A unique identification number for each item accessible for the current compilation unit. -#[derive(Clone, Copy, PartialEq, Eq, Hash, Serialize)] -pub struct DefId(pub(crate) usize); +#[derive(Clone, Copy, PartialEq, Eq, Hash)] +pub struct DefId(pub(crate) usize, ThreadLocalIndex); +index_impl!(DefId); impl DefId { /// Return fully qualified name of this definition diff --git a/compiler/rustc_public/src/lib.rs b/compiler/rustc_public/src/lib.rs index 958b3b2647889..9d64553b7a662 100644 --- a/compiler/rustc_public/src/lib.rs +++ b/compiler/rustc_public/src/lib.rs @@ -20,6 +20,7 @@ //! [crates.io](https://crates.io). use std::fmt::Debug; +use std::marker::PhantomData; use std::{fmt, io}; pub(crate) use rustc_public_bridge::IndexedVal; @@ -36,7 +37,10 @@ pub use crate::crate_def::{CrateDef, CrateDefItems, CrateDefType, DefId}; pub use crate::error::*; use crate::mir::mono::StaticDef; use crate::mir::{Body, Mutability}; -use crate::ty::{AssocItem, FnDef, ForeignModuleDef, ImplDef, ProvenanceMap, Span, TraitDef, Ty}; +use crate::ty::{ + AssocItem, FnDef, ForeignModuleDef, ImplDef, ProvenanceMap, Span, TraitDef, Ty, + serialize_index_impl, +}; use crate::unstable::Stable; pub mod abi; @@ -49,6 +53,8 @@ pub mod compiler_interface; pub mod error; pub mod mir; pub mod target; +#[cfg(test)] +mod tests; pub mod ty; pub mod visitor; @@ -56,7 +62,9 @@ pub mod visitor; pub type Symbol = String; /// The number that identifies a crate. -pub type CrateNum = usize; +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub struct CrateNum(pub(crate) usize, ThreadLocalIndex); +serialize_index_impl!(CrateNum); impl Debug for DefId { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { @@ -64,16 +72,6 @@ impl Debug for DefId { } } -impl IndexedVal for DefId { - fn to_val(index: usize) -> Self { - DefId(index) - } - - fn to_index(&self) -> usize { - self.0 - } -} - /// A list of crate items. pub type CrateItems = Vec; @@ -300,3 +298,25 @@ impl rustc_public_bridge::bridge::Allocation } } } + +#[derive(Clone, Copy, Hash, PartialEq, Eq, Default)] +/// Marker type for indexes into thread local structures. +/// +/// Makes things `!Send`/`!Sync`, so users don't move `rustc_public` types to +/// thread with no (or worse, different) `rustc_public` pointer. +/// +/// Note. This doesn't make it impossible to confuse TLS. You could return a +/// `DefId` from one `run!` invocation, and then use it inside a different +/// `run!` invocation with different tables. +pub(crate) struct ThreadLocalIndex { + _phantom: PhantomData<*const ()>, +} +#[expect(non_upper_case_globals)] +/// Emulating unit struct `struct ThreadLocalIndex`; +pub(crate) const ThreadLocalIndex: ThreadLocalIndex = ThreadLocalIndex { _phantom: PhantomData }; + +impl fmt::Debug for ThreadLocalIndex { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_tuple("ThreadLocalIndex").finish() + } +} diff --git a/compiler/rustc_public/src/mir/alloc.rs b/compiler/rustc_public/src/mir/alloc.rs index 07a979f3811e4..b267e3612d808 100644 --- a/compiler/rustc_public/src/mir/alloc.rs +++ b/compiler/rustc_public/src/mir/alloc.rs @@ -6,8 +6,8 @@ use serde::Serialize; use crate::mir::mono::{Instance, StaticDef}; use crate::target::{Endian, MachineInfo}; -use crate::ty::{Allocation, Binder, ExistentialTraitRef, Ty}; -use crate::{Error, IndexedVal, with}; +use crate::ty::{Allocation, Binder, ExistentialTraitRef, Ty, index_impl}; +use crate::{Error, ThreadLocalIndex, with}; /// An allocation in the rustc_public's IR global memory can be either a function pointer, /// a static, or a "real" allocation with some data in it. @@ -47,17 +47,9 @@ impl GlobalAlloc { } /// A unique identification number for each provenance -#[derive(Clone, Copy, PartialEq, Eq, Debug, Hash, Serialize)] -pub struct AllocId(usize); - -impl IndexedVal for AllocId { - fn to_val(index: usize) -> Self { - AllocId(index) - } - fn to_index(&self) -> usize { - self.0 - } -} +#[derive(Clone, Copy, PartialEq, Eq, Debug, Hash)] +pub struct AllocId(usize, ThreadLocalIndex); +index_impl!(AllocId); /// Utility function used to read an allocation data into a unassigned integer. pub(crate) fn read_target_uint(mut bytes: &[u8]) -> Result { diff --git a/compiler/rustc_public/src/mir/mono.rs b/compiler/rustc_public/src/mir/mono.rs index d488f5a25c7d9..ab939a5535149 100644 --- a/compiler/rustc_public/src/mir/mono.rs +++ b/compiler/rustc_public/src/mir/mono.rs @@ -7,8 +7,8 @@ use serde::Serialize; use crate::abi::FnAbi; use crate::crate_def::CrateDef; use crate::mir::Body; -use crate::ty::{Allocation, ClosureDef, ClosureKind, FnDef, GenericArgs, Ty}; -use crate::{CrateItem, DefId, Error, IndexedVal, ItemKind, Opaque, Symbol, with}; +use crate::ty::{Allocation, ClosureDef, ClosureKind, FnDef, GenericArgs, Ty, index_impl}; +use crate::{CrateItem, DefId, Error, ItemKind, Opaque, Symbol, ThreadLocalIndex, with}; #[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize)] pub enum MonoItem { @@ -241,8 +241,9 @@ impl From for CrateItem { } } -#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize)] -pub struct InstanceDef(usize); +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +pub struct InstanceDef(usize, ThreadLocalIndex); +index_impl!(InstanceDef); impl CrateDef for InstanceDef { fn def_id(&self) -> DefId { @@ -294,12 +295,3 @@ impl StaticDef { with(|cx| cx.eval_static_initializer(*self)) } } - -impl IndexedVal for InstanceDef { - fn to_val(index: usize) -> Self { - InstanceDef(index) - } - fn to_index(&self) -> usize { - self.0 - } -} diff --git a/compiler/rustc_public/src/rustc_internal/mod.rs b/compiler/rustc_public/src/rustc_internal/mod.rs index 225c811ab3a54..dc8afb89d949e 100644 --- a/compiler/rustc_public/src/rustc_internal/mod.rs +++ b/compiler/rustc_public/src/rustc_internal/mod.rs @@ -53,7 +53,7 @@ where } pub fn crate_num(item: &crate::Crate) -> CrateNum { - item.id.into() + item.id.0.into() } // A thread local variable that stores a pointer to the tables mapping between TyCtxt diff --git a/compiler/rustc_public/src/tests.rs b/compiler/rustc_public/src/tests.rs new file mode 100644 index 0000000000000..9c3f956c37df4 --- /dev/null +++ b/compiler/rustc_public/src/tests.rs @@ -0,0 +1,63 @@ +use rustc_public_bridge::IndexedVal; + +use crate::abi::Layout; +use crate::mir::alloc::AllocId; +use crate::mir::mono::InstanceDef; +use crate::ty::{MirConstId, TyConstId, VariantIdx}; +use crate::{CrateNum, DefId, Span, ThreadLocalIndex, Ty}; + +#[track_caller] +fn check_serialize(value: T, expected_json: &str) { + let got_json = serde_json::to_string(&value).unwrap(); + assert_eq!(got_json, expected_json, "didn't get expected json for serializing"); +} + +#[test] +fn serialize_cratenum() { + check_serialize(CrateNum(1, ThreadLocalIndex), "1"); +} + +#[test] +fn serialize_defid() { + check_serialize(DefId::to_val(2), "2"); +} + +#[test] +fn serialize_layout() { + check_serialize(Layout::to_val(3), "3"); +} + +#[test] +fn serialize_allocid() { + check_serialize(AllocId::to_val(4), "4"); +} + +#[test] +fn serialize_ty() { + check_serialize(Ty::to_val(5), "5"); +} + +#[test] +fn serialize_tyconstid() { + check_serialize(TyConstId::to_val(6), "6"); +} + +#[test] +fn serialize_mirconstid() { + check_serialize(MirConstId::to_val(7), "7"); +} + +#[test] +fn serialize_span() { + check_serialize(Span::to_val(8), "8"); +} + +#[test] +fn serialize_variantidx() { + check_serialize(VariantIdx::to_val(9), "9"); +} + +#[test] +fn serialize_instancedef() { + check_serialize(InstanceDef::to_val(10), "10"); +} diff --git a/compiler/rustc_public/src/ty.rs b/compiler/rustc_public/src/ty.rs index 0afb94c18d7b9..f24d98f7e5521 100644 --- a/compiler/rustc_public/src/ty.rs +++ b/compiler/rustc_public/src/ty.rs @@ -11,10 +11,10 @@ use crate::crate_def::{CrateDef, CrateDefItems, CrateDefType}; use crate::mir::alloc::{AllocId, read_target_int, read_target_uint}; use crate::mir::mono::StaticDef; use crate::target::MachineInfo; -use crate::{Filename, IndexedVal, Opaque}; +use crate::{Filename, IndexedVal, Opaque, ThreadLocalIndex}; -#[derive(Copy, Clone, Eq, PartialEq, Hash, Serialize)] -pub struct Ty(usize); +#[derive(Copy, Clone, Eq, PartialEq, Hash)] +pub struct Ty(usize, ThreadLocalIndex); impl Debug for Ty { fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { @@ -151,8 +151,8 @@ pub enum TyConstKind { ZSTValue(Ty), } -#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Serialize)] -pub struct TyConstId(usize); +#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)] +pub struct TyConstId(usize, ThreadLocalIndex); /// Represents a constant in MIR #[derive(Clone, Debug, Eq, PartialEq, Hash, Serialize)] @@ -212,8 +212,8 @@ impl MirConst { } } -#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize)] -pub struct MirConstId(usize); +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +pub struct MirConstId(usize, ThreadLocalIndex); type Ident = Opaque; @@ -255,8 +255,8 @@ pub struct Placeholder { pub bound: T, } -#[derive(Clone, Copy, PartialEq, Eq, Hash, Serialize)] -pub struct Span(usize); +#[derive(Clone, Copy, PartialEq, Eq, Hash)] +pub struct Span(usize, ThreadLocalIndex); impl Debug for Span { fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { @@ -1560,14 +1560,29 @@ macro_rules! index_impl { ($name:ident) => { impl crate::IndexedVal for $name { fn to_val(index: usize) -> Self { - $name(index) + $name(index, $crate::ThreadLocalIndex) } fn to_index(&self) -> usize { self.0 } } + $crate::ty::serialize_index_impl!($name); + }; +} +macro_rules! serialize_index_impl { + ($name:ident) => { + impl ::serde::Serialize for $name { + fn serialize(&self, serializer: S) -> Result + where + S: ::serde::Serializer, + { + let n: usize = self.0; // Make sure we're serializing an int. + ::serde::Serialize::serialize(&n, serializer) + } + } }; } +pub(crate) use {index_impl, serialize_index_impl}; index_impl!(TyConstId); index_impl!(MirConstId); @@ -1587,8 +1602,8 @@ index_impl!(Span); /// `a` is in the variant with the `VariantIdx` of `0`, /// `c` is in the variant with the `VariantIdx` of `1`, and /// `g` is in the variant with the `VariantIdx` of `0`. -#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize)] -pub struct VariantIdx(usize); +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +pub struct VariantIdx(usize, ThreadLocalIndex); index_impl!(VariantIdx); diff --git a/compiler/rustc_public/src/unstable/convert/internal.rs b/compiler/rustc_public/src/unstable/convert/internal.rs index 064fb6c6803a5..d9f314a8e29cc 100644 --- a/compiler/rustc_public/src/unstable/convert/internal.rs +++ b/compiler/rustc_public/src/unstable/convert/internal.rs @@ -40,7 +40,7 @@ impl RustcInternal for CrateNum { _tables: &mut Tables<'_, BridgeTys>, _tcx: impl InternalCx<'tcx>, ) -> Self::T<'tcx> { - rustc_span::def_id::CrateNum::from_usize(*self) + rustc_span::def_id::CrateNum::from_usize(self.0) } } From a74d572b741322cb1e51fa7632b5066aa29dd48e Mon Sep 17 00:00:00 2001 From: David Tenty Date: Wed, 19 Nov 2025 15:09:32 -0500 Subject: [PATCH 31/31] [AIX][ppc64le-linux-gnu] Add Amy Kwan to target maintainers --- src/doc/rustc/src/platform-support/aix.md | 1 + .../rustc/src/platform-support/powerpc64le-unknown-linux-gnu.md | 1 + 2 files changed, 2 insertions(+) diff --git a/src/doc/rustc/src/platform-support/aix.md b/src/doc/rustc/src/platform-support/aix.md index 3002a5c4b2cd9..c06092eb123c8 100644 --- a/src/doc/rustc/src/platform-support/aix.md +++ b/src/doc/rustc/src/platform-support/aix.md @@ -8,6 +8,7 @@ Rust for AIX operating system, currently only 64-bit PowerPC is supported. [@daltenty](https://github.com/daltenty) [@gilamn5tr](https://github.com/gilamn5tr) +[@amy-kwan](https://github.com/amy-kwan) ## Requirements diff --git a/src/doc/rustc/src/platform-support/powerpc64le-unknown-linux-gnu.md b/src/doc/rustc/src/platform-support/powerpc64le-unknown-linux-gnu.md index 78c3e680fc3c6..c093a7d4ddba6 100644 --- a/src/doc/rustc/src/platform-support/powerpc64le-unknown-linux-gnu.md +++ b/src/doc/rustc/src/platform-support/powerpc64le-unknown-linux-gnu.md @@ -8,6 +8,7 @@ Target for 64-bit little endian PowerPC Linux programs [@daltenty](https://github.com/daltenty) [@gilamn5tr](https://github.com/gilamn5tr) +[@amy-kwan](https://github.com/amy-kwan) ## Requirements