Merge pull request #2388 from rust-lang/rustc-pull

Rustc pull update
This commit is contained in:
Tshepang Mbambo 2025-05-15 11:47:11 +02:00 committed by GitHub
commit 70e08b3d42
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 23 additions and 23 deletions

View File

@ -1 +1 @@
7e552b46af72df390ed233b58a7f51650515b2a8 414482f6a0d4e7290f614300581a0b55442552a3

View File

@ -16,10 +16,10 @@ In addition to the directives listed here,
`rustdoc` tests also support most `rustdoc` tests also support most
[compiletest directives](../tests/directives.html). [compiletest directives](../tests/directives.html).
All `PATH`s in directives are relative to the the rustdoc output directory (`build/TARGET/test/rustdoc/TESTNAME`), All `PATH`s in directives are relative to the rustdoc output directory (`build/TARGET/test/rustdoc/TESTNAME`),
so it is conventional to use a `#![crate_name = "foo"]` attribute to avoid so it is conventional to use a `#![crate_name = "foo"]` attribute to avoid
having to write a long crate name multiple times. having to write a long crate name multiple times.
To avoid repetion, `-` can be used in any `PATH` argument to re-use the previous `PATH` argument. To avoid repetition, `-` can be used in any `PATH` argument to re-use the previous `PATH` argument.
All arguments take the form of quoted strings All arguments take the form of quoted strings
(both single and double quotes are supported), (both single and double quotes are supported),
@ -87,7 +87,7 @@ compiletest's `--bless` flag is forwarded to htmldocck.
Usage: `//@ has-dir PATH` Usage: `//@ has-dir PATH`
Checks for the existance of directory `PATH`. Checks for the existence of directory `PATH`.
### `files` ### `files`
@ -106,7 +106,7 @@ Example: `//@ files "foo/bar" '["index.html", "sidebar-items.js"]'`
## Limitations ## Limitations
`htmldocck.py` uses the xpath implementation from the standard library. `htmldocck.py` uses the xpath implementation from the standard library.
This leads to several limitations: This leads to several limitations:
* All `XPATH` arguments must start with `//` due to a flaw in the implemention. * All `XPATH` arguments must start with `//` due to a flaw in the implementation.
* Many XPath features (functions, axies, etc.) are not supported. * Many XPath features (functions, axies, etc.) are not supported.
* Only well-formed HTML can be parsed (hopefully rustdoc doesn't output mismatched tags). * Only well-formed HTML can be parsed (hopefully rustdoc doesn't output mismatched tags).

View File

@ -135,12 +135,16 @@ There are several use-cases for try builds:
- Run a specific CI job (e.g. Windows tests) on a PR, to quickly test if it - Run a specific CI job (e.g. Windows tests) on a PR, to quickly test if it
passes the test suite executed by that job. passes the test suite executed by that job.
You can select which CI jobs will By default, if you send a comment with `@bors try`, the jobs defined in the `try` section of
be executed in the try build by adding lines containing `try-job: [`jobs.yml`] will be executed. We call this mode a "fast try build". Such a try build
<job pattern>` to the PR description. All such specified jobs will be executed will not execute any tests, and it will allow compilation warnings. It is useful when you want to
in the try build once the `@bors try` command is used on the PR. If no try get an optimized toolchain as fast as possible, for a crater run or performance benchmarks,
jobs are specified in this way, the jobs defined in the `try` section of even if it might not be working fully correctly.
[`jobs.yml`] will be executed by default.
If you want to run a custom CI job in a try build and make sure that it passes all tests and does
not produce any compilation warnings, you can select CI jobs to be executed by adding lines
containing `try-job: <job pattern>` to the PR description. All such specified jobs will be executed
in the try build once the `@bors try` command is used on the PR.
Each pattern can either be an exact name of a job or a glob pattern that matches multiple jobs, Each pattern can either be an exact name of a job or a glob pattern that matches multiple jobs,
for example `*msvc*` or `*-alt`. You can start at most 20 jobs in a single try build. When using for example `*msvc*` or `*-alt`. You can start at most 20 jobs in a single try build. When using

View File

@ -325,12 +325,8 @@ The tests in [`tests/codegen-units`] test the
[monomorphization](../backend/monomorph.md) collector and CGU partitioning. [monomorphization](../backend/monomorph.md) collector and CGU partitioning.
These tests work by running `rustc` with a flag to print the result of the These tests work by running `rustc` with a flag to print the result of the
monomorphization collection pass, and then special annotations in the file are monomorphization collection pass, i.e., `-Zprint-mono-items`, and then special
used to compare against that. annotations in the file are used to compare against that.
Each test should be annotated with the `//@
compile-flags:-Zprint-mono-items=VAL` directive with the appropriate `VAL` to
instruct `rustc` to print the monomorphization information.
Then, the test should be annotated with comments of the form `//~ MONO_ITEM Then, the test should be annotated with comments of the form `//~ MONO_ITEM
name` where `name` is the monomorphized string printed by rustc like `fn <u32 as name` where `name` is the monomorphized string printed by rustc like `fn <u32 as

View File

@ -17,7 +17,7 @@ Type "collection" is the process of converting the types found in the HIR
**internal representation** used by the compiler (`Ty<'tcx>`) we also do **internal representation** used by the compiler (`Ty<'tcx>`) we also do
similar conversions for where-clauses and other bits of the function signature. similar conversions for where-clauses and other bits of the function signature.
To try and get a sense for the difference, consider this function: To try and get a sense of the difference, consider this function:
```rust,ignore ```rust,ignore
struct Foo { } struct Foo { }

View File

@ -19,7 +19,7 @@ Here, the type of `things` is *inferred* to be `Vec<&str>` because of the value
we push into `things`. we push into `things`.
The type inference is based on the standard Hindley-Milner (HM) type inference The type inference is based on the standard Hindley-Milner (HM) type inference
algorithm, but extended in various way to accommodate subtyping, region algorithm, but extended in various ways to accommodate subtyping, region
inference, and higher-ranked types. inference, and higher-ranked types.
## A note on terminology ## A note on terminology

View File

@ -4,7 +4,7 @@
## Typing Environments ## Typing Environments
When interacting with the type system there are a few variables to consider that can affect the results of trait solving. The the set of in-scope where clauses, and what phase of the compiler type system operations are being performed in (the [`ParamEnv`][penv] and [`TypingMode`][tmode] structs respectively). When interacting with the type system there are a few variables to consider that can affect the results of trait solving. The set of in-scope where clauses, and what phase of the compiler type system operations are being performed in (the [`ParamEnv`][penv] and [`TypingMode`][tmode] structs respectively).
When an environment to perform type system operations in has not yet been created, the [`TypingEnv`][tenv] can be used to bundle all of the external context required into a single type. When an environment to perform type system operations in has not yet been created, the [`TypingEnv`][tenv] can be used to bundle all of the external context required into a single type.
@ -13,11 +13,11 @@ Once a context to perform type system operations in has been created (e.g. an [`
[ocx]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_trait_selection/traits/struct.ObligationCtxt.html [ocx]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_trait_selection/traits/struct.ObligationCtxt.html
[fnctxt]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir_typeck/fn_ctxt/struct.FnCtxt.html [fnctxt]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir_typeck/fn_ctxt/struct.FnCtxt.html
## Parameter Environemnts ## Parameter Environments
### What is a `ParamEnv` ### What is a `ParamEnv`
The [`ParamEnv`][penv] is a list of in-scope where-clauses, it typically corresponds to a specific item's where clauses. Some clauses are not explicitly written but are instead are implicitly added in the [`predicates_of`][predicates_of] query, such as `ConstArgHasType` or (some) implied bounds. The [`ParamEnv`][penv] is a list of in-scope where-clauses, it typically corresponds to a specific item's where clauses. Some clauses are not explicitly written but are instead implicitly added in the [`predicates_of`][predicates_of] query, such as `ConstArgHasType` or (some) implied bounds.
In most cases `ParamEnv`s are initially created via the [`param_env` query][query] which returns a `ParamEnv` derived from the provided item's where clauses. A `ParamEnv` can also be created with arbitrary sets of clauses that are not derived from a specific item, such as in [`compare_method_predicate_entailment`][method_pred_entailment] where we create a hybrid `ParamEnv` consisting of the impl's where clauses and the trait definition's function's where clauses. In most cases `ParamEnv`s are initially created via the [`param_env` query][query] which returns a `ParamEnv` derived from the provided item's where clauses. A `ParamEnv` can also be created with arbitrary sets of clauses that are not derived from a specific item, such as in [`compare_method_predicate_entailment`][method_pred_entailment] where we create a hybrid `ParamEnv` consisting of the impl's where clauses and the trait definition's function's where clauses.
@ -73,7 +73,7 @@ fn foo2<T>(a: T) {
### Acquiring a `ParamEnv` ### Acquiring a `ParamEnv`
Using the wrong [`ParamEnv`][penv] when interacting with the type system can lead to ICEs, illformed programs compiling, or erroing when we shouldn't. See [#82159](https://github.com/rust-lang/rust/pull/82159) and [#82067](https://github.com/rust-lang/rust/pull/82067) as examples of PRs that modified the compiler to use the correct param env and in the process fixed ICEs. Using the wrong [`ParamEnv`][penv] when interacting with the type system can lead to ICEs, illformed programs compiling, or erroring when we shouldn't. See [#82159](https://github.com/rust-lang/rust/pull/82159) and [#82067](https://github.com/rust-lang/rust/pull/82067) as examples of PRs that modified the compiler to use the correct param env and in the process fixed ICEs.
In the large majority of cases, when a `ParamEnv` is required it either already exists somewhere in scope, or above in the call stack and should be passed down. A non exhaustive list of places where you might find an existing `ParamEnv`: In the large majority of cases, when a `ParamEnv` is required it either already exists somewhere in scope, or above in the call stack and should be passed down. A non exhaustive list of places where you might find an existing `ParamEnv`:
- During typeck `FnCtxt` has a [`param_env` field][fnctxt_param_env] - During typeck `FnCtxt` has a [`param_env` field][fnctxt_param_env]