Merge from rust-lang/rust

This commit is contained in:
Laurențiu Nicola 2025-05-01 10:22:16 +03:00
commit 7c335f8d7b
8 changed files with 52 additions and 42 deletions

View File

@ -28,7 +28,7 @@ jobs:
# Cache the josh directory with checked out rustc # Cache the josh directory with checked out rustc
cache-directories: "/home/runner/.cache/rustc-dev-guide-josh" cache-directories: "/home/runner/.cache/rustc-dev-guide-josh"
- name: Install josh - name: Install josh
run: RUSTFLAGS="--cap-lints warn" cargo +stable install josh-proxy --git https://github.com/josh-project/josh --tag r24.10.04 run: RUSTFLAGS="--cap-lints warn" cargo install josh-proxy --git https://github.com/josh-project/josh --tag r24.10.04
- name: Setup bot git name and email - name: Setup bot git name and email
run: | run: |
git config --global user.name 'The rustc-dev-guide Cronjob Bot' git config --global user.name 'The rustc-dev-guide Cronjob Bot'

View File

@ -77,7 +77,7 @@ This repository is linked to `rust-lang/rust` as a [josh](https://josh-project.g
You'll need to install `josh-proxy` locally via You'll need to install `josh-proxy` locally via
``` ```
cargo +stable install josh-proxy --git https://github.com/josh-project/josh --tag r24.10.04 cargo install josh-proxy --git https://github.com/josh-project/josh --tag r24.10.04
``` ```
Older versions of `josh-proxy` may not round trip commits losslessly so it is important to install this exact version. Older versions of `josh-proxy` may not round trip commits losslessly so it is important to install this exact version.
@ -106,5 +106,5 @@ You may observe "Nothing to pull" even if you *know* rustc-pull has something to
To minimize the likelihood of this happening, you may wish to keep a separate *minimal* git config that *only* has `[user]` entries from global git config, then repoint system git to use the minimal git config instead. E.g. To minimize the likelihood of this happening, you may wish to keep a separate *minimal* git config that *only* has `[user]` entries from global git config, then repoint system git to use the minimal git config instead. E.g.
``` ```
GIT_CONFIG_GLOBAL=/path/to/minimal/gitconfig GIT_CONFIG_SYSTEM='' cargo +stable run --manifest-path josh-sync/Cargo.toml -- rustc-pull GIT_CONFIG_GLOBAL=/path/to/minimal/gitconfig GIT_CONFIG_SYSTEM='' cargo run --manifest-path josh-sync/Cargo.toml -- rustc-pull
``` ```

View File

@ -1 +1 @@
b8005bff3248cfc6e327faf4fa631ac49bb49ba9 deb947971c8748f5c6203548ce4af9022f21eaf0

View File

@ -1,6 +1,7 @@
# Summary # Summary
[Getting Started](./getting-started.md) [Getting Started](./getting-started.md)
[About this guide](./about-this-guide.md) [About this guide](./about-this-guide.md)
--- ---
@ -231,9 +232,13 @@
--- ---
[Appendix A: Background topics](./appendix/background.md) [Appendix A: Background topics](./appendix/background.md)
[Appendix B: Glossary](./appendix/glossary.md) [Appendix B: Glossary](./appendix/glossary.md)
[Appendix C: Code Index](./appendix/code-index.md) [Appendix C: Code Index](./appendix/code-index.md)
[Appendix D: Compiler Lecture Series](./appendix/compiler-lecture.md) [Appendix D: Compiler Lecture Series](./appendix/compiler-lecture.md)
[Appendix E: Bibliography](./appendix/bibliography.md) [Appendix E: Bibliography](./appendix/bibliography.md)
[Appendix Z: HumorRust](./appendix/humorust.md) [Appendix Z: HumorRust](./appendix/humorust.md)

View File

@ -25,9 +25,10 @@ rustup toolchain install nightly # enables -Z unstable-options
You can then run our test cases: You can then run our test cases:
```bash ```bash
./x.py test --stage 1 library tests/ui/autodiff ./x.py test --stage 1 tests/codegen/autodiff
./x.py test --stage 1 library tests/codegen/autodiff ./x.py test --stage 1 tests/pretty/autodiff
./x.py test --stage 1 library tests/pretty/autodiff* ./x.py test --stage 1 tests/ui/autodiff
./x.py test --stage 1 tests/ui/feature-gates/feature-gate-autodiff.rs
``` ```
Autodiff is still experimental, so if you want to use it in your own projects, you will need to add `lto="fat"` to your Cargo.toml Autodiff is still experimental, so if you want to use it in your own projects, you will need to add `lto="fat"` to your Cargo.toml
@ -44,7 +45,7 @@ apt install wget vim python3 git curl libssl-dev pkg-config lld ninja-build cmak
``` ```
Then build rustc in a slightly altered way: Then build rustc in a slightly altered way:
```bash ```bash
git clone --depth=1 https://github.com/EnzymeAD/rust.git git clone --depth=1 https://github.com/rust-lang/rust.git
cd rust cd rust
./configure --enable-llvm-link-shared --enable-llvm-plugins --enable-llvm-enzyme --release-channel=nightly --enable-llvm-assertions --enable-clang --enable-lld --enable-option-checking --enable-ninja --disable-docs ./configure --enable-llvm-link-shared --enable-llvm-plugins --enable-llvm-enzyme --release-channel=nightly --enable-llvm-assertions --enable-clang --enable-lld --enable-option-checking --enable-ninja --disable-docs
./x dist ./x dist
@ -54,7 +55,8 @@ We then copy the tarball to our host. The dockerid is the newest entry under `do
docker cp <dockerid>:/rust/build/dist/rust-nightly-x86_64-unknown-linux-gnu.tar.gz rust-nightly-x86_64-unknown-linux-gnu.tar.gz docker cp <dockerid>:/rust/build/dist/rust-nightly-x86_64-unknown-linux-gnu.tar.gz rust-nightly-x86_64-unknown-linux-gnu.tar.gz
``` ```
Afterwards we can create a new (pre-release) tag on the EnzymeAD/rust repository and make a PR against the EnzymeAD/enzyme-explorer repository to update the tag. Afterwards we can create a new (pre-release) tag on the EnzymeAD/rust repository and make a PR against the EnzymeAD/enzyme-explorer repository to update the tag.
Remember to ping `tgymnich` on the PR to run his update script. Remember to ping `tgymnich` on the PR to run his update script. Note: We should archive EnzymeAD/rust and update the instructions here. The explorer should soon
be able to get the rustc toolchain from the official rust servers.
## Build instruction for Enzyme itself ## Build instruction for Enzyme itself

View File

@ -394,8 +394,8 @@ will be rare to want to use it. Finally, `MAGIC_EXTRA_RUSTFLAGS` bypasses the
this is `compiletest`. For unit tests and doc tests this is the `libtest` this is `compiletest`. For unit tests and doc tests this is the `libtest`
runner. runner.
Most test runner accept `--help`, which you can use to find out the options Most test runners accept `--help`,
accepted by the runner. which you can use to find out the options accepted by the runner.
## Environment Variables ## Environment Variables

View File

@ -38,13 +38,13 @@ If you've cloned your fork, then you will be able to reference it with `origin`
in your local repo. It may be helpful to also set up a remote for the official in your local repo. It may be helpful to also set up a remote for the official
rust-lang/rust repo via rust-lang/rust repo via
```sh ```console
git remote add upstream https://github.com/rust-lang/rust.git git remote add upstream https://github.com/rust-lang/rust.git
``` ```
if you're using HTTPS, or if you're using HTTPS, or
```sh ```console
git remote add upstream git@github.com:rust-lang/rust.git git remote add upstream git@github.com:rust-lang/rust.git
``` ```
@ -112,7 +112,7 @@ See [Rebasing](#rebasing) for more about rebasing.
This is not a problem from git's perspective. If you run `git remote -v`, This is not a problem from git's perspective. If you run `git remote -v`,
it will say something like this: it will say something like this:
``` ```console
$ git remote -v $ git remote -v
origin git@github.com:jyn514/rust.git (fetch) origin git@github.com:jyn514/rust.git (fetch)
origin git@github.com:jyn514/rust.git (push) origin git@github.com:jyn514/rust.git (push)
@ -158,11 +158,11 @@ To fix it, do the following things:
### I see "error: cannot rebase" when I try to rebase ### I see "error: cannot rebase" when I try to rebase
These are two common errors to see when rebasing: These are two common errors to see when rebasing:
``` ```console
error: cannot rebase: Your index contains uncommitted changes. error: cannot rebase: Your index contains uncommitted changes.
error: Please commit or stash them. error: Please commit or stash them.
``` ```
``` ```console
error: cannot rebase: You have unstaged changes. error: cannot rebase: You have unstaged changes.
error: Please commit or stash them. error: Please commit or stash them.
``` ```
@ -174,7 +174,7 @@ commit your changes, or make a temporary commit called a "stash" to have them st
when you finish rebasing. You may want to configure git to make this "stash" automatically, which when you finish rebasing. You may want to configure git to make this "stash" automatically, which
will prevent the "cannot rebase" error in nearly all cases: will prevent the "cannot rebase" error in nearly all cases:
``` ```console
git config --global rebase.autostash true git config --global rebase.autostash true
``` ```
@ -205,7 +205,7 @@ git reset --hard master
`git push` will not work properly and say something like this: `git push` will not work properly and say something like this:
``` ```console
! [rejected] issue-xxxxx -> issue-xxxxx (non-fast-forward) ! [rejected] issue-xxxxx -> issue-xxxxx (non-fast-forward)
error: failed to push some refs to 'https://github.com/username/rust.git' error: failed to push some refs to 'https://github.com/username/rust.git'
hint: Updates were rejected because the tip of your current branch is behind hint: Updates were rejected because the tip of your current branch is behind
@ -226,7 +226,7 @@ didn't write, it likely means you're trying to rebase over the wrong branch. For
have a `rust-lang/rust` remote `upstream`, but ran `git rebase origin/master` instead of `git rebase 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: upstream/master`. The fix is to abort the rebase and use the correct branch instead:
``` ```console
git rebase --abort git rebase --abort
git rebase -i upstream/master git rebase -i upstream/master
``` ```
@ -243,7 +243,7 @@ When updating your local repository with `git pull`, you may notice that sometim
Git says you have modified some files that you have never edited. For example, 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): running `git status` gives you something like (note the `new commits` mention):
``` ```console
On branch master On branch master
Your branch is up to date with 'origin/master'. Your branch is up to date with 'origin/master'.
@ -256,9 +256,12 @@ Changes not staged for commit:
no changes added to commit (use "git add" and/or "git commit -a") no changes added to commit (use "git add" and/or "git commit -a")
``` ```
These changes are not changes to files: they are changes to submodules (more on this These changes are not changes to files: they are changes to submodules (more on this [later](#git-submodules)).
[later](#git-submodules)). To get rid of those, run `./x --help`, which will automatically update To get rid of those:
the submodules.
```console
git submodule update
```
Some submodules are not actually needed; for example, `src/llvm-project` doesn't need to be checked Some submodules are not actually needed; for example, `src/llvm-project` doesn't need to be checked
out if you're using `download-ci-llvm`. To avoid having to keep fetching its history, you can use out if you're using `download-ci-llvm`. To avoid having to keep fetching its history, you can use
@ -278,12 +281,12 @@ merged. To do that, you need to rebase your work on top of rust-lang/rust.
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 master branch
of rust-lang/rust, checkout your branch, and then run this command: 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 master
``` ```
> If you are met with the following error: > If you are met with the following error:
> ``` > ```console
> error: cannot pull with rebase: Your index contains uncommitted changes. > error: cannot pull with rebase: Your index contains uncommitted changes.
> error: please commit or stash them. > error: please commit or stash them.
> ``` > ```
@ -300,13 +303,13 @@ 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 that have been made. You can tell that this happened because you'll see
lines in the output that look like lines in the output that look like
``` ```console
CONFLICT (content): Merge conflict in file.rs CONFLICT (content): Merge conflict in file.rs
``` ```
When you open these files, you'll see sections of the form When you open these files, you'll see sections of the form
``` ```console
<<<<<<< HEAD <<<<<<< HEAD
Original code Original code
======= =======
@ -346,7 +349,7 @@ will keep it up-to-date. You will also want to rebase your feature branches
up-to-date as well. After pulling, you can checkout the feature branches up-to-date as well. After pulling, you can checkout the feature branches
and rebase them: and rebase them:
``` ```console
git checkout master git checkout master
git pull upstream master --ff-only # to make certain there are no merge commits git pull upstream master --ff-only # to make certain there are no merge commits
git rebase master feature_branch git rebase master feature_branch
@ -384,7 +387,7 @@ change the order in which they are applied, or "squash" them into each other.
Alternatively, you can sacrifice the commit history like this: 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 # 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 -i --keep-base master # and squash all changes along the way
git rebase master git rebase master
@ -422,7 +425,7 @@ it shows you the differences between your old diff and your new diff.
Here's an example of `git range-diff` output (taken from [Git's Here's an example of `git range-diff` output (taken from [Git's
docs][range-diff-example-docs]): docs][range-diff-example-docs]):
``` ```console
-: ------- > 1: 0ddba11 Prepare for the inevitable! -: ------- > 1: 0ddba11 Prepare for the inevitable!
1: c0debee = 2: cab005e Add a helpful message at the start 1: c0debee = 2: cab005e Add a helpful message at the start
2: f00dbal ! 3: decafe1 Describe a bug 2: f00dbal ! 3: decafe1 Describe a bug
@ -499,7 +502,7 @@ Git and Github's default diff view for large moves *within* a file is quite poor
line as deleted and each line as added, forcing you to compare each line yourself. Git has an option line as deleted and each line as added, forcing you to compare each line yourself. Git has an option
to show moved lines in a different color: to show moved lines in a different color:
``` ```console
git log -p --color-moved=dimmed-zebra --color-moved-ws=allow-indentation-change git log -p --color-moved=dimmed-zebra --color-moved-ws=allow-indentation-change
``` ```
@ -515,7 +518,7 @@ that was force-pushed to make sure there are no unexpected changes.
Many large files in the repo are autogenerated. To view a diff that ignores changes to those files, Many large files in the repo are autogenerated. To view a diff that ignores changes to those files,
you can use the following syntax (e.g. Cargo.lock): you can use the following syntax (e.g. Cargo.lock):
``` ```console
git log -p ':!Cargo.lock' git log -p ':!Cargo.lock'
``` ```
@ -545,7 +548,7 @@ The contents of submodules are ignored by Git: submodules are in some sense isol
from the rest of the repository. However, if you try to `cd src/llvm-project` and then from the rest of the repository. However, if you try to `cd src/llvm-project` and then
run `git status`: run `git status`:
``` ```console
HEAD detached at 9567f08afc943 HEAD detached at 9567f08afc943
nothing to commit, working tree clean nothing to commit, working tree clean
``` ```
@ -576,7 +579,7 @@ that Git can nicely and fairly conveniently handle for us.
Sometimes you might run into (when you run `git status`) Sometimes you might run into (when you run `git status`)
``` ```console
Changes not staged for commit: Changes not staged for commit:
(use "git add <file>..." to update what will be committed) (use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory) (use "git restore <file>..." to discard changes in working directory)
@ -586,7 +589,7 @@ Changes not staged for commit:
and when you try to run `git submodule update` it breaks horribly with errors like and when you try to run `git submodule update` it breaks horribly with errors like
``` ```console
error: RPC failed; curl 92 HTTP/2 stream 7 was not closed cleanly: CANCEL (err 8) error: RPC failed; curl 92 HTTP/2 stream 7 was not closed cleanly: CANCEL (err 8)
error: 2782 bytes of body are still expected error: 2782 bytes of body are still expected
fetch-pack: unexpected disconnect while reading sideband packet fetch-pack: unexpected disconnect while reading sideband packet
@ -597,8 +600,8 @@ fatal: Fetched in submodule path 'src/llvm-project', but it did not contain 5a51
If you see `(new commits, modified content)` you can run If you see `(new commits, modified content)` you can run
```bash ```console
$ git submodule foreach git reset --hard git submodule foreach git reset --hard
``` ```
and then try `git submodule update` again. and then try `git submodule update` again.
@ -607,7 +610,7 @@ and then try `git submodule update` again.
If that doesn't work, you can try to deinit all git submodules... If that doesn't work, you can try to deinit all git submodules...
``` ```console
git submodule deinit -f --all git submodule deinit -f --all
``` ```
@ -618,7 +621,7 @@ completely messed up for some reason.
Sometimes, for some forsaken reason, you might run into Sometimes, for some forsaken reason, you might run into
```text ```console
fatal: not a git repository: src/gcc/../../.git/modules/src/gcc fatal: not a git repository: src/gcc/../../.git/modules/src/gcc
``` ```

View File

@ -372,9 +372,9 @@ E.g. use `//@ dont-require-annotations: NOTE` to annotate notes selectively.
Avoid using this directive for `ERROR`s and `WARN`ings, unless there's a serious reason, like Avoid using this directive for `ERROR`s and `WARN`ings, unless there's a serious reason, like
target-dependent compiler output. target-dependent compiler output.
Missing diagnostic kinds (`//~ message`) are currently accepted, but are being phased away. Some diagnostics are never required to be line-annotated, regardless of their kind or directives,
They will match any compiler output kind, but will not force exhaustive annotations for that kind. for example secondary lines of multiline diagnostics,
Prefer explicit kind and `//@ dont-require-annotations` to achieve the same effect. or ubiquitous diagnostics like `aborting due to N previous errors`.
UI tests use the `-A unused` flag by default to ignore all unused warnings, as UI tests use the `-A unused` flag by default to ignore all unused warnings, as
unused warnings are usually not the focus of a test. However, simple code unused warnings are usually not the focus of a test. However, simple code