Skip to content

Rollup of 6 pull requests #141906

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 80 commits into from
Jun 2, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
66b2bf1
Fix link to GatherBorrows
Lysxia May 14, 2025
0653799
Small typo and style fixes in binders.md
smanilov May 20, 2025
33aa48c
Merge pull request #2396 from smanilov/patch-11
Noratrieb May 20, 2025
2754f18
Update links between ty-module and binders
smanilov May 20, 2025
a611f50
Fix misdirected link for `TypingEnv`
steffahn May 20, 2025
1944bce
Merge pull request #2399 from steffahn/fix-tenv-link
fmease May 20, 2025
50211e0
Make it clear we talk about early bound params
smanilov May 20, 2025
1710217
Merge pull request #2398 from smanilov/patch-12
BoxyUwU May 20, 2025
f499cd0
Merge pull request #2400 from smanilov/patch-13
BoxyUwU May 20, 2025
bf90c3e
~? annotation type is special
tshepang May 22, 2025
3441154
rustdoc.md: reorder list so test suites are not split up
lolbinarycat May 22, 2025
346ef86
Remove mentions of rust-lang-ci/rust
Kobzol May 23, 2025
55df9f4
Merge pull request #2403 from rust-lang/tshepang-patch-1
jieyouxu May 23, 2025
589d03c
document why rustdoc cannot look at function bodies
jyn514 May 23, 2025
419ba5d
Merge pull request #2406 from jyn514/rustdoc-bodies
GuillaumeGomez May 23, 2025
6232b33
Merge pull request #2404 from lolbinarycat/patch-1
Noratrieb May 23, 2025
8e91013
Add LLVM link in appendix
chenyukang May 23, 2025
3668fcf
Merge pull request #2408 from chenyukang/yukang-add-llvm-link
jieyouxu May 23, 2025
9dd67e1
typo
tshepang May 23, 2025
8b6010a
Merge pull request #2410 from rust-lang/tshepang-patch-1
tshepang May 23, 2025
4831646
Merge pull request #2405 from Kobzol/remove-mentions-of-rust-lang-ci
Kobzol May 24, 2025
d0582aa
Update `rustc_on_unimplemented` docs
mejrs May 24, 2025
a34ef82
Merge pull request #2357 from mejrs/diag
jieyouxu May 24, 2025
8d1337b
Flesh out sections about crashes tests and update mentions of glacier
fmease May 26, 2025
d5b3f8d
Merge pull request #2413 from fmease/glacier-no-crashes-tests-yes
fmease May 26, 2025
b73dfdf
Link normalization chapter
smanilov May 26, 2025
740aaf7
Add time reference and tracking info for trait system refactor
smanilov May 23, 2025
8b4f9b6
Merge pull request #2414 from smanilov/patch-15
BoxyUwU May 26, 2025
db99821
Merge pull request #2407 from smanilov/patch-14
tshepang May 26, 2025
04f466a
Remove rustdoc askama migration from getting started
aDotInTheVoid May 26, 2025
464cb9b
Merge pull request #2415 from rust-lang/aDotInTheVoid-patch-1
aDotInTheVoid May 26, 2025
c170a69
diagnostic translations work is on pause
tshepang May 26, 2025
6f7927d
Merge pull request #2416 from rust-lang/tshepang-patch-1
fmease May 26, 2025
c3603c6
Link to description of opaque types
smanilov May 27, 2025
a5c16e6
Make links in coinduction.md clickable
smanilov May 27, 2025
58e5e32
Merge pull request #2418 from smanilov/patch-17
Noratrieb May 27, 2025
a07a972
Merge pull request #2417 from smanilov/patch-16
Noratrieb May 27, 2025
ba91db3
make link not inline
tshepang May 27, 2025
097ca14
Merge pull request #2419 from rust-lang/tshepang-patch-1
tshepang May 27, 2025
eb0a3c0
Update SGX maintainers
raoulstrackx May 28, 2025
084e8d9
directives.md: Fix `//@ build_aux_docs` -> `//@ build-aux-docs`
aDotInTheVoid May 28, 2025
ea6238e
Fix some old `// <directive>` to `//@ <directive>`
aDotInTheVoid May 28, 2025
c3dc77f
Merge pull request #2421 from aDotInTheVoid/slashslashat
jieyouxu May 28, 2025
f3cca6a
Merge pull request #2420 from rust-lang/aDotInTheVoid-patch-1
jieyouxu May 28, 2025
dc345b0
triagebot: adjust `allow-unauthenticated` labels
jieyouxu May 29, 2025
a8464e6
triagebot: apply `needs-triage` label for new issues
jieyouxu May 29, 2025
cc9dca1
triagebot: enable PR review status flipping and its shortcuts
jieyouxu May 29, 2025
effdfb4
triagebot: enable issue transfer
jieyouxu May 29, 2025
c7fe997
triagebot: enable note functionality
jieyouxu May 29, 2025
b0da981
triagebot: add doc backlink for `[no-mentions]`
jieyouxu May 29, 2025
c0f73ad
triagebot: update `[issue-links]` config
jieyouxu May 29, 2025
1c7bcb1
Merge pull request #2425 from jieyouxu/adjust-triagebot
jieyouxu May 29, 2025
5881eb8
triagebot: fix incorrect link
jieyouxu May 31, 2025
776d768
triagebot: setup `rustc-dev-guide` adhoc-group
jieyouxu May 31, 2025
3ebdc87
triagebot: add doc link to `[assign]`
jieyouxu May 31, 2025
e5139a7
Merge pull request #2431 from jieyouxu/review-group
jieyouxu May 31, 2025
ec84e80
suggest build/rust-analyzer instead of build-rust-analyzer
tshepang May 31, 2025
db4e602
replace a broken sentence
tshepang May 31, 2025
da34102
Merge pull request #2433 from rust-lang/tshepang-patch-2
Noratrieb May 31, 2025
8e5ca30
Merge pull request #2432 from rust-lang/tshepang-patch-1
Noratrieb May 31, 2025
755a5e3
update surname (was lekhonkhobe previously) and email
tshepang May 31, 2025
a2fd1aa
Merge pull request #2434 from rust-lang/tshepang-mailmap
Noratrieb May 31, 2025
171312a
Add opaque type attributes
smanilov Jun 1, 2025
a139353
Preparing for merge from rustc
invalid-email-address Jun 2, 2025
530d4b3
Merge from rustc
invalid-email-address Jun 2, 2025
2556364
Trivial: fix typo (change `foo` to `bar`)
smanilov Jun 2, 2025
9b94cae
allow macro_use as first segment
bvanjoi Jun 2, 2025
df2d8f1
Merge pull request #2438 from smanilov/patch-20
tshepang Jun 2, 2025
1e77768
Merge pull request #2437 from rust-lang/rustc-pull
tshepang Jun 2, 2025
7167e7c
Fix false positive lint error from no_implicit_prelude attr
chenyukang Jun 2, 2025
0e379a6
Merge pull request #2435 from smanilov/patch-19
tshepang Jun 2, 2025
c197636
Merge pull request #2386 from Lysxia/fix-link
tshepang Jun 2, 2025
69e3583
tshepang has a new email
tshepang Jun 2, 2025
28cf702
Fix citool tests when executed ocally
Kobzol Jun 2, 2025
8d9fc03
Rollup merge of #141884 - bvanjoi:issue-140255, r=petrochenkov
chenyukang Jun 2, 2025
05ee4a3
Rollup merge of #141885 - raoulstrackx:raoul/rte-484-update_sgx_maint…
chenyukang Jun 2, 2025
1931272
Rollup merge of #141892 - chenyukang:yukang-fix-141785-extern-crate, …
chenyukang Jun 2, 2025
a501cc7
Rollup merge of #141894 - tshepang:rdg-push, r=jieyouxu
chenyukang Jun 2, 2025
ad00cbe
Rollup merge of #141895 - tshepang:new-address, r=jieyouxu
chenyukang Jun 2, 2025
8f240de
Rollup merge of #141897 - Kobzol:fix-citool-tests, r=marcoieni
chenyukang Jun 2, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .mailmap
Original file line number Diff line number Diff line change
Expand Up @@ -653,7 +653,7 @@ Torsten Weber <[email protected]> <[email protected]>
Trevor Gross <[email protected]> <[email protected]>
Trevor Gross <[email protected]> <[email protected]>
Trevor Spiteri <[email protected]> <[email protected]>
Tshepang Mbambo <[email protected]>
Tshepang Mbambo <[email protected]> <[email protected]>
Ty Overby <[email protected]>
Tyler Mandry <[email protected]> <[email protected]>
Tyler Ruckinger <[email protected]>
Expand Down
4 changes: 3 additions & 1 deletion compiler/rustc_passes/src/check_attr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2312,7 +2312,9 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
}

fn check_macro_use(&self, hir_id: HirId, attr: &Attribute, target: Target) {
let name = attr.name().unwrap();
let Some(name) = attr.name() else {
return;
};
match target {
Target::ExternCrate | Target::Mod => {}
_ => {
Expand Down
10 changes: 10 additions & 0 deletions compiler/rustc_resolve/src/check_unused.rs
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,16 @@ impl<'a, 'ra, 'tcx> UnusedImportCheckVisitor<'a, 'ra, 'tcx> {
continue;
}

let module = self
.r
.get_nearest_non_block_module(self.r.local_def_id(extern_crate.id).to_def_id());
if module.no_implicit_prelude {
// If the module has `no_implicit_prelude`, then we don't suggest
// replacing the extern crate with a use, as it would not be
// inserted into the prelude. User writes `extern` style deliberately.
continue;
}

let vis_span = extern_crate
.vis_span
.find_ancestor_inside(extern_crate.span)
Expand Down
2 changes: 2 additions & 0 deletions src/ci/citool/tests/jobs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ fn get_matrix(event_name: &str, commit_msg: &str, branch_ref: &str) -> String {
.env("GITHUB_EVENT_NAME", event_name)
.env("COMMIT_MESSAGE", commit_msg)
.env("GITHUB_REF", branch_ref)
.env("GITHUB_RUN_ID", "123")
.env("GITHUB_RUN_ATTEMPT", "1")
.stdout(Stdio::piped())
.output()
.expect("Failed to execute command");
Expand Down
1 change: 1 addition & 0 deletions src/doc/rustc-dev-guide/.mailmap
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@ Jynn Nelson <[email protected]> <[email protected]>
Jynn Nelson <[email protected]> <[email protected]>
Jynn Nelson <[email protected]> <[email protected]>
Jynn Nelson <[email protected]>
Tshepang Mbambo <[email protected]> <[email protected]>
2 changes: 1 addition & 1 deletion src/doc/rustc-dev-guide/rust-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
e42bbfe1f7c26f8760a99c4b1f27d33aba1040bb
99e7c15e81385b38a8186b51edc4577d5d7b5bdd
1 change: 1 addition & 0 deletions src/doc/rustc-dev-guide/src/appendix/compiler-lecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,3 +46,4 @@ These are videos where various experts explain different parts of the compiler:

## Code Generation
- [January 2019: Cranelift](https://www.youtube.com/watch?v=9OIA7DTFQWU)
- [December 2024: LLVM Developers' Meeting - Rust ❤️ LLVM](https://www.youtube.com/watch?v=Kqz-umsAnk8)
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ borrow.
[`AutoBorrow`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/adjustment/enum.AutoBorrow.html
[converted]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_build/thir/cx/expr/trait.ToBorrowKind.html#method.to_borrow_kind
[`BorrowKind`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/enum.BorrowKind.html
[`GatherBorrows`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/visit/trait.Visitor.html#method.visit_local
[`GatherBorrows`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/borrow_set/struct.GatherBorrows.html
[`BorrowData`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/borrow_set/struct.BorrowData.html

## Checking two-phase borrows
Expand Down
9 changes: 3 additions & 6 deletions src/doc/rustc-dev-guide/src/building/suggested.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ for two reasons:
additional rebuilds in some cases.

To avoid these problems:
- Add `--build-dir=build-rust-analyzer` to all of the custom `x` commands in
- Add `--build-dir=build/rust-analyzer` to all of the custom `x` commands in
your editor's rust-analyzer configuration.
(Feel free to choose a different directory name if desired.)
- Modify the `rust-analyzer.rustfmt.overrideCommand` setting so that it points
Expand All @@ -100,10 +100,7 @@ To avoid these problems:
copy of `rust-analyzer-proc-macro-srv` in that other build directory.

Using separate build directories for command-line builds and rust-analyzer
requires extra disk space, and also means that running `./x clean` on the
command-line will not clean out the separate build directory. To clean the
separate build directory, run `./x clean --build-dir=build-rust-analyzer`
instead.
requires extra disk space.

### Visual Studio Code

Expand Down Expand Up @@ -137,7 +134,7 @@ Task] instead:

### Neovim

For Neovim users there are several options for configuring for rustc. The
For Neovim users, there are a few options. The
easiest way is by using [neoconf.nvim](https://github.com/folke/neoconf.nvim/),
which allows for project-local configuration files with the native LSP. The
steps for how to use it are below. Note that they require rust-analyzer to
Expand Down
162 changes: 101 additions & 61 deletions src/doc/rustc-dev-guide/src/diagnostics.md
Original file line number Diff line number Diff line change
Expand Up @@ -866,19 +866,17 @@ struct](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_errors/json/struct
(and sub-structs) for the JSON serialization. Don't confuse this with
[`errors::Diag`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_errors/struct.Diag.html)!

## `#[rustc_on_unimplemented(...)]`
## `#[rustc_on_unimplemented]`

The `#[rustc_on_unimplemented]` attribute allows trait definitions to add specialized
notes to error messages when an implementation was expected but not found.
You can refer to the trait's generic arguments by name and to the resolved type using `Self`.

For example:
This attribute allows trait definitions to modify error messages when an implementation was
expected but not found. The string literals in the attribute are format strings and can be
formatted with named parameters. See the Formatting
section below for what parameters are permitted.

```rust,ignore
#![feature(rustc_attrs)]

#[rustc_on_unimplemented="an iterator over elements of type `{A}` \
cannot be built from a collection of type `{Self}`"]
#[rustc_on_unimplemented(message = "an iterator over \
elements of type `{A}` cannot be built from a \
collection of type `{Self}`")]
trait MyIterator<A> {
fn next(&mut self) -> A;
}
Expand All @@ -895,32 +893,26 @@ fn main() {
When the user compiles this, they will see the following;

```txt
error[E0277]: the trait bound `&[{integer}]: MyIterator<char>` is not satisfied
--> <anon>:14:5
error[E0277]: an iterator over elements of type `char` cannot be built from a collection of type `&[{integer}]`
--> src/main.rs:13:19
|
14 | iterate_chars(&[1, 2, 3][..]);
| ^^^^^^^^^^^^^ an iterator over elements of type `char` cannot be built from a collection of type `&[{integer}]`
13 | iterate_chars(&[1, 2, 3][..]);
| ------------- ^^^^^^^^^^^^^^ the trait `MyIterator<char>` is not implemented for `&[{integer}]`
| |
| required by a bound introduced by this call
|
= help: the trait `MyIterator<char>` is not implemented for `&[{integer}]`
= note: required by `iterate_chars`
note: required by a bound in `iterate_chars`
```

`rustc_on_unimplemented` also supports advanced filtering for better targeting
of messages, as well as modifying specific parts of the error message. You
target the text of:

You can modify the contents of:
- the main error message (`message`)
- the label (`label`)
- an extra note (`note`)
- the note(s) (`note`)

For example, the following attribute

```rust,ignore
#[rustc_on_unimplemented(
message="message",
label="label",
note="note"
)]
#[rustc_on_unimplemented(message = "message", label = "label", note = "note")]
trait MyIterator<A> {
fn next(&mut self) -> A;
}
Expand All @@ -930,45 +922,61 @@ Would generate the following output:

```text
error[E0277]: message
--> <anon>:14:5
--> <file>:10:19
|
14 | iterate_chars(&[1, 2, 3][..]);
| ^^^^^^^^^^^^^ label
10 | iterate_chars(&[1, 2, 3][..]);
| ------------- ^^^^^^^^^^^^^^ label
| |
| required by a bound introduced by this call
|
= note: note
= help: the trait `MyIterator<char>` is not implemented for `&[{integer}]`
= note: required by `iterate_chars`
= note: note
note: required by a bound in `iterate_chars`
```

The functionality discussed so far is also available with
[`#[diagnostic::on_unimplemented]`](https://doc.rust-lang.org/nightly/reference/attributes/diagnostics.html#the-diagnosticon_unimplemented-attribute).
If you can, you should use that instead.

### Filtering

To allow more targeted error messages, it is possible to filter the
application of these fields based on a variety of attributes when using
`on`:
application of these fields with `on`.

You can filter on the following boolean flags:
- `crate_local`: whether the code causing the trait bound to not be
fulfilled is part of the user's crate. This is used to avoid suggesting
code changes that would require modifying a dependency.
- Any of the generic arguments that can be substituted in the text can be
referred by name as well for filtering, like `Rhs="i32"`, except for
`Self`.
- `_Self`: to filter only on a particular calculated trait resolution, like
`Self="std::iter::Iterator<char>"`. This is needed because `Self` is a
keyword which cannot appear in attributes.
- `direct`: user-specified rather than derived obligation.
- `from_desugaring`: usable both as boolean (whether the flag is present)
or matching against a particular desugaring. The desugaring is identified
with its variant name in the `DesugaringKind` enum.

For example, the `Iterator` trait can be annotated in the following way:
- `direct`: whether this is an user-specified rather than derived obligation.
- `from_desugaring`: whether we are in some kind of desugaring, like `?`
or a `try` block for example. This flag can also be matched on, see below.

You can match on the following names and values, using `name = "value"`:
- `cause`: Match against one variant of the `ObligationCauseCode`
enum. Only `"MainFunctionType"` is supported.
- `from_desugaring`: Match against a particular variant of the `DesugaringKind`
enum. The desugaring is identified by its variant name, for example
`"QuestionMark"` for `?` desugaring or `"TryBlock"` for `try` blocks.
- `Self` and any generic arguments of the trait, like `Self = "alloc::string::String"`
or `Rhs="i32"`.

The compiler can provide several values to match on, for example:
- the self_ty, pretty printed with and without type arguments resolved.
- `"{integral}"`, if self_ty is an integral of which the type is known.
- `"[]"`, `"[{ty}]"`, `"[{ty}; _]"`, `"[{ty}; $N]"` when applicable.
- references to said slices and arrays.
- `"fn"`, `"unsafe fn"` or `"#[target_feature] fn"` when self is a function.
- `"{integer}"` and `"{float}"` if the type is a number but we haven't inferred it yet.
- combinations of the above, like `"[{integral}; _]"`.

For example, the `Iterator` trait can be filtered in the following way:

```rust,ignore
#[rustc_on_unimplemented(
on(
_Self="&str",
note="call `.chars()` or `.as_bytes()` on `{Self}`"
),
message="`{Self}` is not an iterator",
label="`{Self}` is not an iterator",
note="maybe try calling `.iter()` or a similar method"
on(Self = "&str", note = "call `.chars()` or `.as_bytes()` on `{Self}`"),
message = "`{Self}` is not an iterator",
label = "`{Self}` is not an iterator",
note = "maybe try calling `.iter()` or a similar method"
)]
pub trait Iterator {}
```
Expand Down Expand Up @@ -997,15 +1005,47 @@ error[E0277]: `&str` is not an iterator
= note: required by `std::iter::IntoIterator::into_iter`
```

If you need to filter on multiple attributes, you can use `all`, `any` or
`not` in the following way:
The `on` filter accepts `all`, `any` and `not` predicates similar to the `cfg` attribute:

```rust,ignore
#[rustc_on_unimplemented(
on(
all(_Self="&str", T="std::string::String"),
note="you can coerce a `{T}` into a `{Self}` by writing `&*variable`"
)
)]
pub trait From<T>: Sized { /* ... */ }
#[rustc_on_unimplemented(on(
all(Self = "&str", T = "alloc::string::String"),
note = "you can coerce a `{T}` into a `{Self}` by writing `&*variable`"
))]
pub trait From<T>: Sized {
/* ... */
}
```

### Formatting

The string literals are format strings that accept parameters wrapped in braces
but positional and listed parameters and format specifiers are not accepted.
The following parameter names are valid:
- `Self` and all generic parameters of the trait.
- `This`: the name of the trait the attribute is on, without generics.
- `Trait`: the name of the "sugared" trait. See `TraitRefPrintSugared`.
- `ItemContext`: the kind of `hir::Node` we're in, things like `"an async block"`,
`"a function"`, `"an async function"`, etc.

Something like:

```rust,ignore
#![feature(rustc_attrs)]

#[rustc_on_unimplemented(message = "Self = `{Self}`, \
T = `{T}`, this = `{This}`, trait = `{Trait}`, \
context = `{ItemContext}`")]
pub trait From<T>: Sized {
fn from(x: T) -> Self;
}

fn main() {
let x: i8 = From::from(42_i32);
}
```

Will format the message into
```text
"Self = `i8`, T = `i32`, this = `From`, trait = `From<i32>`, context = `a function`"
```
3 changes: 2 additions & 1 deletion src/doc/rustc-dev-guide/src/early_late_parameters.md
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,8 @@ As mentioned previously, the distinction between early and late bound parameters
- When naming a function (early)
- When calling a function (late)

There currently is no syntax for explicitly specifying generic arguments for late bound parameters as part of the call step, only specifying generic arguments when naming a function. The syntax `foo::<'static>();`, despite being part of a function call, behaves as `(foo::<'static>)();` and instantiates the early bound generic parameters on the function item type.
There is currently no syntax for explicitly specifying generic arguments for late bound parameters during the call step; generic arguments can only be specified for early bound parameters when naming a function.
The syntax `foo::<'static>();`, despite being part of a function call, behaves as `(foo::<'static>)();` and instantiates the early bound generic parameters on the function item type.

See the following example:
```rust
Expand Down
24 changes: 17 additions & 7 deletions src/doc/rustc-dev-guide/src/fuzzing.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,21 +73,32 @@ To build a corpus, you may want to use:

- The rustc/rust-analyzer/clippy test suites (or even source code) --- though avoid
tests that are already known to cause failures, which often begin with comments
like `// failure-status: 101` or `// known-bug: #NNN`.
- The already-fixed ICEs in [Glacier][glacier] --- though avoid the unfixed
ones in `ices/`!
like `//@ failure-status: 101` or `//@ known-bug: #NNN`.
- The already-fixed ICEs in the archived [Glacier][glacier] repository --- though
avoid the unfixed ones in `ices/`!

[glacier]: https://github.com/rust-lang/glacier

## Extra credit

Here are a few things you can do to help the Rust project after filing an ICE.

- [Bisect][bisect] the bug to figure out when it was introduced
- [Bisect][bisect] the bug to figure out when it was introduced.
If you find the regressing PR / commit, you can mark the issue with the label
`S-has-bisection`. If not, consider applying `E-needs-bisection` instead.
- Fix "distractions": problems with the test case that don't contribute to
triggering the ICE, such as syntax errors or borrow-checking errors
- Minimize the test case (see below)
- Add the minimal test case to [Glacier][glacier]
- Minimize the test case (see below). If successful, you can label the
issue with `S-has-mcve`. Otherwise, you can apply `E-needs-mcve`.
- Add the minimal test case to the rust-lang/rust repo as a [crashes test].
While you're at it, consider including other "untracked" crashes in your PR.
Please don't forget to mark your issue with `S-bug-has-test` afterwards.

See also [applying and removing labels][labeling].

[bisect]: https://rust-lang.github.io/cargo-bisect-rustc/
[crashes test]: tests/compiletest.html#crashes-tests
[labeling]: https://forge.rust-lang.org/release/issue-triaging.html#applying-and-removing-labels

## Minimization

Expand Down Expand Up @@ -143,7 +154,6 @@ ICEs that require debug assertions to reproduce should be tagged
- [tree-splicer][tree-splicer] generates new source files by combining existing
ones while maintaining correct syntax

[glacier]: https://github.com/rust-lang/glacier
[fuzz-rustc]: https://github.com/dwrensha/fuzz-rustc
[icemaker]: https://github.com/matthiaskrgr/icemaker/
[tree-splicer]: https://github.com/langston-barrett/tree-splicer/
4 changes: 1 addition & 3 deletions src/doc/rustc-dev-guide/src/getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ filtering the search to areas you're interested in. For example:
Not all important or beginner work has issue labels.
See below for how to find work that isn't labelled.

[help-wanted-search]: https://github.com/issues?q=is%3Aopen+is%3Aissue+org%3Arust-lang+no%3Aassignee+label%3AE-easy%2C%22good+first+issue%22%2Cgood-first-issue%2CE-medium%2CEasy%2CE-help-wanted%2CE-mentor+-label%3AS-blocked+-linked:pr+
[help-wanted-search]: https://github.com/issues?q=is%3Aopen+is%3Aissue+org%3Arust-lang+no%3Aassignee+label%3AE-easy%2C%22good+first+issue%22%2Cgood-first-issue%2CE-medium%2CEasy%2CE-help-wanted%2CE-mentor+-label%3AS-blocked+-linked%3Apr+
[Triage]: ./contributing.md#issue-triage

### Recurring work
Expand All @@ -98,8 +98,6 @@ Some work is too large to be done by a single person. In this case, it's common
issues" to co-ordinate the work between contributors. Here are some example tracking issues where
it's easy to pick up work without a large time commitment:

- [Rustdoc Askama Migration](https://github.com/rust-lang/rust/issues/108868)
- [Diagnostic Translation](https://github.com/rust-lang/rust/issues/100717)
- [Move UI tests to subdirectories](https://github.com/rust-lang/rust/issues/73494)

If you find more recurring work, please feel free to add it here!
Expand Down
Loading
Loading