Merge from rust-lang/rust
This commit is contained in:
commit
7c335f8d7b
|
|
@ -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'
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
b8005bff3248cfc6e327faf4fa631ac49bb49ba9
|
deb947971c8748f5c6203548ce4af9022f21eaf0
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
59
src/git.md
59
src/git.md
|
|
@ -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
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue