Do not suggest bounds restrictions for synthesized RPITITs
This commit is contained in:
parent
febd59e122
commit
3b04ad2753
4 changed files with 36 additions and 4 deletions
|
@ -420,6 +420,7 @@ fn suggest_restriction<'tcx>(
|
||||||
) {
|
) {
|
||||||
if hir_generics.where_clause_span.from_expansion()
|
if hir_generics.where_clause_span.from_expansion()
|
||||||
|| hir_generics.where_clause_span.desugaring_kind().is_some()
|
|| hir_generics.where_clause_span.desugaring_kind().is_some()
|
||||||
|
|| projection.map_or(false, |projection| tcx.opt_rpitit_info(projection.def_id).is_some())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
warning: the feature `async_fn_in_trait` is incomplete and may not be safe to use and/or cause compiler crashes
|
warning: the feature `async_fn_in_trait` is incomplete and may not be safe to use and/or cause compiler crashes
|
||||||
--> $DIR/missing-send-bound.rs:3:12
|
--> $DIR/missing-send-bound.rs:5:12
|
||||||
|
|
|
|
||||||
LL | #![feature(async_fn_in_trait)]
|
LL | #![feature(async_fn_in_trait)]
|
||||||
| ^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^
|
||||||
|
@ -8,19 +8,19 @@ LL | #![feature(async_fn_in_trait)]
|
||||||
= note: `#[warn(incomplete_features)]` on by default
|
= note: `#[warn(incomplete_features)]` on by default
|
||||||
|
|
||||||
error: future cannot be sent between threads safely
|
error: future cannot be sent between threads safely
|
||||||
--> $DIR/missing-send-bound.rs:15:20
|
--> $DIR/missing-send-bound.rs:17:20
|
||||||
|
|
|
|
||||||
LL | assert_is_send(test::<T>());
|
LL | assert_is_send(test::<T>());
|
||||||
| ^^^^^^^^^^^ future returned by `test` is not `Send`
|
| ^^^^^^^^^^^ future returned by `test` is not `Send`
|
||||||
|
|
|
|
||||||
= help: within `impl Future<Output = ()>`, the trait `Send` is not implemented for `impl Future<Output = ()>`
|
= help: within `impl Future<Output = ()>`, the trait `Send` is not implemented for `impl Future<Output = ()>`
|
||||||
note: future is not `Send` as it awaits another future which is not `Send`
|
note: future is not `Send` as it awaits another future which is not `Send`
|
||||||
--> $DIR/missing-send-bound.rs:11:5
|
--> $DIR/missing-send-bound.rs:13:5
|
||||||
|
|
|
|
||||||
LL | T::bar().await;
|
LL | T::bar().await;
|
||||||
| ^^^^^^^^ await occurs here on type `impl Future<Output = ()>`, which is not `Send`
|
| ^^^^^^^^ await occurs here on type `impl Future<Output = ()>`, which is not `Send`
|
||||||
note: required by a bound in `assert_is_send`
|
note: required by a bound in `assert_is_send`
|
||||||
--> $DIR/missing-send-bound.rs:19:27
|
--> $DIR/missing-send-bound.rs:21:27
|
||||||
|
|
|
|
||||||
LL | fn assert_is_send(_: impl Send) {}
|
LL | fn assert_is_send(_: impl Send) {}
|
||||||
| ^^^^ required by this bound in `assert_is_send`
|
| ^^^^ required by this bound in `assert_is_send`
|
29
tests/ui/async-await/in-trait/missing-send-bound.next.stderr
Normal file
29
tests/ui/async-await/in-trait/missing-send-bound.next.stderr
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
warning: the feature `async_fn_in_trait` is incomplete and may not be safe to use and/or cause compiler crashes
|
||||||
|
--> $DIR/missing-send-bound.rs:5:12
|
||||||
|
|
|
||||||
|
LL | #![feature(async_fn_in_trait)]
|
||||||
|
| ^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
= note: see issue #91611 <https://github.com/rust-lang/rust/issues/91611> for more information
|
||||||
|
= note: `#[warn(incomplete_features)]` on by default
|
||||||
|
|
||||||
|
error: future cannot be sent between threads safely
|
||||||
|
--> $DIR/missing-send-bound.rs:17:20
|
||||||
|
|
|
||||||
|
LL | assert_is_send(test::<T>());
|
||||||
|
| ^^^^^^^^^^^ future returned by `test` is not `Send`
|
||||||
|
|
|
||||||
|
= help: within `impl Future<Output = ()>`, the trait `Send` is not implemented for `impl Future<Output = ()>`
|
||||||
|
note: future is not `Send` as it awaits another future which is not `Send`
|
||||||
|
--> $DIR/missing-send-bound.rs:13:5
|
||||||
|
|
|
||||||
|
LL | T::bar().await;
|
||||||
|
| ^^^^^^^^ await occurs here on type `impl Future<Output = ()>`, which is not `Send`
|
||||||
|
note: required by a bound in `assert_is_send`
|
||||||
|
--> $DIR/missing-send-bound.rs:21:27
|
||||||
|
|
|
||||||
|
LL | fn assert_is_send(_: impl Send) {}
|
||||||
|
| ^^^^ required by this bound in `assert_is_send`
|
||||||
|
|
||||||
|
error: aborting due to previous error; 1 warning emitted
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
// edition:2021
|
// edition:2021
|
||||||
|
// [next] compile-flags: -Zlower-impl-trait-in-trait-to-assoc-ty
|
||||||
|
// revisions: current next
|
||||||
|
|
||||||
#![feature(async_fn_in_trait)]
|
#![feature(async_fn_in_trait)]
|
||||||
//~^ WARN the feature `async_fn_in_trait` is incomplete and may not be safe to use and/or cause compiler crashes
|
//~^ WARN the feature `async_fn_in_trait` is incomplete and may not be safe to use and/or cause compiler crashes
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue