Rollup merge of #137635 - compiler-errors:constrain-unstable, r=SparrowLii
Don't suggest constraining unstable associated types Fixes #137624 This could be made a bit more specific, considering the local crate's stability or nightly status or something, but I think in general we should not be suggesting associated type bounds on unstable associated items.
This commit is contained in:
commit
875e390589
3 changed files with 33 additions and 1 deletions
|
@ -136,7 +136,10 @@ pub fn suggest_restriction<'tcx, G: EmissionGuarantee>(
|
||||||
) {
|
) {
|
||||||
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.is_some_and(|projection| tcx.is_impl_trait_in_trait(projection.def_id))
|
|| projection.is_some_and(|projection| {
|
||||||
|
tcx.is_impl_trait_in_trait(projection.def_id)
|
||||||
|
|| tcx.lookup_stability(projection.def_id).is_some_and(|stab| stab.is_unstable())
|
||||||
|
})
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
11
tests/ui/async-await/async-fn/suggest-constrain.rs
Normal file
11
tests/ui/async-await/async-fn/suggest-constrain.rs
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
// Ensure that we don't suggest constraining `CallRefFuture` here,
|
||||||
|
// since that isn't stable.
|
||||||
|
|
||||||
|
fn spawn<F: AsyncFn() + Send>(f: F) {
|
||||||
|
check_send(f());
|
||||||
|
//~^ ERROR cannot be sent between threads safely
|
||||||
|
}
|
||||||
|
|
||||||
|
fn check_send<T: Send>(_: T) {}
|
||||||
|
|
||||||
|
fn main() {}
|
18
tests/ui/async-await/async-fn/suggest-constrain.stderr
Normal file
18
tests/ui/async-await/async-fn/suggest-constrain.stderr
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
error[E0277]: `<F as AsyncFnMut<()>>::CallRefFuture<'_>` cannot be sent between threads safely
|
||||||
|
--> $DIR/suggest-constrain.rs:5:16
|
||||||
|
|
|
||||||
|
LL | check_send(f());
|
||||||
|
| ---------- ^^^ `<F as AsyncFnMut<()>>::CallRefFuture<'_>` cannot be sent between threads safely
|
||||||
|
| |
|
||||||
|
| required by a bound introduced by this call
|
||||||
|
|
|
||||||
|
= help: the trait `Send` is not implemented for `<F as AsyncFnMut<()>>::CallRefFuture<'_>`
|
||||||
|
note: required by a bound in `check_send`
|
||||||
|
--> $DIR/suggest-constrain.rs:9:18
|
||||||
|
|
|
||||||
|
LL | fn check_send<T: Send>(_: T) {}
|
||||||
|
| ^^^^ required by this bound in `check_send`
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0277`.
|
Loading…
Add table
Add a link
Reference in a new issue