Quietly fail if an error has already occurred
This commit is contained in:
parent
ccb160d343
commit
d572729d59
@ -8,7 +8,7 @@
|
||||
use rustc_middle::mir::ConstraintCategory;
|
||||
use rustc_middle::traits::query::OutlivesBound;
|
||||
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 std::rc::Rc;
|
||||
use type_op::TypeOpOutput;
|
||||
@ -318,7 +318,8 @@ fn add_implied_bounds(&mut self, ty: Ty<'tcx>) -> Option<&'tcx QueryRegionConstr
|
||||
.param_env
|
||||
.and(type_op::implied_outlives_bounds::ImpliedOutlivesBounds { ty })
|
||||
.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);
|
||||
self.add_outlives_bounds(bounds);
|
||||
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