Skip to content

Commit 0585ea6

Browse files
authored
Unrolled build for #143420
Rollup merge of #143420 - Kobzol:rdg-push, r=jieyouxu rustc-dev-guide subtree update Subtree update of https://github.com/rust-lang/rustc-dev-guide. Created using https://github.com/rust-lang/josh-sync. r? `@jieyouxu`
2 parents 556d20a + ad97597 commit 0585ea6

File tree

8 files changed

+72
-18
lines changed

8 files changed

+72
-18
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
org = "rust-lang"
2+
repo = "rustc-dev-guide"
3+
path = "src/doc/rustc-dev-guide"

src/doc/rustc-dev-guide/rust-version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
d1d8e386c5e84c4ba857f56c3291f73c27e2d62a
1+
c96a69059ecc618b519da385a6ccd03155aa0237

src/doc/rustc-dev-guide/src/autodiff/internals.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ The `std::autodiff` module in Rust allows differentiable programming:
22

33
```rust
44
#![feature(autodiff)]
5-
use std::autodiff::autodiff;
5+
use std::autodiff::*;
66

77
// f(x) = x * x, f'(x) = 2.0 * x
88
// bar therefore returns (x * x, 2.0 * x)
9-
#[autodiff(bar, Reverse, Active, Active)]
9+
#[autodiff_reverse(bar, Active, Active)]
1010
fn foo(x: f32) -> f32 { x * x }
1111

1212
fn main() {

src/doc/rustc-dev-guide/src/building/how-to-build-and-run.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,24 @@
22

33
<!-- toc -->
44

5+
<div class="warning">
6+
7+
For `profile = "library"` users, or users who use `download-rustc = true | "if-unchanged"`, please be advised that
8+
the `./x test library/std` flow where `download-rustc` is active (i.e. no compiler changes) is currently broken.
9+
This is tracked in <https://github.com/rust-lang/rust/issues/142505>. Only the `./x test` flow is affected in this
10+
case, `./x {check,build} library/std` should still work.
11+
12+
In the short-term, you may need to disable `download-rustc` for `./x test library/std`. This can be done either by:
13+
14+
1. `./x test library/std --set rust.download-rustc=false`
15+
2. Or set `rust.download-rustc=false` in `bootstrap.toml`.
16+
17+
Unfortunately that will require building the stage 1 compiler. The bootstrap team is working on this, but
18+
implementing a maintainable fix is taking some time.
19+
20+
</div>
21+
22+
523
The compiler is built using a tool called `x.py`. You will need to
624
have Python installed to run it.
725

src/doc/rustc-dev-guide/src/contributing.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,10 @@ Just a few things to keep in mind:
434434
it might benefit from having a Table of Contents at the beginning,
435435
which you can auto-generate by including the `<!-- toc -->` marker at the top.
436436

437+
#### ⚠️ Note: Where to contribute `rustc-dev-guide` changes
438+
439+
For detailed information about where to contribute rustc-dev-guide changes and the benefits of doing so, see [the rustc-dev-guide working group documentation](https://forge.rust-lang.org/wg-rustc-dev-guide/index.html#where-to-contribute-rustc-dev-guide-changes).
440+
437441
## Issue triage
438442

439443
Please see <https://forge.rust-lang.org/release/issue-triaging.html>.

src/doc/rustc-dev-guide/src/diagnostics/diagnostic-structs.md

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
# Diagnostic and subdiagnostic structs
22
rustc has three diagnostic traits that can be used to create diagnostics:
3-
`Diagnostic`, `LintDiagnostic`, and `Subdiagnostic`. For simple diagnostics,
4-
instead of using the `Diag` API to create and emit diagnostics,
5-
derived impls can be used. They are only suitable for simple diagnostics that
3+
`Diagnostic`, `LintDiagnostic`, and `Subdiagnostic`.
4+
5+
For simple diagnostics,
6+
derived impls can be used, e.g. `#[derive(Diagnostic)]`. They are only suitable for simple diagnostics that
67
don't require much logic in deciding whether or not to add additional
78
subdiagnostics.
89

9-
Such diagnostic can be translated into
10-
different languages and each has a slug that uniquely identifies the
11-
diagnostic.
10+
In cases where diagnostics require more complex or dynamic behavior, such as conditionally adding subdiagnostics,
11+
customizing the rendering logic, or selecting messages at runtime, you will need to manually implement
12+
the corresponding trait (`Diagnostic`, `LintDiagnostic`, or `Subdiagnostic`).
13+
This approach provides greater flexibility and is recommended for diagnostics that go beyond simple, static structures.
14+
15+
Diagnostic can be translated into different languages and each has a slug that uniquely identifies the diagnostic.
1216

1317
## `#[derive(Diagnostic)]` and `#[derive(LintDiagnostic)]`
1418

@@ -142,7 +146,7 @@ tcx.dcx().emit_err(FieldAlreadyDeclared {
142146
});
143147
```
144148

145-
### Reference
149+
### Reference for `#[derive(Diagnostic)]` and `#[derive(LintDiagnostic)]`
146150
`#[derive(Diagnostic)]` and `#[derive(LintDiagnostic)]` support the
147151
following attributes:
148152

@@ -330,7 +334,34 @@ function ([example][subdiag_use_1] and [example][subdiag_use_2]) on a
330334
diagnostic or by assigning it to a `#[subdiagnostic]`-annotated field of a
331335
diagnostic struct.
332336

333-
### Reference
337+
### Argument sharing and isolation
338+
339+
Subdiagnostics add their own arguments (i.e., certain fields in their structure) to the `Diag` structure before rendering the information.
340+
`Diag` structure also stores the arguments from the main diagnostic, so the subdiagnostic can also use the arguments from the main diagnostic.
341+
342+
However, when a subdiagnostic is added to a main diagnostic by implementing `#[derive(Subdiagnostic)]`,
343+
the following rules, introduced in [rust-lang/rust#142724](https://github.com/rust-lang/rust/pull/142724)
344+
apply to the handling of arguments (i.e., variables used in Fluent messages):
345+
346+
**Argument isolation between sub diagnostics**:
347+
Arguments set by a subdiagnostic are only available during the rendering of that subdiagnostic.
348+
After the subdiagnostic is rendered, all arguments it introduced are restored from the main diagnostic.
349+
This ensures that multiple subdiagnostics do not pollute each other's argument scope.
350+
For example, when using a `Vec<Subdiag>`, it iteratively adds the same argument over and over again.
351+
352+
**Same argument override between sub and main diagnostics**:
353+
If a subdiagnostic sets a argument with the same name as a arguments already in the main diagnostic,
354+
it will report an error at runtime unless both have exactly the same value.
355+
It has two benefits:
356+
- preserves the flexibility that arguments in the main diagnostic are allowed to appear in the attributes of the subdiagnostic.
357+
For example, There is an attribute `#[suggestion(code = "{new_vis}")]` in the subdiagnostic, but `new_vis` is the field in the main diagnostic struct.
358+
- prevents accidental overwriting or deletion of arguments required by the main diagnostic or other subdiagnostics.
359+
360+
These rules guarantee that arguments injected by subdiagnostics are strictly scoped to their own rendering.
361+
The main diagnostic's arguments remain unaffected by subdiagnostic logic, even in the presence of name collisions.
362+
Additionally, subdiagnostics can access arguments from the main diagnostic with the same name when needed.
363+
364+
### Reference for `#[derive(Subdiagnostic)]`
334365
`#[derive(Subdiagnostic)]` supports the following attributes:
335366

336367
- `#[label(slug)]`, `#[help(slug)]`, `#[warning(slug)]` or `#[note(slug)]`

src/doc/rustc-dev-guide/src/hir/lowering.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,8 @@ of such structures include but are not limited to
77

88
* Parenthesis
99
* Removed without replacement, the tree structure makes order explicit
10-
* `for` loops and `while (let)` loops
11-
* Converted to `loop` + `match` and some `let` bindings
12-
* `if let`
13-
* Converted to `match`
10+
* `for` loops
11+
* Converted to `match` + `loop` + `match`
1412
* Universal `impl Trait`
1513
* Converted to generic arguments
1614
(but with some flags, to know that the user didn't write them)

src/doc/rustc-dev-guide/src/tests/ui.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -453,9 +453,9 @@ even run the resulting program. Just add one of the following
453453
- `//@ check-fail` — compilation should fail (the codegen phase is skipped).
454454
This is the default for UI tests.
455455
- `//@ build-fail` — compilation should fail during the codegen phase.
456-
This will run `rustc` twice, once to verify that it compiles successfully
457-
without the codegen phase, then a second time the full compile should
458-
fail.
456+
This will run `rustc` twice:
457+
- First time is to ensure that the compile succeeds without the codegen phase
458+
- Second time is to ensure that the full compile fails
459459
- `//@ run-fail` — compilation should succeed, but running the resulting
460460
binary should fail.
461461

0 commit comments

Comments
 (0)