Further tweak wording of E0759 and introduce E0767
This commit is contained in:
parent
6bac3dbfc2
commit
7bf39fa9d9
43 changed files with 280 additions and 167 deletions
|
@ -633,4 +633,5 @@ E0771: include_str!("./error_codes/E0771.md"),
|
|||
E0755, // `#[ffi_pure]` is only allowed on foreign functions
|
||||
E0756, // `#[ffi_const]` is only allowed on foreign functions
|
||||
E0757, // `#[ffi_const]` functions cannot be `#[ffi_pure]`
|
||||
E0767, // `'static' obligation coming from `impl dyn Trait {}` or `impl Foo for dyn Bar {}`.
|
||||
}
|
||||
|
|
|
@ -45,13 +45,31 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
|
|||
let mut err = struct_span_err!(
|
||||
tcx.sess,
|
||||
cause.span,
|
||||
E0759,
|
||||
"cannot infer an appropriate lifetime"
|
||||
E0767,
|
||||
"{} has {} but calling `{}` introduces an implicit `'static` lifetime \
|
||||
requirement",
|
||||
param
|
||||
.param
|
||||
.pat
|
||||
.simple_ident()
|
||||
.map(|s| format!("`{}`", s))
|
||||
.unwrap_or_else(|| "`fn` parameter".to_string()),
|
||||
lifetime,
|
||||
assoc.ident,
|
||||
);
|
||||
err.span_label(param.param_ty_span, &format!("this data with {}...", lifetime));
|
||||
err.span_label(
|
||||
cause.span,
|
||||
"...is captured and required to live as long as `'static` here",
|
||||
&format!(
|
||||
"...is captured and required to live as long as `'static` here \
|
||||
because of an implicit lifetime bound on the {}",
|
||||
match assoc.container {
|
||||
AssocItemContainer::TraitContainer(id) =>
|
||||
format!("`impl` of `{}`", tcx.def_path_str(id)),
|
||||
AssocItemContainer::ImplContainer(_) =>
|
||||
"inherent `impl`".to_string(),
|
||||
},
|
||||
),
|
||||
);
|
||||
if self.find_impl_on_dyn_trait(&mut err, param.param_ty, assoc) {
|
||||
err.emit();
|
||||
|
@ -78,10 +96,49 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
|
|||
} else {
|
||||
("'_".to_owned(), "an anonymous lifetime `'_`".to_string())
|
||||
};
|
||||
let mut err = struct_span_err!(tcx.sess, sp, E0759, "cannot infer an appropriate lifetime");
|
||||
let param_name = param
|
||||
.param
|
||||
.pat
|
||||
.simple_ident()
|
||||
.map(|s| format!("`{}`", s))
|
||||
.unwrap_or_else(|| "`fn` parameter".to_string());
|
||||
let mut err = struct_span_err!(
|
||||
tcx.sess,
|
||||
sp,
|
||||
E0759,
|
||||
"{} has {} but it needs to satisfy a `'static` lifetime requirement",
|
||||
param_name,
|
||||
lifetime,
|
||||
);
|
||||
err.span_label(param.param_ty_span, &format!("this data with {}...", lifetime));
|
||||
debug!("try_report_static_impl_trait: param_info={:?}", param);
|
||||
|
||||
let fn_returns = tcx.return_type_impl_or_dyn_traits(anon_reg_sup.def_id);
|
||||
|
||||
let mut postfix = String::new();
|
||||
if let SubregionOrigin::Subtype(box TypeTrace { cause, .. }) = &sup_origin {
|
||||
if let ObligationCauseCode::UnifyReceiver(assoc) = &cause.code {
|
||||
if self.find_impl_on_dyn_trait(&mut err, param.param_ty, assoc)
|
||||
&& fn_returns.is_empty()
|
||||
{
|
||||
err.code(rustc_errors::error_code!(E0767));
|
||||
err.set_primary_message(&format!(
|
||||
"{} has {} but calling `{}` introduces an implicit `'static` lifetime \
|
||||
requirement",
|
||||
param_name, lifetime, assoc.ident,
|
||||
));
|
||||
postfix = format!(
|
||||
" because of an implicit lifetime on the {}",
|
||||
match assoc.container {
|
||||
AssocItemContainer::TraitContainer(id) =>
|
||||
format!("`impl` of `{}`", tcx.def_path_str(id)),
|
||||
AssocItemContainer::ImplContainer(_) => "inherent `impl`".to_string(),
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// We try to make the output have fewer overlapping spans if possible.
|
||||
if (sp == sup_origin.span() || !return_sp.overlaps(sup_origin.span()))
|
||||
&& sup_origin.span() != return_sp
|
||||
|
@ -108,36 +165,35 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
|
|||
// | ---- ^
|
||||
err.span_label(
|
||||
sup_origin.span(),
|
||||
"...is captured here, requiring it to live as long as `'static`",
|
||||
&format!(
|
||||
"...is captured here, requiring it to live as long as `'static`{}",
|
||||
postfix
|
||||
),
|
||||
);
|
||||
} else {
|
||||
err.span_label(sup_origin.span(), "...is captured here...");
|
||||
if return_sp < sup_origin.span() {
|
||||
err.span_note(
|
||||
return_sp,
|
||||
"...and is required to live as long as `'static` here",
|
||||
&format!("...and is required to live as long as `'static` here{}", postfix),
|
||||
);
|
||||
} else {
|
||||
err.span_label(
|
||||
return_sp,
|
||||
"...and is required to live as long as `'static` here",
|
||||
&format!("...and is required to live as long as `'static` here{}", postfix),
|
||||
);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
err.span_label(
|
||||
return_sp,
|
||||
"...is captured and required to live as long as `'static` here",
|
||||
&format!(
|
||||
"...is captured and required to live as long as `'static` here{}",
|
||||
postfix
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
if let SubregionOrigin::Subtype(box TypeTrace { cause, .. }) = &sup_origin {
|
||||
if let ObligationCauseCode::UnifyReceiver(assoc) = &cause.code {
|
||||
self.find_impl_on_dyn_trait(&mut err, param.param_ty, assoc);
|
||||
}
|
||||
}
|
||||
|
||||
let fn_returns = tcx.return_type_impl_or_dyn_traits(anon_reg_sup.def_id);
|
||||
debug!("try_report_static_impl_trait: fn_return={:?}", fn_returns);
|
||||
// FIXME: account for the need of parens in `&(dyn Trait + '_)`
|
||||
let consider = "consider changing the";
|
||||
|
@ -295,20 +351,17 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
|
|||
let mut multi_span: MultiSpan = vec![*span].into();
|
||||
multi_span.push_span_label(
|
||||
*span,
|
||||
"this trait object has an implicit `'static` lifetime requirement"
|
||||
.to_string(),
|
||||
"this has an implicit `'static` lifetime requirement".to_string(),
|
||||
);
|
||||
multi_span.push_span_label(
|
||||
assoc.ident.span,
|
||||
"the `'static` requirement is introduced when calling this method"
|
||||
"`'static` requirement is introduced when calling this method"
|
||||
.to_string(),
|
||||
);
|
||||
err.span_note(
|
||||
multi_span,
|
||||
&format!(
|
||||
"when using method `{}` on `{}`, an implicit `'static` \
|
||||
requirement is introduced",
|
||||
assoc.ident,
|
||||
"`{}`'s inherent `impl` has a `'static` requirement",
|
||||
tcx.def_path_str(*found_did),
|
||||
),
|
||||
);
|
||||
|
@ -363,22 +416,18 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
|
|||
let mut multi_span: MultiSpan = vec![*span].into();
|
||||
multi_span.push_span_label(
|
||||
*span,
|
||||
"this trait object has an implicit `'static` lifetime requirement"
|
||||
.to_string(),
|
||||
"this has an implicit `'static` lifetime requirement".to_string(),
|
||||
);
|
||||
multi_span.push_span_label(
|
||||
method.span,
|
||||
"the `'static` requirement is introduced when calling this method"
|
||||
.to_string(),
|
||||
"`'static` requirement is introduced when calling this method".to_string(),
|
||||
);
|
||||
err.span_note(
|
||||
multi_span,
|
||||
&format!(
|
||||
"when using method `{}` of trait `{}` on `{}`, an implicit `'static` \
|
||||
requirement is introduced",
|
||||
method,
|
||||
tcx.def_path_str(container_id),
|
||||
"`{}`'s `impl` of `{}` has an implicit `'static` requirement",
|
||||
tcx.def_path_str(*found_did),
|
||||
tcx.def_path_str(container_id),
|
||||
),
|
||||
);
|
||||
err.span_suggestion_verbose(
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
error[E0759]: cannot infer an appropriate lifetime
|
||||
error[E0759]: `x` has lifetime `'a` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/project-fn-ret-contravariant.rs:38:8
|
||||
|
|
||||
LL | fn baz<'a,'b>(x: &'a u32) -> &'static u32 {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
error[E0759]: cannot infer an appropriate lifetime
|
||||
error[E0759]: `x` has lifetime `'a` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/project-fn-ret-invariant.rs:49:9
|
||||
|
|
||||
LL | fn baz<'a, 'b>(x: Type<'a>) -> Type<'static> {
|
||||
|
|
|
@ -9,7 +9,7 @@ where
|
|||
struct Struct;
|
||||
|
||||
impl Struct {
|
||||
pub async fn run_dummy_fn(&self) { //~ ERROR cannot infer
|
||||
pub async fn run_dummy_fn(&self) { //~ ERROR E0759
|
||||
foo(|| self.bar()).await;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
error[E0759]: cannot infer an appropriate lifetime
|
||||
error[E0759]: `self` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/issue-62097.rs:12:31
|
||||
|
|
||||
LL | pub async fn run_dummy_fn(&self) {
|
||||
|
|
|
@ -17,7 +17,7 @@ fn static_val<T: StaticTrait>(_: T) {
|
|||
}
|
||||
|
||||
fn with_dyn_debug_static<'a>(x: Box<dyn Debug + 'a>) {
|
||||
static_val(x); //~ ERROR cannot infer
|
||||
static_val(x); //~ ERROR E0759
|
||||
}
|
||||
|
||||
fn not_static_val<T: NotStaticTrait>(_: T) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
error[E0759]: cannot infer an appropriate lifetime
|
||||
error[E0759]: `x` has lifetime `'a` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/dyn-trait.rs:20:16
|
||||
|
|
||||
LL | fn with_dyn_debug_static<'a>(x: Box<dyn Debug + 'a>) {
|
||||
|
|
|
@ -12,7 +12,7 @@ LL | fn elided(x: &i32) -> impl Copy + '_ { x }
|
|||
| ^^^^^^^^^^^^^^
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:6:32
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:5:32
|
||||
|
|
||||
LL | fn explicit<'a>(x: &'a i32) -> impl Copy { x }
|
||||
| -- ^^^^^^^^^ opaque type requires that `'a` must outlive `'static`
|
||||
|
@ -26,7 +26,7 @@ LL | fn explicit<'a>(x: &'a i32) -> impl Copy + 'a { x }
|
|||
| ^^^^^^^^^^^^^^
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:9:46
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:7:46
|
||||
|
|
||||
LL | fn elided2(x: &i32) -> impl Copy + 'static { x }
|
||||
| - ^ returning this value requires that `'1` must outlive `'static`
|
||||
|
@ -36,7 +36,7 @@ LL | fn elided2(x: &i32) -> impl Copy + 'static { x }
|
|||
= help: consider replacing `'1` with `'static`
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:12:55
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:9:55
|
||||
|
|
||||
LL | fn explicit2<'a>(x: &'a i32) -> impl Copy + 'static { x }
|
||||
| -- lifetime `'a` defined here ^ returning this value requires that `'a` must outlive `'static`
|
||||
|
@ -45,7 +45,7 @@ LL | fn explicit2<'a>(x: &'a i32) -> impl Copy + 'static { x }
|
|||
= help: consider replacing `'a` with `'static`
|
||||
|
||||
error[E0621]: explicit lifetime required in the type of `x`
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:15:41
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:11:41
|
||||
|
|
||||
LL | fn foo<'a>(x: &i32) -> impl Copy + 'a { x }
|
||||
| ---- ^ lifetime `'a` required
|
||||
|
@ -53,7 +53,7 @@ LL | fn foo<'a>(x: &i32) -> impl Copy + 'a { x }
|
|||
| help: add explicit lifetime `'a` to the type of `x`: `&'a i32`
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:30:24
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:22:24
|
||||
|
|
||||
LL | fn elided5(x: &i32) -> (Box<dyn Debug>, impl Debug) { (Box::new(x), x) }
|
||||
| - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ opaque type requires that `'1` must outlive `'static`
|
||||
|
@ -61,7 +61,7 @@ LL | fn elided5(x: &i32) -> (Box<dyn Debug>, impl Debug) { (Box::new(x), x) }
|
|||
| let's call the lifetime of this reference `'1`
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:37:69
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:28:69
|
||||
|
|
||||
LL | fn with_bound<'a>(x: &'a i32) -> impl LifetimeTrait<'a> + 'static { x }
|
||||
| -- lifetime `'a` defined here ^ returning this value requires that `'a` must outlive `'static`
|
||||
|
@ -70,7 +70,7 @@ LL | fn with_bound<'a>(x: &'a i32) -> impl LifetimeTrait<'a> + 'static { x }
|
|||
= help: consider replacing `'a` with `'static`
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:42:61
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:32:61
|
||||
|
|
||||
LL | fn move_lifetime_into_fn<'a, 'b>(x: &'a u32, y: &'b u32) -> impl Fn(&'a u32) {
|
||||
| -- -- lifetime `'b` defined here ^^^^^^^^^^^^^^^^ opaque type requires that `'b` must outlive `'a`
|
||||
|
@ -80,7 +80,7 @@ LL | fn move_lifetime_into_fn<'a, 'b>(x: &'a u32, y: &'b u32) -> impl Fn(&'a u32
|
|||
= help: consider adding the following bound: `'b: 'a`
|
||||
|
||||
error[E0310]: the parameter type `T` may not live long enough
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:47:51
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:37:51
|
||||
|
|
||||
LL | fn ty_param_wont_outlive_static<T:Debug>(x: T) -> impl Debug + 'static {
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
|
@ -1,41 +1,31 @@
|
|||
use std::fmt::Debug;
|
||||
|
||||
fn elided(x: &i32) -> impl Copy { x }
|
||||
//~^ ERROR cannot infer an appropriate lifetime
|
||||
fn elided(x: &i32) -> impl Copy { x } //~ ERROR E0759
|
||||
|
||||
fn explicit<'a>(x: &'a i32) -> impl Copy { x }
|
||||
//~^ ERROR cannot infer an appropriate lifetime
|
||||
fn explicit<'a>(x: &'a i32) -> impl Copy { x } //~ ERROR E0759
|
||||
|
||||
fn elided2(x: &i32) -> impl Copy + 'static { x }
|
||||
//~^ ERROR cannot infer an appropriate lifetime
|
||||
fn elided2(x: &i32) -> impl Copy + 'static { x } //~ ERROR E0759
|
||||
|
||||
fn explicit2<'a>(x: &'a i32) -> impl Copy + 'static { x }
|
||||
//~^ ERROR cannot infer an appropriate lifetime
|
||||
fn explicit2<'a>(x: &'a i32) -> impl Copy + 'static { x } //~ ERROR E0759
|
||||
|
||||
fn foo<'a>(x: &i32) -> impl Copy + 'a { x }
|
||||
//~^ ERROR explicit lifetime required in the type of `x`
|
||||
|
||||
fn elided3(x: &i32) -> Box<dyn Debug> { Box::new(x) }
|
||||
//~^ ERROR cannot infer an appropriate lifetime
|
||||
fn elided3(x: &i32) -> Box<dyn Debug> { Box::new(x) } //~ ERROR E0759
|
||||
|
||||
fn explicit3<'a>(x: &'a i32) -> Box<dyn Debug> { Box::new(x) }
|
||||
//~^ ERROR cannot infer an appropriate lifetime
|
||||
fn explicit3<'a>(x: &'a i32) -> Box<dyn Debug> { Box::new(x) } //~ ERROR E0759
|
||||
|
||||
fn elided4(x: &i32) -> Box<dyn Debug + 'static> { Box::new(x) }
|
||||
//~^ ERROR cannot infer an appropriate lifetime
|
||||
fn elided4(x: &i32) -> Box<dyn Debug + 'static> { Box::new(x) } //~ ERROR E0759
|
||||
|
||||
fn explicit4<'a>(x: &'a i32) -> Box<dyn Debug + 'static> { Box::new(x) }
|
||||
//~^ ERROR cannot infer an appropriate lifetime
|
||||
fn explicit4<'a>(x: &'a i32) -> Box<dyn Debug + 'static> { Box::new(x) } //~ ERROR E0759
|
||||
|
||||
fn elided5(x: &i32) -> (Box<dyn Debug>, impl Debug) { (Box::new(x), x) }
|
||||
//~^ ERROR cannot infer an appropriate lifetime
|
||||
//~| ERROR cannot infer an appropriate lifetime
|
||||
fn elided5(x: &i32) -> (Box<dyn Debug>, impl Debug) { (Box::new(x), x) } //~ ERROR E0759
|
||||
//~^ ERROR E0759
|
||||
|
||||
trait LifetimeTrait<'a> {}
|
||||
impl<'a> LifetimeTrait<'a> for &'a i32 {}
|
||||
|
||||
fn with_bound<'a>(x: &'a i32) -> impl LifetimeTrait<'a> + 'static { x }
|
||||
//~^ ERROR cannot infer an appropriate lifetime
|
||||
fn with_bound<'a>(x: &'a i32) -> impl LifetimeTrait<'a> + 'static { x } //~ ERROR E0759
|
||||
|
||||
// Tests that a closure type containing 'b cannot be returned from a type where
|
||||
// only 'a was expected.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
error[E0759]: cannot infer an appropriate lifetime
|
||||
error[E0759]: `x` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:3:35
|
||||
|
|
||||
LL | fn elided(x: &i32) -> impl Copy { x }
|
||||
|
@ -16,8 +16,8 @@ help: to declare that the `impl Trait` captures data from argument `x`, you can
|
|||
LL | fn elided(x: &i32) -> impl Copy + '_ { x }
|
||||
| ^^^^
|
||||
|
||||
error[E0759]: cannot infer an appropriate lifetime
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:6:44
|
||||
error[E0759]: `x` has lifetime `'a` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:5:44
|
||||
|
|
||||
LL | fn explicit<'a>(x: &'a i32) -> impl Copy { x }
|
||||
| ------- ^ ...is captured here...
|
||||
|
@ -25,7 +25,7 @@ LL | fn explicit<'a>(x: &'a i32) -> impl Copy { x }
|
|||
| this data with lifetime `'a`...
|
||||
|
|
||||
note: ...and is required to live as long as `'static` here
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:6:32
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:5:32
|
||||
|
|
||||
LL | fn explicit<'a>(x: &'a i32) -> impl Copy { x }
|
||||
| ^^^^^^^^^
|
||||
|
@ -34,8 +34,8 @@ help: to declare that the `impl Trait` captures data from argument `x`, you can
|
|||
LL | fn explicit<'a>(x: &'a i32) -> impl Copy + 'a { x }
|
||||
| ^^^^
|
||||
|
||||
error[E0759]: cannot infer an appropriate lifetime
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:9:46
|
||||
error[E0759]: `x` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:7:46
|
||||
|
|
||||
LL | fn elided2(x: &i32) -> impl Copy + 'static { x }
|
||||
| ---- ^ ...is captured here...
|
||||
|
@ -43,7 +43,7 @@ LL | fn elided2(x: &i32) -> impl Copy + 'static { x }
|
|||
| this data with an anonymous lifetime `'_`...
|
||||
|
|
||||
note: ...and is required to live as long as `'static` here
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:9:24
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:7:24
|
||||
|
|
||||
LL | fn elided2(x: &i32) -> impl Copy + 'static { x }
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
|
@ -56,8 +56,8 @@ help: alternatively, add an explicit `'static` bound to this reference
|
|||
LL | fn elided2(x: &'static i32) -> impl Copy + 'static { x }
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error[E0759]: cannot infer an appropriate lifetime
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:12:55
|
||||
error[E0759]: `x` has lifetime `'a` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:9:55
|
||||
|
|
||||
LL | fn explicit2<'a>(x: &'a i32) -> impl Copy + 'static { x }
|
||||
| ------- ^ ...is captured here...
|
||||
|
@ -65,7 +65,7 @@ LL | fn explicit2<'a>(x: &'a i32) -> impl Copy + 'static { x }
|
|||
| this data with lifetime `'a`...
|
||||
|
|
||||
note: ...and is required to live as long as `'static` here
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:12:33
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:9:33
|
||||
|
|
||||
LL | fn explicit2<'a>(x: &'a i32) -> impl Copy + 'static { x }
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
|
@ -79,15 +79,15 @@ LL | fn explicit2<'a>(x: &'static i32) -> impl Copy + 'static { x }
|
|||
| ^^^^^^^^^^^^
|
||||
|
||||
error[E0621]: explicit lifetime required in the type of `x`
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:15:24
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:11:24
|
||||
|
|
||||
LL | fn foo<'a>(x: &i32) -> impl Copy + 'a { x }
|
||||
| ---- ^^^^^^^^^^^^^^ lifetime `'a` required
|
||||
| |
|
||||
| help: add explicit lifetime `'a` to the type of `x`: `&'a i32`
|
||||
|
||||
error[E0759]: cannot infer an appropriate lifetime
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:30:65
|
||||
error[E0759]: `x` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:22:65
|
||||
|
|
||||
LL | fn elided5(x: &i32) -> (Box<dyn Debug>, impl Debug) { (Box::new(x), x) }
|
||||
| ---- this data with an anonymous lifetime `'_`... ^ ...is captured here, requiring it to live as long as `'static`
|
||||
|
@ -101,14 +101,14 @@ help: to declare that the `impl Trait` captures data from argument `x`, you can
|
|||
LL | fn elided5(x: &i32) -> (Box<dyn Debug>, impl Debug + '_) { (Box::new(x), x) }
|
||||
| ^^^^
|
||||
|
||||
error[E0759]: cannot infer an appropriate lifetime
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:30:69
|
||||
error[E0759]: `x` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:22:69
|
||||
|
|
||||
LL | fn elided5(x: &i32) -> (Box<dyn Debug>, impl Debug) { (Box::new(x), x) }
|
||||
| ---- this data with an anonymous lifetime `'_`... ^ ...is captured here...
|
||||
|
|
||||
note: ...and is required to live as long as `'static` here
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:30:41
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:22:41
|
||||
|
|
||||
LL | fn elided5(x: &i32) -> (Box<dyn Debug>, impl Debug) { (Box::new(x), x) }
|
||||
| ^^^^^^^^^^
|
||||
|
@ -121,14 +121,14 @@ help: to declare that the `impl Trait` captures data from argument `x`, you can
|
|||
LL | fn elided5(x: &i32) -> (Box<dyn Debug>, impl Debug + '_) { (Box::new(x), x) }
|
||||
| ^^^^
|
||||
|
||||
error[E0759]: cannot infer an appropriate lifetime
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:37:69
|
||||
error[E0759]: `x` has lifetime `'a` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:28:69
|
||||
|
|
||||
LL | fn with_bound<'a>(x: &'a i32) -> impl LifetimeTrait<'a> + 'static { x }
|
||||
| ------- this data with lifetime `'a`... ^ ...is captured here...
|
||||
|
|
||||
note: ...and is required to live as long as `'static` here
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:37:34
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:28:34
|
||||
|
|
||||
LL | fn with_bound<'a>(x: &'a i32) -> impl LifetimeTrait<'a> + 'static { x }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
@ -142,7 +142,7 @@ LL | fn with_bound<'a>(x: &'static i32) -> impl LifetimeTrait<'a> + 'static { x
|
|||
| ^^^^^^^^^^^^
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:42:61
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:32:61
|
||||
|
|
||||
LL | fn move_lifetime_into_fn<'a, 'b>(x: &'a u32, y: &'b u32) -> impl Fn(&'a u32) {
|
||||
| ------- ^^^^^^^^^^^^^^^^
|
||||
|
@ -151,15 +151,15 @@ LL | fn move_lifetime_into_fn<'a, 'b>(x: &'a u32, y: &'b u32) -> impl Fn(&'a u32
|
|||
| this parameter and the return type are declared with different lifetimes...
|
||||
|
||||
error[E0310]: the parameter type `T` may not live long enough
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:47:51
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:37:51
|
||||
|
|
||||
LL | fn ty_param_wont_outlive_static<T:Debug>(x: T) -> impl Debug + 'static {
|
||||
| -- ^^^^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
|
||||
| |
|
||||
| help: consider adding an explicit lifetime bound...: `T: 'static +`
|
||||
|
||||
error[E0759]: cannot infer an appropriate lifetime
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:18:50
|
||||
error[E0759]: `x` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:14:50
|
||||
|
|
||||
LL | fn elided3(x: &i32) -> Box<dyn Debug> { Box::new(x) }
|
||||
| ---- ^ ...is captured here, requiring it to live as long as `'static`
|
||||
|
@ -171,8 +171,8 @@ help: to declare that the trait object captures data from argument `x`, you can
|
|||
LL | fn elided3(x: &i32) -> Box<dyn Debug + '_> { Box::new(x) }
|
||||
| ^^^^
|
||||
|
||||
error[E0759]: cannot infer an appropriate lifetime
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:21:59
|
||||
error[E0759]: `x` has lifetime `'a` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:16:59
|
||||
|
|
||||
LL | fn explicit3<'a>(x: &'a i32) -> Box<dyn Debug> { Box::new(x) }
|
||||
| ------- ^ ...is captured here, requiring it to live as long as `'static`
|
||||
|
@ -184,8 +184,8 @@ help: to declare that the trait object captures data from argument `x`, you can
|
|||
LL | fn explicit3<'a>(x: &'a i32) -> Box<dyn Debug + 'a> { Box::new(x) }
|
||||
| ^^^^
|
||||
|
||||
error[E0759]: cannot infer an appropriate lifetime
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:24:60
|
||||
error[E0759]: `x` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:18:60
|
||||
|
|
||||
LL | fn elided4(x: &i32) -> Box<dyn Debug + 'static> { Box::new(x) }
|
||||
| ---- ^ ...is captured here, requiring it to live as long as `'static`
|
||||
|
@ -201,8 +201,8 @@ help: alternatively, add an explicit `'static` bound to this reference
|
|||
LL | fn elided4(x: &'static i32) -> Box<dyn Debug + 'static> { Box::new(x) }
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error[E0759]: cannot infer an appropriate lifetime
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:27:69
|
||||
error[E0759]: `x` has lifetime `'a` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/must_outlive_least_region_or_bound.rs:20:69
|
||||
|
|
||||
LL | fn explicit4<'a>(x: &'a i32) -> Box<dyn Debug + 'static> { Box::new(x) }
|
||||
| ------- this data with lifetime `'a`... ^ ...is captured here, requiring it to live as long as `'static`
|
||||
|
|
|
@ -12,7 +12,7 @@ LL | fn iter_values_anon(&self) -> impl Iterator<Item=u32> + '_ {
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/static-return-lifetime-infered.rs:10:37
|
||||
--> $DIR/static-return-lifetime-infered.rs:9:37
|
||||
|
|
||||
LL | fn iter_values<'a>(&'a self) -> impl Iterator<Item=u32> {
|
||||
| -- ^^^^^^^^^^^^^^^^^^^^^^^ opaque type requires that `'a` must outlive `'static`
|
||||
|
|
|
@ -4,13 +4,11 @@ struct A {
|
|||
|
||||
impl A {
|
||||
fn iter_values_anon(&self) -> impl Iterator<Item=u32> {
|
||||
self.x.iter().map(|a| a.0)
|
||||
self.x.iter().map(|a| a.0) //~ ERROR E0759
|
||||
}
|
||||
//~^^ ERROR cannot infer an appropriate lifetime
|
||||
fn iter_values<'a>(&'a self) -> impl Iterator<Item=u32> {
|
||||
self.x.iter().map(|a| a.0)
|
||||
self.x.iter().map(|a| a.0) //~ ERROR E0759
|
||||
}
|
||||
//~^^ ERROR cannot infer an appropriate lifetime
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
error[E0759]: cannot infer an appropriate lifetime
|
||||
error[E0759]: `self` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/static-return-lifetime-infered.rs:7:16
|
||||
|
|
||||
LL | fn iter_values_anon(&self) -> impl Iterator<Item=u32> {
|
||||
|
@ -18,8 +18,8 @@ help: to declare that the `impl Trait` captures data from argument `self`, you c
|
|||
LL | fn iter_values_anon(&self) -> impl Iterator<Item=u32> + '_ {
|
||||
| ^^^^
|
||||
|
||||
error[E0759]: cannot infer an appropriate lifetime
|
||||
--> $DIR/static-return-lifetime-infered.rs:11:16
|
||||
error[E0759]: `self` has lifetime `'a` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/static-return-lifetime-infered.rs:10:16
|
||||
|
|
||||
LL | fn iter_values<'a>(&'a self) -> impl Iterator<Item=u32> {
|
||||
| -------- this data with lifetime `'a`...
|
||||
|
@ -29,7 +29,7 @@ LL | self.x.iter().map(|a| a.0)
|
|||
| ...is captured here...
|
||||
|
|
||||
note: ...and is required to live as long as `'static` here
|
||||
--> $DIR/static-return-lifetime-infered.rs:10:37
|
||||
--> $DIR/static-return-lifetime-infered.rs:9:37
|
||||
|
|
||||
LL | fn iter_values<'a>(&'a self) -> impl Iterator<Item=u32> {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
use std::any::Any;
|
||||
|
||||
fn foo<T: Any>(value: &T) -> Box<dyn Any> {
|
||||
Box::new(value) as Box<dyn Any>
|
||||
//~^ ERROR cannot infer an appropriate lifetime
|
||||
Box::new(value) as Box<dyn Any> //~ ERROR E0759
|
||||
}
|
||||
|
||||
fn main() {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
error[E0759]: cannot infer an appropriate lifetime
|
||||
error[E0759]: `value` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/issue-16922.rs:4:14
|
||||
|
|
||||
LL | fn foo<T: Any>(value: &T) -> Box<dyn Any> {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
error[E0759]: cannot infer an appropriate lifetime
|
||||
error[E0759]: `fn` parameter has lifetime `'a` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/constant-in-expr-inherent-1.rs:8:5
|
||||
|
|
||||
LL | fn foo<'a>(_: &'a u32) -> &'static u32 {
|
||||
|
|
|
@ -15,7 +15,7 @@ fn load(ss: &mut SomeStruct) -> Box<dyn SomeTrait> {
|
|||
// `Box<SomeTrait>` defaults to a `'static` bound, so this return
|
||||
// is illegal.
|
||||
|
||||
ss.r //~ ERROR cannot infer an appropriate lifetime
|
||||
ss.r //~ ERROR E0759
|
||||
}
|
||||
|
||||
fn store(ss: &mut SomeStruct, b: Box<dyn SomeTrait>) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
error[E0759]: cannot infer an appropriate lifetime
|
||||
error[E0759]: `ss` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/object-lifetime-default-from-box-error.rs:18:5
|
||||
|
|
||||
LL | fn load(ss: &mut SomeStruct) -> Box<dyn SomeTrait> {
|
||||
|
|
|
@ -5,18 +5,18 @@ trait Foo {}
|
|||
impl<'a> Foo for &'a [u8] {}
|
||||
|
||||
fn a(v: &[u8]) -> Box<dyn Foo + 'static> {
|
||||
let x: Box<dyn Foo + 'static> = Box::new(v); //~ ERROR cannot infer an appropriate lifetime
|
||||
let x: Box<dyn Foo + 'static> = Box::new(v); //~ ERROR E0759
|
||||
x
|
||||
}
|
||||
|
||||
fn b(v: &[u8]) -> Box<dyn Foo + 'static> {
|
||||
Box::new(v) //~ ERROR cannot infer an appropriate lifetime
|
||||
Box::new(v) //~ ERROR E0759
|
||||
}
|
||||
|
||||
fn c(v: &[u8]) -> Box<dyn Foo> {
|
||||
// same as previous case due to RFC 599
|
||||
|
||||
Box::new(v) //~ ERROR cannot infer an appropriate lifetime
|
||||
Box::new(v) //~ ERROR E0759
|
||||
}
|
||||
|
||||
fn d<'a,'b>(v: &'a [u8]) -> Box<dyn Foo+'b> {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
error[E0759]: cannot infer an appropriate lifetime
|
||||
error[E0759]: `v` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/region-object-lifetime-in-coercion.rs:8:46
|
||||
|
|
||||
LL | fn a(v: &[u8]) -> Box<dyn Foo + 'static> {
|
||||
|
@ -15,7 +15,7 @@ help: alternatively, add an explicit `'static` bound to this reference
|
|||
LL | fn a(v: &'static [u8]) -> Box<dyn Foo + 'static> {
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error[E0759]: cannot infer an appropriate lifetime
|
||||
error[E0759]: `v` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/region-object-lifetime-in-coercion.rs:13:14
|
||||
|
|
||||
LL | fn b(v: &[u8]) -> Box<dyn Foo + 'static> {
|
||||
|
@ -32,7 +32,7 @@ help: alternatively, add an explicit `'static` bound to this reference
|
|||
LL | fn b(v: &'static [u8]) -> Box<dyn Foo + 'static> {
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error[E0759]: cannot infer an appropriate lifetime
|
||||
error[E0759]: `v` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/region-object-lifetime-in-coercion.rs:19:14
|
||||
|
|
||||
LL | fn c(v: &[u8]) -> Box<dyn Foo> {
|
||||
|
|
|
@ -4,7 +4,7 @@ struct Dog {
|
|||
|
||||
impl Dog {
|
||||
pub fn chase_cat(&mut self) {
|
||||
let p: &'static mut usize = &mut self.cats_chased; //~ ERROR cannot infer
|
||||
let p: &'static mut usize = &mut self.cats_chased; //~ ERROR E0759
|
||||
*p += 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
error[E0759]: cannot infer an appropriate lifetime
|
||||
error[E0759]: `self` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/regions-addr-of-self.rs:7:37
|
||||
|
|
||||
LL | pub fn chase_cat(&mut self) {
|
||||
|
|
|
@ -7,7 +7,7 @@ trait X { }
|
|||
impl<'a, T> X for B<'a, T> {}
|
||||
|
||||
fn g<'a, T: 'static>(v: Box<dyn A<T> + 'a>) -> Box<dyn X + 'static> {
|
||||
box B(&*v) as Box<dyn X> //~ ERROR cannot infer
|
||||
box B(&*v) as Box<dyn X> //~ ERROR E0759
|
||||
}
|
||||
|
||||
fn main() { }
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
error[E0759]: cannot infer an appropriate lifetime
|
||||
error[E0759]: `v` has lifetime `'a` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/regions-close-object-into-object-2.rs:10:11
|
||||
|
|
||||
LL | fn g<'a, T: 'static>(v: Box<dyn A<T> + 'a>) -> Box<dyn X + 'static> {
|
||||
|
|
|
@ -7,7 +7,7 @@ trait X { }
|
|||
impl<'a, T> X for B<'a, T> {}
|
||||
|
||||
fn i<'a, T, U>(v: Box<dyn A<U>+'a>) -> Box<dyn X + 'static> {
|
||||
box B(&*v) as Box<dyn X> //~ ERROR cannot infer
|
||||
box B(&*v) as Box<dyn X> //~ ERROR E0759
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
error[E0759]: cannot infer an appropriate lifetime
|
||||
error[E0759]: `v` has lifetime `'a` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/regions-close-object-into-object-4.rs:10:11
|
||||
|
|
||||
LL | fn i<'a, T, U>(v: Box<dyn A<U>+'a>) -> Box<dyn X + 'static> {
|
||||
|
|
|
@ -6,7 +6,7 @@ fn borrowed_proc<'a>(x: &'a isize) -> Box<dyn FnMut()->(isize) + 'a> {
|
|||
|
||||
fn static_proc(x: &isize) -> Box<dyn FnMut() -> (isize) + 'static> {
|
||||
// This is illegal, because the region bound on `proc` is 'static.
|
||||
Box::new(move || { *x }) //~ ERROR cannot infer an appropriate lifetime
|
||||
Box::new(move || { *x }) //~ ERROR E0759
|
||||
}
|
||||
|
||||
fn main() { }
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
error[E0759]: cannot infer an appropriate lifetime
|
||||
error[E0759]: `x` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/regions-proc-bound-capture.rs:9:14
|
||||
|
|
||||
LL | fn static_proc(x: &isize) -> Box<dyn FnMut() -> (isize) + 'static> {
|
||||
|
|
|
@ -6,7 +6,7 @@ struct Foo;
|
|||
|
||||
impl Foo {
|
||||
async fn f(self: Pin<&Self>) -> impl Clone { self }
|
||||
//~^ ERROR cannot infer an appropriate lifetime
|
||||
//~^ ERROR E0759
|
||||
}
|
||||
|
||||
fn main() {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
error[E0759]: cannot infer an appropriate lifetime
|
||||
error[E0759]: `self` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/arbitrary_self_types_pin_lifetime_impl_trait-async.rs:8:16
|
||||
|
|
||||
LL | async fn f(self: Pin<&Self>) -> impl Clone { self }
|
||||
|
|
|
@ -3,7 +3,7 @@ use std::pin::Pin;
|
|||
struct Foo;
|
||||
|
||||
impl Foo {
|
||||
fn f(self: Pin<&Self>) -> impl Clone { self } //~ ERROR cannot infer an appropriate lifetime
|
||||
fn f(self: Pin<&Self>) -> impl Clone { self } //~ ERROR E0759
|
||||
}
|
||||
|
||||
fn main() {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
error[E0759]: cannot infer an appropriate lifetime
|
||||
error[E0759]: `self` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/arbitrary_self_types_pin_lifetime_impl_trait.rs:6:44
|
||||
|
|
||||
LL | fn f(self: Pin<&Self>) -> impl Clone { self }
|
||||
|
|
|
@ -17,7 +17,7 @@ mod foo {
|
|||
impl Irrelevant for dyn ObjectTrait {}
|
||||
|
||||
fn use_it<'a>(val: &'a dyn ObjectTrait) -> impl OtherTrait<'a> + 'a {
|
||||
val.use_self() //~ ERROR cannot infer an appropriate lifetime
|
||||
val.use_self() //~ ERROR E0759
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -34,7 +34,7 @@ mod bar {
|
|||
impl Irrelevant for dyn ObjectTrait {}
|
||||
|
||||
fn use_it<'a>(val: &'a dyn ObjectTrait) -> &'a () {
|
||||
val.use_self() //~ ERROR cannot infer an appropriate lifetime
|
||||
val.use_self() //~ ERROR E0767
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -51,7 +51,7 @@ mod baz {
|
|||
impl Irrelevant for Box<dyn ObjectTrait> {}
|
||||
|
||||
fn use_it<'a>(val: &'a Box<dyn ObjectTrait + 'a>) -> &'a () {
|
||||
val.use_self() //~ ERROR cannot infer an appropriate lifetime
|
||||
val.use_self() //~ ERROR E0767
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -66,8 +66,29 @@ mod bat {
|
|||
}
|
||||
|
||||
fn use_it<'a>(val: &'a dyn ObjectTrait) -> impl OtherTrait<'a> + 'a {
|
||||
val.use_self() //~ ERROR cannot infer an appropriate lifetime
|
||||
val.use_self() //~ ERROR E0767
|
||||
}
|
||||
}
|
||||
|
||||
mod ban {
|
||||
trait OtherTrait<'a> {}
|
||||
impl<'a> OtherTrait<'a> for &'a () {}
|
||||
|
||||
trait ObjectTrait {}
|
||||
trait MyTrait {
|
||||
fn use_self(&self) -> &();
|
||||
}
|
||||
trait Irrelevant {}
|
||||
|
||||
impl MyTrait for dyn ObjectTrait + '_ {
|
||||
fn use_self(&self) -> &() { panic!() }
|
||||
}
|
||||
impl Irrelevant for dyn ObjectTrait {}
|
||||
|
||||
fn use_it<'a>(val: &'a dyn ObjectTrait) -> impl OtherTrait<'a> + 'a {
|
||||
val.use_self() //~ ERROR E0759
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fn main() {}
|
||||
|
|
|
@ -18,5 +18,15 @@ LL | val.use_self()
|
|||
|
|
||||
= help: consider replacing `'a` with `'static`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
error[E0521]: borrowed data escapes outside of function
|
||||
--> $DIR/impl-on-dyn-trait-with-implicit-static-bound.rs:89:9
|
||||
|
|
||||
LL | fn use_it<'a>(val: &'a dyn ObjectTrait) -> impl OtherTrait<'a> {
|
||||
| --- `val` is a reference that is only valid in the function body
|
||||
LL | val.use_self()
|
||||
| ^^^^^^^^^^^^^^ `val` escapes the function body here
|
||||
|
|
||||
= help: consider replacing `'a` with `'static`
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ mod foo {
|
|||
impl Irrelevant for dyn ObjectTrait {}
|
||||
|
||||
fn use_it<'a>(val: &'a dyn ObjectTrait) -> impl OtherTrait<'a> + 'a {
|
||||
val.use_self() //~ ERROR cannot infer an appropriate lifetime
|
||||
val.use_self() //~ ERROR E0759
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -34,7 +34,7 @@ mod bar {
|
|||
impl Irrelevant for dyn ObjectTrait {}
|
||||
|
||||
fn use_it<'a>(val: &'a dyn ObjectTrait) -> &'a () {
|
||||
val.use_self() //~ ERROR cannot infer an appropriate lifetime
|
||||
val.use_self() //~ ERROR E0767
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -51,7 +51,7 @@ mod baz {
|
|||
impl Irrelevant for Box<dyn ObjectTrait> {}
|
||||
|
||||
fn use_it<'a>(val: &'a Box<dyn ObjectTrait + 'a>) -> &'a () {
|
||||
val.use_self() //~ ERROR cannot infer an appropriate lifetime
|
||||
val.use_self() //~ ERROR E0767
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -66,8 +66,29 @@ mod bat {
|
|||
}
|
||||
|
||||
fn use_it<'a>(val: &'a dyn ObjectTrait) -> impl OtherTrait<'a> + 'a {
|
||||
val.use_self() //~ ERROR cannot infer an appropriate lifetime
|
||||
val.use_self() //~ ERROR E0767
|
||||
}
|
||||
}
|
||||
|
||||
mod ban {
|
||||
trait OtherTrait<'a> {}
|
||||
impl<'a> OtherTrait<'a> for &'a () {}
|
||||
|
||||
trait ObjectTrait {}
|
||||
trait MyTrait {
|
||||
fn use_self(&self) -> &();
|
||||
}
|
||||
trait Irrelevant {}
|
||||
|
||||
impl MyTrait for dyn ObjectTrait {
|
||||
fn use_self(&self) -> &() { panic!() }
|
||||
}
|
||||
impl Irrelevant for dyn ObjectTrait {}
|
||||
|
||||
fn use_it<'a>(val: &'a dyn ObjectTrait) -> impl OtherTrait<'a> {
|
||||
val.use_self() //~ ERROR E0759
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fn main() {}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
error[E0759]: cannot infer an appropriate lifetime
|
||||
error[E0759]: `val` has lifetime `'a` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/impl-on-dyn-trait-with-implicit-static-bound.rs:20:13
|
||||
|
|
||||
LL | fn use_it<'a>(val: &'a dyn ObjectTrait) -> impl OtherTrait<'a> + 'a {
|
||||
|
@ -6,78 +6,102 @@ LL | fn use_it<'a>(val: &'a dyn ObjectTrait) -> impl OtherTrait<'a> + 'a {
|
|||
LL | val.use_self()
|
||||
| ^^^^^^^^ ...is captured and required to live as long as `'static` here
|
||||
|
|
||||
note: when using method `use_self` of trait `foo::MyTrait` on `foo::ObjectTrait`, an implicit `'static` requirement is introduced
|
||||
note: `foo::ObjectTrait`'s `impl` of `foo::MyTrait` has an implicit `'static` requirement
|
||||
--> $DIR/impl-on-dyn-trait-with-implicit-static-bound.rs:14:26
|
||||
|
|
||||
LL | impl MyTrait for dyn ObjectTrait {
|
||||
| ^^^^^^^^^^^ this trait object has an implicit `'static` lifetime requirement
|
||||
| ^^^^^^^^^^^ this has an implicit `'static` lifetime requirement
|
||||
LL | fn use_self(&self) -> &() { panic!() }
|
||||
| -------- the `'static` requirement is introduced when calling this method
|
||||
| -------- `'static` requirement is introduced when calling this method
|
||||
help: consider relaxing the implicit `'static` requirement
|
||||
|
|
||||
LL | impl MyTrait for dyn ObjectTrait + '_ {
|
||||
| ^^^^
|
||||
|
||||
error[E0759]: cannot infer an appropriate lifetime
|
||||
error[E0767]: `val` has lifetime `'a` but calling `use_self` introduces an implicit `'static` lifetime requirement
|
||||
--> $DIR/impl-on-dyn-trait-with-implicit-static-bound.rs:69:13
|
||||
|
|
||||
LL | fn use_it<'a>(val: &'a dyn ObjectTrait) -> impl OtherTrait<'a> + 'a {
|
||||
| ------------------- this data with lifetime `'a`...
|
||||
LL | val.use_self()
|
||||
| ^^^^^^^^ ...is captured and required to live as long as `'static` here
|
||||
| ^^^^^^^^ ...is captured and required to live as long as `'static` here because of an implicit lifetime bound on the inherent `impl`
|
||||
|
|
||||
note: when using method `use_self` on `bat::ObjectTrait`, an implicit `'static` requirement is introduced
|
||||
note: `bat::ObjectTrait`'s inherent `impl` has a `'static` requirement
|
||||
--> $DIR/impl-on-dyn-trait-with-implicit-static-bound.rs:64:14
|
||||
|
|
||||
LL | impl dyn ObjectTrait {
|
||||
| ^^^^^^^^^^^ this trait object has an implicit `'static` lifetime requirement
|
||||
| ^^^^^^^^^^^ this has an implicit `'static` lifetime requirement
|
||||
LL | fn use_self(&self) -> &() { panic!() }
|
||||
| -------- the `'static` requirement is introduced when calling this method
|
||||
| -------- `'static` requirement is introduced when calling this method
|
||||
help: consider relaxing the implicit `'static` requirement
|
||||
|
|
||||
LL | impl dyn ObjectTrait + '_ {
|
||||
| ^^^^
|
||||
|
||||
error[E0759]: cannot infer an appropriate lifetime
|
||||
error[E0759]: `val` has lifetime `'a` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/impl-on-dyn-trait-with-implicit-static-bound.rs:89:13
|
||||
|
|
||||
LL | fn use_it<'a>(val: &'a dyn ObjectTrait) -> impl OtherTrait<'a> {
|
||||
| ------------------- this data with lifetime `'a`...
|
||||
LL | val.use_self()
|
||||
| ^^^^^^^^ ...is captured and required to live as long as `'static` here
|
||||
|
|
||||
note: `ban::ObjectTrait`'s `impl` of `ban::MyTrait` has an implicit `'static` requirement
|
||||
--> $DIR/impl-on-dyn-trait-with-implicit-static-bound.rs:83:26
|
||||
|
|
||||
LL | impl MyTrait for dyn ObjectTrait {
|
||||
| ^^^^^^^^^^^ this has an implicit `'static` lifetime requirement
|
||||
LL | fn use_self(&self) -> &() { panic!() }
|
||||
| -------- `'static` requirement is introduced when calling this method
|
||||
help: consider relaxing the implicit `'static` requirement
|
||||
|
|
||||
LL | impl MyTrait for dyn ObjectTrait + '_ {
|
||||
| ^^^^
|
||||
help: to declare that the `impl Trait` captures data from argument `val`, you can add an explicit `'a` lifetime bound
|
||||
|
|
||||
LL | fn use_it<'a>(val: &'a dyn ObjectTrait) -> impl OtherTrait<'a> + 'a {
|
||||
| ^^^^
|
||||
|
||||
error[E0767]: `val` has lifetime `'a` but calling `use_self` introduces an implicit `'static` lifetime requirement
|
||||
--> $DIR/impl-on-dyn-trait-with-implicit-static-bound.rs:37:13
|
||||
|
|
||||
LL | fn use_it<'a>(val: &'a dyn ObjectTrait) -> &'a () {
|
||||
| ------------------- this data with lifetime `'a`...
|
||||
LL | val.use_self()
|
||||
| ^^^^^^^^ ...is captured and required to live as long as `'static` here
|
||||
| ^^^^^^^^ ...is captured and required to live as long as `'static` here because of an implicit lifetime on the `impl` of `bar::MyTrait`
|
||||
|
|
||||
note: when using method `use_self` of trait `bar::MyTrait` on `bar::ObjectTrait`, an implicit `'static` requirement is introduced
|
||||
note: `bar::ObjectTrait`'s `impl` of `bar::MyTrait` has an implicit `'static` requirement
|
||||
--> $DIR/impl-on-dyn-trait-with-implicit-static-bound.rs:31:26
|
||||
|
|
||||
LL | impl MyTrait for dyn ObjectTrait {
|
||||
| ^^^^^^^^^^^ this trait object has an implicit `'static` lifetime requirement
|
||||
| ^^^^^^^^^^^ this has an implicit `'static` lifetime requirement
|
||||
LL | fn use_self(&self) -> &() { panic!() }
|
||||
| -------- the `'static` requirement is introduced when calling this method
|
||||
| -------- `'static` requirement is introduced when calling this method
|
||||
help: consider relaxing the implicit `'static` requirement
|
||||
|
|
||||
LL | impl MyTrait for dyn ObjectTrait + '_ {
|
||||
| ^^^^
|
||||
|
||||
error[E0759]: cannot infer an appropriate lifetime
|
||||
error[E0767]: `val` has lifetime `'a` but calling `use_self` introduces an implicit `'static` lifetime requirement
|
||||
--> $DIR/impl-on-dyn-trait-with-implicit-static-bound.rs:54:13
|
||||
|
|
||||
LL | fn use_it<'a>(val: &'a Box<dyn ObjectTrait + 'a>) -> &'a () {
|
||||
| ----------------------------- this data with lifetime `'a`...
|
||||
LL | val.use_self()
|
||||
| ^^^^^^^^ ...is captured and required to live as long as `'static` here
|
||||
| ^^^^^^^^ ...is captured and required to live as long as `'static` here because of an implicit lifetime on the `impl` of `baz::MyTrait`
|
||||
|
|
||||
note: when using method `use_self` of trait `baz::MyTrait` on `baz::ObjectTrait`, an implicit `'static` requirement is introduced
|
||||
note: `baz::ObjectTrait`'s `impl` of `baz::MyTrait` has an implicit `'static` requirement
|
||||
--> $DIR/impl-on-dyn-trait-with-implicit-static-bound.rs:48:30
|
||||
|
|
||||
LL | impl MyTrait for Box<dyn ObjectTrait> {
|
||||
| ^^^^^^^^^^^ this trait object has an implicit `'static` lifetime requirement
|
||||
| ^^^^^^^^^^^ this has an implicit `'static` lifetime requirement
|
||||
LL | fn use_self(&self) -> &() { panic!() }
|
||||
| -------- the `'static` requirement is introduced when calling this method
|
||||
| -------- `'static` requirement is introduced when calling this method
|
||||
help: consider relaxing the implicit `'static` requirement
|
||||
|
|
||||
LL | impl MyTrait for Box<dyn ObjectTrait + '_> {
|
||||
| ^^^^
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0759`.
|
||||
|
|
|
@ -16,7 +16,7 @@ fn foo<G, T>(g: G, dest: &mut T) -> impl FnOnce()
|
|||
where
|
||||
G: Get<T>
|
||||
{
|
||||
move || { //~ ERROR cannot infer an appropriate lifetime
|
||||
move || { //~ ERROR `dest`
|
||||
*dest = g.get();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@ LL | fn baz<G: 'a, T>(g: G, dest: &mut T) -> impl FnOnce() + '_
|
|||
| |
|
||||
| help: consider introducing lifetime `'a` here: `'a,`
|
||||
|
||||
error[E0759]: cannot infer an appropriate lifetime
|
||||
error[E0759]: `dest` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/missing-lifetimes-in-signature.rs:19:5
|
||||
|
|
||||
LL | fn foo<G, T>(g: G, dest: &mut T) -> impl FnOnce()
|
||||
|
|
|
@ -27,7 +27,7 @@ impl Bar {
|
|||
fn iter(&self) -> impl Iterator<Item = Box<dyn Foo>> {
|
||||
Iter {
|
||||
current: None,
|
||||
remaining: self.0.iter(), //~ ERROR cannot infer an appropriate lifetime
|
||||
remaining: self.0.iter(), //~ ERROR E0759
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ impl Baz {
|
|||
fn iter(&self) -> impl Iterator<Item = Box<dyn Foo>> + '_ {
|
||||
Iter {
|
||||
current: None,
|
||||
remaining: self.0.iter(), //~ ERROR cannot infer an appropriate lifetime
|
||||
remaining: self.0.iter(), //~ ERROR E0759
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ impl Bat {
|
|||
fn iter<'a>(&'a self) -> impl Iterator<Item = Box<dyn Foo>> + 'a {
|
||||
Iter {
|
||||
current: None,
|
||||
remaining: self.0.iter(), //~ ERROR cannot infer an appropriate lifetime
|
||||
remaining: self.0.iter(), //~ ERROR E0759
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -60,7 +60,7 @@ impl Ban {
|
|||
fn iter<'a>(&'a self) -> impl Iterator<Item = Box<dyn Foo>> {
|
||||
Iter {
|
||||
current: None,
|
||||
remaining: self.0.iter(), //~ ERROR cannot infer an appropriate lifetime
|
||||
remaining: self.0.iter(), //~ ERROR E0759
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
error[E0759]: cannot infer an appropriate lifetime
|
||||
error[E0759]: `self` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/trait-object-nested-in-impl-trait.rs:30:31
|
||||
|
|
||||
LL | fn iter(&self) -> impl Iterator<Item = Box<dyn Foo>> {
|
||||
|
@ -23,7 +23,7 @@ help: to declare that the trait object captures data from argument `self`, you c
|
|||
LL | fn iter(&self) -> impl Iterator<Item = Box<dyn Foo + '_>> {
|
||||
| ^^^^
|
||||
|
||||
error[E0759]: cannot infer an appropriate lifetime
|
||||
error[E0759]: `self` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/trait-object-nested-in-impl-trait.rs:41:31
|
||||
|
|
||||
LL | fn iter(&self) -> impl Iterator<Item = Box<dyn Foo>> + '_ {
|
||||
|
@ -44,7 +44,7 @@ help: to declare that the trait object captures data from argument `self`, you c
|
|||
LL | fn iter(&self) -> impl Iterator<Item = Box<dyn Foo + '_>> + '_ {
|
||||
| ^^^^
|
||||
|
||||
error[E0759]: cannot infer an appropriate lifetime
|
||||
error[E0759]: `self` has lifetime `'a` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/trait-object-nested-in-impl-trait.rs:52:31
|
||||
|
|
||||
LL | fn iter<'a>(&'a self) -> impl Iterator<Item = Box<dyn Foo>> + 'a {
|
||||
|
@ -65,7 +65,7 @@ help: to declare that the trait object captures data from argument `self`, you c
|
|||
LL | fn iter<'a>(&'a self) -> impl Iterator<Item = Box<dyn Foo + 'a>> + 'a {
|
||||
| ^^^^
|
||||
|
||||
error[E0759]: cannot infer an appropriate lifetime
|
||||
error[E0759]: `self` has lifetime `'a` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/trait-object-nested-in-impl-trait.rs:63:31
|
||||
|
|
||||
LL | fn iter<'a>(&'a self) -> impl Iterator<Item = Box<dyn Foo>> {
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
fn a<T>(items: &[T]) -> Box<dyn Iterator<Item=&T>> {
|
||||
// ^^^^^^^^^^^^^^^^^^^^^ bound *here* defaults to `'static`
|
||||
Box::new(items.iter()) //~ ERROR cannot infer an appropriate lifetime
|
||||
Box::new(items.iter()) //~ ERROR E0759
|
||||
}
|
||||
|
||||
fn b<T>(items: &[T]) -> Box<dyn Iterator<Item=&T> + '_> {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
error[E0759]: cannot infer an appropriate lifetime
|
||||
error[E0759]: `items` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement
|
||||
--> $DIR/dyn-trait-underscore.rs:8:20
|
||||
|
|
||||
LL | fn a<T>(items: &[T]) -> Box<dyn Iterator<Item=&T>> {
|
||||
|
|
Loading…
Add table
Reference in a new issue