From 80758c39ebeded017dd7682d1d8eb5960464ed9d Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Thu, 1 May 2025 07:38:29 +0200 Subject: add rdg push git config entry for git protocol pushers --- src/doc/rustc-dev-guide/README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/doc/rustc-dev-guide/README.md b/src/doc/rustc-dev-guide/README.md index 08158801788..0425c15f83c 100644 --- a/src/doc/rustc-dev-guide/README.md +++ b/src/doc/rustc-dev-guide/README.md @@ -91,6 +91,16 @@ Older versions of `josh-proxy` may not round trip commits losslessly so it is im 3) Push the branch to your fork and create a PR into `rustc-dev-guide` ### Push changes from this repository into `rust-lang/rust` + +NOTE: If you use Git protocol to push to your fork of `rust-lang/rust`, +ensure that you have this entry in your Git config, +else the 2 steps that follow would prompt for a username and password: + +``` +[url "git@github.com:"] +insteadOf = "https://github.com/" +``` + 1) Run the push command to create a branch named `` in a `rustc` fork under the `` account ``` cargo run --manifest-path josh-sync/Cargo.toml rustc-push -- cgit 1.4.1-3-g733a5 From 6e966d75fd6349d1aee76b9a49dcd7e11206b000 Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Tue, 6 May 2025 14:56:51 +0200 Subject: avoid duplicating commands The 2 commands do the same thing. Also, follow style used elsewhere in the guide. --- src/doc/rustc-dev-guide/src/tests/intro.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/doc/rustc-dev-guide/src/tests/intro.md b/src/doc/rustc-dev-guide/src/tests/intro.md index 7bf30b106b4..c55d60f4a5c 100644 --- a/src/doc/rustc-dev-guide/src/tests/intro.md +++ b/src/doc/rustc-dev-guide/src/tests/intro.md @@ -102,11 +102,12 @@ by passing a path to a book to `./x test`. ### Documentation link checker -Links across all documentation is validated with a link checker tool. +Links across all documentation is validated with a link checker tool, +and it can be invoked so: -> Example: `./x test src/tools/linkchecker` - -> Example: `./x test linkchecker` +```console +./x test linkchecker +``` This requires building all of the documentation, which might take a while. -- cgit 1.4.1-3-g733a5 From 046bfb3e8c7ff64ee4f9d1df515d39696dd999a1 Mon Sep 17 00:00:00 2001 From: The rustc-dev-guide Cronjob Bot Date: Thu, 8 May 2025 07:16:18 +0000 Subject: Preparing for merge from rustc --- src/doc/rustc-dev-guide/rust-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/doc/rustc-dev-guide/rust-version b/src/doc/rustc-dev-guide/rust-version index 66b4fe2bf3b..ec160228095 100644 --- a/src/doc/rustc-dev-guide/rust-version +++ b/src/doc/rustc-dev-guide/rust-version @@ -1 +1 @@ -0c33fe2c3d3eecadd17a84b110bb067288a64f1c +7e552b46af72df390ed233b58a7f51650515b2a8 -- cgit 1.4.1-3-g733a5 From 47cd0e733c3498dab7fc775d04475b23dd0e172c Mon Sep 17 00:00:00 2001 From: Stan Manilov Date: Thu, 8 May 2025 11:13:50 +0300 Subject: Fix minor typo in serialization.md --- src/doc/rustc-dev-guide/src/serialization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/doc/rustc-dev-guide/src/serialization.md b/src/doc/rustc-dev-guide/src/serialization.md index 670a37ffb0a..47667061eda 100644 --- a/src/doc/rustc-dev-guide/src/serialization.md +++ b/src/doc/rustc-dev-guide/src/serialization.md @@ -169,7 +169,7 @@ The `LazyArray<[T]>` and `LazyTable` types provide some functionality over than the one being read. **note**: `LazyValue` does not cache its value after being deserialized the -first time. Instead the query system its self is the main way of caching these +first time. Instead the query system itself is the main way of caching these results. [`LazyArray`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_metadata/rmeta/struct.LazyValue.html -- cgit 1.4.1-3-g733a5 From b6c2a429efd85cbfa5f592c66faac6955729c6ea Mon Sep 17 00:00:00 2001 From: xizheyin Date: Thu, 8 May 2025 18:09:29 +0800 Subject: std: Make consistence between `From` and `Into` Signed-off-by: xizheyin --- library/core/src/convert/mod.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/core/src/convert/mod.rs b/library/core/src/convert/mod.rs index e1b10e1074d..ef184e1ceb4 100644 --- a/library/core/src/convert/mod.rs +++ b/library/core/src/convert/mod.rs @@ -464,8 +464,8 @@ pub trait Into: Sized { /// orphaning rules. /// See [`Into`] for more details. /// -/// Prefer using [`Into`] over using `From` when specifying trait bounds on a generic function. -/// This way, types that directly implement [`Into`] can be used as arguments as well. +/// Prefer using [`Into`] over [`From`] when specifying trait bounds on a generic function +/// to ensure that types that only implement [`Into`] can be used as well. /// /// The `From` trait is also very useful when performing error handling. When constructing a function /// that is capable of failing, the return type will generally be of the form `Result`. -- cgit 1.4.1-3-g733a5 From 4101d90818b7e5574d5366e24c995980fa2de866 Mon Sep 17 00:00:00 2001 From: xizheyin Date: Thu, 8 May 2025 18:12:05 +0800 Subject: std: Explain prefer `TryInto` over `TryFrom` when specifying traits bounds on generic function Signed-off-by: xizheyin --- library/core/src/convert/mod.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/library/core/src/convert/mod.rs b/library/core/src/convert/mod.rs index ef184e1ceb4..c542a28beb8 100644 --- a/library/core/src/convert/mod.rs +++ b/library/core/src/convert/mod.rs @@ -597,6 +597,9 @@ pub trait From: Sized { /// standard library. For more information on this, see the /// documentation for [`Into`]. /// +/// Prefer using [`TryInto`] over [`TryFrom`] when specifying trait bounds on a generic function +/// to ensure that types that only implement [`TryInto`] can be used as well. +/// /// # Implementing `TryInto` /// /// This suffers the same restrictions and reasoning as implementing @@ -636,6 +639,9 @@ pub trait TryInto: Sized { /// When the [`!`] type is stabilized [`Infallible`] and [`!`] will be /// equivalent. /// +/// Prefer using [`TryInto`] over [`TryFrom`] when specifying trait bounds on a generic function +/// to ensure that types that only implement [`TryInto`] can be used as well. +/// /// `TryFrom` can be implemented as follows: /// /// ``` -- cgit 1.4.1-3-g733a5 From d87763dc4f98e2dcec5c819a678242a0142b80d7 Mon Sep 17 00:00:00 2001 From: Stan Manilov Date: Thu, 8 May 2025 14:03:14 +0300 Subject: Remark test naming exception --- src/doc/rustc-dev-guide/src/tests/best-practices.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/doc/rustc-dev-guide/src/tests/best-practices.md b/src/doc/rustc-dev-guide/src/tests/best-practices.md index 2bdc7f3a243..be00207e3fb 100644 --- a/src/doc/rustc-dev-guide/src/tests/best-practices.md +++ b/src/doc/rustc-dev-guide/src/tests/best-practices.md @@ -70,6 +70,11 @@ related tests. > //! > //! Regression test for . > ``` +> +> One exception to this rule is [crashes tests]: there it is canonical that +> tests are named only after issue numbers because its purpose is to track +> snippets from which issues no longer ICE/crash, and they would either be +> removed or converted into proper ui/other tests in the fix PRs. ## Test organization @@ -194,3 +199,4 @@ See [LLVM FileCheck guide][FileCheck] for details. [compiletest directives]: ./directives.md [`run-make`]: ./compiletest.md#run-make-tests [FileCheck]: https://llvm.org/docs/CommandGuide/FileCheck.html +[crashes tests]: ./compiletest.md#crashes-tests -- cgit 1.4.1-3-g733a5 From a07c71d77303330c10069d545652ed299a805a69 Mon Sep 17 00:00:00 2001 From: Stan Manilov Date: Thu, 8 May 2025 16:36:53 +0300 Subject: Fix minor typo in installation.md --- src/doc/rustc-dev-guide/src/autodiff/installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/doc/rustc-dev-guide/src/autodiff/installation.md b/src/doc/rustc-dev-guide/src/autodiff/installation.md index f3c11395523..971d07bfa39 100644 --- a/src/doc/rustc-dev-guide/src/autodiff/installation.md +++ b/src/doc/rustc-dev-guide/src/autodiff/installation.md @@ -1,6 +1,6 @@ # Installation -In the near future, `std::autodiff` should become available in nightly builds for users. As a contribute however, you will still need to build rustc from source. Please be aware that the msvc target is not supported at the moment, all other tier 1 targets should work. Please open an issue if you encounter any problems on a supported tier 1 target, or if you succesfully build this project on a tier2/tier3 target. +In the near future, `std::autodiff` should become available in nightly builds for users. As a contributor however, you will still need to build rustc from source. Please be aware that the msvc target is not supported at the moment, all other tier 1 targets should work. Please open an issue if you encounter any problems on a supported tier 1 target, or if you succesfully build this project on a tier2/tier3 target. ## Build instructions -- cgit 1.4.1-3-g733a5 From 9eac7a3e04a727bcbdb14826c6520210b3ca1d2e Mon Sep 17 00:00:00 2001 From: lcnr Date: Fri, 9 May 2025 02:35:18 +0000 Subject: move (and remove) impl Trait tests --- src/tools/tidy/src/issues.txt | 60 +++++++-------- .../apit/arg-position-impl-trait-too-long.rs | 22 ++++++ .../apit/arg-position-impl-trait-too-long.stderr | 22 ++++++ .../ui/impl-trait/apit/impl-generic-mismatch-ab.rs | 12 +++ .../apit/impl-generic-mismatch-ab.stderr | 26 +++++++ .../impl-trait/arg-position-impl-trait-too-long.rs | 22 ------ .../arg-position-impl-trait-too-long.stderr | 22 ------ .../impl-trait/can-return-unconstrained-closure.rs | 23 ------ tests/ui/impl-trait/coherence-treats-tait-ambig.rs | 17 ----- .../impl-trait/coherence-treats-tait-ambig.stderr | 13 ---- tests/ui/impl-trait/impl-generic-mismatch-ab.rs | 12 --- .../ui/impl-trait/impl-generic-mismatch-ab.stderr | 26 ------- tests/ui/impl-trait/issue-100075-2.rs | 8 -- tests/ui/impl-trait/issue-100075-2.stderr | 24 ------ tests/ui/impl-trait/issue-100075.rs | 21 ------ tests/ui/impl-trait/issue-100075.stderr | 12 --- tests/ui/impl-trait/issue-100187.rs | 12 --- tests/ui/impl-trait/issue-102605.rs | 15 ---- tests/ui/impl-trait/issue-102605.stderr | 30 -------- tests/ui/impl-trait/issue-103181-1.current.stderr | 12 --- tests/ui/impl-trait/issue-103181-1.next.stderr | 12 --- tests/ui/impl-trait/issue-103181-1.rs | 88 ---------------------- tests/ui/impl-trait/issue-103181-2.rs | 29 ------- tests/ui/impl-trait/issue-103181-2.stderr | 9 --- tests/ui/impl-trait/issue-103599.rs | 10 --- tests/ui/impl-trait/issue-103599.stderr | 14 ---- tests/ui/impl-trait/issue-108591.rs | 32 -------- tests/ui/impl-trait/issue-108592.rs | 23 ------ tests/ui/impl-trait/issue-35668.rs | 12 --- tests/ui/impl-trait/issue-35668.stderr | 16 ---- tests/ui/impl-trait/issue-36792.rs | 7 -- tests/ui/impl-trait/issue-46959.rs | 9 --- tests/ui/impl-trait/issue-49556.rs | 13 ---- tests/ui/impl-trait/issue-49579.rs | 14 ---- tests/ui/impl-trait/issue-49685.rs | 13 ---- tests/ui/impl-trait/issue-51185.rs | 8 -- tests/ui/impl-trait/issue-54966.rs | 6 -- tests/ui/impl-trait/issue-54966.stderr | 9 --- tests/ui/impl-trait/issue-55872-1.rs | 21 ------ tests/ui/impl-trait/issue-55872-1.stderr | 49 ------------ tests/ui/impl-trait/issue-55872-2.rs | 20 ----- tests/ui/impl-trait/issue-55872-2.stderr | 16 ---- tests/ui/impl-trait/issue-55872-3.rs | 21 ------ tests/ui/impl-trait/issue-55872-3.stderr | 18 ----- tests/ui/impl-trait/issue-55872.rs | 18 ----- tests/ui/impl-trait/issue-55872.stderr | 8 -- tests/ui/impl-trait/issue-56445.rs | 25 ------ tests/ui/impl-trait/issue-68532.rs | 13 ---- tests/ui/impl-trait/issue-72911.rs | 21 ------ tests/ui/impl-trait/issue-72911.stderr | 19 ----- tests/ui/impl-trait/issue-87450.rs | 16 ---- tests/ui/impl-trait/issue-87450.stderr | 27 ------- tests/ui/impl-trait/issue-99073-2.rs | 17 ----- tests/ui/impl-trait/issue-99073-2.stderr | 12 --- tests/ui/impl-trait/issue-99073.rs | 8 -- tests/ui/impl-trait/issue-99073.stderr | 11 --- tests/ui/impl-trait/issue-99642-2.rs | 9 --- tests/ui/impl-trait/issue-99642.rs | 7 -- tests/ui/impl-trait/issue-99914.rs | 13 ---- tests/ui/impl-trait/issue-99914.stderr | 16 ---- tests/ui/impl-trait/issues/issue-100075-2.rs | 8 ++ tests/ui/impl-trait/issues/issue-100075-2.stderr | 24 ++++++ tests/ui/impl-trait/issues/issue-100075.rs | 21 ++++++ tests/ui/impl-trait/issues/issue-100075.stderr | 12 +++ tests/ui/impl-trait/issues/issue-100187.rs | 12 +++ tests/ui/impl-trait/issues/issue-102605.rs | 15 ++++ tests/ui/impl-trait/issues/issue-102605.stderr | 30 ++++++++ .../issues/issue-103181-1.current.stderr | 12 +++ .../impl-trait/issues/issue-103181-1.next.stderr | 12 +++ tests/ui/impl-trait/issues/issue-103181-1.rs | 88 ++++++++++++++++++++++ tests/ui/impl-trait/issues/issue-103181-2.rs | 29 +++++++ tests/ui/impl-trait/issues/issue-103181-2.stderr | 9 +++ tests/ui/impl-trait/issues/issue-103599.rs | 10 +++ tests/ui/impl-trait/issues/issue-103599.stderr | 14 ++++ tests/ui/impl-trait/issues/issue-108591.rs | 32 ++++++++ tests/ui/impl-trait/issues/issue-108592.rs | 23 ++++++ tests/ui/impl-trait/issues/issue-35668.rs | 12 +++ tests/ui/impl-trait/issues/issue-35668.stderr | 16 ++++ tests/ui/impl-trait/issues/issue-36792.rs | 7 ++ tests/ui/impl-trait/issues/issue-46959.rs | 9 +++ tests/ui/impl-trait/issues/issue-49556.rs | 13 ++++ tests/ui/impl-trait/issues/issue-49579.rs | 14 ++++ tests/ui/impl-trait/issues/issue-49685.rs | 13 ++++ tests/ui/impl-trait/issues/issue-51185.rs | 8 ++ tests/ui/impl-trait/issues/issue-54966.rs | 6 ++ tests/ui/impl-trait/issues/issue-54966.stderr | 9 +++ tests/ui/impl-trait/issues/issue-55872-1.rs | 21 ++++++ tests/ui/impl-trait/issues/issue-55872-1.stderr | 49 ++++++++++++ tests/ui/impl-trait/issues/issue-55872-2.rs | 20 +++++ tests/ui/impl-trait/issues/issue-55872-2.stderr | 16 ++++ tests/ui/impl-trait/issues/issue-55872-3.rs | 21 ++++++ tests/ui/impl-trait/issues/issue-55872-3.stderr | 18 +++++ tests/ui/impl-trait/issues/issue-55872.rs | 18 +++++ tests/ui/impl-trait/issues/issue-55872.stderr | 8 ++ tests/ui/impl-trait/issues/issue-56445.rs | 25 ++++++ tests/ui/impl-trait/issues/issue-68532.rs | 13 ++++ tests/ui/impl-trait/issues/issue-72911.rs | 21 ++++++ tests/ui/impl-trait/issues/issue-72911.stderr | 19 +++++ tests/ui/impl-trait/issues/issue-87450.rs | 16 ++++ tests/ui/impl-trait/issues/issue-87450.stderr | 27 +++++++ tests/ui/impl-trait/issues/issue-99073-2.rs | 17 +++++ tests/ui/impl-trait/issues/issue-99073-2.stderr | 12 +++ tests/ui/impl-trait/issues/issue-99073.rs | 8 ++ tests/ui/impl-trait/issues/issue-99073.stderr | 11 +++ tests/ui/impl-trait/issues/issue-99642-2.rs | 9 +++ tests/ui/impl-trait/issues/issue-99642.rs | 7 ++ tests/ui/impl-trait/issues/issue-99914.rs | 13 ++++ tests/ui/impl-trait/issues/issue-99914.stderr | 16 ++++ tests/ui/impl-trait/lifetimes2.rs | 10 --- .../impl-trait/method-suggestion-no-duplication.rs | 9 --- .../method-suggestion-no-duplication.stderr | 17 ----- .../coherence/coherence-treats-tait-ambig.rs | 17 +++++ .../coherence/coherence-treats-tait-ambig.stderr | 13 ++++ .../method-suggestion-no-duplication.rs | 9 +++ .../method-suggestion-no-duplication.stderr | 17 +++++ 115 files changed, 1011 insertions(+), 1044 deletions(-) create mode 100644 tests/ui/impl-trait/apit/arg-position-impl-trait-too-long.rs create mode 100644 tests/ui/impl-trait/apit/arg-position-impl-trait-too-long.stderr create mode 100644 tests/ui/impl-trait/apit/impl-generic-mismatch-ab.rs create mode 100644 tests/ui/impl-trait/apit/impl-generic-mismatch-ab.stderr delete mode 100644 tests/ui/impl-trait/arg-position-impl-trait-too-long.rs delete mode 100644 tests/ui/impl-trait/arg-position-impl-trait-too-long.stderr delete mode 100644 tests/ui/impl-trait/can-return-unconstrained-closure.rs delete mode 100644 tests/ui/impl-trait/coherence-treats-tait-ambig.rs delete mode 100644 tests/ui/impl-trait/coherence-treats-tait-ambig.stderr delete mode 100644 tests/ui/impl-trait/impl-generic-mismatch-ab.rs delete mode 100644 tests/ui/impl-trait/impl-generic-mismatch-ab.stderr delete mode 100644 tests/ui/impl-trait/issue-100075-2.rs delete mode 100644 tests/ui/impl-trait/issue-100075-2.stderr delete mode 100644 tests/ui/impl-trait/issue-100075.rs delete mode 100644 tests/ui/impl-trait/issue-100075.stderr delete mode 100644 tests/ui/impl-trait/issue-100187.rs delete mode 100644 tests/ui/impl-trait/issue-102605.rs delete mode 100644 tests/ui/impl-trait/issue-102605.stderr delete mode 100644 tests/ui/impl-trait/issue-103181-1.current.stderr delete mode 100644 tests/ui/impl-trait/issue-103181-1.next.stderr delete mode 100644 tests/ui/impl-trait/issue-103181-1.rs delete mode 100644 tests/ui/impl-trait/issue-103181-2.rs delete mode 100644 tests/ui/impl-trait/issue-103181-2.stderr delete mode 100644 tests/ui/impl-trait/issue-103599.rs delete mode 100644 tests/ui/impl-trait/issue-103599.stderr delete mode 100644 tests/ui/impl-trait/issue-108591.rs delete mode 100644 tests/ui/impl-trait/issue-108592.rs delete mode 100644 tests/ui/impl-trait/issue-35668.rs delete mode 100644 tests/ui/impl-trait/issue-35668.stderr delete mode 100644 tests/ui/impl-trait/issue-36792.rs delete mode 100644 tests/ui/impl-trait/issue-46959.rs delete mode 100644 tests/ui/impl-trait/issue-49556.rs delete mode 100644 tests/ui/impl-trait/issue-49579.rs delete mode 100644 tests/ui/impl-trait/issue-49685.rs delete mode 100644 tests/ui/impl-trait/issue-51185.rs delete mode 100644 tests/ui/impl-trait/issue-54966.rs delete mode 100644 tests/ui/impl-trait/issue-54966.stderr delete mode 100644 tests/ui/impl-trait/issue-55872-1.rs delete mode 100644 tests/ui/impl-trait/issue-55872-1.stderr delete mode 100644 tests/ui/impl-trait/issue-55872-2.rs delete mode 100644 tests/ui/impl-trait/issue-55872-2.stderr delete mode 100644 tests/ui/impl-trait/issue-55872-3.rs delete mode 100644 tests/ui/impl-trait/issue-55872-3.stderr delete mode 100644 tests/ui/impl-trait/issue-55872.rs delete mode 100644 tests/ui/impl-trait/issue-55872.stderr delete mode 100644 tests/ui/impl-trait/issue-56445.rs delete mode 100644 tests/ui/impl-trait/issue-68532.rs delete mode 100644 tests/ui/impl-trait/issue-72911.rs delete mode 100644 tests/ui/impl-trait/issue-72911.stderr delete mode 100644 tests/ui/impl-trait/issue-87450.rs delete mode 100644 tests/ui/impl-trait/issue-87450.stderr delete mode 100644 tests/ui/impl-trait/issue-99073-2.rs delete mode 100644 tests/ui/impl-trait/issue-99073-2.stderr delete mode 100644 tests/ui/impl-trait/issue-99073.rs delete mode 100644 tests/ui/impl-trait/issue-99073.stderr delete mode 100644 tests/ui/impl-trait/issue-99642-2.rs delete mode 100644 tests/ui/impl-trait/issue-99642.rs delete mode 100644 tests/ui/impl-trait/issue-99914.rs delete mode 100644 tests/ui/impl-trait/issue-99914.stderr create mode 100644 tests/ui/impl-trait/issues/issue-100075-2.rs create mode 100644 tests/ui/impl-trait/issues/issue-100075-2.stderr create mode 100644 tests/ui/impl-trait/issues/issue-100075.rs create mode 100644 tests/ui/impl-trait/issues/issue-100075.stderr create mode 100644 tests/ui/impl-trait/issues/issue-100187.rs create mode 100644 tests/ui/impl-trait/issues/issue-102605.rs create mode 100644 tests/ui/impl-trait/issues/issue-102605.stderr create mode 100644 tests/ui/impl-trait/issues/issue-103181-1.current.stderr create mode 100644 tests/ui/impl-trait/issues/issue-103181-1.next.stderr create mode 100644 tests/ui/impl-trait/issues/issue-103181-1.rs create mode 100644 tests/ui/impl-trait/issues/issue-103181-2.rs create mode 100644 tests/ui/impl-trait/issues/issue-103181-2.stderr create mode 100644 tests/ui/impl-trait/issues/issue-103599.rs create mode 100644 tests/ui/impl-trait/issues/issue-103599.stderr create mode 100644 tests/ui/impl-trait/issues/issue-108591.rs create mode 100644 tests/ui/impl-trait/issues/issue-108592.rs create mode 100644 tests/ui/impl-trait/issues/issue-35668.rs create mode 100644 tests/ui/impl-trait/issues/issue-35668.stderr create mode 100644 tests/ui/impl-trait/issues/issue-36792.rs create mode 100644 tests/ui/impl-trait/issues/issue-46959.rs create mode 100644 tests/ui/impl-trait/issues/issue-49556.rs create mode 100644 tests/ui/impl-trait/issues/issue-49579.rs create mode 100644 tests/ui/impl-trait/issues/issue-49685.rs create mode 100644 tests/ui/impl-trait/issues/issue-51185.rs create mode 100644 tests/ui/impl-trait/issues/issue-54966.rs create mode 100644 tests/ui/impl-trait/issues/issue-54966.stderr create mode 100644 tests/ui/impl-trait/issues/issue-55872-1.rs create mode 100644 tests/ui/impl-trait/issues/issue-55872-1.stderr create mode 100644 tests/ui/impl-trait/issues/issue-55872-2.rs create mode 100644 tests/ui/impl-trait/issues/issue-55872-2.stderr create mode 100644 tests/ui/impl-trait/issues/issue-55872-3.rs create mode 100644 tests/ui/impl-trait/issues/issue-55872-3.stderr create mode 100644 tests/ui/impl-trait/issues/issue-55872.rs create mode 100644 tests/ui/impl-trait/issues/issue-55872.stderr create mode 100644 tests/ui/impl-trait/issues/issue-56445.rs create mode 100644 tests/ui/impl-trait/issues/issue-68532.rs create mode 100644 tests/ui/impl-trait/issues/issue-72911.rs create mode 100644 tests/ui/impl-trait/issues/issue-72911.stderr create mode 100644 tests/ui/impl-trait/issues/issue-87450.rs create mode 100644 tests/ui/impl-trait/issues/issue-87450.stderr create mode 100644 tests/ui/impl-trait/issues/issue-99073-2.rs create mode 100644 tests/ui/impl-trait/issues/issue-99073-2.stderr create mode 100644 tests/ui/impl-trait/issues/issue-99073.rs create mode 100644 tests/ui/impl-trait/issues/issue-99073.stderr create mode 100644 tests/ui/impl-trait/issues/issue-99642-2.rs create mode 100644 tests/ui/impl-trait/issues/issue-99642.rs create mode 100644 tests/ui/impl-trait/issues/issue-99914.rs create mode 100644 tests/ui/impl-trait/issues/issue-99914.stderr delete mode 100644 tests/ui/impl-trait/lifetimes2.rs delete mode 100644 tests/ui/impl-trait/method-suggestion-no-duplication.rs delete mode 100644 tests/ui/impl-trait/method-suggestion-no-duplication.stderr create mode 100644 tests/ui/type-alias-impl-trait/coherence/coherence-treats-tait-ambig.rs create mode 100644 tests/ui/type-alias-impl-trait/coherence/coherence-treats-tait-ambig.stderr create mode 100644 tests/ui/where-clauses/method-suggestion-no-duplication.rs create mode 100644 tests/ui/where-clauses/method-suggestion-no-duplication.stderr diff --git a/src/tools/tidy/src/issues.txt b/src/tools/tidy/src/issues.txt index 2f0158609e0..76082614530 100644 --- a/src/tools/tidy/src/issues.txt +++ b/src/tools/tidy/src/issues.txt @@ -1183,47 +1183,39 @@ ui/impl-trait/explicit-generic-args-with-impl-trait/issue-87718.rs ui/impl-trait/in-trait/issue-102140.rs ui/impl-trait/in-trait/issue-102301.rs ui/impl-trait/in-trait/issue-102571.rs -ui/impl-trait/issue-100075-2.rs -ui/impl-trait/issue-100075.rs -ui/impl-trait/issue-100187.rs -ui/impl-trait/issue-102605.rs -ui/impl-trait/issue-103181-1.rs -ui/impl-trait/issue-103181-2.rs -ui/impl-trait/issue-103599.rs -ui/impl-trait/issue-108591.rs -ui/impl-trait/issue-108592.rs -ui/impl-trait/issue-35668.rs -ui/impl-trait/issue-36792.rs -ui/impl-trait/issue-46959.rs -ui/impl-trait/issue-49556.rs -ui/impl-trait/issue-49579.rs -ui/impl-trait/issue-49685.rs -ui/impl-trait/issue-51185.rs -ui/impl-trait/issue-54966.rs -ui/impl-trait/issue-55872-1.rs -ui/impl-trait/issue-55872-2.rs -ui/impl-trait/issue-55872-3.rs -ui/impl-trait/issue-55872.rs -ui/impl-trait/issue-56445.rs -ui/impl-trait/issue-68532.rs -ui/impl-trait/issue-72911.rs -ui/impl-trait/issue-87450.rs -ui/impl-trait/issue-99073-2.rs -ui/impl-trait/issue-99073.rs -ui/impl-trait/issue-99642-2.rs -ui/impl-trait/issue-99642.rs -ui/impl-trait/issue-99914.rs +ui/impl-trait/issues/issue-100075-2.rs +ui/impl-trait/issues/issue-100075.rs +ui/impl-trait/issues/issue-100187.rs +ui/impl-trait/issues/issue-102605.rs +ui/impl-trait/issues/issue-103181-1.rs +ui/impl-trait/issues/issue-103181-2.rs +ui/impl-trait/issues/issue-103599.rs ui/impl-trait/issues/issue-104815.rs ui/impl-trait/issues/issue-105826.rs +ui/impl-trait/issues/issue-108591.rs +ui/impl-trait/issues/issue-108592.rs ui/impl-trait/issues/issue-21659-show-relevant-trait-impls-3.rs +ui/impl-trait/issues/issue-35668.rs +ui/impl-trait/issues/issue-36792.rs ui/impl-trait/issues/issue-42479.rs +ui/impl-trait/issues/issue-46959.rs ui/impl-trait/issues/issue-49376.rs +ui/impl-trait/issues/issue-49556.rs +ui/impl-trait/issues/issue-49579.rs +ui/impl-trait/issues/issue-49685.rs +ui/impl-trait/issues/issue-51185.rs ui/impl-trait/issues/issue-52128.rs ui/impl-trait/issues/issue-53457.rs ui/impl-trait/issues/issue-54600.rs ui/impl-trait/issues/issue-54840.rs ui/impl-trait/issues/issue-54895.rs +ui/impl-trait/issues/issue-54966.rs ui/impl-trait/issues/issue-55608-captures-empty-region.rs +ui/impl-trait/issues/issue-55872-1.rs +ui/impl-trait/issues/issue-55872-2.rs +ui/impl-trait/issues/issue-55872-3.rs +ui/impl-trait/issues/issue-55872.rs +ui/impl-trait/issues/issue-56445.rs ui/impl-trait/issues/issue-57464-unexpected-regions.rs ui/impl-trait/issues/issue-57979-deeply-nested-impl-trait-in-assoc-proj.rs ui/impl-trait/issues/issue-57979-impl-trait-in-path.rs @@ -1233,8 +1225,10 @@ ui/impl-trait/issues/issue-58956.rs ui/impl-trait/issues/issue-62742.rs ui/impl-trait/issues/issue-65581.rs ui/impl-trait/issues/issue-67830.rs +ui/impl-trait/issues/issue-68532.rs ui/impl-trait/issues/issue-70877.rs ui/impl-trait/issues/issue-70971.rs +ui/impl-trait/issues/issue-72911.rs ui/impl-trait/issues/issue-74282.rs ui/impl-trait/issues/issue-77987.rs ui/impl-trait/issues/issue-78722-2.rs @@ -1251,12 +1245,18 @@ ui/impl-trait/issues/issue-86719.rs ui/impl-trait/issues/issue-86800.rs ui/impl-trait/issues/issue-87295.rs ui/impl-trait/issues/issue-87340.rs +ui/impl-trait/issues/issue-87450.rs ui/impl-trait/issues/issue-88236-2.rs ui/impl-trait/issues/issue-88236.rs ui/impl-trait/issues/issue-89312.rs ui/impl-trait/issues/issue-92305.rs ui/impl-trait/issues/issue-93788.rs +ui/impl-trait/issues/issue-99073-2.rs +ui/impl-trait/issues/issue-99073.rs ui/impl-trait/issues/issue-99348-impl-compatibility.rs +ui/impl-trait/issues/issue-99642-2.rs +ui/impl-trait/issues/issue-99642.rs +ui/impl-trait/issues/issue-99914.rs ui/implied-bounds/issue-100690.rs ui/implied-bounds/issue-101951.rs ui/implied-bounds/issue-110161.rs diff --git a/tests/ui/impl-trait/apit/arg-position-impl-trait-too-long.rs b/tests/ui/impl-trait/apit/arg-position-impl-trait-too-long.rs new file mode 100644 index 00000000000..8ef9281c9d3 --- /dev/null +++ b/tests/ui/impl-trait/apit/arg-position-impl-trait-too-long.rs @@ -0,0 +1,22 @@ +struct Header; +struct EntryMetadata; +struct Entry(A, B); + +trait Tr { + type EncodedKey; + type EncodedValue; +} + +fn test( + // This APIT is long, however we shouldn't render the type name with a newline in it. + y: impl FnOnce( + &mut Header, + &mut [EntryMetadata], + &mut [Entry] + ) -> R, +) { + let () = y; + //~^ ERROR mismatched types +} + +fn main() {} diff --git a/tests/ui/impl-trait/apit/arg-position-impl-trait-too-long.stderr b/tests/ui/impl-trait/apit/arg-position-impl-trait-too-long.stderr new file mode 100644 index 00000000000..158cfc8347c --- /dev/null +++ b/tests/ui/impl-trait/apit/arg-position-impl-trait-too-long.stderr @@ -0,0 +1,22 @@ +error[E0308]: mismatched types + --> $DIR/arg-position-impl-trait-too-long.rs:18:9 + | +LL | y: impl FnOnce( + | ________- +LL | | &mut Header, +LL | | &mut [EntryMetadata], +LL | | &mut [Entry] +LL | | ) -> R, + | |__________- expected this type parameter +LL | ) { +LL | let () = y; + | ^^ - this expression has type `impl FnOnce(&mut Header, &mut [EntryMetadata], &mut [Entry]) -> R` + | | + | expected type parameter `impl FnOnce(&mut Header, &mut [EntryMetadata], &mut [Entry]) -> R`, found `()` + | + = note: expected type parameter `impl FnOnce(&mut Header, &mut [EntryMetadata], &mut [Entry]) -> R` + found unit type `()` + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0308`. diff --git a/tests/ui/impl-trait/apit/impl-generic-mismatch-ab.rs b/tests/ui/impl-trait/apit/impl-generic-mismatch-ab.rs new file mode 100644 index 00000000000..6c9b119de74 --- /dev/null +++ b/tests/ui/impl-trait/apit/impl-generic-mismatch-ab.rs @@ -0,0 +1,12 @@ +use std::fmt::Debug; + +trait Foo { + fn foo(&self, a: &A, b: &impl Debug); +} + +impl Foo for () { + fn foo(&self, a: &impl Debug, b: &B) { } + //~^ ERROR method `foo` has an incompatible type for trait +} + +fn main() {} diff --git a/tests/ui/impl-trait/apit/impl-generic-mismatch-ab.stderr b/tests/ui/impl-trait/apit/impl-generic-mismatch-ab.stderr new file mode 100644 index 00000000000..9db996cf9ce --- /dev/null +++ b/tests/ui/impl-trait/apit/impl-generic-mismatch-ab.stderr @@ -0,0 +1,26 @@ +error[E0053]: method `foo` has an incompatible type for trait + --> $DIR/impl-generic-mismatch-ab.rs:8:32 + | +LL | fn foo(&self, a: &impl Debug, b: &B) { } + | - ^^^^^^^^^^^ expected type parameter `B`, found type parameter `impl Debug` + | | + | expected type parameter + | +note: type in trait + --> $DIR/impl-generic-mismatch-ab.rs:4:32 + | +LL | fn foo(&self, a: &A, b: &impl Debug); + | ^^ + = note: expected signature `fn(&(), &B, &impl Debug)` + found signature `fn(&(), &impl Debug, &B)` + = note: a type parameter was expected, but a different one was found; you might be missing a type parameter or trait bound + = note: for more information, visit https://doc.rust-lang.org/book/ch10-02-traits.html#traits-as-parameters +help: change the parameter type to match the trait + | +LL - fn foo(&self, a: &impl Debug, b: &B) { } +LL + fn foo(&self, a: &B, b: &B) { } + | + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0053`. diff --git a/tests/ui/impl-trait/arg-position-impl-trait-too-long.rs b/tests/ui/impl-trait/arg-position-impl-trait-too-long.rs deleted file mode 100644 index 8ef9281c9d3..00000000000 --- a/tests/ui/impl-trait/arg-position-impl-trait-too-long.rs +++ /dev/null @@ -1,22 +0,0 @@ -struct Header; -struct EntryMetadata; -struct Entry(A, B); - -trait Tr { - type EncodedKey; - type EncodedValue; -} - -fn test( - // This APIT is long, however we shouldn't render the type name with a newline in it. - y: impl FnOnce( - &mut Header, - &mut [EntryMetadata], - &mut [Entry] - ) -> R, -) { - let () = y; - //~^ ERROR mismatched types -} - -fn main() {} diff --git a/tests/ui/impl-trait/arg-position-impl-trait-too-long.stderr b/tests/ui/impl-trait/arg-position-impl-trait-too-long.stderr deleted file mode 100644 index 158cfc8347c..00000000000 --- a/tests/ui/impl-trait/arg-position-impl-trait-too-long.stderr +++ /dev/null @@ -1,22 +0,0 @@ -error[E0308]: mismatched types - --> $DIR/arg-position-impl-trait-too-long.rs:18:9 - | -LL | y: impl FnOnce( - | ________- -LL | | &mut Header, -LL | | &mut [EntryMetadata], -LL | | &mut [Entry] -LL | | ) -> R, - | |__________- expected this type parameter -LL | ) { -LL | let () = y; - | ^^ - this expression has type `impl FnOnce(&mut Header, &mut [EntryMetadata], &mut [Entry]) -> R` - | | - | expected type parameter `impl FnOnce(&mut Header, &mut [EntryMetadata], &mut [Entry]) -> R`, found `()` - | - = note: expected type parameter `impl FnOnce(&mut Header, &mut [EntryMetadata], &mut [Entry]) -> R` - found unit type `()` - -error: aborting due to 1 previous error - -For more information about this error, try `rustc --explain E0308`. diff --git a/tests/ui/impl-trait/can-return-unconstrained-closure.rs b/tests/ui/impl-trait/can-return-unconstrained-closure.rs deleted file mode 100644 index 1f8bdbc5054..00000000000 --- a/tests/ui/impl-trait/can-return-unconstrained-closure.rs +++ /dev/null @@ -1,23 +0,0 @@ -// Test that we are special casing "outlives" for opaque types. -// -// The return type of a closure is not required to outlive the closure. As such -// the following code would not compile if we used a standard outlives check -// when checking the return type, because the return type of the closure would -// be `&ReEmpty i32`, and we don't allow `ReEmpty` to occur in the concrete -// type used for an opaque type. -// -// However, opaque types are special cased to include check all regions in the -// concrete type against the bound, which forces the return type to be -// `&'static i32` here. - -//@ build-pass (FIXME(62277): could be check-pass?) - -fn make_identity() -> impl Sized { - |x: &'static i32| x -} - -fn make_identity_static() -> impl Sized + 'static { - |x: &'static i32| x -} - -fn main() {} diff --git a/tests/ui/impl-trait/coherence-treats-tait-ambig.rs b/tests/ui/impl-trait/coherence-treats-tait-ambig.rs deleted file mode 100644 index 54d68afc31f..00000000000 --- a/tests/ui/impl-trait/coherence-treats-tait-ambig.rs +++ /dev/null @@ -1,17 +0,0 @@ -#![feature(type_alias_impl_trait)] - -type T = impl Sized; - -struct Foo; - -impl Into for Foo { - //~^ ERROR conflicting implementations of trait `Into<_>` for type `Foo` - #[define_opaque(T)] - fn into(self) -> T { - Foo - } -} - -fn main() { - let _: T = Foo.into(); -} diff --git a/tests/ui/impl-trait/coherence-treats-tait-ambig.stderr b/tests/ui/impl-trait/coherence-treats-tait-ambig.stderr deleted file mode 100644 index 618bef1f271..00000000000 --- a/tests/ui/impl-trait/coherence-treats-tait-ambig.stderr +++ /dev/null @@ -1,13 +0,0 @@ -error[E0119]: conflicting implementations of trait `Into<_>` for type `Foo` - --> $DIR/coherence-treats-tait-ambig.rs:7:1 - | -LL | impl Into for Foo { - | ^^^^^^^^^^^^^^^^^^^^ - | - = note: conflicting implementation in crate `core`: - - impl Into for T - where U: From; - -error: aborting due to 1 previous error - -For more information about this error, try `rustc --explain E0119`. diff --git a/tests/ui/impl-trait/impl-generic-mismatch-ab.rs b/tests/ui/impl-trait/impl-generic-mismatch-ab.rs deleted file mode 100644 index 6c9b119de74..00000000000 --- a/tests/ui/impl-trait/impl-generic-mismatch-ab.rs +++ /dev/null @@ -1,12 +0,0 @@ -use std::fmt::Debug; - -trait Foo { - fn foo(&self, a: &A, b: &impl Debug); -} - -impl Foo for () { - fn foo(&self, a: &impl Debug, b: &B) { } - //~^ ERROR method `foo` has an incompatible type for trait -} - -fn main() {} diff --git a/tests/ui/impl-trait/impl-generic-mismatch-ab.stderr b/tests/ui/impl-trait/impl-generic-mismatch-ab.stderr deleted file mode 100644 index 9db996cf9ce..00000000000 --- a/tests/ui/impl-trait/impl-generic-mismatch-ab.stderr +++ /dev/null @@ -1,26 +0,0 @@ -error[E0053]: method `foo` has an incompatible type for trait - --> $DIR/impl-generic-mismatch-ab.rs:8:32 - | -LL | fn foo(&self, a: &impl Debug, b: &B) { } - | - ^^^^^^^^^^^ expected type parameter `B`, found type parameter `impl Debug` - | | - | expected type parameter - | -note: type in trait - --> $DIR/impl-generic-mismatch-ab.rs:4:32 - | -LL | fn foo(&self, a: &A, b: &impl Debug); - | ^^ - = note: expected signature `fn(&(), &B, &impl Debug)` - found signature `fn(&(), &impl Debug, &B)` - = note: a type parameter was expected, but a different one was found; you might be missing a type parameter or trait bound - = note: for more information, visit https://doc.rust-lang.org/book/ch10-02-traits.html#traits-as-parameters -help: change the parameter type to match the trait - | -LL - fn foo(&self, a: &impl Debug, b: &B) { } -LL + fn foo(&self, a: &B, b: &B) { } - | - -error: aborting due to 1 previous error - -For more information about this error, try `rustc --explain E0053`. diff --git a/tests/ui/impl-trait/issue-100075-2.rs b/tests/ui/impl-trait/issue-100075-2.rs deleted file mode 100644 index cf059af1925..00000000000 --- a/tests/ui/impl-trait/issue-100075-2.rs +++ /dev/null @@ -1,8 +0,0 @@ -fn opaque(t: T) -> impl Sized { - //~^ ERROR cannot resolve opaque type - //~| WARNING function cannot return without recursing - opaque(Some(t)) -} - -#[allow(dead_code)] -fn main() {} diff --git a/tests/ui/impl-trait/issue-100075-2.stderr b/tests/ui/impl-trait/issue-100075-2.stderr deleted file mode 100644 index b3b69677507..00000000000 --- a/tests/ui/impl-trait/issue-100075-2.stderr +++ /dev/null @@ -1,24 +0,0 @@ -warning: function cannot return without recursing - --> $DIR/issue-100075-2.rs:1:1 - | -LL | fn opaque(t: T) -> impl Sized { - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot return without recursing -... -LL | opaque(Some(t)) - | --------------- recursive call site - | - = help: a `loop` may express intention better if this is on purpose - = note: `#[warn(unconditional_recursion)]` on by default - -error[E0720]: cannot resolve opaque type - --> $DIR/issue-100075-2.rs:1:23 - | -LL | fn opaque(t: T) -> impl Sized { - | ^^^^^^^^^^ recursive opaque type -... -LL | opaque(Some(t)) - | --------------- returning here with type `impl Sized` - -error: aborting due to 1 previous error; 1 warning emitted - -For more information about this error, try `rustc --explain E0720`. diff --git a/tests/ui/impl-trait/issue-100075.rs b/tests/ui/impl-trait/issue-100075.rs deleted file mode 100644 index ea30abb4855..00000000000 --- a/tests/ui/impl-trait/issue-100075.rs +++ /dev/null @@ -1,21 +0,0 @@ -trait Marker {} -impl Marker for T {} - -fn maybe( - _t: T, -) -> Option< - //removing the line below makes it compile - &'static T, -> { - None -} - -fn _g(t: &'static T) -> &'static impl Marker { - //~^ ERROR cannot resolve opaque type - if let Some(t) = maybe(t) { - return _g(t); - } - todo!() -} - -fn main() {} diff --git a/tests/ui/impl-trait/issue-100075.stderr b/tests/ui/impl-trait/issue-100075.stderr deleted file mode 100644 index 75963489236..00000000000 --- a/tests/ui/impl-trait/issue-100075.stderr +++ /dev/null @@ -1,12 +0,0 @@ -error[E0720]: cannot resolve opaque type - --> $DIR/issue-100075.rs:13:37 - | -LL | fn _g(t: &'static T) -> &'static impl Marker { - | ^^^^^^^^^^^ recursive opaque type -... -LL | return _g(t); - | ----- returning here with type `&impl Marker` - -error: aborting due to 1 previous error - -For more information about this error, try `rustc --explain E0720`. diff --git a/tests/ui/impl-trait/issue-100187.rs b/tests/ui/impl-trait/issue-100187.rs deleted file mode 100644 index ed693c824ad..00000000000 --- a/tests/ui/impl-trait/issue-100187.rs +++ /dev/null @@ -1,12 +0,0 @@ -//@ check-pass - -trait Trait { - type Ty; -} -impl Trait<&u8> for () { - type Ty = (); -} - -fn test<'a, 'b>() -> impl Trait<&'a u8, Ty = impl Sized + 'b> {} - -fn main() {} diff --git a/tests/ui/impl-trait/issue-102605.rs b/tests/ui/impl-trait/issue-102605.rs deleted file mode 100644 index c04dbf47599..00000000000 --- a/tests/ui/impl-trait/issue-102605.rs +++ /dev/null @@ -1,15 +0,0 @@ -//@ edition:2021 - -async fn foo() -> Result<(), String> { - Ok(()) -} - -fn convert_result(r: Result) -> Option { - None -} - -fn main() -> Option<()> { - //~^ ERROR `main` has invalid return type `Option<()>` - convert_result(foo()) - //~^ ERROR mismatched types -} diff --git a/tests/ui/impl-trait/issue-102605.stderr b/tests/ui/impl-trait/issue-102605.stderr deleted file mode 100644 index ed6663fa61f..00000000000 --- a/tests/ui/impl-trait/issue-102605.stderr +++ /dev/null @@ -1,30 +0,0 @@ -error[E0277]: `main` has invalid return type `Option<()>` - --> $DIR/issue-102605.rs:11:14 - | -LL | fn main() -> Option<()> { - | ^^^^^^^^^^ `main` can only return types that implement `Termination` - | - = help: consider using `()`, or a `Result` - -error[E0308]: mismatched types - --> $DIR/issue-102605.rs:13:20 - | -LL | convert_result(foo()) - | -------------- ^^^^^ expected `Result<(), _>`, found future - | | - | arguments to this function are incorrect - | -note: function defined here - --> $DIR/issue-102605.rs:7:4 - | -LL | fn convert_result(r: Result) -> Option { - | ^^^^^^^^^^^^^^ --------------- -help: try wrapping the expression in `Err` - | -LL | convert_result(Err(foo())) - | ++++ + - -error: aborting due to 2 previous errors - -Some errors have detailed explanations: E0277, E0308. -For more information about an error, try `rustc --explain E0277`. diff --git a/tests/ui/impl-trait/issue-103181-1.current.stderr b/tests/ui/impl-trait/issue-103181-1.current.stderr deleted file mode 100644 index c15b7e04c26..00000000000 --- a/tests/ui/impl-trait/issue-103181-1.current.stderr +++ /dev/null @@ -1,12 +0,0 @@ -error[E0046]: not all trait items implemented, missing: `Error` - --> $DIR/issue-103181-1.rs:12:5 - | -LL | type Error; - | ---------- `Error` from trait -LL | } -LL | impl HttpBody for () { - | ^^^^^^^^^^^^^^^^^^^^ missing `Error` in implementation - -error: aborting due to 1 previous error - -For more information about this error, try `rustc --explain E0046`. diff --git a/tests/ui/impl-trait/issue-103181-1.next.stderr b/tests/ui/impl-trait/issue-103181-1.next.stderr deleted file mode 100644 index c15b7e04c26..00000000000 --- a/tests/ui/impl-trait/issue-103181-1.next.stderr +++ /dev/null @@ -1,12 +0,0 @@ -error[E0046]: not all trait items implemented, missing: `Error` - --> $DIR/issue-103181-1.rs:12:5 - | -LL | type Error; - | ---------- `Error` from trait -LL | } -LL | impl HttpBody for () { - | ^^^^^^^^^^^^^^^^^^^^ missing `Error` in implementation - -error: aborting due to 1 previous error - -For more information about this error, try `rustc --explain E0046`. diff --git a/tests/ui/impl-trait/issue-103181-1.rs b/tests/ui/impl-trait/issue-103181-1.rs deleted file mode 100644 index fd8b72c1c75..00000000000 --- a/tests/ui/impl-trait/issue-103181-1.rs +++ /dev/null @@ -1,88 +0,0 @@ -//@ revisions: current next -//@ ignore-compare-mode-next-solver (explicit revisions) -//@[next] compile-flags: -Znext-solver -//@ edition:2021 - -mod hyper { - use std::{fmt::Debug, future::Future, marker::PhantomData, pin::Pin, task::Poll}; - - pub trait HttpBody { - type Error; - } - impl HttpBody for () { - //~^ ERROR not all trait items implemented, missing: `Error` - // don't implement `Error` here for the ICE - } - - pub struct Server(I, S); - - pub fn serve(_: S) -> Server { - todo!() - } - - impl Future for Server<(), S> - where - S: MakeServiceRef<(), (), ResBody = B>, - B: HttpBody, - B::Error: Debug, - { - type Output = (); - - fn poll(self: Pin<&mut Self>, _: &mut std::task::Context<'_>) -> Poll { - todo!() - } - } - - pub trait MakeServiceRef { - type ResBody; - } - - impl MakeServiceRef<(), ()> for T - where - T: for<'a> Service<&'a (), Response = S>, - S: Service<()>, - { - type ResBody = (); - } - - pub struct MakeServiceFn(pub F); - pub struct ServiceFn(pub PhantomData<(F, R)>); - - pub trait Service { - type Response; - } - - impl<'t, F, Ret, Target, Svc> Service<&'t Target> for MakeServiceFn - where - F: Fn() -> Ret, - Ret: Future>, - { - type Response = Svc; - } - - impl Service for ServiceFn - where - F: Fn() -> Ret, - Ret: Future>, - { - type Response = ResBody; - } -} - -async fn smarvice() -> Result<(), ()> { - Ok(()) -} - -fn service_fn(f: F) -> hyper::ServiceFn -where - F: Fn() -> S, -{ - hyper::ServiceFn(std::marker::PhantomData) -} - -async fn iceice() { - let service = hyper::MakeServiceFn(|| async { Ok::<_, ()>(service_fn(|| smarvice())) }); - hyper::serve::<(), _>(service).await; -} - -fn main() {} diff --git a/tests/ui/impl-trait/issue-103181-2.rs b/tests/ui/impl-trait/issue-103181-2.rs deleted file mode 100644 index 72729e851e3..00000000000 --- a/tests/ui/impl-trait/issue-103181-2.rs +++ /dev/null @@ -1,29 +0,0 @@ -//@ edition:2021 - -trait SendFuture: Send { - type Output; -} - -impl SendFuture for Fut { - type Output = (); -} - -async fn broken_fut() { - ident_error; - //~^ ERROR cannot find value `ident_error` in this scope -} - -// triggers normalization of `::Output`, -// which requires `Fut: Send`. -fn normalize(_: Fut, _: Fut::Output) {} - -async fn iceice() -// <- async fn is necessary -where - A: Send, - B: Send, // <- a second bound -{ - normalize(broken_fut(), ()); -} - -fn main() {} diff --git a/tests/ui/impl-trait/issue-103181-2.stderr b/tests/ui/impl-trait/issue-103181-2.stderr deleted file mode 100644 index cef4449dbb9..00000000000 --- a/tests/ui/impl-trait/issue-103181-2.stderr +++ /dev/null @@ -1,9 +0,0 @@ -error[E0425]: cannot find value `ident_error` in this scope - --> $DIR/issue-103181-2.rs:12:5 - | -LL | ident_error; - | ^^^^^^^^^^^ not found in this scope - -error: aborting due to 1 previous error - -For more information about this error, try `rustc --explain E0425`. diff --git a/tests/ui/impl-trait/issue-103599.rs b/tests/ui/impl-trait/issue-103599.rs deleted file mode 100644 index 62741a7454c..00000000000 --- a/tests/ui/impl-trait/issue-103599.rs +++ /dev/null @@ -1,10 +0,0 @@ -//@ check-pass - -trait T {} - -fn wrap(x: impl T) -> impl T { - //~^ WARN function cannot return without recursing - wrap(wrap(x)) -} - -fn main() {} diff --git a/tests/ui/impl-trait/issue-103599.stderr b/tests/ui/impl-trait/issue-103599.stderr deleted file mode 100644 index 82038c1dceb..00000000000 --- a/tests/ui/impl-trait/issue-103599.stderr +++ /dev/null @@ -1,14 +0,0 @@ -warning: function cannot return without recursing - --> $DIR/issue-103599.rs:5:1 - | -LL | fn wrap(x: impl T) -> impl T { - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot return without recursing -LL | -LL | wrap(wrap(x)) - | ------- recursive call site - | - = help: a `loop` may express intention better if this is on purpose - = note: `#[warn(unconditional_recursion)]` on by default - -warning: 1 warning emitted - diff --git a/tests/ui/impl-trait/issue-108591.rs b/tests/ui/impl-trait/issue-108591.rs deleted file mode 100644 index db1c73831ee..00000000000 --- a/tests/ui/impl-trait/issue-108591.rs +++ /dev/null @@ -1,32 +0,0 @@ -//@ check-pass - -#![feature(type_alias_impl_trait)] - -struct MyTy<'a>(Vec, &'a ()); - -impl MyTy<'_> { - fn one(&mut self) -> &mut impl Sized { - &mut self.0 - } - fn two(&mut self) -> &mut (impl Sized + 'static) { - self.one() - } -} - -type Opaque2 = impl Sized; -type Opaque<'a> = Opaque2; -#[define_opaque(Opaque)] -fn define<'a>() -> Opaque<'a> {} - -fn test<'a>() { - None::<&'static Opaque<'a>>; -} - -fn one<'a, 'b: 'b>() -> &'a impl Sized { - &() -} -fn two<'a, 'b>() { - one::<'a, 'b>(); -} - -fn main() {} diff --git a/tests/ui/impl-trait/issue-108592.rs b/tests/ui/impl-trait/issue-108592.rs deleted file mode 100644 index facb8be9d23..00000000000 --- a/tests/ui/impl-trait/issue-108592.rs +++ /dev/null @@ -1,23 +0,0 @@ -//@ check-pass -#![feature(type_alias_impl_trait)] - -fn opaque<'a: 'a>() -> impl Sized {} -fn assert_static(_: T) {} - -fn test_closure() { - let closure = |_| { - assert_static(opaque()); - }; - closure(&opaque()); -} - -pub type Opaque2 = impl Sized; -pub type Opaque<'a> = Opaque2; -#[define_opaque(Opaque)] -fn define<'a>() -> Opaque<'a> {} - -fn test_tait(_: &Opaque<'_>) { - None::<&'static Opaque<'_>>; -} - -fn main() {} diff --git a/tests/ui/impl-trait/issue-35668.rs b/tests/ui/impl-trait/issue-35668.rs deleted file mode 100644 index c970163fcab..00000000000 --- a/tests/ui/impl-trait/issue-35668.rs +++ /dev/null @@ -1,12 +0,0 @@ -fn func<'a, T>(a: &'a [T]) -> impl Iterator { - a.iter().map(|a| a*a) - //~^ ERROR cannot multiply `&T` by `&T` -} - -fn main() { - let a = (0..30).collect::>(); - - for k in func(&a) { - println!("{}", k); - } -} diff --git a/tests/ui/impl-trait/issue-35668.stderr b/tests/ui/impl-trait/issue-35668.stderr deleted file mode 100644 index ba02d2898e9..00000000000 --- a/tests/ui/impl-trait/issue-35668.stderr +++ /dev/null @@ -1,16 +0,0 @@ -error[E0369]: cannot multiply `&T` by `&T` - --> $DIR/issue-35668.rs:2:23 - | -LL | a.iter().map(|a| a*a) - | -^- &T - | | - | &T - | -help: consider introducing a `where` clause, but there might be an alternative better way to express this requirement - | -LL | fn func<'a, T>(a: &'a [T]) -> impl Iterator where &T: Mul<&T> { - | +++++++++++++++++ - -error: aborting due to 1 previous error - -For more information about this error, try `rustc --explain E0369`. diff --git a/tests/ui/impl-trait/issue-36792.rs b/tests/ui/impl-trait/issue-36792.rs deleted file mode 100644 index 6682a953fa0..00000000000 --- a/tests/ui/impl-trait/issue-36792.rs +++ /dev/null @@ -1,7 +0,0 @@ -//@ run-pass -fn foo() -> impl Copy { - foo -} -fn main() { - foo(); -} diff --git a/tests/ui/impl-trait/issue-46959.rs b/tests/ui/impl-trait/issue-46959.rs deleted file mode 100644 index 0acb293384c..00000000000 --- a/tests/ui/impl-trait/issue-46959.rs +++ /dev/null @@ -1,9 +0,0 @@ -//@ check-pass -#![deny(non_camel_case_types)] - -#[allow(dead_code)] -fn qqq(lol: impl Iterator) -> impl Iterator { - lol.map(|x|x as u64) -} - -fn main() {} diff --git a/tests/ui/impl-trait/issue-49556.rs b/tests/ui/impl-trait/issue-49556.rs deleted file mode 100644 index 82275bf12b4..00000000000 --- a/tests/ui/impl-trait/issue-49556.rs +++ /dev/null @@ -1,13 +0,0 @@ -//@ check-pass -fn iter<'a>(data: &'a [usize]) -> impl Iterator + 'a { - data.iter() - .map( - |x| x // fn(&'a usize) -> &'a usize - ) - .map( - |x| *x // fn(&'a usize) -> usize - ) -} - -fn main() { -} diff --git a/tests/ui/impl-trait/issue-49579.rs b/tests/ui/impl-trait/issue-49579.rs deleted file mode 100644 index 4b2f186e38a..00000000000 --- a/tests/ui/impl-trait/issue-49579.rs +++ /dev/null @@ -1,14 +0,0 @@ -//@ check-pass - -fn fibs(n: u32) -> impl Iterator { - (0 .. n) - .scan((0, 1), |st, _| { - *st = (st.1, st.0 + st.1); - Some(*st) - }) - .map(&|(f, _)| f) -} - -fn main() { - println!("{:?}", fibs(10).collect::>()); -} diff --git a/tests/ui/impl-trait/issue-49685.rs b/tests/ui/impl-trait/issue-49685.rs deleted file mode 100644 index 82556cc242c..00000000000 --- a/tests/ui/impl-trait/issue-49685.rs +++ /dev/null @@ -1,13 +0,0 @@ -//@ run-pass -// Regression test for #49685: drop elaboration was not revealing the -// value of `impl Trait` returns, leading to an ICE. - -fn main() { - let _ = Some(()) - .into_iter() - .flat_map(|_| Some(()).into_iter().flat_map(func)); -} - -fn func(_: ()) -> impl Iterator { - Some(()).into_iter().flat_map(|_| vec![]) -} diff --git a/tests/ui/impl-trait/issue-51185.rs b/tests/ui/impl-trait/issue-51185.rs deleted file mode 100644 index ddba905835f..00000000000 --- a/tests/ui/impl-trait/issue-51185.rs +++ /dev/null @@ -1,8 +0,0 @@ -//@ run-pass -fn foo() -> impl Into fn(&'a ())> { - (|_| {}) as for<'a> fn(&'a ()) -} - -fn main() { - foo().into()(&()); -} diff --git a/tests/ui/impl-trait/issue-54966.rs b/tests/ui/impl-trait/issue-54966.rs deleted file mode 100644 index 0ed3c4b3ca9..00000000000 --- a/tests/ui/impl-trait/issue-54966.rs +++ /dev/null @@ -1,6 +0,0 @@ -// issue-54966: ICE returning an unknown type with impl FnMut - -fn generate_duration() -> Oper {} -//~^ ERROR cannot find type `Oper` in this scope - -fn main() {} diff --git a/tests/ui/impl-trait/issue-54966.stderr b/tests/ui/impl-trait/issue-54966.stderr deleted file mode 100644 index 4024c5afa80..00000000000 --- a/tests/ui/impl-trait/issue-54966.stderr +++ /dev/null @@ -1,9 +0,0 @@ -error[E0412]: cannot find type `Oper` in this scope - --> $DIR/issue-54966.rs:3:27 - | -LL | fn generate_duration() -> Oper {} - | ^^^^ not found in this scope - -error: aborting due to 1 previous error - -For more information about this error, try `rustc --explain E0412`. diff --git a/tests/ui/impl-trait/issue-55872-1.rs b/tests/ui/impl-trait/issue-55872-1.rs deleted file mode 100644 index 663cdbc2f5c..00000000000 --- a/tests/ui/impl-trait/issue-55872-1.rs +++ /dev/null @@ -1,21 +0,0 @@ -#![feature(impl_trait_in_assoc_type)] - -pub trait Bar { - type E: Copy; - - fn foo() -> Self::E; -} - -impl Bar for S { - type E = impl Copy; - - fn foo() -> Self::E { - //~^ ERROR impl has stricter requirements than trait - //~| ERROR the trait bound `S: Copy` is not satisfied in `(S, T)` [E0277] - //~| ERROR the trait bound `T: Copy` is not satisfied in `(S, T)` [E0277] - //~| ERROR type parameter `T` is part of concrete type - (S::default(), T::default()) - } -} - -fn main() {} diff --git a/tests/ui/impl-trait/issue-55872-1.stderr b/tests/ui/impl-trait/issue-55872-1.stderr deleted file mode 100644 index e048bec1b6d..00000000000 --- a/tests/ui/impl-trait/issue-55872-1.stderr +++ /dev/null @@ -1,49 +0,0 @@ -error[E0276]: impl has stricter requirements than trait - --> $DIR/issue-55872-1.rs:12:15 - | -LL | fn foo() -> Self::E; - | ----------------------- definition of `foo` from trait -... -LL | fn foo() -> Self::E { - | ^^^^^^^ impl has extra requirement `T: Default` - -error[E0277]: the trait bound `S: Copy` is not satisfied in `(S, T)` - --> $DIR/issue-55872-1.rs:12:29 - | -LL | fn foo() -> Self::E { - | ^^^^^^^ within `(S, T)`, the trait `Copy` is not implemented for `S` -... -LL | (S::default(), T::default()) - | ---------------------------- return type was inferred to be `(S, T)` here - | - = note: required because it appears within the type `(S, T)` -help: consider further restricting type parameter `S` with trait `Copy` - | -LL | impl Bar for S { - | +++++++++++++++++++ - -error[E0277]: the trait bound `T: Copy` is not satisfied in `(S, T)` - --> $DIR/issue-55872-1.rs:12:29 - | -LL | fn foo() -> Self::E { - | ^^^^^^^ within `(S, T)`, the trait `Copy` is not implemented for `T` -... -LL | (S::default(), T::default()) - | ---------------------------- return type was inferred to be `(S, T)` here - | - = note: required because it appears within the type `(S, T)` -help: consider further restricting type parameter `T` with trait `Copy` - | -LL | fn foo() -> Self::E { - | +++++++++++++++++++ - -error: type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias - --> $DIR/issue-55872-1.rs:12:29 - | -LL | fn foo() -> Self::E { - | ^^^^^^^ - -error: aborting due to 4 previous errors - -Some errors have detailed explanations: E0276, E0277. -For more information about an error, try `rustc --explain E0276`. diff --git a/tests/ui/impl-trait/issue-55872-2.rs b/tests/ui/impl-trait/issue-55872-2.rs deleted file mode 100644 index a3b2225126a..00000000000 --- a/tests/ui/impl-trait/issue-55872-2.rs +++ /dev/null @@ -1,20 +0,0 @@ -//@ edition:2018 - -#![feature(impl_trait_in_assoc_type)] - -pub trait Bar { - type E: Send; - - fn foo() -> Self::E; -} - -impl Bar for S { - type E = impl std::marker::Send; - fn foo() -> Self::E { - //~^ ERROR type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias - //~| ERROR type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias - async {} - } -} - -fn main() {} diff --git a/tests/ui/impl-trait/issue-55872-2.stderr b/tests/ui/impl-trait/issue-55872-2.stderr deleted file mode 100644 index 51a7dd00ade..00000000000 --- a/tests/ui/impl-trait/issue-55872-2.stderr +++ /dev/null @@ -1,16 +0,0 @@ -error: type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias - --> $DIR/issue-55872-2.rs:13:20 - | -LL | fn foo() -> Self::E { - | ^^^^^^^ - -error: type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias - --> $DIR/issue-55872-2.rs:13:20 - | -LL | fn foo() -> Self::E { - | ^^^^^^^ - | - = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` - -error: aborting due to 2 previous errors - diff --git a/tests/ui/impl-trait/issue-55872-3.rs b/tests/ui/impl-trait/issue-55872-3.rs deleted file mode 100644 index 698e7f36234..00000000000 --- a/tests/ui/impl-trait/issue-55872-3.rs +++ /dev/null @@ -1,21 +0,0 @@ -//@ edition:2018 -//@compile-flags: --diagnostic-width=300 - -#![feature(impl_trait_in_assoc_type)] - -pub trait Bar { - type E: Copy; - - fn foo() -> Self::E; -} - -impl Bar for S { - type E = impl std::marker::Copy; - fn foo() -> Self::E { - //~^ ERROR : Copy` is not satisfied [E0277] - //~| ERROR type parameter `T` is part of concrete type - async {} - } -} - -fn main() {} diff --git a/tests/ui/impl-trait/issue-55872-3.stderr b/tests/ui/impl-trait/issue-55872-3.stderr deleted file mode 100644 index 3281dcc3501..00000000000 --- a/tests/ui/impl-trait/issue-55872-3.stderr +++ /dev/null @@ -1,18 +0,0 @@ -error[E0277]: the trait bound `{async block@$DIR/issue-55872-3.rs:17:9: 17:14}: Copy` is not satisfied - --> $DIR/issue-55872-3.rs:14:20 - | -LL | fn foo() -> Self::E { - | ^^^^^^^ the trait `Copy` is not implemented for `{async block@$DIR/issue-55872-3.rs:17:9: 17:14}` -... -LL | async {} - | -------- return type was inferred to be `{async block@$DIR/issue-55872-3.rs:17:9: 17:14}` here - -error: type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias - --> $DIR/issue-55872-3.rs:14:20 - | -LL | fn foo() -> Self::E { - | ^^^^^^^ - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0277`. diff --git a/tests/ui/impl-trait/issue-55872.rs b/tests/ui/impl-trait/issue-55872.rs deleted file mode 100644 index b76f8182b20..00000000000 --- a/tests/ui/impl-trait/issue-55872.rs +++ /dev/null @@ -1,18 +0,0 @@ -#![feature(impl_trait_in_assoc_type)] - -pub trait Bar { - type E: Copy; - - fn foo() -> Self::E; -} - -impl Bar for S { - type E = impl Copy; - - fn foo() -> Self::E { - //~^ ERROR type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias - || () - } -} - -fn main() {} diff --git a/tests/ui/impl-trait/issue-55872.stderr b/tests/ui/impl-trait/issue-55872.stderr deleted file mode 100644 index 54e852f8edf..00000000000 --- a/tests/ui/impl-trait/issue-55872.stderr +++ /dev/null @@ -1,8 +0,0 @@ -error: type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias - --> $DIR/issue-55872.rs:12:20 - | -LL | fn foo() -> Self::E { - | ^^^^^^^ - -error: aborting due to 1 previous error - diff --git a/tests/ui/impl-trait/issue-56445.rs b/tests/ui/impl-trait/issue-56445.rs deleted file mode 100644 index af6182d546b..00000000000 --- a/tests/ui/impl-trait/issue-56445.rs +++ /dev/null @@ -1,25 +0,0 @@ -// Regression test for https://github.com/rust-lang/rust/issues/56445#issuecomment-629426939 -//@ check-pass - -#![crate_type = "lib"] - -use std::marker::PhantomData; - -pub struct S<'a> { - pub m1: PhantomData<&'a u8>, - pub m2: [u8; S::size()], -} - -impl<'a> S<'a> -{ - pub const fn size() -> usize { 1 } - - pub fn new() -> Self - { - Self - { - m1: PhantomData, - m2: [0; Self::size()], - } - } -} diff --git a/tests/ui/impl-trait/issue-68532.rs b/tests/ui/impl-trait/issue-68532.rs deleted file mode 100644 index ce653ee058f..00000000000 --- a/tests/ui/impl-trait/issue-68532.rs +++ /dev/null @@ -1,13 +0,0 @@ -//@ check-pass - -pub struct A<'a>(&'a ()); - -impl<'a> A<'a> { - const N: usize = 68; - - pub fn foo(&self) { - let _b = [0; Self::N]; - } -} - -fn main() {} diff --git a/tests/ui/impl-trait/issue-72911.rs b/tests/ui/impl-trait/issue-72911.rs deleted file mode 100644 index 63f4898f430..00000000000 --- a/tests/ui/impl-trait/issue-72911.rs +++ /dev/null @@ -1,21 +0,0 @@ -// Regression test for #72911. - -pub struct Lint {} - -impl Lint {} - -pub fn gather_all() -> impl Iterator { - lint_files().flat_map(|f| gather_from_file(&f)) -} - -fn gather_from_file(dir_entry: &foo::MissingItem) -> impl Iterator { - //~^ ERROR: failed to resolve - unimplemented!() -} - -fn lint_files() -> impl Iterator { - //~^ ERROR: failed to resolve - unimplemented!() -} - -fn main() {} diff --git a/tests/ui/impl-trait/issue-72911.stderr b/tests/ui/impl-trait/issue-72911.stderr deleted file mode 100644 index 063b7f68dc0..00000000000 --- a/tests/ui/impl-trait/issue-72911.stderr +++ /dev/null @@ -1,19 +0,0 @@ -error[E0433]: failed to resolve: use of unresolved module or unlinked crate `foo` - --> $DIR/issue-72911.rs:11:33 - | -LL | fn gather_from_file(dir_entry: &foo::MissingItem) -> impl Iterator { - | ^^^ use of unresolved module or unlinked crate `foo` - | - = help: you might be missing a crate named `foo` - -error[E0433]: failed to resolve: use of unresolved module or unlinked crate `foo` - --> $DIR/issue-72911.rs:16:41 - | -LL | fn lint_files() -> impl Iterator { - | ^^^ use of unresolved module or unlinked crate `foo` - | - = help: you might be missing a crate named `foo` - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0433`. diff --git a/tests/ui/impl-trait/issue-87450.rs b/tests/ui/impl-trait/issue-87450.rs deleted file mode 100644 index 983ef7cfbe0..00000000000 --- a/tests/ui/impl-trait/issue-87450.rs +++ /dev/null @@ -1,16 +0,0 @@ -fn bar() -> impl Fn() { - wrap(wrap(wrap(wrap(foo())))) -} - -fn foo() -> impl Fn() { - //~^ WARNING 5:1: 5:22: function cannot return without recursing [unconditional_recursion] - //~| ERROR 5:13: 5:22: cannot resolve opaque type [E0720] - wrap(wrap(wrap(wrap(wrap(wrap(wrap(foo()))))))) -} - -fn wrap(f: impl Fn()) -> impl Fn() { - move || f() -} - -fn main() { -} diff --git a/tests/ui/impl-trait/issue-87450.stderr b/tests/ui/impl-trait/issue-87450.stderr deleted file mode 100644 index 9567e09651d..00000000000 --- a/tests/ui/impl-trait/issue-87450.stderr +++ /dev/null @@ -1,27 +0,0 @@ -warning: function cannot return without recursing - --> $DIR/issue-87450.rs:5:1 - | -LL | fn foo() -> impl Fn() { - | ^^^^^^^^^^^^^^^^^^^^^ cannot return without recursing -... -LL | wrap(wrap(wrap(wrap(wrap(wrap(wrap(foo()))))))) - | ----- recursive call site - | - = help: a `loop` may express intention better if this is on purpose - = note: `#[warn(unconditional_recursion)]` on by default - -error[E0720]: cannot resolve opaque type - --> $DIR/issue-87450.rs:5:13 - | -LL | fn foo() -> impl Fn() { - | ^^^^^^^^^ recursive opaque type -... -LL | wrap(wrap(wrap(wrap(wrap(wrap(wrap(foo()))))))) - | ----------------------------------------------- returning here with type `impl Fn()` -... -LL | fn wrap(f: impl Fn()) -> impl Fn() { - | --------- returning this opaque type `impl Fn()` - -error: aborting due to 1 previous error; 1 warning emitted - -For more information about this error, try `rustc --explain E0720`. diff --git a/tests/ui/impl-trait/issue-99073-2.rs b/tests/ui/impl-trait/issue-99073-2.rs deleted file mode 100644 index bfb8850857d..00000000000 --- a/tests/ui/impl-trait/issue-99073-2.rs +++ /dev/null @@ -1,17 +0,0 @@ -use std::fmt::Display; - -fn main() { - test("hi", true); -} - -fn test(t: T, recurse: bool) -> impl Display { - let f = || { - let i: u32 = test::(-1, false); - //~^ ERROR expected generic type parameter, found `i32` - println!("{i}"); - }; - if recurse { - f(); - } - t -} diff --git a/tests/ui/impl-trait/issue-99073-2.stderr b/tests/ui/impl-trait/issue-99073-2.stderr deleted file mode 100644 index 519530b5396..00000000000 --- a/tests/ui/impl-trait/issue-99073-2.stderr +++ /dev/null @@ -1,12 +0,0 @@ -error[E0792]: expected generic type parameter, found `i32` - --> $DIR/issue-99073-2.rs:9:22 - | -LL | fn test(t: T, recurse: bool) -> impl Display { - | - this generic parameter must be used with a generic type parameter -LL | let f = || { -LL | let i: u32 = test::(-1, false); - | ^^^^^^^^^^^^^^^^^^^^^^ - -error: aborting due to 1 previous error - -For more information about this error, try `rustc --explain E0792`. diff --git a/tests/ui/impl-trait/issue-99073.rs b/tests/ui/impl-trait/issue-99073.rs deleted file mode 100644 index d2a2a61a408..00000000000 --- a/tests/ui/impl-trait/issue-99073.rs +++ /dev/null @@ -1,8 +0,0 @@ -fn main() { - let _ = fix(|_: &dyn Fn()| {}); -} - -fn fix(f: F) -> impl Fn() { - move || f(fix(&f)) - //~^ ERROR expected generic type parameter, found `&F` -} diff --git a/tests/ui/impl-trait/issue-99073.stderr b/tests/ui/impl-trait/issue-99073.stderr deleted file mode 100644 index 1917c1bfd6b..00000000000 --- a/tests/ui/impl-trait/issue-99073.stderr +++ /dev/null @@ -1,11 +0,0 @@ -error[E0792]: expected generic type parameter, found `&F` - --> $DIR/issue-99073.rs:6:13 - | -LL | fn fix(f: F) -> impl Fn() { - | - this generic parameter must be used with a generic type parameter -LL | move || f(fix(&f)) - | ^^^^^^^ - -error: aborting due to 1 previous error - -For more information about this error, try `rustc --explain E0792`. diff --git a/tests/ui/impl-trait/issue-99642-2.rs b/tests/ui/impl-trait/issue-99642-2.rs deleted file mode 100644 index d8d367a5d35..00000000000 --- a/tests/ui/impl-trait/issue-99642-2.rs +++ /dev/null @@ -1,9 +0,0 @@ -//@ check-pass - -#![feature(type_alias_impl_trait)] -type Opq = impl Sized; -#[define_opaque(Opq)] -fn test() -> impl Iterator { - Box::new(0..) as Box> -} -fn main() {} diff --git a/tests/ui/impl-trait/issue-99642.rs b/tests/ui/impl-trait/issue-99642.rs deleted file mode 100644 index ed4786ae8d8..00000000000 --- a/tests/ui/impl-trait/issue-99642.rs +++ /dev/null @@ -1,7 +0,0 @@ -//@ check-pass - -fn test() -> impl Iterator { - Box::new(0..) as Box> -} - -fn main() {} diff --git a/tests/ui/impl-trait/issue-99914.rs b/tests/ui/impl-trait/issue-99914.rs deleted file mode 100644 index a7858740f09..00000000000 --- a/tests/ui/impl-trait/issue-99914.rs +++ /dev/null @@ -1,13 +0,0 @@ -//@ edition:2021 - -fn main() {} - -struct Error; -struct Okay; - -fn foo(t: Result) { - t.and_then(|t| -> _ { bar(t) }); - //~^ ERROR mismatched types -} - -async fn bar(t: Okay) {} diff --git a/tests/ui/impl-trait/issue-99914.stderr b/tests/ui/impl-trait/issue-99914.stderr deleted file mode 100644 index 8adb211745a..00000000000 --- a/tests/ui/impl-trait/issue-99914.stderr +++ /dev/null @@ -1,16 +0,0 @@ -error[E0308]: mismatched types - --> $DIR/issue-99914.rs:9:27 - | -LL | t.and_then(|t| -> _ { bar(t) }); - | - ^^^^^^ expected `Result<_, Error>`, found future - | | - | expected `Result<_, Error>` because of return type - | -help: try wrapping the expression in `Ok` - | -LL | t.and_then(|t| -> _ { Ok(bar(t)) }); - | +++ + - -error: aborting due to 1 previous error - -For more information about this error, try `rustc --explain E0308`. diff --git a/tests/ui/impl-trait/issues/issue-100075-2.rs b/tests/ui/impl-trait/issues/issue-100075-2.rs new file mode 100644 index 00000000000..cf059af1925 --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-100075-2.rs @@ -0,0 +1,8 @@ +fn opaque(t: T) -> impl Sized { + //~^ ERROR cannot resolve opaque type + //~| WARNING function cannot return without recursing + opaque(Some(t)) +} + +#[allow(dead_code)] +fn main() {} diff --git a/tests/ui/impl-trait/issues/issue-100075-2.stderr b/tests/ui/impl-trait/issues/issue-100075-2.stderr new file mode 100644 index 00000000000..b3b69677507 --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-100075-2.stderr @@ -0,0 +1,24 @@ +warning: function cannot return without recursing + --> $DIR/issue-100075-2.rs:1:1 + | +LL | fn opaque(t: T) -> impl Sized { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot return without recursing +... +LL | opaque(Some(t)) + | --------------- recursive call site + | + = help: a `loop` may express intention better if this is on purpose + = note: `#[warn(unconditional_recursion)]` on by default + +error[E0720]: cannot resolve opaque type + --> $DIR/issue-100075-2.rs:1:23 + | +LL | fn opaque(t: T) -> impl Sized { + | ^^^^^^^^^^ recursive opaque type +... +LL | opaque(Some(t)) + | --------------- returning here with type `impl Sized` + +error: aborting due to 1 previous error; 1 warning emitted + +For more information about this error, try `rustc --explain E0720`. diff --git a/tests/ui/impl-trait/issues/issue-100075.rs b/tests/ui/impl-trait/issues/issue-100075.rs new file mode 100644 index 00000000000..ea30abb4855 --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-100075.rs @@ -0,0 +1,21 @@ +trait Marker {} +impl Marker for T {} + +fn maybe( + _t: T, +) -> Option< + //removing the line below makes it compile + &'static T, +> { + None +} + +fn _g(t: &'static T) -> &'static impl Marker { + //~^ ERROR cannot resolve opaque type + if let Some(t) = maybe(t) { + return _g(t); + } + todo!() +} + +fn main() {} diff --git a/tests/ui/impl-trait/issues/issue-100075.stderr b/tests/ui/impl-trait/issues/issue-100075.stderr new file mode 100644 index 00000000000..75963489236 --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-100075.stderr @@ -0,0 +1,12 @@ +error[E0720]: cannot resolve opaque type + --> $DIR/issue-100075.rs:13:37 + | +LL | fn _g(t: &'static T) -> &'static impl Marker { + | ^^^^^^^^^^^ recursive opaque type +... +LL | return _g(t); + | ----- returning here with type `&impl Marker` + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0720`. diff --git a/tests/ui/impl-trait/issues/issue-100187.rs b/tests/ui/impl-trait/issues/issue-100187.rs new file mode 100644 index 00000000000..ed693c824ad --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-100187.rs @@ -0,0 +1,12 @@ +//@ check-pass + +trait Trait { + type Ty; +} +impl Trait<&u8> for () { + type Ty = (); +} + +fn test<'a, 'b>() -> impl Trait<&'a u8, Ty = impl Sized + 'b> {} + +fn main() {} diff --git a/tests/ui/impl-trait/issues/issue-102605.rs b/tests/ui/impl-trait/issues/issue-102605.rs new file mode 100644 index 00000000000..c04dbf47599 --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-102605.rs @@ -0,0 +1,15 @@ +//@ edition:2021 + +async fn foo() -> Result<(), String> { + Ok(()) +} + +fn convert_result(r: Result) -> Option { + None +} + +fn main() -> Option<()> { + //~^ ERROR `main` has invalid return type `Option<()>` + convert_result(foo()) + //~^ ERROR mismatched types +} diff --git a/tests/ui/impl-trait/issues/issue-102605.stderr b/tests/ui/impl-trait/issues/issue-102605.stderr new file mode 100644 index 00000000000..ed6663fa61f --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-102605.stderr @@ -0,0 +1,30 @@ +error[E0277]: `main` has invalid return type `Option<()>` + --> $DIR/issue-102605.rs:11:14 + | +LL | fn main() -> Option<()> { + | ^^^^^^^^^^ `main` can only return types that implement `Termination` + | + = help: consider using `()`, or a `Result` + +error[E0308]: mismatched types + --> $DIR/issue-102605.rs:13:20 + | +LL | convert_result(foo()) + | -------------- ^^^^^ expected `Result<(), _>`, found future + | | + | arguments to this function are incorrect + | +note: function defined here + --> $DIR/issue-102605.rs:7:4 + | +LL | fn convert_result(r: Result) -> Option { + | ^^^^^^^^^^^^^^ --------------- +help: try wrapping the expression in `Err` + | +LL | convert_result(Err(foo())) + | ++++ + + +error: aborting due to 2 previous errors + +Some errors have detailed explanations: E0277, E0308. +For more information about an error, try `rustc --explain E0277`. diff --git a/tests/ui/impl-trait/issues/issue-103181-1.current.stderr b/tests/ui/impl-trait/issues/issue-103181-1.current.stderr new file mode 100644 index 00000000000..c15b7e04c26 --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-103181-1.current.stderr @@ -0,0 +1,12 @@ +error[E0046]: not all trait items implemented, missing: `Error` + --> $DIR/issue-103181-1.rs:12:5 + | +LL | type Error; + | ---------- `Error` from trait +LL | } +LL | impl HttpBody for () { + | ^^^^^^^^^^^^^^^^^^^^ missing `Error` in implementation + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0046`. diff --git a/tests/ui/impl-trait/issues/issue-103181-1.next.stderr b/tests/ui/impl-trait/issues/issue-103181-1.next.stderr new file mode 100644 index 00000000000..c15b7e04c26 --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-103181-1.next.stderr @@ -0,0 +1,12 @@ +error[E0046]: not all trait items implemented, missing: `Error` + --> $DIR/issue-103181-1.rs:12:5 + | +LL | type Error; + | ---------- `Error` from trait +LL | } +LL | impl HttpBody for () { + | ^^^^^^^^^^^^^^^^^^^^ missing `Error` in implementation + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0046`. diff --git a/tests/ui/impl-trait/issues/issue-103181-1.rs b/tests/ui/impl-trait/issues/issue-103181-1.rs new file mode 100644 index 00000000000..fd8b72c1c75 --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-103181-1.rs @@ -0,0 +1,88 @@ +//@ revisions: current next +//@ ignore-compare-mode-next-solver (explicit revisions) +//@[next] compile-flags: -Znext-solver +//@ edition:2021 + +mod hyper { + use std::{fmt::Debug, future::Future, marker::PhantomData, pin::Pin, task::Poll}; + + pub trait HttpBody { + type Error; + } + impl HttpBody for () { + //~^ ERROR not all trait items implemented, missing: `Error` + // don't implement `Error` here for the ICE + } + + pub struct Server(I, S); + + pub fn serve(_: S) -> Server { + todo!() + } + + impl Future for Server<(), S> + where + S: MakeServiceRef<(), (), ResBody = B>, + B: HttpBody, + B::Error: Debug, + { + type Output = (); + + fn poll(self: Pin<&mut Self>, _: &mut std::task::Context<'_>) -> Poll { + todo!() + } + } + + pub trait MakeServiceRef { + type ResBody; + } + + impl MakeServiceRef<(), ()> for T + where + T: for<'a> Service<&'a (), Response = S>, + S: Service<()>, + { + type ResBody = (); + } + + pub struct MakeServiceFn(pub F); + pub struct ServiceFn(pub PhantomData<(F, R)>); + + pub trait Service { + type Response; + } + + impl<'t, F, Ret, Target, Svc> Service<&'t Target> for MakeServiceFn + where + F: Fn() -> Ret, + Ret: Future>, + { + type Response = Svc; + } + + impl Service for ServiceFn + where + F: Fn() -> Ret, + Ret: Future>, + { + type Response = ResBody; + } +} + +async fn smarvice() -> Result<(), ()> { + Ok(()) +} + +fn service_fn(f: F) -> hyper::ServiceFn +where + F: Fn() -> S, +{ + hyper::ServiceFn(std::marker::PhantomData) +} + +async fn iceice() { + let service = hyper::MakeServiceFn(|| async { Ok::<_, ()>(service_fn(|| smarvice())) }); + hyper::serve::<(), _>(service).await; +} + +fn main() {} diff --git a/tests/ui/impl-trait/issues/issue-103181-2.rs b/tests/ui/impl-trait/issues/issue-103181-2.rs new file mode 100644 index 00000000000..72729e851e3 --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-103181-2.rs @@ -0,0 +1,29 @@ +//@ edition:2021 + +trait SendFuture: Send { + type Output; +} + +impl SendFuture for Fut { + type Output = (); +} + +async fn broken_fut() { + ident_error; + //~^ ERROR cannot find value `ident_error` in this scope +} + +// triggers normalization of `::Output`, +// which requires `Fut: Send`. +fn normalize(_: Fut, _: Fut::Output) {} + +async fn iceice() +// <- async fn is necessary +where + A: Send, + B: Send, // <- a second bound +{ + normalize(broken_fut(), ()); +} + +fn main() {} diff --git a/tests/ui/impl-trait/issues/issue-103181-2.stderr b/tests/ui/impl-trait/issues/issue-103181-2.stderr new file mode 100644 index 00000000000..cef4449dbb9 --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-103181-2.stderr @@ -0,0 +1,9 @@ +error[E0425]: cannot find value `ident_error` in this scope + --> $DIR/issue-103181-2.rs:12:5 + | +LL | ident_error; + | ^^^^^^^^^^^ not found in this scope + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0425`. diff --git a/tests/ui/impl-trait/issues/issue-103599.rs b/tests/ui/impl-trait/issues/issue-103599.rs new file mode 100644 index 00000000000..62741a7454c --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-103599.rs @@ -0,0 +1,10 @@ +//@ check-pass + +trait T {} + +fn wrap(x: impl T) -> impl T { + //~^ WARN function cannot return without recursing + wrap(wrap(x)) +} + +fn main() {} diff --git a/tests/ui/impl-trait/issues/issue-103599.stderr b/tests/ui/impl-trait/issues/issue-103599.stderr new file mode 100644 index 00000000000..82038c1dceb --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-103599.stderr @@ -0,0 +1,14 @@ +warning: function cannot return without recursing + --> $DIR/issue-103599.rs:5:1 + | +LL | fn wrap(x: impl T) -> impl T { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot return without recursing +LL | +LL | wrap(wrap(x)) + | ------- recursive call site + | + = help: a `loop` may express intention better if this is on purpose + = note: `#[warn(unconditional_recursion)]` on by default + +warning: 1 warning emitted + diff --git a/tests/ui/impl-trait/issues/issue-108591.rs b/tests/ui/impl-trait/issues/issue-108591.rs new file mode 100644 index 00000000000..db1c73831ee --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-108591.rs @@ -0,0 +1,32 @@ +//@ check-pass + +#![feature(type_alias_impl_trait)] + +struct MyTy<'a>(Vec, &'a ()); + +impl MyTy<'_> { + fn one(&mut self) -> &mut impl Sized { + &mut self.0 + } + fn two(&mut self) -> &mut (impl Sized + 'static) { + self.one() + } +} + +type Opaque2 = impl Sized; +type Opaque<'a> = Opaque2; +#[define_opaque(Opaque)] +fn define<'a>() -> Opaque<'a> {} + +fn test<'a>() { + None::<&'static Opaque<'a>>; +} + +fn one<'a, 'b: 'b>() -> &'a impl Sized { + &() +} +fn two<'a, 'b>() { + one::<'a, 'b>(); +} + +fn main() {} diff --git a/tests/ui/impl-trait/issues/issue-108592.rs b/tests/ui/impl-trait/issues/issue-108592.rs new file mode 100644 index 00000000000..facb8be9d23 --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-108592.rs @@ -0,0 +1,23 @@ +//@ check-pass +#![feature(type_alias_impl_trait)] + +fn opaque<'a: 'a>() -> impl Sized {} +fn assert_static(_: T) {} + +fn test_closure() { + let closure = |_| { + assert_static(opaque()); + }; + closure(&opaque()); +} + +pub type Opaque2 = impl Sized; +pub type Opaque<'a> = Opaque2; +#[define_opaque(Opaque)] +fn define<'a>() -> Opaque<'a> {} + +fn test_tait(_: &Opaque<'_>) { + None::<&'static Opaque<'_>>; +} + +fn main() {} diff --git a/tests/ui/impl-trait/issues/issue-35668.rs b/tests/ui/impl-trait/issues/issue-35668.rs new file mode 100644 index 00000000000..c970163fcab --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-35668.rs @@ -0,0 +1,12 @@ +fn func<'a, T>(a: &'a [T]) -> impl Iterator { + a.iter().map(|a| a*a) + //~^ ERROR cannot multiply `&T` by `&T` +} + +fn main() { + let a = (0..30).collect::>(); + + for k in func(&a) { + println!("{}", k); + } +} diff --git a/tests/ui/impl-trait/issues/issue-35668.stderr b/tests/ui/impl-trait/issues/issue-35668.stderr new file mode 100644 index 00000000000..ba02d2898e9 --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-35668.stderr @@ -0,0 +1,16 @@ +error[E0369]: cannot multiply `&T` by `&T` + --> $DIR/issue-35668.rs:2:23 + | +LL | a.iter().map(|a| a*a) + | -^- &T + | | + | &T + | +help: consider introducing a `where` clause, but there might be an alternative better way to express this requirement + | +LL | fn func<'a, T>(a: &'a [T]) -> impl Iterator where &T: Mul<&T> { + | +++++++++++++++++ + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0369`. diff --git a/tests/ui/impl-trait/issues/issue-36792.rs b/tests/ui/impl-trait/issues/issue-36792.rs new file mode 100644 index 00000000000..6682a953fa0 --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-36792.rs @@ -0,0 +1,7 @@ +//@ run-pass +fn foo() -> impl Copy { + foo +} +fn main() { + foo(); +} diff --git a/tests/ui/impl-trait/issues/issue-46959.rs b/tests/ui/impl-trait/issues/issue-46959.rs new file mode 100644 index 00000000000..0acb293384c --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-46959.rs @@ -0,0 +1,9 @@ +//@ check-pass +#![deny(non_camel_case_types)] + +#[allow(dead_code)] +fn qqq(lol: impl Iterator) -> impl Iterator { + lol.map(|x|x as u64) +} + +fn main() {} diff --git a/tests/ui/impl-trait/issues/issue-49556.rs b/tests/ui/impl-trait/issues/issue-49556.rs new file mode 100644 index 00000000000..82275bf12b4 --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-49556.rs @@ -0,0 +1,13 @@ +//@ check-pass +fn iter<'a>(data: &'a [usize]) -> impl Iterator + 'a { + data.iter() + .map( + |x| x // fn(&'a usize) -> &'a usize + ) + .map( + |x| *x // fn(&'a usize) -> usize + ) +} + +fn main() { +} diff --git a/tests/ui/impl-trait/issues/issue-49579.rs b/tests/ui/impl-trait/issues/issue-49579.rs new file mode 100644 index 00000000000..4b2f186e38a --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-49579.rs @@ -0,0 +1,14 @@ +//@ check-pass + +fn fibs(n: u32) -> impl Iterator { + (0 .. n) + .scan((0, 1), |st, _| { + *st = (st.1, st.0 + st.1); + Some(*st) + }) + .map(&|(f, _)| f) +} + +fn main() { + println!("{:?}", fibs(10).collect::>()); +} diff --git a/tests/ui/impl-trait/issues/issue-49685.rs b/tests/ui/impl-trait/issues/issue-49685.rs new file mode 100644 index 00000000000..82556cc242c --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-49685.rs @@ -0,0 +1,13 @@ +//@ run-pass +// Regression test for #49685: drop elaboration was not revealing the +// value of `impl Trait` returns, leading to an ICE. + +fn main() { + let _ = Some(()) + .into_iter() + .flat_map(|_| Some(()).into_iter().flat_map(func)); +} + +fn func(_: ()) -> impl Iterator { + Some(()).into_iter().flat_map(|_| vec![]) +} diff --git a/tests/ui/impl-trait/issues/issue-51185.rs b/tests/ui/impl-trait/issues/issue-51185.rs new file mode 100644 index 00000000000..ddba905835f --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-51185.rs @@ -0,0 +1,8 @@ +//@ run-pass +fn foo() -> impl Into fn(&'a ())> { + (|_| {}) as for<'a> fn(&'a ()) +} + +fn main() { + foo().into()(&()); +} diff --git a/tests/ui/impl-trait/issues/issue-54966.rs b/tests/ui/impl-trait/issues/issue-54966.rs new file mode 100644 index 00000000000..0ed3c4b3ca9 --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-54966.rs @@ -0,0 +1,6 @@ +// issue-54966: ICE returning an unknown type with impl FnMut + +fn generate_duration() -> Oper {} +//~^ ERROR cannot find type `Oper` in this scope + +fn main() {} diff --git a/tests/ui/impl-trait/issues/issue-54966.stderr b/tests/ui/impl-trait/issues/issue-54966.stderr new file mode 100644 index 00000000000..4024c5afa80 --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-54966.stderr @@ -0,0 +1,9 @@ +error[E0412]: cannot find type `Oper` in this scope + --> $DIR/issue-54966.rs:3:27 + | +LL | fn generate_duration() -> Oper {} + | ^^^^ not found in this scope + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0412`. diff --git a/tests/ui/impl-trait/issues/issue-55872-1.rs b/tests/ui/impl-trait/issues/issue-55872-1.rs new file mode 100644 index 00000000000..663cdbc2f5c --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-55872-1.rs @@ -0,0 +1,21 @@ +#![feature(impl_trait_in_assoc_type)] + +pub trait Bar { + type E: Copy; + + fn foo() -> Self::E; +} + +impl Bar for S { + type E = impl Copy; + + fn foo() -> Self::E { + //~^ ERROR impl has stricter requirements than trait + //~| ERROR the trait bound `S: Copy` is not satisfied in `(S, T)` [E0277] + //~| ERROR the trait bound `T: Copy` is not satisfied in `(S, T)` [E0277] + //~| ERROR type parameter `T` is part of concrete type + (S::default(), T::default()) + } +} + +fn main() {} diff --git a/tests/ui/impl-trait/issues/issue-55872-1.stderr b/tests/ui/impl-trait/issues/issue-55872-1.stderr new file mode 100644 index 00000000000..e048bec1b6d --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-55872-1.stderr @@ -0,0 +1,49 @@ +error[E0276]: impl has stricter requirements than trait + --> $DIR/issue-55872-1.rs:12:15 + | +LL | fn foo() -> Self::E; + | ----------------------- definition of `foo` from trait +... +LL | fn foo() -> Self::E { + | ^^^^^^^ impl has extra requirement `T: Default` + +error[E0277]: the trait bound `S: Copy` is not satisfied in `(S, T)` + --> $DIR/issue-55872-1.rs:12:29 + | +LL | fn foo() -> Self::E { + | ^^^^^^^ within `(S, T)`, the trait `Copy` is not implemented for `S` +... +LL | (S::default(), T::default()) + | ---------------------------- return type was inferred to be `(S, T)` here + | + = note: required because it appears within the type `(S, T)` +help: consider further restricting type parameter `S` with trait `Copy` + | +LL | impl Bar for S { + | +++++++++++++++++++ + +error[E0277]: the trait bound `T: Copy` is not satisfied in `(S, T)` + --> $DIR/issue-55872-1.rs:12:29 + | +LL | fn foo() -> Self::E { + | ^^^^^^^ within `(S, T)`, the trait `Copy` is not implemented for `T` +... +LL | (S::default(), T::default()) + | ---------------------------- return type was inferred to be `(S, T)` here + | + = note: required because it appears within the type `(S, T)` +help: consider further restricting type parameter `T` with trait `Copy` + | +LL | fn foo() -> Self::E { + | +++++++++++++++++++ + +error: type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias + --> $DIR/issue-55872-1.rs:12:29 + | +LL | fn foo() -> Self::E { + | ^^^^^^^ + +error: aborting due to 4 previous errors + +Some errors have detailed explanations: E0276, E0277. +For more information about an error, try `rustc --explain E0276`. diff --git a/tests/ui/impl-trait/issues/issue-55872-2.rs b/tests/ui/impl-trait/issues/issue-55872-2.rs new file mode 100644 index 00000000000..a3b2225126a --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-55872-2.rs @@ -0,0 +1,20 @@ +//@ edition:2018 + +#![feature(impl_trait_in_assoc_type)] + +pub trait Bar { + type E: Send; + + fn foo() -> Self::E; +} + +impl Bar for S { + type E = impl std::marker::Send; + fn foo() -> Self::E { + //~^ ERROR type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias + //~| ERROR type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias + async {} + } +} + +fn main() {} diff --git a/tests/ui/impl-trait/issues/issue-55872-2.stderr b/tests/ui/impl-trait/issues/issue-55872-2.stderr new file mode 100644 index 00000000000..51a7dd00ade --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-55872-2.stderr @@ -0,0 +1,16 @@ +error: type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias + --> $DIR/issue-55872-2.rs:13:20 + | +LL | fn foo() -> Self::E { + | ^^^^^^^ + +error: type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias + --> $DIR/issue-55872-2.rs:13:20 + | +LL | fn foo() -> Self::E { + | ^^^^^^^ + | + = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` + +error: aborting due to 2 previous errors + diff --git a/tests/ui/impl-trait/issues/issue-55872-3.rs b/tests/ui/impl-trait/issues/issue-55872-3.rs new file mode 100644 index 00000000000..698e7f36234 --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-55872-3.rs @@ -0,0 +1,21 @@ +//@ edition:2018 +//@compile-flags: --diagnostic-width=300 + +#![feature(impl_trait_in_assoc_type)] + +pub trait Bar { + type E: Copy; + + fn foo() -> Self::E; +} + +impl Bar for S { + type E = impl std::marker::Copy; + fn foo() -> Self::E { + //~^ ERROR : Copy` is not satisfied [E0277] + //~| ERROR type parameter `T` is part of concrete type + async {} + } +} + +fn main() {} diff --git a/tests/ui/impl-trait/issues/issue-55872-3.stderr b/tests/ui/impl-trait/issues/issue-55872-3.stderr new file mode 100644 index 00000000000..3281dcc3501 --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-55872-3.stderr @@ -0,0 +1,18 @@ +error[E0277]: the trait bound `{async block@$DIR/issue-55872-3.rs:17:9: 17:14}: Copy` is not satisfied + --> $DIR/issue-55872-3.rs:14:20 + | +LL | fn foo() -> Self::E { + | ^^^^^^^ the trait `Copy` is not implemented for `{async block@$DIR/issue-55872-3.rs:17:9: 17:14}` +... +LL | async {} + | -------- return type was inferred to be `{async block@$DIR/issue-55872-3.rs:17:9: 17:14}` here + +error: type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias + --> $DIR/issue-55872-3.rs:14:20 + | +LL | fn foo() -> Self::E { + | ^^^^^^^ + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0277`. diff --git a/tests/ui/impl-trait/issues/issue-55872.rs b/tests/ui/impl-trait/issues/issue-55872.rs new file mode 100644 index 00000000000..b76f8182b20 --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-55872.rs @@ -0,0 +1,18 @@ +#![feature(impl_trait_in_assoc_type)] + +pub trait Bar { + type E: Copy; + + fn foo() -> Self::E; +} + +impl Bar for S { + type E = impl Copy; + + fn foo() -> Self::E { + //~^ ERROR type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias + || () + } +} + +fn main() {} diff --git a/tests/ui/impl-trait/issues/issue-55872.stderr b/tests/ui/impl-trait/issues/issue-55872.stderr new file mode 100644 index 00000000000..54e852f8edf --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-55872.stderr @@ -0,0 +1,8 @@ +error: type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias + --> $DIR/issue-55872.rs:12:20 + | +LL | fn foo() -> Self::E { + | ^^^^^^^ + +error: aborting due to 1 previous error + diff --git a/tests/ui/impl-trait/issues/issue-56445.rs b/tests/ui/impl-trait/issues/issue-56445.rs new file mode 100644 index 00000000000..af6182d546b --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-56445.rs @@ -0,0 +1,25 @@ +// Regression test for https://github.com/rust-lang/rust/issues/56445#issuecomment-629426939 +//@ check-pass + +#![crate_type = "lib"] + +use std::marker::PhantomData; + +pub struct S<'a> { + pub m1: PhantomData<&'a u8>, + pub m2: [u8; S::size()], +} + +impl<'a> S<'a> +{ + pub const fn size() -> usize { 1 } + + pub fn new() -> Self + { + Self + { + m1: PhantomData, + m2: [0; Self::size()], + } + } +} diff --git a/tests/ui/impl-trait/issues/issue-68532.rs b/tests/ui/impl-trait/issues/issue-68532.rs new file mode 100644 index 00000000000..ce653ee058f --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-68532.rs @@ -0,0 +1,13 @@ +//@ check-pass + +pub struct A<'a>(&'a ()); + +impl<'a> A<'a> { + const N: usize = 68; + + pub fn foo(&self) { + let _b = [0; Self::N]; + } +} + +fn main() {} diff --git a/tests/ui/impl-trait/issues/issue-72911.rs b/tests/ui/impl-trait/issues/issue-72911.rs new file mode 100644 index 00000000000..63f4898f430 --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-72911.rs @@ -0,0 +1,21 @@ +// Regression test for #72911. + +pub struct Lint {} + +impl Lint {} + +pub fn gather_all() -> impl Iterator { + lint_files().flat_map(|f| gather_from_file(&f)) +} + +fn gather_from_file(dir_entry: &foo::MissingItem) -> impl Iterator { + //~^ ERROR: failed to resolve + unimplemented!() +} + +fn lint_files() -> impl Iterator { + //~^ ERROR: failed to resolve + unimplemented!() +} + +fn main() {} diff --git a/tests/ui/impl-trait/issues/issue-72911.stderr b/tests/ui/impl-trait/issues/issue-72911.stderr new file mode 100644 index 00000000000..063b7f68dc0 --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-72911.stderr @@ -0,0 +1,19 @@ +error[E0433]: failed to resolve: use of unresolved module or unlinked crate `foo` + --> $DIR/issue-72911.rs:11:33 + | +LL | fn gather_from_file(dir_entry: &foo::MissingItem) -> impl Iterator { + | ^^^ use of unresolved module or unlinked crate `foo` + | + = help: you might be missing a crate named `foo` + +error[E0433]: failed to resolve: use of unresolved module or unlinked crate `foo` + --> $DIR/issue-72911.rs:16:41 + | +LL | fn lint_files() -> impl Iterator { + | ^^^ use of unresolved module or unlinked crate `foo` + | + = help: you might be missing a crate named `foo` + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0433`. diff --git a/tests/ui/impl-trait/issues/issue-87450.rs b/tests/ui/impl-trait/issues/issue-87450.rs new file mode 100644 index 00000000000..983ef7cfbe0 --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-87450.rs @@ -0,0 +1,16 @@ +fn bar() -> impl Fn() { + wrap(wrap(wrap(wrap(foo())))) +} + +fn foo() -> impl Fn() { + //~^ WARNING 5:1: 5:22: function cannot return without recursing [unconditional_recursion] + //~| ERROR 5:13: 5:22: cannot resolve opaque type [E0720] + wrap(wrap(wrap(wrap(wrap(wrap(wrap(foo()))))))) +} + +fn wrap(f: impl Fn()) -> impl Fn() { + move || f() +} + +fn main() { +} diff --git a/tests/ui/impl-trait/issues/issue-87450.stderr b/tests/ui/impl-trait/issues/issue-87450.stderr new file mode 100644 index 00000000000..9567e09651d --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-87450.stderr @@ -0,0 +1,27 @@ +warning: function cannot return without recursing + --> $DIR/issue-87450.rs:5:1 + | +LL | fn foo() -> impl Fn() { + | ^^^^^^^^^^^^^^^^^^^^^ cannot return without recursing +... +LL | wrap(wrap(wrap(wrap(wrap(wrap(wrap(foo()))))))) + | ----- recursive call site + | + = help: a `loop` may express intention better if this is on purpose + = note: `#[warn(unconditional_recursion)]` on by default + +error[E0720]: cannot resolve opaque type + --> $DIR/issue-87450.rs:5:13 + | +LL | fn foo() -> impl Fn() { + | ^^^^^^^^^ recursive opaque type +... +LL | wrap(wrap(wrap(wrap(wrap(wrap(wrap(foo()))))))) + | ----------------------------------------------- returning here with type `impl Fn()` +... +LL | fn wrap(f: impl Fn()) -> impl Fn() { + | --------- returning this opaque type `impl Fn()` + +error: aborting due to 1 previous error; 1 warning emitted + +For more information about this error, try `rustc --explain E0720`. diff --git a/tests/ui/impl-trait/issues/issue-99073-2.rs b/tests/ui/impl-trait/issues/issue-99073-2.rs new file mode 100644 index 00000000000..bfb8850857d --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-99073-2.rs @@ -0,0 +1,17 @@ +use std::fmt::Display; + +fn main() { + test("hi", true); +} + +fn test(t: T, recurse: bool) -> impl Display { + let f = || { + let i: u32 = test::(-1, false); + //~^ ERROR expected generic type parameter, found `i32` + println!("{i}"); + }; + if recurse { + f(); + } + t +} diff --git a/tests/ui/impl-trait/issues/issue-99073-2.stderr b/tests/ui/impl-trait/issues/issue-99073-2.stderr new file mode 100644 index 00000000000..519530b5396 --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-99073-2.stderr @@ -0,0 +1,12 @@ +error[E0792]: expected generic type parameter, found `i32` + --> $DIR/issue-99073-2.rs:9:22 + | +LL | fn test(t: T, recurse: bool) -> impl Display { + | - this generic parameter must be used with a generic type parameter +LL | let f = || { +LL | let i: u32 = test::(-1, false); + | ^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0792`. diff --git a/tests/ui/impl-trait/issues/issue-99073.rs b/tests/ui/impl-trait/issues/issue-99073.rs new file mode 100644 index 00000000000..d2a2a61a408 --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-99073.rs @@ -0,0 +1,8 @@ +fn main() { + let _ = fix(|_: &dyn Fn()| {}); +} + +fn fix(f: F) -> impl Fn() { + move || f(fix(&f)) + //~^ ERROR expected generic type parameter, found `&F` +} diff --git a/tests/ui/impl-trait/issues/issue-99073.stderr b/tests/ui/impl-trait/issues/issue-99073.stderr new file mode 100644 index 00000000000..1917c1bfd6b --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-99073.stderr @@ -0,0 +1,11 @@ +error[E0792]: expected generic type parameter, found `&F` + --> $DIR/issue-99073.rs:6:13 + | +LL | fn fix(f: F) -> impl Fn() { + | - this generic parameter must be used with a generic type parameter +LL | move || f(fix(&f)) + | ^^^^^^^ + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0792`. diff --git a/tests/ui/impl-trait/issues/issue-99642-2.rs b/tests/ui/impl-trait/issues/issue-99642-2.rs new file mode 100644 index 00000000000..d8d367a5d35 --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-99642-2.rs @@ -0,0 +1,9 @@ +//@ check-pass + +#![feature(type_alias_impl_trait)] +type Opq = impl Sized; +#[define_opaque(Opq)] +fn test() -> impl Iterator { + Box::new(0..) as Box> +} +fn main() {} diff --git a/tests/ui/impl-trait/issues/issue-99642.rs b/tests/ui/impl-trait/issues/issue-99642.rs new file mode 100644 index 00000000000..ed4786ae8d8 --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-99642.rs @@ -0,0 +1,7 @@ +//@ check-pass + +fn test() -> impl Iterator { + Box::new(0..) as Box> +} + +fn main() {} diff --git a/tests/ui/impl-trait/issues/issue-99914.rs b/tests/ui/impl-trait/issues/issue-99914.rs new file mode 100644 index 00000000000..a7858740f09 --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-99914.rs @@ -0,0 +1,13 @@ +//@ edition:2021 + +fn main() {} + +struct Error; +struct Okay; + +fn foo(t: Result) { + t.and_then(|t| -> _ { bar(t) }); + //~^ ERROR mismatched types +} + +async fn bar(t: Okay) {} diff --git a/tests/ui/impl-trait/issues/issue-99914.stderr b/tests/ui/impl-trait/issues/issue-99914.stderr new file mode 100644 index 00000000000..8adb211745a --- /dev/null +++ b/tests/ui/impl-trait/issues/issue-99914.stderr @@ -0,0 +1,16 @@ +error[E0308]: mismatched types + --> $DIR/issue-99914.rs:9:27 + | +LL | t.and_then(|t| -> _ { bar(t) }); + | - ^^^^^^ expected `Result<_, Error>`, found future + | | + | expected `Result<_, Error>` because of return type + | +help: try wrapping the expression in `Ok` + | +LL | t.and_then(|t| -> _ { Ok(bar(t)) }); + | +++ + + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0308`. diff --git a/tests/ui/impl-trait/lifetimes2.rs b/tests/ui/impl-trait/lifetimes2.rs deleted file mode 100644 index facf2f75bc4..00000000000 --- a/tests/ui/impl-trait/lifetimes2.rs +++ /dev/null @@ -1,10 +0,0 @@ -//@ check-pass - -pub fn keys<'a>(x: &'a Result) -> impl std::fmt::Debug + 'a { - match x { - Ok(map) => Ok(map), - Err(map) => Err(map), - } -} - -fn main() {} diff --git a/tests/ui/impl-trait/method-suggestion-no-duplication.rs b/tests/ui/impl-trait/method-suggestion-no-duplication.rs deleted file mode 100644 index c5c966a959a..00000000000 --- a/tests/ui/impl-trait/method-suggestion-no-duplication.rs +++ /dev/null @@ -1,9 +0,0 @@ -// issue #21405 -struct Foo; - -fn foo(f: F) where F: FnMut(Foo) {} - -fn main() { - foo(|s| s.is_empty()); - //~^ ERROR no method named `is_empty` found -} diff --git a/tests/ui/impl-trait/method-suggestion-no-duplication.stderr b/tests/ui/impl-trait/method-suggestion-no-duplication.stderr deleted file mode 100644 index 6bc57f89467..00000000000 --- a/tests/ui/impl-trait/method-suggestion-no-duplication.stderr +++ /dev/null @@ -1,17 +0,0 @@ -error[E0599]: no method named `is_empty` found for struct `Foo` in the current scope - --> $DIR/method-suggestion-no-duplication.rs:7:15 - | -LL | struct Foo; - | ---------- method `is_empty` not found for this struct -... -LL | foo(|s| s.is_empty()); - | ^^^^^^^^ method not found in `Foo` - | - = help: items from traits can only be used if the trait is implemented and in scope - = note: the following traits define an item `is_empty`, perhaps you need to implement one of them: - candidate #1: `ExactSizeIterator` - candidate #2: `RangeBounds` - -error: aborting due to 1 previous error - -For more information about this error, try `rustc --explain E0599`. diff --git a/tests/ui/type-alias-impl-trait/coherence/coherence-treats-tait-ambig.rs b/tests/ui/type-alias-impl-trait/coherence/coherence-treats-tait-ambig.rs new file mode 100644 index 00000000000..54d68afc31f --- /dev/null +++ b/tests/ui/type-alias-impl-trait/coherence/coherence-treats-tait-ambig.rs @@ -0,0 +1,17 @@ +#![feature(type_alias_impl_trait)] + +type T = impl Sized; + +struct Foo; + +impl Into for Foo { + //~^ ERROR conflicting implementations of trait `Into<_>` for type `Foo` + #[define_opaque(T)] + fn into(self) -> T { + Foo + } +} + +fn main() { + let _: T = Foo.into(); +} diff --git a/tests/ui/type-alias-impl-trait/coherence/coherence-treats-tait-ambig.stderr b/tests/ui/type-alias-impl-trait/coherence/coherence-treats-tait-ambig.stderr new file mode 100644 index 00000000000..618bef1f271 --- /dev/null +++ b/tests/ui/type-alias-impl-trait/coherence/coherence-treats-tait-ambig.stderr @@ -0,0 +1,13 @@ +error[E0119]: conflicting implementations of trait `Into<_>` for type `Foo` + --> $DIR/coherence-treats-tait-ambig.rs:7:1 + | +LL | impl Into for Foo { + | ^^^^^^^^^^^^^^^^^^^^ + | + = note: conflicting implementation in crate `core`: + - impl Into for T + where U: From; + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0119`. diff --git a/tests/ui/where-clauses/method-suggestion-no-duplication.rs b/tests/ui/where-clauses/method-suggestion-no-duplication.rs new file mode 100644 index 00000000000..c5c966a959a --- /dev/null +++ b/tests/ui/where-clauses/method-suggestion-no-duplication.rs @@ -0,0 +1,9 @@ +// issue #21405 +struct Foo; + +fn foo(f: F) where F: FnMut(Foo) {} + +fn main() { + foo(|s| s.is_empty()); + //~^ ERROR no method named `is_empty` found +} diff --git a/tests/ui/where-clauses/method-suggestion-no-duplication.stderr b/tests/ui/where-clauses/method-suggestion-no-duplication.stderr new file mode 100644 index 00000000000..6bc57f89467 --- /dev/null +++ b/tests/ui/where-clauses/method-suggestion-no-duplication.stderr @@ -0,0 +1,17 @@ +error[E0599]: no method named `is_empty` found for struct `Foo` in the current scope + --> $DIR/method-suggestion-no-duplication.rs:7:15 + | +LL | struct Foo; + | ---------- method `is_empty` not found for this struct +... +LL | foo(|s| s.is_empty()); + | ^^^^^^^^ method not found in `Foo` + | + = help: items from traits can only be used if the trait is implemented and in scope + = note: the following traits define an item `is_empty`, perhaps you need to implement one of them: + candidate #1: `ExactSizeIterator` + candidate #2: `RangeBounds` + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0599`. -- cgit 1.4.1-3-g733a5 From 30526830bbf403bd20b4f354557f2f822cf4d227 Mon Sep 17 00:00:00 2001 From: Stan Manilov Date: Thu, 8 May 2025 14:39:30 +0300 Subject: Fix minor typo in rustdoc-internals.md --- src/doc/rustc-dev-guide/src/rustdoc-internals.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/doc/rustc-dev-guide/src/rustdoc-internals.md b/src/doc/rustc-dev-guide/src/rustdoc-internals.md index 7f1c83e00f9..80421b85bf0 100644 --- a/src/doc/rustc-dev-guide/src/rustdoc-internals.md +++ b/src/doc/rustc-dev-guide/src/rustdoc-internals.md @@ -55,8 +55,8 @@ The first step in [`clean::utils::krate`][ck1] is to invoke * inlining public `use` exports of private items, or showing a "Reexport" line in the module page * inlining items with `#[doc(hidden)]` if the base item is hidden but the - * showing `#[macro_export]`-ed macros at the crate root, regardless of where - they're defined reexport is not + * showing `#[macro_export]`-ed macros at the crate root, regardless of whether + they're defined as a reexport or not After this step, `clean::krate` invokes [`clean_doc_module`], which actually converts the `HIR` items to the cleaned [`AST`][ast]. This is also the step where cross- -- cgit 1.4.1-3-g733a5 From 0533ff7d4169692e05d11d219c287a477a5471bb Mon Sep 17 00:00:00 2001 From: lcnr Date: Fri, 9 May 2025 15:05:11 +0000 Subject: more moved tests --- .../auxiliary/coherence_cross_crate_trait_decl.rs | 9 -------- .../auxiliary/foreign-crate.rs | 2 -- .../type-alias-impl-trait/coherence.classic.stderr | 15 ------------- .../ui/type-alias-impl-trait/coherence.next.stderr | 15 ------------- tests/ui/type-alias-impl-trait/coherence.rs | 20 ----------------- .../auxiliary/coherence_cross_crate_trait_decl.rs | 9 ++++++++ .../coherence/auxiliary/foreign-crate.rs | 2 ++ .../coherence/coherence.classic.stderr | 15 +++++++++++++ .../coherence/coherence.next.stderr | 15 +++++++++++++ .../type-alias-impl-trait/coherence/coherence.rs | 20 +++++++++++++++++ .../coherence/coherence_cross_crate.rs | 25 +++++++++++++++++++++ .../coherence/coherence_cross_crate.stderr | 13 +++++++++++ .../coherence/coherence_different_hidden_ty.rs | 26 ++++++++++++++++++++++ .../coherence/coherence_different_hidden_ty.stderr | 12 ++++++++++ .../coherence/coherence_generalization.rs | 17 ++++++++++++++ .../type-alias-impl-trait/coherence_cross_crate.rs | 25 --------------------- .../coherence_cross_crate.stderr | 13 ----------- .../coherence_different_hidden_ty.rs | 26 ---------------------- .../coherence_different_hidden_ty.stderr | 12 ---------- .../coherence_generalization.rs | 17 -------------- 20 files changed, 154 insertions(+), 154 deletions(-) delete mode 100644 tests/ui/type-alias-impl-trait/auxiliary/coherence_cross_crate_trait_decl.rs delete mode 100644 tests/ui/type-alias-impl-trait/auxiliary/foreign-crate.rs delete mode 100644 tests/ui/type-alias-impl-trait/coherence.classic.stderr delete mode 100644 tests/ui/type-alias-impl-trait/coherence.next.stderr delete mode 100644 tests/ui/type-alias-impl-trait/coherence.rs create mode 100644 tests/ui/type-alias-impl-trait/coherence/auxiliary/coherence_cross_crate_trait_decl.rs create mode 100644 tests/ui/type-alias-impl-trait/coherence/auxiliary/foreign-crate.rs create mode 100644 tests/ui/type-alias-impl-trait/coherence/coherence.classic.stderr create mode 100644 tests/ui/type-alias-impl-trait/coherence/coherence.next.stderr create mode 100644 tests/ui/type-alias-impl-trait/coherence/coherence.rs create mode 100644 tests/ui/type-alias-impl-trait/coherence/coherence_cross_crate.rs create mode 100644 tests/ui/type-alias-impl-trait/coherence/coherence_cross_crate.stderr create mode 100644 tests/ui/type-alias-impl-trait/coherence/coherence_different_hidden_ty.rs create mode 100644 tests/ui/type-alias-impl-trait/coherence/coherence_different_hidden_ty.stderr create mode 100644 tests/ui/type-alias-impl-trait/coherence/coherence_generalization.rs delete mode 100644 tests/ui/type-alias-impl-trait/coherence_cross_crate.rs delete mode 100644 tests/ui/type-alias-impl-trait/coherence_cross_crate.stderr delete mode 100644 tests/ui/type-alias-impl-trait/coherence_different_hidden_ty.rs delete mode 100644 tests/ui/type-alias-impl-trait/coherence_different_hidden_ty.stderr delete mode 100644 tests/ui/type-alias-impl-trait/coherence_generalization.rs diff --git a/tests/ui/type-alias-impl-trait/auxiliary/coherence_cross_crate_trait_decl.rs b/tests/ui/type-alias-impl-trait/auxiliary/coherence_cross_crate_trait_decl.rs deleted file mode 100644 index 712ed55438e..00000000000 --- a/tests/ui/type-alias-impl-trait/auxiliary/coherence_cross_crate_trait_decl.rs +++ /dev/null @@ -1,9 +0,0 @@ -pub trait SomeTrait {} - -impl SomeTrait for () {} - -// Adding this `impl` would cause errors in this crate's dependent, -// so it would be a breaking change. We explicitly don't add this impl, -// as the dependent crate already assumes this impl exists and thus already -// does not compile. -//impl SomeTrait for i32 {} diff --git a/tests/ui/type-alias-impl-trait/auxiliary/foreign-crate.rs b/tests/ui/type-alias-impl-trait/auxiliary/foreign-crate.rs deleted file mode 100644 index 52802dd8fbb..00000000000 --- a/tests/ui/type-alias-impl-trait/auxiliary/foreign-crate.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub trait ForeignTrait {} -pub struct ForeignType(pub T); diff --git a/tests/ui/type-alias-impl-trait/coherence.classic.stderr b/tests/ui/type-alias-impl-trait/coherence.classic.stderr deleted file mode 100644 index e99d4636b13..00000000000 --- a/tests/ui/type-alias-impl-trait/coherence.classic.stderr +++ /dev/null @@ -1,15 +0,0 @@ -error[E0117]: only traits defined in the current crate can be implemented for arbitrary types - --> $DIR/coherence.rs:17:1 - | -LL | impl foreign_crate::ForeignTrait for AliasOfForeignType<()> {} - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---------------------- - | | - | type alias impl trait is treated as if it were foreign, because its hidden type could be from a foreign crate - | - = note: impl doesn't have any local type before any uncovered type parameters - = note: for more information see https://doc.rust-lang.org/reference/items/implementations.html#orphan-rules - = note: define and implement a trait or new type instead - -error: aborting due to 1 previous error - -For more information about this error, try `rustc --explain E0117`. diff --git a/tests/ui/type-alias-impl-trait/coherence.next.stderr b/tests/ui/type-alias-impl-trait/coherence.next.stderr deleted file mode 100644 index 6d14594e33a..00000000000 --- a/tests/ui/type-alias-impl-trait/coherence.next.stderr +++ /dev/null @@ -1,15 +0,0 @@ -error[E0117]: only traits defined in the current crate can be implemented for arbitrary types - --> $DIR/coherence.rs:17:1 - | -LL | impl foreign_crate::ForeignTrait for AliasOfForeignType<()> {} - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---------------------- - | | - | `AliasOfForeignType<()>` is not defined in the current crate - | - = note: impl doesn't have any local type before any uncovered type parameters - = note: for more information see https://doc.rust-lang.org/reference/items/implementations.html#orphan-rules - = note: define and implement a trait or new type instead - -error: aborting due to 1 previous error - -For more information about this error, try `rustc --explain E0117`. diff --git a/tests/ui/type-alias-impl-trait/coherence.rs b/tests/ui/type-alias-impl-trait/coherence.rs deleted file mode 100644 index eb27c270804..00000000000 --- a/tests/ui/type-alias-impl-trait/coherence.rs +++ /dev/null @@ -1,20 +0,0 @@ -//@ aux-build:foreign-crate.rs -//@ revisions: classic next -//@[next] compile-flags: -Znext-solver -#![feature(type_alias_impl_trait)] - -extern crate foreign_crate; - -trait LocalTrait {} -impl LocalTrait for foreign_crate::ForeignType {} - -type AliasOfForeignType = impl LocalTrait; -#[define_opaque(AliasOfForeignType)] -fn use_alias(val: T) -> AliasOfForeignType { - foreign_crate::ForeignType(val) -} - -impl foreign_crate::ForeignTrait for AliasOfForeignType<()> {} -//~^ ERROR only traits defined in the current crate can be implemented for arbitrary types - -fn main() {} diff --git a/tests/ui/type-alias-impl-trait/coherence/auxiliary/coherence_cross_crate_trait_decl.rs b/tests/ui/type-alias-impl-trait/coherence/auxiliary/coherence_cross_crate_trait_decl.rs new file mode 100644 index 00000000000..712ed55438e --- /dev/null +++ b/tests/ui/type-alias-impl-trait/coherence/auxiliary/coherence_cross_crate_trait_decl.rs @@ -0,0 +1,9 @@ +pub trait SomeTrait {} + +impl SomeTrait for () {} + +// Adding this `impl` would cause errors in this crate's dependent, +// so it would be a breaking change. We explicitly don't add this impl, +// as the dependent crate already assumes this impl exists and thus already +// does not compile. +//impl SomeTrait for i32 {} diff --git a/tests/ui/type-alias-impl-trait/coherence/auxiliary/foreign-crate.rs b/tests/ui/type-alias-impl-trait/coherence/auxiliary/foreign-crate.rs new file mode 100644 index 00000000000..52802dd8fbb --- /dev/null +++ b/tests/ui/type-alias-impl-trait/coherence/auxiliary/foreign-crate.rs @@ -0,0 +1,2 @@ +pub trait ForeignTrait {} +pub struct ForeignType(pub T); diff --git a/tests/ui/type-alias-impl-trait/coherence/coherence.classic.stderr b/tests/ui/type-alias-impl-trait/coherence/coherence.classic.stderr new file mode 100644 index 00000000000..e99d4636b13 --- /dev/null +++ b/tests/ui/type-alias-impl-trait/coherence/coherence.classic.stderr @@ -0,0 +1,15 @@ +error[E0117]: only traits defined in the current crate can be implemented for arbitrary types + --> $DIR/coherence.rs:17:1 + | +LL | impl foreign_crate::ForeignTrait for AliasOfForeignType<()> {} + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---------------------- + | | + | type alias impl trait is treated as if it were foreign, because its hidden type could be from a foreign crate + | + = note: impl doesn't have any local type before any uncovered type parameters + = note: for more information see https://doc.rust-lang.org/reference/items/implementations.html#orphan-rules + = note: define and implement a trait or new type instead + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0117`. diff --git a/tests/ui/type-alias-impl-trait/coherence/coherence.next.stderr b/tests/ui/type-alias-impl-trait/coherence/coherence.next.stderr new file mode 100644 index 00000000000..6d14594e33a --- /dev/null +++ b/tests/ui/type-alias-impl-trait/coherence/coherence.next.stderr @@ -0,0 +1,15 @@ +error[E0117]: only traits defined in the current crate can be implemented for arbitrary types + --> $DIR/coherence.rs:17:1 + | +LL | impl foreign_crate::ForeignTrait for AliasOfForeignType<()> {} + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---------------------- + | | + | `AliasOfForeignType<()>` is not defined in the current crate + | + = note: impl doesn't have any local type before any uncovered type parameters + = note: for more information see https://doc.rust-lang.org/reference/items/implementations.html#orphan-rules + = note: define and implement a trait or new type instead + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0117`. diff --git a/tests/ui/type-alias-impl-trait/coherence/coherence.rs b/tests/ui/type-alias-impl-trait/coherence/coherence.rs new file mode 100644 index 00000000000..eb27c270804 --- /dev/null +++ b/tests/ui/type-alias-impl-trait/coherence/coherence.rs @@ -0,0 +1,20 @@ +//@ aux-build:foreign-crate.rs +//@ revisions: classic next +//@[next] compile-flags: -Znext-solver +#![feature(type_alias_impl_trait)] + +extern crate foreign_crate; + +trait LocalTrait {} +impl LocalTrait for foreign_crate::ForeignType {} + +type AliasOfForeignType = impl LocalTrait; +#[define_opaque(AliasOfForeignType)] +fn use_alias(val: T) -> AliasOfForeignType { + foreign_crate::ForeignType(val) +} + +impl foreign_crate::ForeignTrait for AliasOfForeignType<()> {} +//~^ ERROR only traits defined in the current crate can be implemented for arbitrary types + +fn main() {} diff --git a/tests/ui/type-alias-impl-trait/coherence/coherence_cross_crate.rs b/tests/ui/type-alias-impl-trait/coherence/coherence_cross_crate.rs new file mode 100644 index 00000000000..73f13f22bee --- /dev/null +++ b/tests/ui/type-alias-impl-trait/coherence/coherence_cross_crate.rs @@ -0,0 +1,25 @@ +//@ aux-build: coherence_cross_crate_trait_decl.rs +// This test ensures that adding an `impl SomeTrait for i32` within +// `coherence_cross_crate_trait_decl` is not a breaking change, by +// making sure that even without such an impl this test fails to compile. + +#![feature(type_alias_impl_trait)] + +extern crate coherence_cross_crate_trait_decl; + +use coherence_cross_crate_trait_decl::SomeTrait; + +trait OtherTrait {} + +type Alias = impl SomeTrait; + +#[define_opaque(Alias)] +fn constrain() -> Alias { + () +} + +impl OtherTrait for Alias {} +impl OtherTrait for i32 {} +//~^ ERROR: conflicting implementations of trait `OtherTrait` for type `Alias` + +fn main() {} diff --git a/tests/ui/type-alias-impl-trait/coherence/coherence_cross_crate.stderr b/tests/ui/type-alias-impl-trait/coherence/coherence_cross_crate.stderr new file mode 100644 index 00000000000..6b251cfac73 --- /dev/null +++ b/tests/ui/type-alias-impl-trait/coherence/coherence_cross_crate.stderr @@ -0,0 +1,13 @@ +error[E0119]: conflicting implementations of trait `OtherTrait` for type `Alias` + --> $DIR/coherence_cross_crate.rs:22:1 + | +LL | impl OtherTrait for Alias {} + | ------------------------- first implementation here +LL | impl OtherTrait for i32 {} + | ^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `Alias` + | + = note: upstream crates may add a new impl of trait `coherence_cross_crate_trait_decl::SomeTrait` for type `i32` in future versions + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0119`. diff --git a/tests/ui/type-alias-impl-trait/coherence/coherence_different_hidden_ty.rs b/tests/ui/type-alias-impl-trait/coherence/coherence_different_hidden_ty.rs new file mode 100644 index 00000000000..a7e251b1ab9 --- /dev/null +++ b/tests/ui/type-alias-impl-trait/coherence/coherence_different_hidden_ty.rs @@ -0,0 +1,26 @@ +// When checking whether these two impls overlap, we could detect that we +// would require the hidden type of `TAIT` to be equal to both `u32` and `i32` +// and therefore accept them as disjoint. That is annoying to implement with +// the current system because we would have to add the following to each +// returning branch in coherence. +// +// let _ = infcx.take_opaque_types(); +// +// @lcnr: Because of this I decided to not bother and cause this to fail instead. +// In the future we can definitely modify the compiler to accept this +// again. +#![feature(type_alias_impl_trait)] + +trait Trait {} + +type TAIT = impl Sized; + +impl Trait for (TAIT, TAIT) {} + +impl Trait for (u32, i32) {} +//~^ ERROR conflicting implementations of trait `Trait` for type `(TAIT, TAIT)` + +#[define_opaque(TAIT)] +fn define() -> TAIT {} + +fn main() {} diff --git a/tests/ui/type-alias-impl-trait/coherence/coherence_different_hidden_ty.stderr b/tests/ui/type-alias-impl-trait/coherence/coherence_different_hidden_ty.stderr new file mode 100644 index 00000000000..ef170101b44 --- /dev/null +++ b/tests/ui/type-alias-impl-trait/coherence/coherence_different_hidden_ty.stderr @@ -0,0 +1,12 @@ +error[E0119]: conflicting implementations of trait `Trait` for type `(TAIT, TAIT)` + --> $DIR/coherence_different_hidden_ty.rs:20:1 + | +LL | impl Trait for (TAIT, TAIT) {} + | --------------------------- first implementation here +LL | +LL | impl Trait for (u32, i32) {} + | ^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `(TAIT, TAIT)` + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0119`. diff --git a/tests/ui/type-alias-impl-trait/coherence/coherence_generalization.rs b/tests/ui/type-alias-impl-trait/coherence/coherence_generalization.rs new file mode 100644 index 00000000000..46cde115b7f --- /dev/null +++ b/tests/ui/type-alias-impl-trait/coherence/coherence_generalization.rs @@ -0,0 +1,17 @@ +//@ check-pass + +// FIXME(type_alias_impl_trait): What does this test? This needs a comment +// explaining what we're worried about here. + +#![feature(type_alias_impl_trait)] +trait Trait {} +type Opaque = impl Sized; +#[define_opaque(Opaque)] +fn foo() -> Opaque { + () +} + +impl Trait for (T, U, V, V, u32) {} +impl Trait for (Opaque, U, V, i32, V) {} + +fn main() {} diff --git a/tests/ui/type-alias-impl-trait/coherence_cross_crate.rs b/tests/ui/type-alias-impl-trait/coherence_cross_crate.rs deleted file mode 100644 index 73f13f22bee..00000000000 --- a/tests/ui/type-alias-impl-trait/coherence_cross_crate.rs +++ /dev/null @@ -1,25 +0,0 @@ -//@ aux-build: coherence_cross_crate_trait_decl.rs -// This test ensures that adding an `impl SomeTrait for i32` within -// `coherence_cross_crate_trait_decl` is not a breaking change, by -// making sure that even without such an impl this test fails to compile. - -#![feature(type_alias_impl_trait)] - -extern crate coherence_cross_crate_trait_decl; - -use coherence_cross_crate_trait_decl::SomeTrait; - -trait OtherTrait {} - -type Alias = impl SomeTrait; - -#[define_opaque(Alias)] -fn constrain() -> Alias { - () -} - -impl OtherTrait for Alias {} -impl OtherTrait for i32 {} -//~^ ERROR: conflicting implementations of trait `OtherTrait` for type `Alias` - -fn main() {} diff --git a/tests/ui/type-alias-impl-trait/coherence_cross_crate.stderr b/tests/ui/type-alias-impl-trait/coherence_cross_crate.stderr deleted file mode 100644 index 6b251cfac73..00000000000 --- a/tests/ui/type-alias-impl-trait/coherence_cross_crate.stderr +++ /dev/null @@ -1,13 +0,0 @@ -error[E0119]: conflicting implementations of trait `OtherTrait` for type `Alias` - --> $DIR/coherence_cross_crate.rs:22:1 - | -LL | impl OtherTrait for Alias {} - | ------------------------- first implementation here -LL | impl OtherTrait for i32 {} - | ^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `Alias` - | - = note: upstream crates may add a new impl of trait `coherence_cross_crate_trait_decl::SomeTrait` for type `i32` in future versions - -error: aborting due to 1 previous error - -For more information about this error, try `rustc --explain E0119`. diff --git a/tests/ui/type-alias-impl-trait/coherence_different_hidden_ty.rs b/tests/ui/type-alias-impl-trait/coherence_different_hidden_ty.rs deleted file mode 100644 index a7e251b1ab9..00000000000 --- a/tests/ui/type-alias-impl-trait/coherence_different_hidden_ty.rs +++ /dev/null @@ -1,26 +0,0 @@ -// When checking whether these two impls overlap, we could detect that we -// would require the hidden type of `TAIT` to be equal to both `u32` and `i32` -// and therefore accept them as disjoint. That is annoying to implement with -// the current system because we would have to add the following to each -// returning branch in coherence. -// -// let _ = infcx.take_opaque_types(); -// -// @lcnr: Because of this I decided to not bother and cause this to fail instead. -// In the future we can definitely modify the compiler to accept this -// again. -#![feature(type_alias_impl_trait)] - -trait Trait {} - -type TAIT = impl Sized; - -impl Trait for (TAIT, TAIT) {} - -impl Trait for (u32, i32) {} -//~^ ERROR conflicting implementations of trait `Trait` for type `(TAIT, TAIT)` - -#[define_opaque(TAIT)] -fn define() -> TAIT {} - -fn main() {} diff --git a/tests/ui/type-alias-impl-trait/coherence_different_hidden_ty.stderr b/tests/ui/type-alias-impl-trait/coherence_different_hidden_ty.stderr deleted file mode 100644 index ef170101b44..00000000000 --- a/tests/ui/type-alias-impl-trait/coherence_different_hidden_ty.stderr +++ /dev/null @@ -1,12 +0,0 @@ -error[E0119]: conflicting implementations of trait `Trait` for type `(TAIT, TAIT)` - --> $DIR/coherence_different_hidden_ty.rs:20:1 - | -LL | impl Trait for (TAIT, TAIT) {} - | --------------------------- first implementation here -LL | -LL | impl Trait for (u32, i32) {} - | ^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `(TAIT, TAIT)` - -error: aborting due to 1 previous error - -For more information about this error, try `rustc --explain E0119`. diff --git a/tests/ui/type-alias-impl-trait/coherence_generalization.rs b/tests/ui/type-alias-impl-trait/coherence_generalization.rs deleted file mode 100644 index 46cde115b7f..00000000000 --- a/tests/ui/type-alias-impl-trait/coherence_generalization.rs +++ /dev/null @@ -1,17 +0,0 @@ -//@ check-pass - -// FIXME(type_alias_impl_trait): What does this test? This needs a comment -// explaining what we're worried about here. - -#![feature(type_alias_impl_trait)] -trait Trait {} -type Opaque = impl Sized; -#[define_opaque(Opaque)] -fn foo() -> Opaque { - () -} - -impl Trait for (T, U, V, V, u32) {} -impl Trait for (Opaque, U, V, i32, V) {} - -fn main() {} -- cgit 1.4.1-3-g733a5 From c1de624605a72979bc927fefbfd558b76b299446 Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Sat, 10 May 2025 12:21:56 +0200 Subject: link to chapter referred to This made it look the the topic was covered in the chapter just before the current one. --- src/doc/rustc-dev-guide/src/ty-fold.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/doc/rustc-dev-guide/src/ty-fold.md b/src/doc/rustc-dev-guide/src/ty-fold.md index d4d0952fcc3..ecb961cf16b 100644 --- a/src/doc/rustc-dev-guide/src/ty-fold.md +++ b/src/doc/rustc-dev-guide/src/ty-fold.md @@ -1,6 +1,6 @@ # `TypeFoldable` and `TypeFolder` -In the previous chapter we discussed instantiating binders. This must involves looking at everything inside of a `Early/Binder` +In [a previous chapter], we discussed instantiating binders. This must involves looking at everything inside of a `Early/Binder` to find any usages of the bound vars in order to replace them. Binders can wrap an arbitrary rust type `T` not just a `Ty` so how do we implement the `instantiate` methods on the `Early/Binder` types. @@ -102,3 +102,4 @@ calls [ty_for_param](https://github.com/rust-lang/rust/blob/75ff3110ac6d8a0259023b83fd20d7ab295f8dd6/src/librustc_middle/ty/subst.rs#L552-L587) and all that does is index into the list of substitutions with the index of the `Param`. +[a previous chapter]: ty_module/instantiating_binders.md -- cgit 1.4.1-3-g733a5 From 8c6c97d0e22e4a2ff3c8b3b368494c1bfa05d32b Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Sat, 10 May 2025 12:32:59 +0200 Subject: use the right case --- src/doc/rustc-dev-guide/src/ty-fold.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/doc/rustc-dev-guide/src/ty-fold.md b/src/doc/rustc-dev-guide/src/ty-fold.md index ecb961cf16b..da9564d4077 100644 --- a/src/doc/rustc-dev-guide/src/ty-fold.md +++ b/src/doc/rustc-dev-guide/src/ty-fold.md @@ -1,7 +1,7 @@ # `TypeFoldable` and `TypeFolder` -In [a previous chapter], we discussed instantiating binders. This must involves looking at everything inside of a `Early/Binder` -to find any usages of the bound vars in order to replace them. Binders can wrap an arbitrary rust type `T` not just a `Ty` so +In [a previous chapter], we discussed instantiating binders. This involves looking at everything inside of a `Early/Binder` +to find any usages of the bound vars in order to replace them. Binders can wrap an arbitrary Rust type `T` not just a `Ty` so how do we implement the `instantiate` methods on the `Early/Binder` types. The answer is a couple of traits: @@ -20,7 +20,7 @@ that takes a type as input and returns a new type as a result. `TypeFoldable` in `TypeFolder` `fold_foo` methods on itself, giving the `TypeFolder` access to its contents (the types, regions, etc that are contained within). -You can think of it with this analogy to the iterator combinators we have come to love in rust: +You can think of it with this analogy to the iterator combinators we have come to love in Rust: ```rust,ignore vec.iter().map(|e1| foo(e2)).collect() -- cgit 1.4.1-3-g733a5 From 4e684a997740688f4831b512a9c31f644822b67e Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Sat, 10 May 2025 12:33:45 +0200 Subject: make more clear what is meant --- src/doc/rustc-dev-guide/src/ty-fold.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/doc/rustc-dev-guide/src/ty-fold.md b/src/doc/rustc-dev-guide/src/ty-fold.md index da9564d4077..dcc565b31cd 100644 --- a/src/doc/rustc-dev-guide/src/ty-fold.md +++ b/src/doc/rustc-dev-guide/src/ty-fold.md @@ -1,6 +1,6 @@ # `TypeFoldable` and `TypeFolder` -In [a previous chapter], we discussed instantiating binders. This involves looking at everything inside of a `Early/Binder` +In [a previous chapter], we discussed instantiating binders. This involves looking at everything inside of a `Early(Binder)` to find any usages of the bound vars in order to replace them. Binders can wrap an arbitrary Rust type `T` not just a `Ty` so how do we implement the `instantiate` methods on the `Early/Binder` types. -- cgit 1.4.1-3-g733a5 From 9f07c1ef93142e7fe8ffd1fdd7b458163f3d5623 Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Sat, 10 May 2025 12:34:43 +0200 Subject: make more readable --- src/doc/rustc-dev-guide/src/ty-fold.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/doc/rustc-dev-guide/src/ty-fold.md b/src/doc/rustc-dev-guide/src/ty-fold.md index dcc565b31cd..f659612e816 100644 --- a/src/doc/rustc-dev-guide/src/ty-fold.md +++ b/src/doc/rustc-dev-guide/src/ty-fold.md @@ -1,7 +1,7 @@ # `TypeFoldable` and `TypeFolder` In [a previous chapter], we discussed instantiating binders. This involves looking at everything inside of a `Early(Binder)` -to find any usages of the bound vars in order to replace them. Binders can wrap an arbitrary Rust type `T` not just a `Ty` so +to find any usages of the bound vars in order to replace them. Binders can wrap an arbitrary Rust type `T`, not just a `Ty`. So, how do we implement the `instantiate` methods on the `Early/Binder` types. The answer is a couple of traits: -- cgit 1.4.1-3-g733a5 From 2efa4e61153fca183d2098fecf6342e0a81f4559 Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Sat, 10 May 2025 12:35:40 +0200 Subject: sembr --- src/doc/rustc-dev-guide/src/ty-fold.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/doc/rustc-dev-guide/src/ty-fold.md b/src/doc/rustc-dev-guide/src/ty-fold.md index f659612e816..d413e5038ce 100644 --- a/src/doc/rustc-dev-guide/src/ty-fold.md +++ b/src/doc/rustc-dev-guide/src/ty-fold.md @@ -1,8 +1,10 @@ # `TypeFoldable` and `TypeFolder` -In [a previous chapter], we discussed instantiating binders. This involves looking at everything inside of a `Early(Binder)` -to find any usages of the bound vars in order to replace them. Binders can wrap an arbitrary Rust type `T`, not just a `Ty`. So, -how do we implement the `instantiate` methods on the `Early/Binder` types. +In [a previous chapter], we discussed instantiating binders. +This involves looking at everything inside of a `Early(Binder)` +to find any usages of the bound vars in order to replace them. +Binders can wrap an arbitrary Rust type `T`, not just a `Ty`. +So, how do we implement the `instantiate` methods on the `Early/Binder` types. The answer is a couple of traits: [`TypeFoldable`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/fold/trait.TypeFoldable.html) -- cgit 1.4.1-3-g733a5 From eb6749c02efff855b4b906f4227577d36c514ec4 Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Sat, 10 May 2025 12:35:50 +0200 Subject: is a question --- src/doc/rustc-dev-guide/src/ty-fold.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/doc/rustc-dev-guide/src/ty-fold.md b/src/doc/rustc-dev-guide/src/ty-fold.md index d413e5038ce..a1a9dcf7771 100644 --- a/src/doc/rustc-dev-guide/src/ty-fold.md +++ b/src/doc/rustc-dev-guide/src/ty-fold.md @@ -4,7 +4,7 @@ In [a previous chapter], we discussed instantiating binders. This involves looking at everything inside of a `Early(Binder)` to find any usages of the bound vars in order to replace them. Binders can wrap an arbitrary Rust type `T`, not just a `Ty`. -So, how do we implement the `instantiate` methods on the `Early/Binder` types. +So, how do we implement the `instantiate` methods on the `Early/Binder` types? The answer is a couple of traits: [`TypeFoldable`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/fold/trait.TypeFoldable.html) -- cgit 1.4.1-3-g733a5 From a82a32980ebee5531abaa4bf1eb8643fdf0da71b Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Sat, 10 May 2025 12:43:59 +0200 Subject: fix broken links --- src/doc/rustc-dev-guide/src/ty-fold.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/doc/rustc-dev-guide/src/ty-fold.md b/src/doc/rustc-dev-guide/src/ty-fold.md index a1a9dcf7771..6de9b96a100 100644 --- a/src/doc/rustc-dev-guide/src/ty-fold.md +++ b/src/doc/rustc-dev-guide/src/ty-fold.md @@ -7,9 +7,9 @@ Binders can wrap an arbitrary Rust type `T`, not just a `Ty`. So, how do we implement the `instantiate` methods on the `Early/Binder` types? The answer is a couple of traits: -[`TypeFoldable`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/fold/trait.TypeFoldable.html) +[`TypeFoldable`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/trait.TypeFoldable.html) and -[`TypeFolder`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/fold/trait.TypeFolder.html). +[`TypeFolder`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/trait.TypeFolder.html). - `TypeFoldable` is implemented by types that embed type information. It allows you to recursively process the contents of the `TypeFoldable` and do stuff to them. @@ -17,7 +17,7 @@ and `TypeFoldable`. For example, the `TypeFolder` trait has a method -[`fold_ty`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/fold/trait.TypeFolder.html#method.fold_ty) +[`fold_ty`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/trait.TypeFolder.html#method.fold_ty) that takes a type as input and returns a new type as a result. `TypeFoldable` invokes the `TypeFolder` `fold_foo` methods on itself, giving the `TypeFolder` access to its contents (the types, regions, etc that are contained within). -- cgit 1.4.1-3-g733a5 From 5d8e19fd152979a887db97a904ac181b6ca5886b Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Sat, 10 May 2025 12:56:03 +0200 Subject: reduce clutter when reading source --- src/doc/rustc-dev-guide/src/ty-fold.md | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/doc/rustc-dev-guide/src/ty-fold.md b/src/doc/rustc-dev-guide/src/ty-fold.md index 6de9b96a100..c43523cacd8 100644 --- a/src/doc/rustc-dev-guide/src/ty-fold.md +++ b/src/doc/rustc-dev-guide/src/ty-fold.md @@ -7,9 +7,9 @@ Binders can wrap an arbitrary Rust type `T`, not just a `Ty`. So, how do we implement the `instantiate` methods on the `Early/Binder` types? The answer is a couple of traits: -[`TypeFoldable`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/trait.TypeFoldable.html) +[`TypeFoldable`] and -[`TypeFolder`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/trait.TypeFolder.html). +[`TypeFolder`]. - `TypeFoldable` is implemented by types that embed type information. It allows you to recursively process the contents of the `TypeFoldable` and do stuff to them. @@ -17,7 +17,7 @@ and `TypeFoldable`. For example, the `TypeFolder` trait has a method -[`fold_ty`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/trait.TypeFolder.html#method.fold_ty) +[`fold_ty`] that takes a type as input and returns a new type as a result. `TypeFoldable` invokes the `TypeFolder` `fold_foo` methods on itself, giving the `TypeFolder` access to its contents (the types, regions, etc that are contained within). @@ -36,7 +36,7 @@ So to reiterate: - `TypeFoldable` is a trait that is implemented by things that embed types. In the case of `subst`, we can see that it is implemented as a `TypeFolder`: -[`ArgFolder`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_type_ir/binder/struct.ArgFolder.html). +[`ArgFolder`]. Looking at its implementation, we see where the actual substitutions are happening. However, you might also notice that the implementation calls this `super_fold_with` method. What is @@ -91,17 +91,25 @@ things. We only want to do something when we reach a type. That means there may implementations. Such implementations of `TypeFoldable` tend to be pretty tedious to write by hand. For this reason, there is a `derive` macro that allows you to `#![derive(TypeFoldable)]`. It is defined -[here](https://github.com/rust-lang/rust/blob/master/compiler/rustc_macros/src/type_foldable.rs). +[here]. **`subst`** In the case of substitutions the [actual -folder](https://github.com/rust-lang/rust/blob/75ff3110ac6d8a0259023b83fd20d7ab295f8dd6/src/librustc_middle/ty/subst.rs#L440-L451) +folder] is going to be doing the indexing we’ve already mentioned. There we define a `Folder` and call `fold_with` on the `TypeFoldable` to process yourself. Then -[fold_ty](https://github.com/rust-lang/rust/blob/75ff3110ac6d8a0259023b83fd20d7ab295f8dd6/src/librustc_middle/ty/subst.rs#L512-L536) +[fold_ty] the method that process each type it looks for a `ty::Param` and for those it replaces it for something from the list of substitutions, otherwise recursively process the type. To replace it, calls -[ty_for_param](https://github.com/rust-lang/rust/blob/75ff3110ac6d8a0259023b83fd20d7ab295f8dd6/src/librustc_middle/ty/subst.rs#L552-L587) +[ty_for_param] and all that does is index into the list of substitutions with the index of the `Param`. [a previous chapter]: ty_module/instantiating_binders.md +[`TypeFoldable`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/trait.TypeFoldable.html +[`TypeFolder`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/trait.TypeFolder.html +[`fold_ty`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/trait.TypeFolder.html#method.fold_ty +[`ArgFolder`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_type_ir/binder/struct.ArgFolder.html +[here]: https://github.com/rust-lang/rust/blob/master/compiler/rustc_macros/src/type_foldable.rs +[actual folder]: https://github.com/rust-lang/rust/blob/75ff3110ac6d8a0259023b83fd20d7ab295f8dd6/src/librustc_middle/ty/subst.rs#L440-L451 +[fold_ty]: https://github.com/rust-lang/rust/blob/75ff3110ac6d8a0259023b83fd20d7ab295f8dd6/src/librustc_middle/ty/subst.rs#L512-L536 +[ty_for_param]: https://github.com/rust-lang/rust/blob/75ff3110ac6d8a0259023b83fd20d7ab295f8dd6/src/librustc_middle/ty/subst.rs#L552-L587 -- cgit 1.4.1-3-g733a5 From 7b9d7fc2d438cb405648210b63f263d4ba3d5a61 Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Sat, 10 May 2025 12:59:37 +0200 Subject: sembr --- src/doc/rustc-dev-guide/src/ty-fold.md | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/src/doc/rustc-dev-guide/src/ty-fold.md b/src/doc/rustc-dev-guide/src/ty-fold.md index c43523cacd8..8e5fe6ccbac 100644 --- a/src/doc/rustc-dev-guide/src/ty-fold.md +++ b/src/doc/rustc-dev-guide/src/ty-fold.md @@ -16,11 +16,10 @@ and - `TypeFolder` defines what you want to do with the types you encounter while processing the `TypeFoldable`. -For example, the `TypeFolder` trait has a method -[`fold_ty`] -that takes a type as input and returns a new type as a result. `TypeFoldable` invokes the -`TypeFolder` `fold_foo` methods on itself, giving the `TypeFolder` access to its contents (the -types, regions, etc that are contained within). +For example, the `TypeFolder` trait has a method [`fold_ty`] +that takes a type as input and returns a new type as a result. +`TypeFoldable` invokes the `TypeFolder` `fold_foo` methods on itself, +giving the `TypeFolder` access to its contents (the types, regions, etc that are contained within). You can think of it with this analogy to the iterator combinators we have come to love in Rust: @@ -35,8 +34,7 @@ So to reiterate: - `TypeFolder` is a trait that defines a “map” operation. - `TypeFoldable` is a trait that is implemented by things that embed types. -In the case of `subst`, we can see that it is implemented as a `TypeFolder`: -[`ArgFolder`]. +In the case of `subst`, we can see that it is implemented as a `TypeFolder`: [`ArgFolder`]. Looking at its implementation, we see where the actual substitutions are happening. However, you might also notice that the implementation calls this `super_fold_with` method. What is @@ -90,18 +88,14 @@ things. We only want to do something when we reach a type. That means there may `TypeFoldable` types whose implementations basically just forward to their fields’ `TypeFoldable` implementations. Such implementations of `TypeFoldable` tend to be pretty tedious to write by hand. For this reason, there is a `derive` macro that allows you to `#![derive(TypeFoldable)]`. It is -defined -[here]. - -**`subst`** In the case of substitutions the [actual -folder] -is going to be doing the indexing we’ve already mentioned. There we define a `Folder` and call -`fold_with` on the `TypeFoldable` to process yourself. Then -[fold_ty] -the method that process each type it looks for a `ty::Param` and for those it replaces it for -something from the list of substitutions, otherwise recursively process the type. To replace it, -calls -[ty_for_param] +defined [here]. + +**`subst`** In the case of substitutions the [actual folder] +is going to be doing the indexing we’ve already mentioned. +There we define a `Folder` and call `fold_with` on the `TypeFoldable` to process yourself. +Then [fold_ty] the method that process each type it looks for a `ty::Param` and for those +it replaces it for something from the list of substitutions, otherwise recursively process the type. +To replace it, calls [ty_for_param] and all that does is index into the list of substitutions with the index of the `Param`. [a previous chapter]: ty_module/instantiating_binders.md -- cgit 1.4.1-3-g733a5 From f1d1ebc1e9fa72ef50ed34abf717bc0136d0fab4 Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Sat, 10 May 2025 13:07:34 +0200 Subject: last updated a year ago --- src/doc/rustc-dev-guide/src/ty-fold.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/doc/rustc-dev-guide/src/ty-fold.md b/src/doc/rustc-dev-guide/src/ty-fold.md index 8e5fe6ccbac..23253022ffe 100644 --- a/src/doc/rustc-dev-guide/src/ty-fold.md +++ b/src/doc/rustc-dev-guide/src/ty-fold.md @@ -1,3 +1,4 @@ + # `TypeFoldable` and `TypeFolder` In [a previous chapter], we discussed instantiating binders. -- cgit 1.4.1-3-g733a5 From 52e4b4a588fde422b8a0b245b053b50aafad9454 Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Sat, 10 May 2025 13:14:38 +0200 Subject: add missing word --- src/doc/rustc-dev-guide/ci/date-check/src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/doc/rustc-dev-guide/ci/date-check/src/main.rs b/src/doc/rustc-dev-guide/ci/date-check/src/main.rs index 9af69dbbf3f..0a32f4e9b7b 100644 --- a/src/doc/rustc-dev-guide/ci/date-check/src/main.rs +++ b/src/doc/rustc-dev-guide/ci/date-check/src/main.rs @@ -114,7 +114,7 @@ fn filter_dates( fn main() { let mut args = env::args(); if args.len() == 1 { - eprintln!("error: expected root Markdown directory as CLI argument"); + eprintln!("error: expected root of Markdown directory as CLI argument"); process::exit(1); } let root_dir = args.nth(1).unwrap(); -- cgit 1.4.1-3-g733a5 From 927343ee47f256caaebe1bf8963fb175a1b88075 Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Sat, 10 May 2025 13:15:12 +0200 Subject: no point versioning these They are internal tools. --- src/doc/rustc-dev-guide/ci/date-check/Cargo.lock | 207 ++++++++++++----------- src/doc/rustc-dev-guide/ci/date-check/Cargo.toml | 1 - src/doc/rustc-dev-guide/josh-sync/Cargo.lock | 2 +- src/doc/rustc-dev-guide/josh-sync/Cargo.toml | 1 - 4 files changed, 108 insertions(+), 103 deletions(-) diff --git a/src/doc/rustc-dev-guide/ci/date-check/Cargo.lock b/src/doc/rustc-dev-guide/ci/date-check/Cargo.lock index 6326b2daf12..7107547332f 100644 --- a/src/doc/rustc-dev-guide/ci/date-check/Cargo.lock +++ b/src/doc/rustc-dev-guide/ci/date-check/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "aho-corasick" @@ -28,21 +28,24 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "cc" -version = "1.0.106" +version = "1.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "066fce287b1d4eafef758e89e09d724a24808a9196fe9756b8ca90e86d0719a2" +checksum = "32db95edf998450acc7881c932f94cd9b05c87b4b2599e8bab064753da4acfd1" +dependencies = [ + "shlex", +] [[package]] name = "cfg-if" @@ -52,27 +55,27 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "wasm-bindgen", - "windows-targets", + "windows-link", ] [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "date-check" -version = "0.1.0" +version = "0.0.0" dependencies = [ "chrono", "glob", @@ -81,20 +84,21 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", + "log", "wasm-bindgen", "windows-core", ] @@ -110,24 +114,25 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ + "once_cell", "wasm-bindgen", ] [[package]] name = "libc" -version = "0.2.155" +version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "log" -version = "0.4.22" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "memchr" @@ -146,33 +151,33 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.19.0" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.36" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] [[package]] name = "regex" -version = "1.10.5" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", @@ -182,9 +187,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -193,15 +198,27 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "rustversion" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "syn" -version = "2.0.70" +version = "2.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0209b68b3613b093e0ec905354eccaedcfe83b8cb37cbdeae64026c3064c16" +checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" dependencies = [ "proc-macro2", "quote", @@ -210,29 +227,30 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", + "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", "syn", @@ -241,9 +259,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -251,9 +269,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", @@ -264,79 +282,68 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "windows-core" -version = "0.52.0" +version = "0.61.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" dependencies = [ - "windows-targets", + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", ] [[package]] -name = "windows-targets" -version = "0.52.6" +name = "windows-implement" +version = "0.60.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" +name = "windows-interface" +version = "0.59.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" +name = "windows-link" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" [[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" +name = "windows-result" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" +dependencies = [ + "windows-link", +] [[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" +name = "windows-strings" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" +dependencies = [ + "windows-link", +] diff --git a/src/doc/rustc-dev-guide/ci/date-check/Cargo.toml b/src/doc/rustc-dev-guide/ci/date-check/Cargo.toml index 472529511d0..9a28087acd7 100644 --- a/src/doc/rustc-dev-guide/ci/date-check/Cargo.toml +++ b/src/doc/rustc-dev-guide/ci/date-check/Cargo.toml @@ -1,6 +1,5 @@ [package] name = "date-check" -version = "0.1.0" authors = ["Noah Lev "] edition = "2021" diff --git a/src/doc/rustc-dev-guide/josh-sync/Cargo.lock b/src/doc/rustc-dev-guide/josh-sync/Cargo.lock index 844518628c4..a8183a740db 100644 --- a/src/doc/rustc-dev-guide/josh-sync/Cargo.lock +++ b/src/doc/rustc-dev-guide/josh-sync/Cargo.lock @@ -161,7 +161,7 @@ checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "josh-sync" -version = "0.1.0" +version = "0.0.0" dependencies = [ "anyhow", "clap", diff --git a/src/doc/rustc-dev-guide/josh-sync/Cargo.toml b/src/doc/rustc-dev-guide/josh-sync/Cargo.toml index 81d0d1ebd22..7cfa4a14c19 100644 --- a/src/doc/rustc-dev-guide/josh-sync/Cargo.toml +++ b/src/doc/rustc-dev-guide/josh-sync/Cargo.toml @@ -1,6 +1,5 @@ [package] name = "josh-sync" -version = "0.1.0" edition = "2021" [dependencies] -- cgit 1.4.1-3-g733a5 From a9d655179f9e514860ae34f6b7e8448e142f0222 Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Sat, 10 May 2025 13:29:41 +0200 Subject: bump edition --- src/doc/rustc-dev-guide/ci/date-check/Cargo.toml | 2 +- src/doc/rustc-dev-guide/josh-sync/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/doc/rustc-dev-guide/ci/date-check/Cargo.toml b/src/doc/rustc-dev-guide/ci/date-check/Cargo.toml index 9a28087acd7..6101a4bcfba 100644 --- a/src/doc/rustc-dev-guide/ci/date-check/Cargo.toml +++ b/src/doc/rustc-dev-guide/ci/date-check/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "date-check" authors = ["Noah Lev "] -edition = "2021" +edition = "2024" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/src/doc/rustc-dev-guide/josh-sync/Cargo.toml b/src/doc/rustc-dev-guide/josh-sync/Cargo.toml index 7cfa4a14c19..1f8bf2a0093 100644 --- a/src/doc/rustc-dev-guide/josh-sync/Cargo.toml +++ b/src/doc/rustc-dev-guide/josh-sync/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "josh-sync" -edition = "2021" +edition = "2024" [dependencies] anyhow = "1.0.95" -- cgit 1.4.1-3-g733a5 From 63b3bf99afe22c299ed6ca332674cf2a63966e8e Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Sat, 10 May 2025 13:35:33 +0200 Subject: "cargo fmt" --- src/doc/rustc-dev-guide/josh-sync/src/main.rs | 6 ++-- src/doc/rustc-dev-guide/josh-sync/src/sync.rs | 40 +++++++++++++++++---------- 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/src/doc/rustc-dev-guide/josh-sync/src/main.rs b/src/doc/rustc-dev-guide/josh-sync/src/main.rs index 175f016f739..aeedee5be22 100644 --- a/src/doc/rustc-dev-guide/josh-sync/src/main.rs +++ b/src/doc/rustc-dev-guide/josh-sync/src/main.rs @@ -1,4 +1,5 @@ use clap::Parser; + use crate::sync::{GitSync, RustcPullError}; mod sync; @@ -11,10 +12,7 @@ enum Args { /// Push changes from `rustc-dev-guide` to the given `branch` of a `rustc` fork under the given /// GitHub `username`. /// The pushed branch should then be merged into the `rustc` repository. - RustcPush { - branch: String, - github_username: String - } + RustcPush { branch: String, github_username: String }, } fn main() -> anyhow::Result<()> { diff --git a/src/doc/rustc-dev-guide/josh-sync/src/sync.rs b/src/doc/rustc-dev-guide/josh-sync/src/sync.rs index 41d96397faa..ed38d1403a0 100644 --- a/src/doc/rustc-dev-guide/josh-sync/src/sync.rs +++ b/src/doc/rustc-dev-guide/josh-sync/src/sync.rs @@ -1,10 +1,11 @@ +use std::io::Write; use std::ops::Not; use std::path::PathBuf; -use std::{env, net, process}; -use std::io::Write; use std::time::Duration; -use anyhow::{anyhow, bail, Context}; -use xshell::{cmd, Shell}; +use std::{env, net, process}; + +use anyhow::{Context, anyhow, bail}; +use xshell::{Shell, cmd}; /// Used for rustc syncs. const JOSH_FILTER: &str = ":/src/doc/rustc-dev-guide"; @@ -15,10 +16,13 @@ pub enum RustcPullError { /// No changes are available to be pulled. NothingToPull, /// A rustc-pull has failed, probably a git operation error has occurred. - PullFailed(anyhow::Error) + PullFailed(anyhow::Error), } -impl From for RustcPullError where E: Into { +impl From for RustcPullError +where + E: Into, +{ fn from(error: E) -> Self { Self::PullFailed(error.into()) } @@ -32,9 +36,7 @@ pub struct GitSync { /// (https://github.com/rust-lang/miri/blob/6a68a79f38064c3bc30617cca4bdbfb2c336b140/miri-script/src/commands.rs#L236). impl GitSync { pub fn from_current_dir() -> anyhow::Result { - Ok(Self { - dir: std::env::current_dir()? - }) + Ok(Self { dir: std::env::current_dir()? }) } pub fn rustc_pull(&self, commit: Option) -> Result<(), RustcPullError> { @@ -51,7 +53,10 @@ impl GitSync { })?; // Make sure the repo is clean. if cmd!(sh, "git status --untracked-files=no --porcelain").read()?.is_empty().not() { - return Err(anyhow::anyhow!("working directory must be clean before performing rustc pull").into()); + return Err(anyhow::anyhow!( + "working directory must be clean before performing rustc pull" + ) + .into()); } // Make sure josh is running. let josh = Self::start_josh()?; @@ -94,7 +99,8 @@ impl GitSync { }; let num_roots_before = num_roots()?; - let sha = cmd!(sh, "git rev-parse HEAD").output().context("FAILED to get current commit")?.stdout; + let sha = + cmd!(sh, "git rev-parse HEAD").output().context("FAILED to get current commit")?.stdout; // Merge the fetched commit. const MERGE_COMMIT_MESSAGE: &str = "Merge from rustc"; @@ -102,18 +108,24 @@ impl GitSync { .run() .context("FAILED to merge new commits, something went wrong")?; - let current_sha = cmd!(sh, "git rev-parse HEAD").output().context("FAILED to get current commit")?.stdout; + let current_sha = + cmd!(sh, "git rev-parse HEAD").output().context("FAILED to get current commit")?.stdout; if current_sha == sha { cmd!(sh, "git reset --hard HEAD^") .run() .expect("FAILED to clean up after creating the preparation commit"); - eprintln!("No merge was performed, no changes to pull were found. Rolled back the preparation commit."); + eprintln!( + "No merge was performed, no changes to pull were found. Rolled back the preparation commit." + ); return Err(RustcPullError::NothingToPull); } // Check that the number of roots did not increase. if num_roots()? != num_roots_before { - return Err(anyhow::anyhow!("Josh created a new root commit. This is probably not the history you want.").into()); + return Err(anyhow::anyhow!( + "Josh created a new root commit. This is probably not the history you want." + ) + .into()); } drop(josh); -- cgit 1.4.1-3-g733a5 From 58fa975a15a8a74f6cc97bbe8503fbed67412d99 Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Sat, 10 May 2025 13:48:35 +0200 Subject: we are a collective --- src/doc/rustc-dev-guide/ci/date-check/Cargo.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/src/doc/rustc-dev-guide/ci/date-check/Cargo.toml b/src/doc/rustc-dev-guide/ci/date-check/Cargo.toml index 6101a4bcfba..1ffa13bc008 100644 --- a/src/doc/rustc-dev-guide/ci/date-check/Cargo.toml +++ b/src/doc/rustc-dev-guide/ci/date-check/Cargo.toml @@ -1,6 +1,5 @@ [package] name = "date-check" -authors = ["Noah Lev "] edition = "2024" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html -- cgit 1.4.1-3-g733a5 From 5a406be039cd22ff52ef14c7b169fbb36f8f0553 Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Sat, 10 May 2025 13:48:45 +0200 Subject: noise --- src/doc/rustc-dev-guide/ci/date-check/Cargo.toml | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/doc/rustc-dev-guide/ci/date-check/Cargo.toml b/src/doc/rustc-dev-guide/ci/date-check/Cargo.toml index 1ffa13bc008..f49e6d0db94 100644 --- a/src/doc/rustc-dev-guide/ci/date-check/Cargo.toml +++ b/src/doc/rustc-dev-guide/ci/date-check/Cargo.toml @@ -2,8 +2,6 @@ name = "date-check" edition = "2024" -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] glob = "0.3" regex = "1" -- cgit 1.4.1-3-g733a5 From aeea4727a4a00030fa888eccb10bcc372c4b7d2d Mon Sep 17 00:00:00 2001 From: Paolo Barbolini Date: Sat, 10 May 2025 23:46:43 +0000 Subject: Remove `stable` attribute from wasi fs (read_exact|write_all)_at --- library/std/src/os/wasi/fs.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/library/std/src/os/wasi/fs.rs b/library/std/src/os/wasi/fs.rs index 34f0e89f2f1..5ea91dd6521 100644 --- a/library/std/src/os/wasi/fs.rs +++ b/library/std/src/os/wasi/fs.rs @@ -72,7 +72,6 @@ pub trait FileExt { /// If this function returns an error, it is unspecified how many bytes it /// has read, but it will never read more than would be necessary to /// completely fill the buffer. - #[stable(feature = "rw_exact_all_at", since = "1.33.0")] fn read_exact_at(&self, mut buf: &mut [u8], mut offset: u64) -> io::Result<()> { while !buf.is_empty() { match self.read_at(buf, offset) { @@ -144,7 +143,6 @@ pub trait FileExt { /// non-[`io::ErrorKind::Interrupted`] kind that [`write_at`] returns. /// /// [`write_at`]: FileExt::write_at - #[stable(feature = "rw_exact_all_at", since = "1.33.0")] fn write_all_at(&self, mut buf: &[u8], mut offset: u64) -> io::Result<()> { while !buf.is_empty() { match self.write_at(buf, offset) { -- cgit 1.4.1-3-g733a5 From 2a0c72e3a9dc1c4a8009e748900bdc6816bc640a Mon Sep 17 00:00:00 2001 From: Zalathar Date: Mon, 12 May 2025 18:08:15 +1000 Subject: Remove obsolete reference to `unsized_tuple_coercion` --- src/doc/rustc-dev-guide/src/traits/unsize.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/doc/rustc-dev-guide/src/traits/unsize.md b/src/doc/rustc-dev-guide/src/traits/unsize.md index dd57a1b0796..98a44525748 100644 --- a/src/doc/rustc-dev-guide/src/traits/unsize.md +++ b/src/doc/rustc-dev-guide/src/traits/unsize.md @@ -32,21 +32,21 @@ Built-in implementations are provided for: ## Structural implementations -There are two implementations of `Unsize` which can be thought of as +There is one implementation of `Unsize` which can be thought of as structural: -* `(A1, A2, .., An): Unsize<(A1, A2, .., U)>` given `An: Unsize`, which - allows the tail field of a tuple to be unsized. This is gated behind the - [`unsized_tuple_coercion`] feature. * `Struct<.., Pi, .., Pj, ..>: Unsize>` given `TailField: Unsize`, which allows the tail field of a struct to be unsized if it is the only field that mentions generic parameters `Pi`, .., `Pj` (which don't need to be contiguous). -The rules for the latter implementation are slightly complicated, since they +The rules for struct unsizing are slightly complicated, since they may allow more than one parameter to be changed (not necessarily unsized) and are best stated in terms of the tail field of the struct. -[`unsized_tuple_coercion`]: https://doc.rust-lang.org/beta/unstable-book/language-features/unsized-tuple-coercion.html +(Tuple unsizing was previously implemented behind the feature gate +`unsized_tuple_coercion`, but the implementation was removed by [#137728].) + +[#137728]: https://github.com/rust-lang/rust/pull/137728 ## Upcasting implementations -- cgit 1.4.1-3-g733a5 From 436c3631006585d125af10b31ad3ee69eab4fc5e Mon Sep 17 00:00:00 2001 From: Stan Manilov Date: Fri, 9 May 2025 16:42:35 +0300 Subject: Remove n.b. about parser refactoring Discussed in PR 2378; the note was outdated. --- src/doc/rustc-dev-guide/src/macro-expansion.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/doc/rustc-dev-guide/src/macro-expansion.md b/src/doc/rustc-dev-guide/src/macro-expansion.md index ebab56ad20a..76b4f2c617d 100644 --- a/src/doc/rustc-dev-guide/src/macro-expansion.md +++ b/src/doc/rustc-dev-guide/src/macro-expansion.md @@ -2,9 +2,6 @@ -> N.B. [`rustc_ast`], [`rustc_expand`], and [`rustc_builtin_macros`] are all -> undergoing refactoring, so some of the links in this chapter may be broken. - Rust has a very powerful macro system. In the previous chapter, we saw how the parser sets aside macros to be expanded (using temporary [placeholders]). This chapter is about the process of expanding those macros iteratively until -- cgit 1.4.1-3-g733a5 From b255ae2cdb6b06fca12142a5287ddab58901fe10 Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Mon, 12 May 2025 23:59:55 +0200 Subject: remove dangling references --- src/doc/rustc-dev-guide/src/macro-expansion.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/doc/rustc-dev-guide/src/macro-expansion.md b/src/doc/rustc-dev-guide/src/macro-expansion.md index 76b4f2c617d..a90f717004f 100644 --- a/src/doc/rustc-dev-guide/src/macro-expansion.md +++ b/src/doc/rustc-dev-guide/src/macro-expansion.md @@ -9,9 +9,6 @@ we have a complete [*Abstract Syntax Tree* (AST)][ast] for our crate with no unexpanded macros (or a compile error). [ast]: ./ast-validation.md -[`rustc_ast`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_ast/index.html -[`rustc_expand`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/index.html -[`rustc_builtin_macros`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_builtin_macros/index.html [placeholders]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/placeholders/index.html First, we discuss the algorithm that expands and integrates macro output into -- cgit 1.4.1-3-g733a5 From b9f4350fbc8198f4805557d9b0c5367ebc2390d2 Mon Sep 17 00:00:00 2001 From: Michał Łowicki Date: Tue, 13 May 2025 22:00:56 -0400 Subject: fix doc for UnixStream --- library/std/src/os/unix/net/stream.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/std/src/os/unix/net/stream.rs b/library/std/src/os/unix/net/stream.rs index 1cab04a454d..1bd3bab5e37 100644 --- a/library/std/src/os/unix/net/stream.rs +++ b/library/std/src/os/unix/net/stream.rs @@ -307,11 +307,11 @@ impl UnixStream { /// /// ```no_run /// use std::io; - /// use std::net::UdpSocket; + /// use std::os::unix::net::UnixStream; /// use std::time::Duration; /// /// fn main() -> std::io::Result<()> { - /// let socket = UdpSocket::bind("127.0.0.1:34254")?; + /// let socket = UnixStream::connect("/tmp/sock")?; /// let result = socket.set_write_timeout(Some(Duration::new(0, 0))); /// let err = result.unwrap_err(); /// assert_eq!(err.kind(), io::ErrorKind::InvalidInput); -- cgit 1.4.1-3-g733a5 From 1267333ef102d854cf0cefef877ba0d9adb07107 Mon Sep 17 00:00:00 2001 From: Jamie Date: Wed, 14 May 2025 13:32:41 +0100 Subject: Improve ternary operator recovery --- compiler/rustc_parse/messages.ftl | 3 ++- compiler/rustc_parse/src/errors.rs | 20 ++++++++++++++- compiler/rustc_parse/src/parser/diagnostics.rs | 34 +++++++++++++++++++------- compiler/rustc_parse/src/parser/stmt.rs | 7 +++++- tests/ui/parser/ternary_operator.rs | 6 +++++ tests/ui/parser/ternary_operator.stderr | 22 +++++++++++++---- 6 files changed, 75 insertions(+), 17 deletions(-) diff --git a/compiler/rustc_parse/messages.ftl b/compiler/rustc_parse/messages.ftl index f88c15785d3..a6919afef12 100644 --- a/compiler/rustc_parse/messages.ftl +++ b/compiler/rustc_parse/messages.ftl @@ -815,7 +815,6 @@ parse_switch_ref_box_order = switch the order of `ref` and `box` .suggestion = swap them parse_ternary_operator = Rust has no ternary operator - .help = use an `if-else` expression instead parse_tilde_is_not_unary_operator = `~` cannot be used as a unary operator .suggestion = use `!` to perform bitwise not @@ -963,6 +962,8 @@ parse_use_empty_block_not_semi = expected { "`{}`" }, found `;` parse_use_eq_instead = unexpected `==` .suggestion = try using `=` instead +parse_use_if_else = use an `if-else` expression instead + parse_use_let_not_auto = write `let` instead of `auto` to introduce a new variable parse_use_let_not_var = write `let` instead of `var` to introduce a new variable diff --git a/compiler/rustc_parse/src/errors.rs b/compiler/rustc_parse/src/errors.rs index 766baf6f80c..31a48b22cfe 100644 --- a/compiler/rustc_parse/src/errors.rs +++ b/compiler/rustc_parse/src/errors.rs @@ -436,10 +436,28 @@ pub(crate) enum IfExpressionMissingThenBlockSub { #[derive(Diagnostic)] #[diag(parse_ternary_operator)] -#[help] pub(crate) struct TernaryOperator { #[primary_span] pub span: Span, + /// If we have a span for the condition expression, suggest the if/else + #[subdiagnostic] + pub sugg: Option, + /// Otherwise, just print the suggestion message + #[help(parse_use_if_else)] + pub no_sugg: bool, +} + +#[derive(Subdiagnostic, Copy, Clone)] +#[multipart_suggestion(parse_use_if_else, applicability = "maybe-incorrect", style = "verbose")] +pub(crate) struct TernaryOperatorSuggestion { + #[suggestion_part(code = "if ")] + pub before_cond: Span, + #[suggestion_part(code = "{{")] + pub question: Span, + #[suggestion_part(code = "}} else {{")] + pub colon: Span, + #[suggestion_part(code = " }}")] + pub end: Span, } #[derive(Subdiagnostic)] diff --git a/compiler/rustc_parse/src/parser/diagnostics.rs b/compiler/rustc_parse/src/parser/diagnostics.rs index 23c8db7bca7..6277dde7c97 100644 --- a/compiler/rustc_parse/src/parser/diagnostics.rs +++ b/compiler/rustc_parse/src/parser/diagnostics.rs @@ -41,8 +41,9 @@ use crate::errors::{ IncorrectSemicolon, IncorrectUseOfAwait, IncorrectUseOfUse, PatternMethodParamWithoutBody, QuestionMarkInType, QuestionMarkInTypeSugg, SelfParamNotFirst, StructLiteralBodyWithoutPath, StructLiteralBodyWithoutPathSugg, SuggAddMissingLetStmt, SuggEscapeIdentifier, SuggRemoveComma, - TernaryOperator, UnexpectedConstInGenericParam, UnexpectedConstParamDeclaration, - UnexpectedConstParamDeclarationSugg, UnmatchedAngleBrackets, UseEqInstead, WrapType, + TernaryOperator, TernaryOperatorSuggestion, UnexpectedConstInGenericParam, + UnexpectedConstParamDeclaration, UnexpectedConstParamDeclarationSugg, UnmatchedAngleBrackets, + UseEqInstead, WrapType, }; use crate::parser::attr::InnerAttrPolicy; use crate::{exp, fluent_generated as fluent}; @@ -497,7 +498,7 @@ impl<'a> Parser<'a> { // If the user is trying to write a ternary expression, recover it and // return an Err to prevent a cascade of irrelevant diagnostics. if self.prev_token == token::Question - && let Err(e) = self.maybe_recover_from_ternary_operator() + && let Err(e) = self.maybe_recover_from_ternary_operator(None) { return Err(e); } @@ -1602,12 +1603,18 @@ impl<'a> Parser<'a> { /// Rust has no ternary operator (`cond ? then : else`). Parse it and try /// to recover from it if `then` and `else` are valid expressions. Returns /// an err if this appears to be a ternary expression. - pub(super) fn maybe_recover_from_ternary_operator(&mut self) -> PResult<'a, ()> { + /// If we have the span of the condition, we can provide a better error span + /// and code suggestion. + pub(super) fn maybe_recover_from_ternary_operator( + &mut self, + cond: Option, + ) -> PResult<'a, ()> { if self.prev_token != token::Question { return PResult::Ok(()); } - let lo = self.prev_token.span.lo(); + let question = self.prev_token.span; + let lo = cond.unwrap_or(question).lo(); let snapshot = self.create_snapshot_for_diagnostic(); if match self.parse_expr() { @@ -1620,11 +1627,20 @@ impl<'a> Parser<'a> { } } { if self.eat_noexpect(&token::Colon) { + let colon = self.prev_token.span; match self.parse_expr() { - Ok(_) => { - return Err(self - .dcx() - .create_err(TernaryOperator { span: self.token.span.with_lo(lo) })); + Ok(expr) => { + let sugg = cond.map(|cond| TernaryOperatorSuggestion { + before_cond: cond.shrink_to_lo(), + question, + colon, + end: expr.span.shrink_to_hi(), + }); + return Err(self.dcx().create_err(TernaryOperator { + span: self.prev_token.span.with_lo(lo), + sugg, + no_sugg: sugg.is_none(), + })); } Err(err) => { err.cancel(); diff --git a/compiler/rustc_parse/src/parser/stmt.rs b/compiler/rustc_parse/src/parser/stmt.rs index 885a65d4de7..396ded96bde 100644 --- a/compiler/rustc_parse/src/parser/stmt.rs +++ b/compiler/rustc_parse/src/parser/stmt.rs @@ -879,7 +879,12 @@ impl<'a> Parser<'a> { { // Just check for errors and recover; do not eat semicolon yet. - let expect_result = self.expect_one_of(&[], &[exp!(Semi), exp!(CloseBrace)]); + let expect_result = + if let Err(e) = self.maybe_recover_from_ternary_operator(Some(expr.span)) { + Err(e) + } else { + self.expect_one_of(&[], &[exp!(Semi), exp!(CloseBrace)]) + }; // Try to both emit a better diagnostic, and avoid further errors by replacing // the `expr` with `ExprKind::Err`. diff --git a/tests/ui/parser/ternary_operator.rs b/tests/ui/parser/ternary_operator.rs index c8810781b3d..08f6a4b2a24 100644 --- a/tests/ui/parser/ternary_operator.rs +++ b/tests/ui/parser/ternary_operator.rs @@ -28,3 +28,9 @@ fn main() { //~| HELP use an `if-else` expression instead //~| ERROR expected one of `.`, `;`, `?`, `else`, or an operator, found `:` } + +fn expr(a: u64, b: u64) -> u64 { + a > b ? a : b + //~^ ERROR Rust has no ternary operator + //~| HELP use an `if-else` expression instead +} diff --git a/tests/ui/parser/ternary_operator.stderr b/tests/ui/parser/ternary_operator.stderr index e12a7ff3718..d4a633e5e55 100644 --- a/tests/ui/parser/ternary_operator.stderr +++ b/tests/ui/parser/ternary_operator.stderr @@ -2,7 +2,7 @@ error: Rust has no ternary operator --> $DIR/ternary_operator.rs:2:19 | LL | let x = 5 > 2 ? true : false; - | ^^^^^^^^^^^^^^^ + | ^^^^^^^^^^^^^^ | = help: use an `if-else` expression instead @@ -10,7 +10,7 @@ error: Rust has no ternary operator --> $DIR/ternary_operator.rs:8:19 | LL | let x = 5 > 2 ? { true } : { false }; - | ^^^^^^^^^^^^^^^^^^^^^^^ + | ^^^^^^^^^^^^^^^^^^^^^^ | = help: use an `if-else` expression instead @@ -18,7 +18,7 @@ error: Rust has no ternary operator --> $DIR/ternary_operator.rs:14:19 | LL | let x = 5 > 2 ? f32::MAX : f32::MIN; - | ^^^^^^^^^^^^^^^^^^^^^^ + | ^^^^^^^^^^^^^^^^^^^^^ | = help: use an `if-else` expression instead @@ -38,9 +38,21 @@ error: Rust has no ternary operator --> $DIR/ternary_operator.rs:26:19 | LL | let x = 5 > 2 ? { let x = vec![]: Vec; x } : { false }; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = help: use an `if-else` expression instead -error: aborting due to 6 previous errors +error: Rust has no ternary operator + --> $DIR/ternary_operator.rs:33:5 + | +LL | a > b ? a : b + | ^^^^^^^^^^^^^ + | +help: use an `if-else` expression instead + | +LL - a > b ? a : b +LL + if a > b { a } else { b } + | + +error: aborting due to 7 previous errors -- cgit 1.4.1-3-g733a5 From 754b06f97869253968e0d6abf8105d047c327b62 Mon Sep 17 00:00:00 2001 From: Emmanuel Ferdman Date: Wed, 14 May 2025 08:41:30 -0700 Subject: Migrate to modern datetime API Signed-off-by: Emmanuel Ferdman --- src/ci/cpu-usage-over-time.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ci/cpu-usage-over-time.py b/src/ci/cpu-usage-over-time.py index 3d9dc86734f..19a39f34953 100755 --- a/src/ci/cpu-usage-over-time.py +++ b/src/ci/cpu-usage-over-time.py @@ -170,7 +170,7 @@ print("Time,Idle") while True: time.sleep(1) next_state = State() - now = datetime.datetime.utcnow().isoformat() + now = datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None).isoformat() idle = next_state.idle_since(cur_state) print("%s,%s" % (now, idle)) sys.stdout.flush() -- cgit 1.4.1-3-g733a5 From e0b6363974c7894d61addc96e677166173a01e5f Mon Sep 17 00:00:00 2001 From: Federico Terzi Date: Wed, 14 May 2025 19:00:56 +0200 Subject: wire up startupinfo methods --- library/std/src/os/windows/process.rs | 36 ++++++++++++++++++++++++++++++++++ library/std/src/sys/process/windows.rs | 36 ++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) diff --git a/library/std/src/os/windows/process.rs b/library/std/src/os/windows/process.rs index a084f452e55..c223eee95b5 100644 --- a/library/std/src/os/windows/process.rs +++ b/library/std/src/os/windows/process.rs @@ -344,6 +344,27 @@ pub trait CommandExt: Sealed { &mut self, attribute_list: &ProcThreadAttributeList<'_>, ) -> io::Result; + + /// When true, sets the `STARTF_RUNFULLSCREEN` flag on the [STARTUPINFO][1] struct before passing it to `CreateProcess`. + /// + /// [1]: https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/ns-processthreadsapi-startupinfoa + #[unstable(feature = "windows_process_extensions_startupinfo", issue = "141010")] + fn startupinfo_fullscreen(&mut self, enabled: bool) -> &mut process::Command; + + /// When true, sets the `STARTF_UNTRUSTEDSOURCE` flag on the [STARTUPINFO][1] struct before passing it to `CreateProcess`. + /// + /// [1]: https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/ns-processthreadsapi-startupinfoa + #[unstable(feature = "windows_process_extensions_startupinfo", issue = "141010")] + fn startupinfo_untrusted_source(&mut self, enabled: bool) -> &mut process::Command; + + /// When specified, sets the following flags on the [STARTUPINFO][1] struct before passing it to `CreateProcess`: + /// - If `Some(true)`, sets `STARTF_FORCEONFEEDBACK` + /// - If `Some(false)`, sets `STARTF_FORCEOFFFEEDBACK` + /// - If `None`, does not set any flags + /// + /// [1]: https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/ns-processthreadsapi-startupinfoa + #[unstable(feature = "windows_process_extensions_startupinfo", issue = "141010")] + fn startupinfo_force_feedback(&mut self, enabled: Option) -> &mut process::Command; } #[stable(feature = "windows_process_extensions", since = "1.16.0")] @@ -385,6 +406,21 @@ impl CommandExt for process::Command { .spawn_with_attributes(sys::process::Stdio::Inherit, true, Some(attribute_list)) .map(process::Child::from_inner) } + + fn startupinfo_fullscreen(&mut self, enabled: bool) -> &mut process::Command { + self.as_inner_mut().startupinfo_fullscreen(enabled); + self + } + + fn startupinfo_untrusted_source(&mut self, enabled: bool) -> &mut process::Command { + self.as_inner_mut().startupinfo_untrusted_source(enabled); + self + } + + fn startupinfo_force_feedback(&mut self, enabled: Option) -> &mut process::Command { + self.as_inner_mut().startupinfo_force_feedback(enabled); + self + } } #[unstable(feature = "windows_process_extensions_main_thread_handle", issue = "96723")] diff --git a/library/std/src/sys/process/windows.rs b/library/std/src/sys/process/windows.rs index 4acd753eec9..1ee3fbd285f 100644 --- a/library/std/src/sys/process/windows.rs +++ b/library/std/src/sys/process/windows.rs @@ -155,6 +155,9 @@ pub struct Command { stdout: Option, stderr: Option, force_quotes_enabled: bool, + startupinfo_fullscreen: bool, + startupinfo_untrusted_source: bool, + startupinfo_force_feedback: Option, } pub enum Stdio { @@ -186,6 +189,9 @@ impl Command { stdout: None, stderr: None, force_quotes_enabled: false, + startupinfo_fullscreen: false, + startupinfo_untrusted_source: false, + startupinfo_force_feedback: None, } } @@ -222,6 +228,18 @@ impl Command { self.args.push(Arg::Raw(command_str_to_append.to_os_string())) } + pub fn startupinfo_fullscreen(&mut self, enabled: bool) { + self.startupinfo_fullscreen = enabled; + } + + pub fn startupinfo_untrusted_source(&mut self, enabled: bool) { + self.startupinfo_untrusted_source = enabled; + } + + pub fn startupinfo_force_feedback(&mut self, enabled: Option) { + self.startupinfo_force_feedback = enabled; + } + pub fn get_program(&self) -> &OsStr { &self.program } @@ -343,6 +361,24 @@ impl Command { si.wShowWindow = cmd_show; } + if self.startupinfo_fullscreen { + si.dwFlags |= c::STARTF_RUNFULLSCREEN; + } + + if self.startupinfo_untrusted_source { + si.dwFlags |= c::STARTF_UNTRUSTEDSOURCE; + } + + match self.startupinfo_force_feedback { + Some(true) => { + si.dwFlags |= c::STARTF_FORCEONFEEDBACK; + } + Some(false) => { + si.dwFlags |= c::STARTF_FORCEOFFFEEDBACK; + } + None => {} + } + let si_ptr: *mut c::STARTUPINFOW; let mut si_ex; -- cgit 1.4.1-3-g733a5 From 3e051afec7a0223c86bdab9cd751b32f6a988465 Mon Sep 17 00:00:00 2001 From: Jieyou Xu Date: Wed, 14 May 2025 17:58:00 +0800 Subject: Add some negative test coverage for malformed `-Clink-self-contained` flags --- ...elf-contained-malformed.invalid_modifier.stderr | 2 ++ .../link-self-contained-malformed.no_value.stderr | 2 ++ tests/ui/linking/link-self-contained-malformed.rs | 23 ++++++++++++++++++++++ ...self-contained-malformed.unknown_boolean.stderr | 2 ++ ...ntained-malformed.unknown_modifier_value.stderr | 2 ++ ...k-self-contained-malformed.unknown_value.stderr | 2 ++ 6 files changed, 33 insertions(+) create mode 100644 tests/ui/linking/link-self-contained-malformed.invalid_modifier.stderr create mode 100644 tests/ui/linking/link-self-contained-malformed.no_value.stderr create mode 100644 tests/ui/linking/link-self-contained-malformed.rs create mode 100644 tests/ui/linking/link-self-contained-malformed.unknown_boolean.stderr create mode 100644 tests/ui/linking/link-self-contained-malformed.unknown_modifier_value.stderr create mode 100644 tests/ui/linking/link-self-contained-malformed.unknown_value.stderr diff --git a/tests/ui/linking/link-self-contained-malformed.invalid_modifier.stderr b/tests/ui/linking/link-self-contained-malformed.invalid_modifier.stderr new file mode 100644 index 00000000000..28e2c74fda2 --- /dev/null +++ b/tests/ui/linking/link-self-contained-malformed.invalid_modifier.stderr @@ -0,0 +1,2 @@ +error: incorrect value `*lld` for codegen option `link-self-contained` - one of: `y`, `yes`, `on`, `n`, `no`, `off`, or a list of enabled (`+` prefix) and disabled (`-` prefix) components: `crto`, `libc`, `unwind`, `linker`, `sanitizers`, `mingw` was expected + diff --git a/tests/ui/linking/link-self-contained-malformed.no_value.stderr b/tests/ui/linking/link-self-contained-malformed.no_value.stderr new file mode 100644 index 00000000000..dd8e8af074b --- /dev/null +++ b/tests/ui/linking/link-self-contained-malformed.no_value.stderr @@ -0,0 +1,2 @@ +error: incorrect value `` for codegen option `link-self-contained` - one of: `y`, `yes`, `on`, `n`, `no`, `off`, or a list of enabled (`+` prefix) and disabled (`-` prefix) components: `crto`, `libc`, `unwind`, `linker`, `sanitizers`, `mingw` was expected + diff --git a/tests/ui/linking/link-self-contained-malformed.rs b/tests/ui/linking/link-self-contained-malformed.rs new file mode 100644 index 00000000000..8ccb82eee27 --- /dev/null +++ b/tests/ui/linking/link-self-contained-malformed.rs @@ -0,0 +1,23 @@ +//! Check that malformed `-Clink-self-contained` invocations are properly rejected. + +//@ revisions: no_value +//@[no_value] compile-flags: -Clink-self-contained= +//[no_value]~? ERROR incorrect value `` for codegen option `link-self-contained` + +//@ revisions: invalid_modifier +//@[invalid_modifier] compile-flags: -Clink-self-contained=*lld +//[invalid_modifier]~? ERROR incorrect value `*lld` for codegen option `link-self-contained` + +//@ revisions: unknown_value +//@[unknown_value] compile-flags: -Clink-self-contained=unknown +//[unknown_value]~? ERROR incorrect value `unknown` for codegen option `link-self-contained` + +//@ revisions: unknown_modifier_value +//@[unknown_modifier_value] compile-flags: -Clink-self-contained=-unknown +//[unknown_modifier_value]~? ERROR incorrect value `-unknown` for codegen option `link-self-contained` + +//@ revisions: unknown_boolean +//@[unknown_boolean] compile-flags: -Clink-self-contained=maybe +//[unknown_boolean]~? ERROR incorrect value `maybe` for codegen option `link-self-contained` + +fn main() {} diff --git a/tests/ui/linking/link-self-contained-malformed.unknown_boolean.stderr b/tests/ui/linking/link-self-contained-malformed.unknown_boolean.stderr new file mode 100644 index 00000000000..7924074d1bf --- /dev/null +++ b/tests/ui/linking/link-self-contained-malformed.unknown_boolean.stderr @@ -0,0 +1,2 @@ +error: incorrect value `maybe` for codegen option `link-self-contained` - one of: `y`, `yes`, `on`, `n`, `no`, `off`, or a list of enabled (`+` prefix) and disabled (`-` prefix) components: `crto`, `libc`, `unwind`, `linker`, `sanitizers`, `mingw` was expected + diff --git a/tests/ui/linking/link-self-contained-malformed.unknown_modifier_value.stderr b/tests/ui/linking/link-self-contained-malformed.unknown_modifier_value.stderr new file mode 100644 index 00000000000..2dc58c0f7e8 --- /dev/null +++ b/tests/ui/linking/link-self-contained-malformed.unknown_modifier_value.stderr @@ -0,0 +1,2 @@ +error: incorrect value `-unknown` for codegen option `link-self-contained` - one of: `y`, `yes`, `on`, `n`, `no`, `off`, or a list of enabled (`+` prefix) and disabled (`-` prefix) components: `crto`, `libc`, `unwind`, `linker`, `sanitizers`, `mingw` was expected + diff --git a/tests/ui/linking/link-self-contained-malformed.unknown_value.stderr b/tests/ui/linking/link-self-contained-malformed.unknown_value.stderr new file mode 100644 index 00000000000..ce4c44299cd --- /dev/null +++ b/tests/ui/linking/link-self-contained-malformed.unknown_value.stderr @@ -0,0 +1,2 @@ +error: incorrect value `unknown` for codegen option `link-self-contained` - one of: `y`, `yes`, `on`, `n`, `no`, `off`, or a list of enabled (`+` prefix) and disabled (`-` prefix) components: `crto`, `libc`, `unwind`, `linker`, `sanitizers`, `mingw` was expected + -- cgit 1.4.1-3-g733a5 From a716f1a523a3dad5e5981fef45e25d7e2100f725 Mon Sep 17 00:00:00 2001 From: Jieyou Xu Date: Wed, 14 May 2025 18:11:17 +0800 Subject: Add some negative test coverage for `-Zlinker-features` flag --- ...nker-features-malformed.invalid_modifier.stderr | 2 ++ ...ker-features-malformed.invalid_separator.stderr | 2 ++ .../linker-features-malformed.no_value.stderr | 2 ++ tests/ui/linking/linker-features-malformed.rs | 27 ++++++++++++++++++++++ ...inker-features-malformed.unknown_boolean.stderr | 2 ++ ...eatures-malformed.unknown_modifier_value.stderr | 2 ++ .../linker-features-malformed.unknown_value.stderr | 2 ++ 7 files changed, 39 insertions(+) create mode 100644 tests/ui/linking/linker-features-malformed.invalid_modifier.stderr create mode 100644 tests/ui/linking/linker-features-malformed.invalid_separator.stderr create mode 100644 tests/ui/linking/linker-features-malformed.no_value.stderr create mode 100644 tests/ui/linking/linker-features-malformed.rs create mode 100644 tests/ui/linking/linker-features-malformed.unknown_boolean.stderr create mode 100644 tests/ui/linking/linker-features-malformed.unknown_modifier_value.stderr create mode 100644 tests/ui/linking/linker-features-malformed.unknown_value.stderr diff --git a/tests/ui/linking/linker-features-malformed.invalid_modifier.stderr b/tests/ui/linking/linker-features-malformed.invalid_modifier.stderr new file mode 100644 index 00000000000..909b277089f --- /dev/null +++ b/tests/ui/linking/linker-features-malformed.invalid_modifier.stderr @@ -0,0 +1,2 @@ +error: incorrect value `*lld` for unstable option `linker-features` - a list of enabled (`+` prefix) and disabled (`-` prefix) features: `lld` was expected + diff --git a/tests/ui/linking/linker-features-malformed.invalid_separator.stderr b/tests/ui/linking/linker-features-malformed.invalid_separator.stderr new file mode 100644 index 00000000000..0f84898a774 --- /dev/null +++ b/tests/ui/linking/linker-features-malformed.invalid_separator.stderr @@ -0,0 +1,2 @@ +error: incorrect value `-lld@+lld` for unstable option `linker-features` - a list of enabled (`+` prefix) and disabled (`-` prefix) features: `lld` was expected + diff --git a/tests/ui/linking/linker-features-malformed.no_value.stderr b/tests/ui/linking/linker-features-malformed.no_value.stderr new file mode 100644 index 00000000000..e93a4e79bb1 --- /dev/null +++ b/tests/ui/linking/linker-features-malformed.no_value.stderr @@ -0,0 +1,2 @@ +error: incorrect value `` for unstable option `linker-features` - a list of enabled (`+` prefix) and disabled (`-` prefix) features: `lld` was expected + diff --git a/tests/ui/linking/linker-features-malformed.rs b/tests/ui/linking/linker-features-malformed.rs new file mode 100644 index 00000000000..0bdcfa39920 --- /dev/null +++ b/tests/ui/linking/linker-features-malformed.rs @@ -0,0 +1,27 @@ +//! Check that malformed `-Zlinker-features` flags are properly rejected. + +//@ revisions: no_value +//@[no_value] compile-flags: -Zlinker-features= +//[no_value]~? ERROR incorrect value `` for unstable option `linker-features` + +//@ revisions: invalid_modifier +//@[invalid_modifier] compile-flags: -Zlinker-features=*lld +//[invalid_modifier]~? ERROR incorrect value `*lld` for unstable option `linker-features` + +//@ revisions: unknown_value +//@[unknown_value] compile-flags: -Zlinker-features=unknown +//[unknown_value]~? ERROR incorrect value `unknown` for unstable option `linker-features` + +//@ revisions: unknown_modifier_value +//@[unknown_modifier_value] compile-flags: -Zlinker-features=-unknown +//[unknown_modifier_value]~? ERROR incorrect value `-unknown` for unstable option `linker-features` + +//@ revisions: unknown_boolean +//@[unknown_boolean] compile-flags: -Zlinker-features=maybe +//[unknown_boolean]~? ERROR incorrect value `maybe` for unstable option `linker-features` + +//@ revisions: invalid_separator +//@[invalid_separator] compile-flags: -Zlinker-features=-lld@+lld +//[invalid_separator]~? ERROR incorrect value `-lld@+lld` for unstable option `linker-features` + +fn main() {} diff --git a/tests/ui/linking/linker-features-malformed.unknown_boolean.stderr b/tests/ui/linking/linker-features-malformed.unknown_boolean.stderr new file mode 100644 index 00000000000..865738d0ccc --- /dev/null +++ b/tests/ui/linking/linker-features-malformed.unknown_boolean.stderr @@ -0,0 +1,2 @@ +error: incorrect value `maybe` for unstable option `linker-features` - a list of enabled (`+` prefix) and disabled (`-` prefix) features: `lld` was expected + diff --git a/tests/ui/linking/linker-features-malformed.unknown_modifier_value.stderr b/tests/ui/linking/linker-features-malformed.unknown_modifier_value.stderr new file mode 100644 index 00000000000..03b9620ca26 --- /dev/null +++ b/tests/ui/linking/linker-features-malformed.unknown_modifier_value.stderr @@ -0,0 +1,2 @@ +error: incorrect value `-unknown` for unstable option `linker-features` - a list of enabled (`+` prefix) and disabled (`-` prefix) features: `lld` was expected + diff --git a/tests/ui/linking/linker-features-malformed.unknown_value.stderr b/tests/ui/linking/linker-features-malformed.unknown_value.stderr new file mode 100644 index 00000000000..566632a3df3 --- /dev/null +++ b/tests/ui/linking/linker-features-malformed.unknown_value.stderr @@ -0,0 +1,2 @@ +error: incorrect value `unknown` for unstable option `linker-features` - a list of enabled (`+` prefix) and disabled (`-` prefix) features: `lld` was expected + -- cgit 1.4.1-3-g733a5 From 5e3aa1610fe47316b65ed6dfeae96965c0f74303 Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Thu, 15 May 2025 11:38:18 +0200 Subject: avoid upstream pull conflict We changed this line and have not pushed it upstream yet, and upstream changed it in the meanwhile. --- src/doc/rustc-dev-guide/src/autodiff/installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/doc/rustc-dev-guide/src/autodiff/installation.md b/src/doc/rustc-dev-guide/src/autodiff/installation.md index 971d07bfa39..c9b28dc43a6 100644 --- a/src/doc/rustc-dev-guide/src/autodiff/installation.md +++ b/src/doc/rustc-dev-guide/src/autodiff/installation.md @@ -1,6 +1,6 @@ # Installation -In the near future, `std::autodiff` should become available in nightly builds for users. As a contributor however, you will still need to build rustc from source. Please be aware that the msvc target is not supported at the moment, all other tier 1 targets should work. Please open an issue if you encounter any problems on a supported tier 1 target, or if you succesfully build this project on a tier2/tier3 target. +In the near future, `std::autodiff` should become available in nightly builds for users. As a contributor however, you will still need to build rustc from source. Please be aware that the msvc target is not supported at the moment, all other tier 1 targets should work. Please open an issue if you encounter any problems on a supported tier 1 target, or if you successfully build this project on a tier2/tier3 target. ## Build instructions -- cgit 1.4.1-3-g733a5 From 4adff2f244140be9ac78c0bd6774bf5acb828029 Mon Sep 17 00:00:00 2001 From: The rustc-dev-guide Cronjob Bot Date: Thu, 15 May 2025 09:46:15 +0000 Subject: Preparing for merge from rustc --- src/doc/rustc-dev-guide/rust-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/doc/rustc-dev-guide/rust-version b/src/doc/rustc-dev-guide/rust-version index ec160228095..5e4266f61da 100644 --- a/src/doc/rustc-dev-guide/rust-version +++ b/src/doc/rustc-dev-guide/rust-version @@ -1 +1 @@ -7e552b46af72df390ed233b58a7f51650515b2a8 +414482f6a0d4e7290f614300581a0b55442552a3 -- cgit 1.4.1-3-g733a5