mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-18 09:53:26 +00:00
Rollup merge of #117214 - oli-obk:error_shenanigans, r=compiler-errors
Quietly fail if an error has already occurred fixes #117195
This commit is contained in:
commit
70a4678a77
@ -8,7 +8,7 @@ use rustc_infer::infer::InferCtxt;
|
|||||||
use rustc_middle::mir::ConstraintCategory;
|
use rustc_middle::mir::ConstraintCategory;
|
||||||
use rustc_middle::traits::query::OutlivesBound;
|
use rustc_middle::traits::query::OutlivesBound;
|
||||||
use rustc_middle::ty::{self, RegionVid, Ty};
|
use rustc_middle::ty::{self, RegionVid, Ty};
|
||||||
use rustc_span::{Span, DUMMY_SP};
|
use rustc_span::{ErrorGuaranteed, Span, DUMMY_SP};
|
||||||
use rustc_trait_selection::traits::query::type_op::{self, TypeOp};
|
use rustc_trait_selection::traits::query::type_op::{self, TypeOp};
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
use type_op::TypeOpOutput;
|
use type_op::TypeOpOutput;
|
||||||
@ -318,7 +318,8 @@ impl<'tcx> UniversalRegionRelationsBuilder<'_, 'tcx> {
|
|||||||
.param_env
|
.param_env
|
||||||
.and(type_op::implied_outlives_bounds::ImpliedOutlivesBounds { ty })
|
.and(type_op::implied_outlives_bounds::ImpliedOutlivesBounds { ty })
|
||||||
.fully_perform(self.infcx, DUMMY_SP)
|
.fully_perform(self.infcx, DUMMY_SP)
|
||||||
.unwrap_or_else(|_| bug!("failed to compute implied bounds {:?}", ty));
|
.map_err(|_: ErrorGuaranteed| debug!("failed to compute implied bounds {:?}", ty))
|
||||||
|
.ok()?;
|
||||||
debug!(?bounds, ?constraints);
|
debug!(?bounds, ?constraints);
|
||||||
self.add_outlives_bounds(bounds);
|
self.add_outlives_bounds(bounds);
|
||||||
constraints
|
constraints
|
||||||
|
19
tests/ui/lifetimes/issue-76168-hr-outlives-3.rs
Normal file
19
tests/ui/lifetimes/issue-76168-hr-outlives-3.rs
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
// edition:2018
|
||||||
|
|
||||||
|
#![feature(unboxed_closures)]
|
||||||
|
use std::future::Future;
|
||||||
|
|
||||||
|
async fn wrapper<F>(f: F)
|
||||||
|
//~^ ERROR: expected a `FnOnce<(&'a mut i32,)>` closure, found `i32`
|
||||||
|
//~| ERROR: expected a `FnOnce<(&'a mut i32,)>` closure, found `i32`
|
||||||
|
//~| ERROR: expected a `FnOnce<(&'a mut i32,)>` closure, found `i32`
|
||||||
|
where
|
||||||
|
F:,
|
||||||
|
for<'a> <i32 as FnOnce<(&'a mut i32,)>>::Output: Future<Output = ()> + 'a,
|
||||||
|
{
|
||||||
|
//~^ ERROR: expected a `FnOnce<(&'a mut i32,)>` closure, found `i32`
|
||||||
|
let mut i = 41;
|
||||||
|
&mut i;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
51
tests/ui/lifetimes/issue-76168-hr-outlives-3.stderr
Normal file
51
tests/ui/lifetimes/issue-76168-hr-outlives-3.stderr
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
error[E0277]: expected a `FnOnce<(&'a mut i32,)>` closure, found `i32`
|
||||||
|
--> $DIR/issue-76168-hr-outlives-3.rs:6:1
|
||||||
|
|
|
||||||
|
LL | / async fn wrapper<F>(f: F)
|
||||||
|
LL | |
|
||||||
|
LL | |
|
||||||
|
LL | |
|
||||||
|
LL | | where
|
||||||
|
LL | | F:,
|
||||||
|
LL | | for<'a> <i32 as FnOnce<(&'a mut i32,)>>::Output: Future<Output = ()> + 'a,
|
||||||
|
| |______________________________________________________________________________^ expected an `FnOnce<(&'a mut i32,)>` closure, found `i32`
|
||||||
|
|
|
||||||
|
= help: the trait `for<'a> FnOnce<(&'a mut i32,)>` is not implemented for `i32`
|
||||||
|
|
||||||
|
error[E0277]: expected a `FnOnce<(&'a mut i32,)>` closure, found `i32`
|
||||||
|
--> $DIR/issue-76168-hr-outlives-3.rs:6:10
|
||||||
|
|
|
||||||
|
LL | async fn wrapper<F>(f: F)
|
||||||
|
| ^^^^^^^ expected an `FnOnce<(&'a mut i32,)>` closure, found `i32`
|
||||||
|
|
|
||||||
|
= help: the trait `for<'a> FnOnce<(&'a mut i32,)>` is not implemented for `i32`
|
||||||
|
|
||||||
|
error[E0277]: expected a `FnOnce<(&'a mut i32,)>` closure, found `i32`
|
||||||
|
--> $DIR/issue-76168-hr-outlives-3.rs:13:1
|
||||||
|
|
|
||||||
|
LL | / {
|
||||||
|
LL | |
|
||||||
|
LL | | let mut i = 41;
|
||||||
|
LL | | &mut i;
|
||||||
|
LL | | }
|
||||||
|
| |_^ expected an `FnOnce<(&'a mut i32,)>` closure, found `i32`
|
||||||
|
|
|
||||||
|
= help: the trait `for<'a> FnOnce<(&'a mut i32,)>` is not implemented for `i32`
|
||||||
|
|
||||||
|
error[E0277]: expected a `FnOnce<(&'a mut i32,)>` closure, found `i32`
|
||||||
|
--> $DIR/issue-76168-hr-outlives-3.rs:6:1
|
||||||
|
|
|
||||||
|
LL | / async fn wrapper<F>(f: F)
|
||||||
|
LL | |
|
||||||
|
LL | |
|
||||||
|
LL | |
|
||||||
|
LL | | where
|
||||||
|
LL | | F:,
|
||||||
|
LL | | for<'a> <i32 as FnOnce<(&'a mut i32,)>>::Output: Future<Output = ()> + 'a,
|
||||||
|
| |______________________________________________________________________________^ expected an `FnOnce<(&'a mut i32,)>` closure, found `i32`
|
||||||
|
|
|
||||||
|
= help: the trait `for<'a> FnOnce<(&'a mut i32,)>` is not implemented for `i32`
|
||||||
|
|
||||||
|
error: aborting due to 4 previous errors
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0277`.
|
Loading…
Reference in New Issue
Block a user