always show and explain sub region

This commit is contained in:
Ali MJ Al-Nasrawy 2023-09-17 14:32:02 +00:00
parent 5be0b2283a
commit 996ffcb718
71 changed files with 462 additions and 339 deletions

View File

@ -59,8 +59,8 @@ use crate::traits::{
}; };
use rustc_data_structures::fx::{FxIndexMap, FxIndexSet}; use rustc_data_structures::fx::{FxIndexMap, FxIndexSet};
use rustc_errors::{error_code, Applicability, DiagnosticBuilder, DiagnosticStyledString};
use rustc_errors::{pluralize, struct_span_err, Diagnostic, ErrorGuaranteed, IntoDiagnosticArg}; use rustc_errors::{pluralize, struct_span_err, Diagnostic, ErrorGuaranteed, IntoDiagnosticArg};
use rustc_errors::{Applicability, DiagnosticBuilder, DiagnosticStyledString};
use rustc_hir as hir; use rustc_hir as hir;
use rustc_hir::def::DefKind; use rustc_hir::def::DefKind;
use rustc_hir::def_id::{DefId, LocalDefId}; use rustc_hir::def_id::{DefId, LocalDefId};
@ -2341,40 +2341,29 @@ impl<'tcx> TypeErrCtxt<'_, 'tcx> {
}, },
}; };
let mut err = match sub.kind() { let mut err = self.tcx.sess.struct_span_err_with_code(
ty::ReEarlyBound(_) | ty::ReFree(_) if sub.has_name() => struct_span_err!(
self.tcx.sess,
span, span,
E0309, format!("{labeled_user_string} may not live long enough"),
"{} may not live long enough", match sub.kind() {
labeled_user_string ty::ReEarlyBound(_) | ty::ReFree(_) if sub.has_name() => error_code!(E0309),
), ty::ReStatic => error_code!(E0310),
ty::ReStatic => struct_span_err!( _ => error_code!(E0311),
self.tcx.sess, },
span,
E0310,
"{} may not live long enough",
labeled_user_string
),
_ => {
let mut err = struct_span_err!(
self.tcx.sess,
span,
E0311,
"{} may not live long enough",
labeled_user_string
); );
note_and_explain_region(
self.tcx, '_explain: {
&mut err, let (description, span) = match sub.kind() {
&format!("{labeled_user_string} must be valid for "), ty::ReEarlyBound(_) | ty::ReFree(_) | ty::ReStatic => {
sub, msg_span_from_named_region(self.tcx, sub, Some(span))
"...",
None,
);
err
} }
_ => (format!("lifetime `{sub}`"), Some(span)),
}; };
let prefix = format!("{labeled_user_string} must be valid for ");
label_msg_span(&mut err, &prefix, description, span, "...");
if let Some(origin) = origin {
self.note_region_origin(&mut err, &origin);
}
}
'suggestion: { 'suggestion: {
let msg = "consider adding an explicit lifetime bound"; let msg = "consider adding an explicit lifetime bound";
@ -2450,9 +2439,6 @@ impl<'tcx> TypeErrCtxt<'_, 'tcx> {
); );
} }
if let Some(origin) = origin {
self.note_region_origin(&mut err, &origin);
}
err err
} }

View File

@ -2,7 +2,9 @@ error[E0309]: the parameter type `T` may not live long enough
--> $DIR/regionck-1.rs:9:30 --> $DIR/regionck-1.rs:9:30
| |
LL | type NoTyOutliv<'a, T> = &'a T; LL | type NoTyOutliv<'a, T> = &'a T;
| ^^^^^ ...so that the reference type `&'a T` does not outlive the data it points at | -- ^^^^^ ...so that the reference type `&'a T` does not outlive the data it points at
| |
| the parameter type `T` must be valid for the lifetime `'a` as defined here...
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |

View File

@ -2,18 +2,11 @@ error[E0311]: the parameter type `U` may not live long enough
--> $DIR/async-generics-and-bounds.rs:12:5 --> $DIR/async-generics-and-bounds.rs:12:5
| |
LL | async fn foo(&self) -> &(T, U) where T: Debug + Sized, U: Hash; LL | async fn foo(&self) -> &(T, U) where T: Debug + Sized, U: Hash;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| | |
| | the parameter type `U` must be valid for the anonymous lifetime as defined here...
| ...so that the reference type `&(T, U)` does not outlive the data it points at
| |
note: the parameter type `U` must be valid for the anonymous lifetime as defined here...
--> $DIR/async-generics-and-bounds.rs:12:18
|
LL | async fn foo(&self) -> &(T, U) where T: Debug + Sized, U: Hash;
| ^
note: ...so that the reference type `&(T, U)` does not outlive the data it points at
--> $DIR/async-generics-and-bounds.rs:12:5
|
LL | async fn foo(&self) -> &(T, U) where T: Debug + Sized, U: Hash;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
LL | async fn foo<'a>(&'a self) -> &'a (T, U) where T: Debug + Sized, U: Hash, U: 'a; LL | async fn foo<'a>(&'a self) -> &'a (T, U) where T: Debug + Sized, U: Hash, U: 'a;
@ -23,18 +16,11 @@ error[E0311]: the parameter type `T` may not live long enough
--> $DIR/async-generics-and-bounds.rs:12:5 --> $DIR/async-generics-and-bounds.rs:12:5
| |
LL | async fn foo(&self) -> &(T, U) where T: Debug + Sized, U: Hash; LL | async fn foo(&self) -> &(T, U) where T: Debug + Sized, U: Hash;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| | |
| | the parameter type `T` must be valid for the anonymous lifetime as defined here...
| ...so that the reference type `&(T, U)` does not outlive the data it points at
| |
note: the parameter type `T` must be valid for the anonymous lifetime as defined here...
--> $DIR/async-generics-and-bounds.rs:12:18
|
LL | async fn foo(&self) -> &(T, U) where T: Debug + Sized, U: Hash;
| ^
note: ...so that the reference type `&(T, U)` does not outlive the data it points at
--> $DIR/async-generics-and-bounds.rs:12:5
|
LL | async fn foo(&self) -> &(T, U) where T: Debug + Sized, U: Hash;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
LL | async fn foo<'a>(&'a self) -> &'a (T, U) where T: Debug + Sized, U: Hash, T: 'a; LL | async fn foo<'a>(&'a self) -> &'a (T, U) where T: Debug + Sized, U: Hash, T: 'a;

View File

@ -2,18 +2,11 @@ error[E0311]: the parameter type `U` may not live long enough
--> $DIR/async-generics.rs:9:5 --> $DIR/async-generics.rs:9:5
| |
LL | async fn foo(&self) -> &(T, U); LL | async fn foo(&self) -> &(T, U);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^-^^^^^^^^^^^^^^^^^
| | |
| | the parameter type `U` must be valid for the anonymous lifetime as defined here...
| ...so that the reference type `&(T, U)` does not outlive the data it points at
| |
note: the parameter type `U` must be valid for the anonymous lifetime as defined here...
--> $DIR/async-generics.rs:9:18
|
LL | async fn foo(&self) -> &(T, U);
| ^
note: ...so that the reference type `&(T, U)` does not outlive the data it points at
--> $DIR/async-generics.rs:9:5
|
LL | async fn foo(&self) -> &(T, U);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
LL | async fn foo<'a>(&'a self) -> &'a (T, U) where U: 'a; LL | async fn foo<'a>(&'a self) -> &'a (T, U) where U: 'a;
@ -23,18 +16,11 @@ error[E0311]: the parameter type `T` may not live long enough
--> $DIR/async-generics.rs:9:5 --> $DIR/async-generics.rs:9:5
| |
LL | async fn foo(&self) -> &(T, U); LL | async fn foo(&self) -> &(T, U);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^-^^^^^^^^^^^^^^^^^
| | |
| | the parameter type `T` must be valid for the anonymous lifetime as defined here...
| ...so that the reference type `&(T, U)` does not outlive the data it points at
| |
note: the parameter type `T` must be valid for the anonymous lifetime as defined here...
--> $DIR/async-generics.rs:9:18
|
LL | async fn foo(&self) -> &(T, U);
| ^
note: ...so that the reference type `&(T, U)` does not outlive the data it points at
--> $DIR/async-generics.rs:9:5
|
LL | async fn foo(&self) -> &(T, U);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
LL | async fn foo<'a>(&'a self) -> &'a (T, U) where T: 'a; LL | async fn foo<'a>(&'a self) -> &'a (T, U) where T: 'a;

View File

@ -2,7 +2,10 @@ error[E0310]: the parameter type `T` may not live long enough
--> $DIR/builtin-superkinds-self-type.rs:10:16 --> $DIR/builtin-superkinds-self-type.rs:10:16
| |
LL | impl <T: Sync> Foo for T { } LL | impl <T: Sync> Foo for T { }
| ^^^ ...so that the type `T` will meet its required lifetime bounds... | ^^^
| |
| the parameter type `T` must be valid for the static lifetime...
| ...so that the type `T` will meet its required lifetime bounds...
| |
note: ...that is required by this bound note: ...that is required by this bound
--> $DIR/builtin-superkinds-self-type.rs:6:24 --> $DIR/builtin-superkinds-self-type.rs:6:24

View File

@ -2,7 +2,10 @@ error[E0310]: the parameter type `T` may not live long enough
--> $DIR/issue-53475.rs:10:1 --> $DIR/issue-53475.rs:10:1
| |
LL | impl<T> CoerceUnsized<Foo<dyn Any>> for Foo<T> {} LL | impl<T> CoerceUnsized<Foo<dyn Any>> for Foo<T> {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| the parameter type `T` must be valid for the static lifetime...
| ...so that the type `T` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |

View File

@ -2,7 +2,10 @@ error[E0310]: the parameter type `T` may not live long enough
--> $DIR/issue-102117.rs:19:26 --> $DIR/issue-102117.rs:19:26
| |
LL | type_id: TypeId::of::<T>(), LL | type_id: TypeId::of::<T>(),
| ^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^^
| |
| the parameter type `T` must be valid for the static lifetime...
| ...so that the type `T` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
@ -13,7 +16,10 @@ error[E0310]: the parameter type `T` may not live long enough
--> $DIR/issue-102117.rs:19:26 --> $DIR/issue-102117.rs:19:26
| |
LL | type_id: TypeId::of::<T>(), LL | type_id: TypeId::of::<T>(),
| ^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^^
| |
| the parameter type `T` must be valid for the static lifetime...
| ...so that the type `T` will meet its required lifetime bounds
| |
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...

View File

@ -1,19 +1,11 @@
error[E0311]: the parameter type `T` may not live long enough error[E0311]: the parameter type `T` may not live long enough
--> $DIR/E0311.rs:6:5 --> $DIR/E0311.rs:6:5
| |
LL | with_restriction::<T>(x)
| ^^^^^^^^^^^^^^^^^^^^^
|
note: the parameter type `T` must be valid for the anonymous lifetime defined here...
--> $DIR/E0311.rs:5:25
|
LL | fn no_restriction<T>(x: &()) -> &() { LL | fn no_restriction<T>(x: &()) -> &() {
| ^^^ | --- the parameter type `T` must be valid for the anonymous lifetime defined here...
note: ...so that the type `T` will meet its required lifetime bounds
--> $DIR/E0311.rs:6:5
|
LL | with_restriction::<T>(x) LL | with_restriction::<T>(x)
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
|
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
LL | fn no_restriction<'a, T: 'a>(x: &'a ()) -> &'a () { LL | fn no_restriction<'a, T: 'a>(x: &'a ()) -> &'a () {

View File

@ -2,7 +2,9 @@ error[E0309]: the parameter type `T` may not live long enough
--> $DIR/implied-bounds-unnorm-associated-type-5.rs:6:13 --> $DIR/implied-bounds-unnorm-associated-type-5.rs:6:13
| |
LL | impl<'a, T> Trait<'a> for T { LL | impl<'a, T> Trait<'a> for T {
| ^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds... | -- ^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds...
| |
| the parameter type `T` must be valid for the lifetime `'a` as defined here...
| |
note: ...that is required by this bound note: ...that is required by this bound
--> $DIR/implied-bounds-unnorm-associated-type-5.rs:1:18 --> $DIR/implied-bounds-unnorm-associated-type-5.rs:1:18

View File

@ -2,7 +2,9 @@ error[E0309]: the parameter type `T` may not live long enough
--> $DIR/issue-84931.rs:14:21 --> $DIR/issue-84931.rs:14:21
| |
LL | type Item<'a> = &'a mut T; LL | type Item<'a> = &'a mut T;
| ^^^^^^^^^ ...so that the reference type `&'a mut T` does not outlive the data it points at | -- ^^^^^^^^^ ...so that the reference type `&'a mut T` does not outlive the data it points at
| |
| the parameter type `T` must be valid for the lifetime `'a` as defined here...
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |

View File

@ -117,7 +117,10 @@ error[E0310]: the parameter type `T` may not live long enough
--> $DIR/must_outlive_least_region_or_bound.rs:43:5 --> $DIR/must_outlive_least_region_or_bound.rs:43:5
| |
LL | x LL | x
| ^ ...so that the type `T` will meet its required lifetime bounds | ^
| |
| the parameter type `T` must be valid for the static lifetime...
| ...so that the type `T` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |

View File

@ -2,7 +2,10 @@ error[E0310]: the parameter type `T` may not live long enough
--> $DIR/type_parameters_captured.rs:8:5 --> $DIR/type_parameters_captured.rs:8:5
| |
LL | x LL | x
| ^ ...so that the type `T` will meet its required lifetime bounds | ^
| |
| the parameter type `T` must be valid for the static lifetime...
| ...so that the type `T` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |

View File

@ -1,6 +1,9 @@
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/unactionable_diagnostic.rs:21:5 --> $DIR/unactionable_diagnostic.rs:21:5
| |
LL | pub fn bar<'t, T>(
| -- the parameter type `T` must be valid for the lifetime `'t` as defined here...
...
LL | foo(post, x) LL | foo(post, x)
| ^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
| |

View File

@ -2,7 +2,10 @@ error[E0310]: the parameter type `T` may not live long enough
--> $DIR/lifetime-doesnt-live-long-enough.rs:19:10 --> $DIR/lifetime-doesnt-live-long-enough.rs:19:10
| |
LL | foo: &'static T LL | foo: &'static T
| ^^^^^^^^^^ ...so that the reference type `&'static T` does not outlive the data it points at | ^^^^^^^^^^
| |
| the parameter type `T` must be valid for the static lifetime...
| ...so that the reference type `&'static T` does not outlive the data it points at
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
@ -13,7 +16,9 @@ error[E0309]: the parameter type `K` may not live long enough
--> $DIR/lifetime-doesnt-live-long-enough.rs:41:33 --> $DIR/lifetime-doesnt-live-long-enough.rs:41:33
| |
LL | fn generic_in_parent<'a, L: X<&'a Nested<K>>>() { LL | fn generic_in_parent<'a, L: X<&'a Nested<K>>>() {
| ^^^^^^^^^^^^^^^^ ...so that the reference type `&'a Nested<K>` does not outlive the data it points at | -- ^^^^^^^^^^^^^^^^ ...so that the reference type `&'a Nested<K>` does not outlive the data it points at
| |
| the parameter type `K` must be valid for the lifetime `'a` as defined here...
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
@ -24,7 +29,9 @@ error[E0309]: the parameter type `M` may not live long enough
--> $DIR/lifetime-doesnt-live-long-enough.rs:44:36 --> $DIR/lifetime-doesnt-live-long-enough.rs:44:36
| |
LL | fn generic_in_child<'a, 'b, L: X<&'a Nested<M>>, M: 'b>() { LL | fn generic_in_child<'a, 'b, L: X<&'a Nested<M>>, M: 'b>() {
| ^^^^^^^^^^^^^^^^ ...so that the reference type `&'a Nested<M>` does not outlive the data it points at | -- ^^^^^^^^^^^^^^^^ ...so that the reference type `&'a Nested<M>` does not outlive the data it points at
| |
| the parameter type `M` must be valid for the lifetime `'a` as defined here...
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
@ -35,7 +42,9 @@ error[E0309]: the parameter type `K` may not live long enough
--> $DIR/lifetime-doesnt-live-long-enough.rs:24:19 --> $DIR/lifetime-doesnt-live-long-enough.rs:24:19
| |
LL | fn foo<'a, L: X<&'a Nested<K>>>(); LL | fn foo<'a, L: X<&'a Nested<K>>>();
| ^^^^^^^^^^^^^^^^ ...so that the reference type `&'a Nested<K>` does not outlive the data it points at | -- ^^^^^^^^^^^^^^^^ ...so that the reference type `&'a Nested<K>` does not outlive the data it points at
| |
| the parameter type `K` must be valid for the lifetime `'a` as defined here...
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
@ -46,7 +55,9 @@ error[E0309]: the parameter type `Self` may not live long enough
--> $DIR/lifetime-doesnt-live-long-enough.rs:28:19 --> $DIR/lifetime-doesnt-live-long-enough.rs:28:19
| |
LL | fn bar<'a, L: X<&'a Nested<Self>>>(); LL | fn bar<'a, L: X<&'a Nested<Self>>>();
| ^^^^^^^^^^^^^^^^^^^ ...so that the reference type `&'a Nested<Self>` does not outlive the data it points at | -- ^^^^^^^^^^^^^^^^^^^ ...so that the reference type `&'a Nested<Self>` does not outlive the data it points at
| |
| the parameter type `Self` must be valid for the lifetime `'a` as defined here...
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
@ -57,7 +68,9 @@ error[E0309]: the parameter type `L` may not live long enough
--> $DIR/lifetime-doesnt-live-long-enough.rs:32:22 --> $DIR/lifetime-doesnt-live-long-enough.rs:32:22
| |
LL | fn baz<'a, L, M: X<&'a Nested<L>>>() { LL | fn baz<'a, L, M: X<&'a Nested<L>>>() {
| ^^^^^^^^^^^^^^^^ ...so that the reference type `&'a Nested<L>` does not outlive the data it points at | -- ^^^^^^^^^^^^^^^^ ...so that the reference type `&'a Nested<L>` does not outlive the data it points at
| |
| the parameter type `L` must be valid for the lifetime `'a` as defined here...
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |

View File

@ -2,7 +2,10 @@ error[E0310]: the parameter type `T` may not live long enough
--> $DIR/issue_74400.rs:12:5 --> $DIR/issue_74400.rs:12:5
| |
LL | f(data, identity) LL | f(data, identity)
| ^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^^
| |
| the parameter type `T` must be valid for the static lifetime...
| ...so that the type `T` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |

View File

@ -1,19 +1,11 @@
error[E0311]: the parameter type `T` may not live long enough error[E0311]: the parameter type `T` may not live long enough
--> $DIR/suggest-introducing-and-adding-missing-lifetime.rs:6:5 --> $DIR/suggest-introducing-and-adding-missing-lifetime.rs:6:5
| |
LL | with_restriction::<T>(x)
| ^^^^^^^^^^^^^^^^^^^^^
|
note: the parameter type `T` must be valid for the anonymous lifetime defined here...
--> $DIR/suggest-introducing-and-adding-missing-lifetime.rs:5:25
|
LL | fn no_restriction<T>(x: &()) -> &() { LL | fn no_restriction<T>(x: &()) -> &() {
| ^^^ | --- the parameter type `T` must be valid for the anonymous lifetime defined here...
note: ...so that the type `T` will meet its required lifetime bounds
--> $DIR/suggest-introducing-and-adding-missing-lifetime.rs:6:5
|
LL | with_restriction::<T>(x) LL | with_restriction::<T>(x)
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
|
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
LL | fn no_restriction<'a, T: 'a>(x: &'a ()) -> &'a () { LL | fn no_restriction<'a, T: 'a>(x: &'a ()) -> &'a () {

View File

@ -2,7 +2,10 @@ error[E0310]: the parameter type `T` may not live long enough
--> $DIR/overlapping-impl-1-modulo-regions.rs:14:21 --> $DIR/overlapping-impl-1-modulo-regions.rs:14:21
| |
LL | impl<T: Copy> F for T {} LL | impl<T: Copy> F for T {}
| ^ ...so that the type `T` will meet its required lifetime bounds | ^
| |
| the parameter type `T` must be valid for the static lifetime...
| ...so that the type `T` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |

View File

@ -25,6 +25,9 @@ LL | | T: Trait<'a>,
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/propagate-from-trait-match.rs:43:9 --> $DIR/propagate-from-trait-match.rs:43:9
| |
LL | fn supply<'a, T>(value: T)
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
...
LL | require(value); LL | require(value);
| ^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
| |

View File

@ -37,6 +37,8 @@ LL | || { None::<&'a &'b ()>; };
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/issue-98589-closures-relate-named-regions.rs:26:10 --> $DIR/issue-98589-closures-relate-named-regions.rs:26:10
| |
LL | fn test_early_type<'a: 'a, T>() {
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
LL | || { None::<&'a T>; }; LL | || { None::<&'a T>; };
| ^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
| |
@ -48,6 +50,8 @@ LL | fn test_early_type<'a: 'a, T: 'a>() {
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/issue-98589-closures-relate-named-regions.rs:32:10 --> $DIR/issue-98589-closures-relate-named-regions.rs:32:10
| |
LL | fn test_late_type<'a, T>() {
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
LL | || { None::<&'a T>; }; LL | || { None::<&'a T>; };
| ^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
| |

View File

@ -2,7 +2,10 @@ error[E0310]: the parameter type `T` may not live long enough
--> $DIR/issue-98693.rs:16:9 --> $DIR/issue-98693.rs:16:9
| |
LL | assert_static::<T>(); LL | assert_static::<T>();
| ^^^^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^^^^^
| |
| the parameter type `T` must be valid for the static lifetime...
| ...so that the type `T` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |

View File

@ -1,6 +1,9 @@
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/min-choice-reject-ambiguous.rs:17:5 --> $DIR/min-choice-reject-ambiguous.rs:17:5
| |
LL | fn test_b<'a, 'b, 'c, T>() -> impl Cap<'a> + Cap<'b> + Cap<'c>
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
...
LL | type_test::<'_, T>() // This should pass if we pick 'b. LL | type_test::<'_, T>() // This should pass if we pick 'b.
| ^^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
| |
@ -12,6 +15,9 @@ LL | T: 'b + 'a,
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/min-choice-reject-ambiguous.rs:28:5 --> $DIR/min-choice-reject-ambiguous.rs:28:5
| |
LL | fn test_c<'a, 'b, 'c, T>() -> impl Cap<'a> + Cap<'b> + Cap<'c>
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
...
LL | type_test::<'_, T>() // This should pass if we pick 'c. LL | type_test::<'_, T>() // This should pass if we pick 'c.
| ^^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
| |

View File

@ -1,6 +1,9 @@
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/impl-trait-outlives.rs:11:5 --> $DIR/impl-trait-outlives.rs:11:5
| |
LL | fn no_region<'a, T>(x: Box<T>) -> impl Debug + 'a
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
...
LL | x LL | x
| ^ ...so that the type `T` will meet its required lifetime bounds | ^ ...so that the type `T` will meet its required lifetime bounds
| |
@ -12,6 +15,9 @@ LL | T: Debug + 'a,
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/impl-trait-outlives.rs:26:5 --> $DIR/impl-trait-outlives.rs:26:5
| |
LL | fn wrong_region<'a, 'b, T>(x: Box<T>) -> impl Debug + 'a
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
...
LL | x LL | x
| ^ ...so that the type `T` will meet its required lifetime bounds | ^ ...so that the type `T` will meet its required lifetime bounds
| |

View File

@ -2,7 +2,10 @@ error[E0310]: the parameter type `T` may not live long enough
--> $DIR/projection-implied-bounds.rs:30:36 --> $DIR/projection-implied-bounds.rs:30:36
| |
LL | twice(value, |value_ref, item| invoke2(value_ref, item)); LL | twice(value, |value_ref, item| invoke2(value_ref, item));
| ^^^^^^^^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^^^^^^^^^
| |
| the parameter type `T` must be valid for the static lifetime...
| ...so that the type `T` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |

View File

@ -25,6 +25,9 @@ LL | | T: Iterator,
error[E0309]: the associated type `<T as Iterator>::Item` may not live long enough error[E0309]: the associated type `<T as Iterator>::Item` may not live long enough
--> $DIR/projection-no-regions-closure.rs:25:31 --> $DIR/projection-no-regions-closure.rs:25:31
| |
LL | fn no_region<'a, T>(x: Box<T>) -> Box<dyn Anything + 'a>
| -- the associated type `<T as Iterator>::Item` must be valid for the lifetime `'a` as defined here...
...
LL | with_signature(x, |mut y| Box::new(y.next())) LL | with_signature(x, |mut y| Box::new(y.next()))
| ^^^^^^^^^^^^^^^^^^ ...so that the type `<T as Iterator>::Item` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^^^ ...so that the type `<T as Iterator>::Item` will meet its required lifetime bounds
| |
@ -84,6 +87,9 @@ LL | | T: 'b + Iterator,
error[E0309]: the associated type `<T as Iterator>::Item` may not live long enough error[E0309]: the associated type `<T as Iterator>::Item` may not live long enough
--> $DIR/projection-no-regions-closure.rs:42:31 --> $DIR/projection-no-regions-closure.rs:42:31
| |
LL | fn wrong_region<'a, 'b, T>(x: Box<T>) -> Box<dyn Anything + 'a>
| -- the associated type `<T as Iterator>::Item` must be valid for the lifetime `'a` as defined here...
...
LL | with_signature(x, |mut y| Box::new(y.next())) LL | with_signature(x, |mut y| Box::new(y.next()))
| ^^^^^^^^^^^^^^^^^^ ...so that the type `<T as Iterator>::Item` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^^^ ...so that the type `<T as Iterator>::Item` will meet its required lifetime bounds
| |

View File

@ -1,6 +1,9 @@
error[E0309]: the associated type `<T as Iterator>::Item` may not live long enough error[E0309]: the associated type `<T as Iterator>::Item` may not live long enough
--> $DIR/projection-no-regions-fn.rs:13:5 --> $DIR/projection-no-regions-fn.rs:13:5
| |
LL | fn no_region<'a, T>(mut x: T) -> Box<dyn Anything + 'a>
| -- the associated type `<T as Iterator>::Item` must be valid for the lifetime `'a` as defined here...
...
LL | Box::new(x.next()) LL | Box::new(x.next())
| ^^^^^^^^^^^^^^^^^^ ...so that the type `<T as Iterator>::Item` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^^^ ...so that the type `<T as Iterator>::Item` will meet its required lifetime bounds
| |
@ -12,6 +15,9 @@ LL | T: Iterator, <T as Iterator>::Item: 'a
error[E0309]: the associated type `<T as Iterator>::Item` may not live long enough error[E0309]: the associated type `<T as Iterator>::Item` may not live long enough
--> $DIR/projection-no-regions-fn.rs:28:5 --> $DIR/projection-no-regions-fn.rs:28:5
| |
LL | fn wrong_region<'a, 'b, T>(mut x: T) -> Box<dyn Anything + 'a>
| -- the associated type `<T as Iterator>::Item` must be valid for the lifetime `'a` as defined here...
...
LL | Box::new(x.next()) LL | Box::new(x.next())
| ^^^^^^^^^^^^^^^^^^ ...so that the type `<T as Iterator>::Item` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^^^ ...so that the type `<T as Iterator>::Item` will meet its required lifetime bounds
| |

View File

@ -27,6 +27,9 @@ LL | | T: Anything<'b>,
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/projection-one-region-closure.rs:45:39 --> $DIR/projection-one-region-closure.rs:45:39
| |
LL | fn no_relationships_late<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
...
LL | with_signature(cell, t, |cell, t| require(cell, t)); LL | with_signature(cell, t, |cell, t| require(cell, t));
| ^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
| |
@ -77,6 +80,9 @@ LL | | 'a: 'a,
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/projection-one-region-closure.rs:56:39 --> $DIR/projection-one-region-closure.rs:56:39
| |
LL | fn no_relationships_early<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
...
LL | with_signature(cell, t, |cell, t| require(cell, t)); LL | with_signature(cell, t, |cell, t| require(cell, t));
| ^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
| |

View File

@ -26,11 +26,13 @@ LL | | T: Anything<'b, 'c>,
error[E0309]: the associated type `<T as Anything<'?5, '?6>>::AssocType` may not live long enough error[E0309]: the associated type `<T as Anything<'?5, '?6>>::AssocType` may not live long enough
--> $DIR/projection-two-region-trait-bound-closure.rs:38:39 --> $DIR/projection-two-region-trait-bound-closure.rs:38:39
| |
LL | fn no_relationships_late<'a, 'b, 'c, T>(cell: Cell<&'a ()>, t: T)
| -- the associated type `<T as Anything<'?5, '?6>>::AssocType` must be valid for the lifetime `'a` as defined here...
...
LL | with_signature(cell, t, |cell, t| require(cell, t)); LL | with_signature(cell, t, |cell, t| require(cell, t));
| ^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^ ...so that the type `<T as Anything<'?5, '?6>>::AssocType` will meet its required lifetime bounds
| |
= help: consider adding an explicit lifetime bound `<T as Anything<'?5, '?6>>::AssocType: 'a`... = help: consider adding an explicit lifetime bound `<T as Anything<'?5, '?6>>::AssocType: 'a`...
= note: ...so that the type `<T as Anything<'?5, '?6>>::AssocType` will meet its required lifetime bounds
note: external requirements note: external requirements
--> $DIR/projection-two-region-trait-bound-closure.rs:48:29 --> $DIR/projection-two-region-trait-bound-closure.rs:48:29
@ -60,11 +62,13 @@ LL | | 'a: 'a,
error[E0309]: the associated type `<T as Anything<'?6, '?7>>::AssocType` may not live long enough error[E0309]: the associated type `<T as Anything<'?6, '?7>>::AssocType` may not live long enough
--> $DIR/projection-two-region-trait-bound-closure.rs:48:39 --> $DIR/projection-two-region-trait-bound-closure.rs:48:39
| |
LL | fn no_relationships_early<'a, 'b, 'c, T>(cell: Cell<&'a ()>, t: T)
| -- the associated type `<T as Anything<'?6, '?7>>::AssocType` must be valid for the lifetime `'a` as defined here...
...
LL | with_signature(cell, t, |cell, t| require(cell, t)); LL | with_signature(cell, t, |cell, t| require(cell, t));
| ^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^ ...so that the type `<T as Anything<'?6, '?7>>::AssocType` will meet its required lifetime bounds
| |
= help: consider adding an explicit lifetime bound `<T as Anything<'?6, '?7>>::AssocType: 'a`... = help: consider adding an explicit lifetime bound `<T as Anything<'?6, '?7>>::AssocType: 'a`...
= note: ...so that the type `<T as Anything<'?6, '?7>>::AssocType` will meet its required lifetime bounds
note: external requirements note: external requirements
--> $DIR/projection-two-region-trait-bound-closure.rs:61:29 --> $DIR/projection-two-region-trait-bound-closure.rs:61:29

View File

@ -1,11 +1,13 @@
error[E0309]: the associated type `<T as MyTrait<'_>>::Output` may not live long enough error[E0309]: the associated type `<T as MyTrait<'_>>::Output` may not live long enough
--> $DIR/projection-where-clause-env-wrong-bound.rs:15:5 --> $DIR/projection-where-clause-env-wrong-bound.rs:15:5
| |
LL | fn foo1<'a, 'b, T>() -> &'a ()
| -- the associated type `<T as MyTrait<'_>>::Output` must be valid for the lifetime `'a` as defined here...
...
LL | bar::<T::Output>() LL | bar::<T::Output>()
| ^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^ ...so that the type `<T as MyTrait<'_>>::Output` will meet its required lifetime bounds
| |
= help: consider adding an explicit lifetime bound `<T as MyTrait<'_>>::Output: 'a`... = help: consider adding an explicit lifetime bound `<T as MyTrait<'_>>::Output: 'a`...
= note: ...so that the type `<T as MyTrait<'_>>::Output` will meet its required lifetime bounds
error: aborting due to previous error error: aborting due to previous error

View File

@ -1,11 +1,13 @@
error[E0309]: the associated type `<T as MyTrait<'_>>::Output` may not live long enough error[E0309]: the associated type `<T as MyTrait<'_>>::Output` may not live long enough
--> $DIR/projection-where-clause-env-wrong-lifetime.rs:14:5 --> $DIR/projection-where-clause-env-wrong-lifetime.rs:14:5
| |
LL | fn foo1<'a, 'b, T>() -> &'a ()
| -- the associated type `<T as MyTrait<'_>>::Output` must be valid for the lifetime `'a` as defined here...
...
LL | bar::<<T as MyTrait<'a>>::Output>() LL | bar::<<T as MyTrait<'a>>::Output>()
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...so that the type `<T as MyTrait<'_>>::Output` will meet its required lifetime bounds
| |
= help: consider adding an explicit lifetime bound `<T as MyTrait<'_>>::Output: 'a`... = help: consider adding an explicit lifetime bound `<T as MyTrait<'_>>::Output: 'a`...
= note: ...so that the type `<T as MyTrait<'_>>::Output` will meet its required lifetime bounds
error: aborting due to previous error error: aborting due to previous error

View File

@ -1,6 +1,9 @@
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/projection-where-clause-none.rs:14:5 --> $DIR/projection-where-clause-none.rs:14:5
| |
LL | fn foo<'a, T>() -> &'a ()
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
...
LL | bar::<T::Output>() LL | bar::<T::Output>()
| ^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
| |

View File

@ -46,6 +46,8 @@ LL | fn generic_fail<'a, T>(cell: Cell<&'a ()>, value: T) {
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/ty-param-closure-approximate-lower-bound.rs:29:31 --> $DIR/ty-param-closure-approximate-lower-bound.rs:29:31
| |
LL | fn generic_fail<'a, T>(cell: Cell<&'a ()>, value: T) {
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
LL | twice(cell, value, |a, b| invoke(a, b)); LL | twice(cell, value, |a, b| invoke(a, b));
| ^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
| |

View File

@ -25,6 +25,9 @@ LL | | T: Debug,
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/ty-param-closure-outlives-from-return-type.rs:26:27 --> $DIR/ty-param-closure-outlives-from-return-type.rs:26:27
| |
LL | fn no_region<'a, T>(x: Box<T>) -> Box<dyn Debug + 'a>
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
...
LL | with_signature(x, |y| y) LL | with_signature(x, |y| y)
| ^ ...so that the type `T` will meet its required lifetime bounds | ^ ...so that the type `T` will meet its required lifetime bounds
| |
@ -36,6 +39,9 @@ LL | T: Debug + 'a,
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/ty-param-closure-outlives-from-return-type.rs:41:5 --> $DIR/ty-param-closure-outlives-from-return-type.rs:41:5
| |
LL | fn wrong_region<'a, 'b, T>(x: Box<T>) -> Box<Debug + 'a>
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
...
LL | x LL | x
| ^ ...so that the type `T` will meet its required lifetime bounds | ^ ...so that the type `T` will meet its required lifetime bounds
| |

View File

@ -24,6 +24,9 @@ LL | fn no_region<'a, T>(a: Cell<&'a ()>, b: T) {
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/ty-param-closure-outlives-from-where-clause.rs:32:9 --> $DIR/ty-param-closure-outlives-from-where-clause.rs:32:9
| |
LL | fn no_region<'a, T>(a: Cell<&'a ()>, b: T) {
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
...
LL | require(&x, &y) LL | require(&x, &y)
| ^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
| |
@ -84,6 +87,9 @@ LL | | T: 'b,
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/ty-param-closure-outlives-from-where-clause.rs:65:9 --> $DIR/ty-param-closure-outlives-from-where-clause.rs:65:9
| |
LL | fn wrong_region<'a, 'b, T>(a: Cell<&'a ()>, b: T)
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
...
LL | require(&x, &y) LL | require(&x, &y)
| ^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
| |

View File

@ -1,6 +1,8 @@
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/ty-param-fn-body.rs:17:5 --> $DIR/ty-param-fn-body.rs:17:5
| |
LL | fn region_static<'a, T>(cell: Cell<&'a usize>, t: T) {
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
LL | outlives(cell, t) LL | outlives(cell, t)
| ^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
| |

View File

@ -1,6 +1,9 @@
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/ty-param-fn.rs:9:5 --> $DIR/ty-param-fn.rs:9:5
| |
LL | fn no_region<'a, T>(x: Box<T>) -> Box<Debug + 'a>
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
...
LL | x LL | x
| ^ ...so that the type `T` will meet its required lifetime bounds | ^ ...so that the type `T` will meet its required lifetime bounds
| |
@ -12,6 +15,9 @@ LL | T: Debug + 'a,
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/ty-param-fn.rs:24:5 --> $DIR/ty-param-fn.rs:24:5
| |
LL | fn wrong_region<'a, 'b, T>(x: Box<T>) -> Box<Debug + 'a>
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
...
LL | x LL | x
| ^ ...so that the type `T` will meet its required lifetime bounds | ^ ...so that the type `T` will meet its required lifetime bounds
| |

View File

@ -2,7 +2,10 @@ error[E0310]: the parameter type `A` may not live long enough
--> $DIR/normalization-infer.rs:11:12 --> $DIR/normalization-infer.rs:11:12
| |
LL | let _: <(_,) as Tr>::Ty = a; LL | let _: <(_,) as Tr>::Ty = a;
| ^^^^^^^^^^^^^^^^ ...so that the type `A` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^
| |
| the parameter type `A` must be valid for the static lifetime...
| ...so that the type `A` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
@ -13,7 +16,10 @@ error[E0310]: the parameter type `B` may not live long enough
--> $DIR/normalization-infer.rs:12:5 --> $DIR/normalization-infer.rs:12:5
| |
LL | Some::<<(_,) as Tr>::Ty>(b); LL | Some::<<(_,) as Tr>::Ty>(b);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...so that the type `B` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| the parameter type `B` must be valid for the static lifetime...
| ...so that the type `B` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
@ -24,7 +30,10 @@ error[E0310]: the parameter type `C` may not live long enough
--> $DIR/normalization-infer.rs:13:11 --> $DIR/normalization-infer.rs:13:11
| |
LL | || -> <(_,) as Tr>::Ty { c }; LL | || -> <(_,) as Tr>::Ty { c };
| ^^^^^^^^^^^^^^^^ ...so that the type `C` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^
| |
| the parameter type `C` must be valid for the static lifetime...
| ...so that the type `C` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
@ -35,7 +44,10 @@ error[E0310]: the parameter type `D` may not live long enough
--> $DIR/normalization-infer.rs:14:6 --> $DIR/normalization-infer.rs:14:6
| |
LL | |d: <(_,) as Tr>::Ty| -> D { d }; LL | |d: <(_,) as Tr>::Ty| -> D { d };
| ^ ...so that the type `D` will meet its required lifetime bounds | ^
| |
| the parameter type `D` must be valid for the static lifetime...
| ...so that the type `D` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
@ -46,7 +58,10 @@ error[E0310]: the parameter type `A` may not live long enough
--> $DIR/normalization-infer.rs:28:12 --> $DIR/normalization-infer.rs:28:12
| |
LL | let _: Alias<_, _> = (a, 0u8); LL | let _: Alias<_, _> = (a, 0u8);
| ^^^^^^^^^^^ ...so that the type `A` will meet its required lifetime bounds | ^^^^^^^^^^^
| |
| the parameter type `A` must be valid for the static lifetime...
| ...so that the type `A` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
@ -57,7 +72,10 @@ error[E0310]: the parameter type `B` may not live long enough
--> $DIR/normalization-infer.rs:29:5 --> $DIR/normalization-infer.rs:29:5
| |
LL | Some::<Alias<_, _>>((b, 0u8)); LL | Some::<Alias<_, _>>((b, 0u8));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...so that the type `B` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| the parameter type `B` must be valid for the static lifetime...
| ...so that the type `B` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
@ -68,7 +86,10 @@ error[E0310]: the parameter type `C` may not live long enough
--> $DIR/normalization-infer.rs:30:11 --> $DIR/normalization-infer.rs:30:11
| |
LL | || -> Alias<_, _> { (c, 0u8) }; LL | || -> Alias<_, _> { (c, 0u8) };
| ^^^^^^^^^^^ ...so that the type `C` will meet its required lifetime bounds | ^^^^^^^^^^^
| |
| the parameter type `C` must be valid for the static lifetime...
| ...so that the type `C` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |

View File

@ -1,17 +1,11 @@
error[E0311]: the parameter type `Self` may not live long enough error[E0311]: the parameter type `Self` may not live long enough
| |
note: the parameter type `Self` must be valid for the lifetime `'a` as defined here...
--> $DIR/object-safety-supertrait-mentions-GAT.rs:9:26
|
LL | trait SuperTrait<T>: for<'a> GatTrait<Gat<'a> = T> {
| ^^
= help: consider adding an explicit lifetime bound `Self: 'a`...
= note: ...so that the type `Self` will meet its required lifetime bounds...
note: ...that is required by this bound note: ...that is required by this bound
--> $DIR/object-safety-supertrait-mentions-GAT.rs:6:15 --> $DIR/object-safety-supertrait-mentions-GAT.rs:6:15
| |
LL | Self: 'a; LL | Self: 'a;
| ^^ | ^^
= help: consider adding an explicit lifetime bound `Self: 'a`...
error: associated item referring to unboxed trait object for its own trait error: associated item referring to unboxed trait object for its own trait
--> $DIR/object-safety-supertrait-mentions-GAT.rs:10:20 --> $DIR/object-safety-supertrait-mentions-GAT.rs:10:20

View File

@ -3,27 +3,33 @@ error[E0310]: the associated type `<impl Iterator as Iterator>::Item` may not li
| |
LL | assert_static(opaque(async move { t; }).next()); LL | assert_static(opaque(async move { t; }).next());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| the associated type `<impl Iterator as Iterator>::Item` must be valid for the static lifetime...
| ...so that the type `<impl Iterator as Iterator>::Item` will meet its required lifetime bounds
| |
= help: consider adding an explicit lifetime bound `<impl Iterator as Iterator>::Item: 'static`... = help: consider adding an explicit lifetime bound `<impl Iterator as Iterator>::Item: 'static`...
= note: ...so that the type `<impl Iterator as Iterator>::Item` will meet its required lifetime bounds
error[E0310]: the associated type `<impl Iterator as Iterator>::Item` may not live long enough error[E0310]: the associated type `<impl Iterator as Iterator>::Item` may not live long enough
--> $DIR/closure-in-projection-issue-97405.rs:26:5 --> $DIR/closure-in-projection-issue-97405.rs:26:5
| |
LL | assert_static(opaque(move || { t; }).next()); LL | assert_static(opaque(move || { t; }).next());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| the associated type `<impl Iterator as Iterator>::Item` must be valid for the static lifetime...
| ...so that the type `<impl Iterator as Iterator>::Item` will meet its required lifetime bounds
| |
= help: consider adding an explicit lifetime bound `<impl Iterator as Iterator>::Item: 'static`... = help: consider adding an explicit lifetime bound `<impl Iterator as Iterator>::Item: 'static`...
= note: ...so that the type `<impl Iterator as Iterator>::Item` will meet its required lifetime bounds
error[E0310]: the associated type `<impl Iterator as Iterator>::Item` may not live long enough error[E0310]: the associated type `<impl Iterator as Iterator>::Item` may not live long enough
--> $DIR/closure-in-projection-issue-97405.rs:28:5 --> $DIR/closure-in-projection-issue-97405.rs:28:5
| |
LL | assert_static(opaque(opaque(async move { t; }).next()).next()); LL | assert_static(opaque(opaque(async move { t; }).next()).next());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| the associated type `<impl Iterator as Iterator>::Item` must be valid for the static lifetime...
| ...so that the type `<impl Iterator as Iterator>::Item` will meet its required lifetime bounds
| |
= help: consider adding an explicit lifetime bound `<impl Iterator as Iterator>::Item: 'static`... = help: consider adding an explicit lifetime bound `<impl Iterator as Iterator>::Item: 'static`...
= note: ...so that the type `<impl Iterator as Iterator>::Item` will meet its required lifetime bounds
error: aborting due to 3 previous errors error: aborting due to 3 previous errors

View File

@ -2,7 +2,10 @@ error[E0310]: the associated type `<T as Iter>::Item` may not live long enough
--> $DIR/regions-close-associated-type-into-object.rs:15:5 --> $DIR/regions-close-associated-type-into-object.rs:15:5
| |
LL | Box::new(item) LL | Box::new(item)
| ^^^^^^^^^^^^^^ ...so that the type `<T as Iter>::Item` will meet its required lifetime bounds | ^^^^^^^^^^^^^^
| |
| the associated type `<T as Iter>::Item` must be valid for the static lifetime...
| ...so that the type `<T as Iter>::Item` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
@ -13,7 +16,10 @@ error[E0310]: the associated type `<T as Iter>::Item` may not live long enough
--> $DIR/regions-close-associated-type-into-object.rs:22:5 --> $DIR/regions-close-associated-type-into-object.rs:22:5
| |
LL | Box::new(item) LL | Box::new(item)
| ^^^^^^^^^^^^^^ ...so that the type `<T as Iter>::Item` will meet its required lifetime bounds | ^^^^^^^^^^^^^^
| |
| the associated type `<T as Iter>::Item` must be valid for the static lifetime...
| ...so that the type `<T as Iter>::Item` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
@ -23,6 +29,9 @@ LL | where Box<T::Item> : X, <T as Iter>::Item: 'static
error[E0309]: the associated type `<T as Iter>::Item` may not live long enough error[E0309]: the associated type `<T as Iter>::Item` may not live long enough
--> $DIR/regions-close-associated-type-into-object.rs:28:5 --> $DIR/regions-close-associated-type-into-object.rs:28:5
| |
LL | fn bad3<'a, T: Iter>(v: T) -> Box<dyn X + 'a>
| -- the associated type `<T as Iter>::Item` must be valid for the lifetime `'a` as defined here...
...
LL | Box::new(item) LL | Box::new(item)
| ^^^^^^^^^^^^^^ ...so that the type `<T as Iter>::Item` will meet its required lifetime bounds | ^^^^^^^^^^^^^^ ...so that the type `<T as Iter>::Item` will meet its required lifetime bounds
| |
@ -34,6 +43,9 @@ LL | fn bad3<'a, T: Iter>(v: T) -> Box<dyn X + 'a> where <T as Iter>::Item: 'a
error[E0309]: the associated type `<T as Iter>::Item` may not live long enough error[E0309]: the associated type `<T as Iter>::Item` may not live long enough
--> $DIR/regions-close-associated-type-into-object.rs:35:5 --> $DIR/regions-close-associated-type-into-object.rs:35:5
| |
LL | fn bad4<'a, T: Iter>(v: T) -> Box<dyn X + 'a>
| -- the associated type `<T as Iter>::Item` must be valid for the lifetime `'a` as defined here...
...
LL | Box::new(item) LL | Box::new(item)
| ^^^^^^^^^^^^^^ ...so that the type `<T as Iter>::Item` will meet its required lifetime bounds | ^^^^^^^^^^^^^^ ...so that the type `<T as Iter>::Item` will meet its required lifetime bounds
| |

View File

@ -2,7 +2,10 @@ error[E0310]: the parameter type `U` may not live long enough
--> $DIR/regions-close-object-into-object-4.rs:9:5 --> $DIR/regions-close-object-into-object-4.rs:9:5
| |
LL | Box::new(B(&*v)) as Box<dyn X> LL | Box::new(B(&*v)) as Box<dyn X>
| ^^^^^^^^ ...so that the type `U` will meet its required lifetime bounds | ^^^^^^^^
| |
| the parameter type `U` must be valid for the static lifetime...
| ...so that the type `U` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
@ -13,7 +16,10 @@ error[E0310]: the parameter type `U` may not live long enough
--> $DIR/regions-close-object-into-object-4.rs:9:5 --> $DIR/regions-close-object-into-object-4.rs:9:5
| |
LL | Box::new(B(&*v)) as Box<dyn X> LL | Box::new(B(&*v)) as Box<dyn X>
| ^^^^^^^^^^^^^^^^ ...so that the type `U` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^
| |
| the parameter type `U` must be valid for the static lifetime...
| ...so that the type `U` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
@ -24,7 +30,10 @@ error[E0310]: the parameter type `U` may not live long enough
--> $DIR/regions-close-object-into-object-4.rs:9:5 --> $DIR/regions-close-object-into-object-4.rs:9:5
| |
LL | Box::new(B(&*v)) as Box<dyn X> LL | Box::new(B(&*v)) as Box<dyn X>
| ^^^^^^^^^^^^^^^^ ...so that the type `U` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^
| |
| the parameter type `U` must be valid for the static lifetime...
| ...so that the type `U` will meet its required lifetime bounds
| |
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
@ -62,7 +71,10 @@ error[E0310]: the parameter type `U` may not live long enough
--> $DIR/regions-close-object-into-object-4.rs:9:14 --> $DIR/regions-close-object-into-object-4.rs:9:14
| |
LL | Box::new(B(&*v)) as Box<dyn X> LL | Box::new(B(&*v)) as Box<dyn X>
| ^^^^^^ ...so that the type `U` will meet its required lifetime bounds | ^^^^^^
| |
| the parameter type `U` must be valid for the static lifetime...
| ...so that the type `U` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |

View File

@ -2,7 +2,10 @@ error[E0310]: the parameter type `T` may not live long enough
--> $DIR/regions-close-object-into-object-5.rs:17:5 --> $DIR/regions-close-object-into-object-5.rs:17:5
| |
LL | Box::new(B(&*v)) as Box<dyn X> LL | Box::new(B(&*v)) as Box<dyn X>
| ^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^
| |
| the parameter type `T` must be valid for the static lifetime...
| ...so that the type `T` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
@ -13,7 +16,10 @@ error[E0310]: the parameter type `T` may not live long enough
--> $DIR/regions-close-object-into-object-5.rs:17:5 --> $DIR/regions-close-object-into-object-5.rs:17:5
| |
LL | Box::new(B(&*v)) as Box<dyn X> LL | Box::new(B(&*v)) as Box<dyn X>
| ^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^
| |
| the parameter type `T` must be valid for the static lifetime...
| ...so that the type `T` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
@ -24,7 +30,10 @@ error[E0310]: the parameter type `T` may not live long enough
--> $DIR/regions-close-object-into-object-5.rs:17:5 --> $DIR/regions-close-object-into-object-5.rs:17:5
| |
LL | Box::new(B(&*v)) as Box<dyn X> LL | Box::new(B(&*v)) as Box<dyn X>
| ^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^
| |
| the parameter type `T` must be valid for the static lifetime...
| ...so that the type `T` will meet its required lifetime bounds
| |
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no` = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
@ -45,7 +54,10 @@ error[E0310]: the parameter type `T` may not live long enough
--> $DIR/regions-close-object-into-object-5.rs:17:14 --> $DIR/regions-close-object-into-object-5.rs:17:14
| |
LL | Box::new(B(&*v)) as Box<dyn X> LL | Box::new(B(&*v)) as Box<dyn X>
| ^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^
| |
| the parameter type `T` must be valid for the static lifetime...
| ...so that the type `T` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |

View File

@ -2,7 +2,10 @@ error[E0310]: the parameter type `A` may not live long enough
--> $DIR/regions-close-over-type-parameter-1.rs:11:5 --> $DIR/regions-close-over-type-parameter-1.rs:11:5
| |
LL | Box::new(v) as Box<dyn SomeTrait + 'static> LL | Box::new(v) as Box<dyn SomeTrait + 'static>
| ^^^^^^^^^^^ ...so that the type `A` will meet its required lifetime bounds | ^^^^^^^^^^^
| |
| the parameter type `A` must be valid for the static lifetime...
| ...so that the type `A` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
@ -12,6 +15,8 @@ LL | fn make_object1<A: SomeTrait + 'static>(v: A) -> Box<dyn SomeTrait + 'stati
error[E0309]: the parameter type `A` may not live long enough error[E0309]: the parameter type `A` may not live long enough
--> $DIR/regions-close-over-type-parameter-1.rs:20:5 --> $DIR/regions-close-over-type-parameter-1.rs:20:5
| |
LL | fn make_object3<'a, 'b, A: SomeTrait + 'a>(v: A) -> Box<dyn SomeTrait + 'b> {
| -- the parameter type `A` must be valid for the lifetime `'b` as defined here...
LL | Box::new(v) as Box<dyn SomeTrait + 'b> LL | Box::new(v) as Box<dyn SomeTrait + 'b>
| ^^^^^^^^^^^ ...so that the type `A` will meet its required lifetime bounds | ^^^^^^^^^^^ ...so that the type `A` will meet its required lifetime bounds
| |

View File

@ -2,7 +2,10 @@ error[E0310]: the parameter type `T` may not live long enough
--> $DIR/regions-close-param-into-object.rs:6:5 --> $DIR/regions-close-param-into-object.rs:6:5
| |
LL | Box::new(v) LL | Box::new(v)
| ^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^
| |
| the parameter type `T` must be valid for the static lifetime...
| ...so that the type `T` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
@ -13,7 +16,10 @@ error[E0310]: the parameter type `T` may not live long enough
--> $DIR/regions-close-param-into-object.rs:12:5 --> $DIR/regions-close-param-into-object.rs:12:5
| |
LL | Box::new(v) LL | Box::new(v)
| ^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^
| |
| the parameter type `T` must be valid for the static lifetime...
| ...so that the type `T` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
@ -23,6 +29,9 @@ LL | fn p2<T: 'static>(v: Box<T>) -> Box<dyn X + 'static>
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/regions-close-param-into-object.rs:18:5 --> $DIR/regions-close-param-into-object.rs:18:5
| |
LL | fn p3<'a,T>(v: T) -> Box<dyn X + 'a>
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
...
LL | Box::new(v) LL | Box::new(v)
| ^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
| |
@ -34,6 +43,9 @@ LL | where T : X + 'a
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/regions-close-param-into-object.rs:24:5 --> $DIR/regions-close-param-into-object.rs:24:5
| |
LL | fn p4<'a,T>(v: Box<T>) -> Box<dyn X + 'a>
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
...
LL | Box::new(v) LL | Box::new(v)
| ^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
| |

View File

@ -1,6 +1,9 @@
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/regions-implied-bounds-projection-gap-1.rs:16:5 --> $DIR/regions-implied-bounds-projection-gap-1.rs:16:5
| |
LL | fn func<'x, T:Trait1<'x>>(t: &'x T::Foo)
| -- the parameter type `T` must be valid for the lifetime `'x` as defined here...
LL | {
LL | wf::<&'x T>(); LL | wf::<&'x T>();
| ^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
| |

View File

@ -1,6 +1,9 @@
error[E0309]: the parameter type `Self` may not live long enough error[E0309]: the parameter type `Self` may not live long enough
--> $DIR/regions-infer-bound-from-trait-self.rs:46:9 --> $DIR/regions-infer-bound-from-trait-self.rs:46:9
| |
LL | trait InheritsFromNothing<'a> : Sized {
| -- the parameter type `Self` must be valid for the lifetime `'a` as defined here...
LL | fn foo(self, x: Inv<'a>) {
LL | check_bound(x, self) LL | check_bound(x, self)
| ^^^^^^^^^^^^^^^^^^^^ ...so that the type `Self` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^^^^^ ...so that the type `Self` will meet its required lifetime bounds
| |

View File

@ -1,6 +1,8 @@
error[E0309]: the parameter type `A` may not live long enough error[E0309]: the parameter type `A` may not live long enough
--> $DIR/regions-infer-bound-from-trait.rs:33:5 --> $DIR/regions-infer-bound-from-trait.rs:33:5
| |
LL | fn bar1<'a,A>(x: Inv<'a>, a: A) {
| -- the parameter type `A` must be valid for the lifetime `'a` as defined here...
LL | check_bound(x, a) LL | check_bound(x, a)
| ^^^^^^^^^^^^^^^^^ ...so that the type `A` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^^ ...so that the type `A` will meet its required lifetime bounds
| |
@ -12,6 +14,8 @@ LL | fn bar1<'a,A: 'a>(x: Inv<'a>, a: A) {
error[E0309]: the parameter type `A` may not live long enough error[E0309]: the parameter type `A` may not live long enough
--> $DIR/regions-infer-bound-from-trait.rs:37:5 --> $DIR/regions-infer-bound-from-trait.rs:37:5
| |
LL | fn bar2<'a,'b,A:Is<'b>>(x: Inv<'a>, y: Inv<'b>, a: A) {
| -- the parameter type `A` must be valid for the lifetime `'a` as defined here...
LL | check_bound(x, a) LL | check_bound(x, a)
| ^^^^^^^^^^^^^^^^^ ...so that the type `A` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^^ ...so that the type `A` will meet its required lifetime bounds
| |

View File

@ -2,7 +2,10 @@ error[E0310]: the parameter type `U` may not live long enough
--> $DIR/dont-infer-static.rs:6:10 --> $DIR/dont-infer-static.rs:6:10
| |
LL | bar: Bar<U> LL | bar: Bar<U>
| ^^^^^^ ...so that the type `U` will meet its required lifetime bounds... | ^^^^^^
| |
| the parameter type `U` must be valid for the static lifetime...
| ...so that the type `U` will meet its required lifetime bounds...
| |
note: ...that is required by this bound note: ...that is required by this bound
--> $DIR/dont-infer-static.rs:8:15 --> $DIR/dont-infer-static.rs:8:15

View File

@ -1,6 +1,8 @@
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/regions-enum-not-wf.rs:17:18 --> $DIR/regions-enum-not-wf.rs:17:18
| |
LL | enum Ref1<'a, T> {
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
LL | Ref1Variant1(RequireOutlives<'a, T>), LL | Ref1Variant1(RequireOutlives<'a, T>),
| ^^^^^^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
| |
@ -12,6 +14,9 @@ LL | enum Ref1<'a, T: 'a> {
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/regions-enum-not-wf.rs:22:25 --> $DIR/regions-enum-not-wf.rs:22:25
| |
LL | enum Ref2<'a, T> {
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
LL | Ref2Variant1,
LL | Ref2Variant2(isize, RequireOutlives<'a, T>), LL | Ref2Variant2(isize, RequireOutlives<'a, T>),
| ^^^^^^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
| |
@ -23,6 +28,8 @@ LL | enum Ref2<'a, T: 'a> {
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/regions-enum-not-wf.rs:35:23 --> $DIR/regions-enum-not-wf.rs:35:23
| |
LL | enum RefDouble<'a, 'b, T> {
| -- the parameter type `T` must be valid for the lifetime `'b` as defined here...
LL | RefDoubleVariant1(&'a RequireOutlives<'b, T>), LL | RefDoubleVariant1(&'a RequireOutlives<'b, T>),
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
| |

View File

@ -1,6 +1,8 @@
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/regions-struct-not-wf.rs:13:16 --> $DIR/regions-struct-not-wf.rs:13:16
| |
LL | impl<'a, T> Trait<'a, T> for usize {
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
LL | type Out = &'a T; LL | type Out = &'a T;
| ^^^^^ ...so that the reference type `&'a T` does not outlive the data it points at | ^^^^^ ...so that the reference type `&'a T` does not outlive the data it points at
| |
@ -12,6 +14,8 @@ LL | impl<'a, T: 'a> Trait<'a, T> for usize {
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/regions-struct-not-wf.rs:21:16 --> $DIR/regions-struct-not-wf.rs:21:16
| |
LL | impl<'a, T> Trait<'a, T> for u32 {
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
LL | type Out = RefOk<'a, T>; LL | type Out = RefOk<'a, T>;
| ^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds... | ^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds...
| |

View File

@ -10,7 +10,8 @@ fn foo<'a>(d: impl Sized + 'a, p: &'a mut ()) -> impl Sized + 'a { //~ NOTE the
} }
fn foo1<'b>(d: impl Sized + 'b, p: &'b mut ()) -> impl Sized + '_ { fn foo1<'b>(d: impl Sized + 'b, p: &'b mut ()) -> impl Sized + '_ {
//~^ HELP consider adding an explicit lifetime bound... //~^ NOTE the parameter type `impl Sized` must be valid for the lifetime `'b` as defined here...
//~| HELP consider adding an explicit lifetime bound...
(d, p) //~ NOTE ...so that the type `impl Sized` will meet its required lifetime bounds (d, p) //~ NOTE ...so that the type `impl Sized` will meet its required lifetime bounds
//~^ ERROR the parameter type `impl Sized` may not live long enough //~^ ERROR the parameter type `impl Sized` may not live long enough
} }
@ -30,7 +31,8 @@ fn bar<'a, T : Sized + 'a>(d: T, p: &'a mut ()) -> impl Sized + 'a { //~ NOTE t
} }
fn bar1<'b, T : Sized + 'b>(d: T, p: &'b mut ()) -> impl Sized + '_ { fn bar1<'b, T : Sized + 'b>(d: T, p: &'b mut ()) -> impl Sized + '_ {
//~^ HELP consider adding an explicit lifetime bound... //~^ NOTE the parameter type `T` must be valid for the lifetime `'b` as defined here...
//~| HELP consider adding an explicit lifetime bound...
(d, p) //~ NOTE ...so that the type `T` will meet its required lifetime bounds (d, p) //~ NOTE ...so that the type `T` will meet its required lifetime bounds
//~^ ERROR the parameter type `T` may not live long enough //~^ ERROR the parameter type `T` may not live long enough
} }

View File

@ -10,7 +10,8 @@ fn foo(d: impl Sized, p: &mut ()) -> impl Sized + '_ { //~ NOTE the parameter ty
} }
fn foo1<'b>(d: impl Sized, p: &'b mut ()) -> impl Sized + '_ { fn foo1<'b>(d: impl Sized, p: &'b mut ()) -> impl Sized + '_ {
//~^ HELP consider adding an explicit lifetime bound... //~^ NOTE the parameter type `impl Sized` must be valid for the lifetime `'b` as defined here...
//~| HELP consider adding an explicit lifetime bound...
(d, p) //~ NOTE ...so that the type `impl Sized` will meet its required lifetime bounds (d, p) //~ NOTE ...so that the type `impl Sized` will meet its required lifetime bounds
//~^ ERROR the parameter type `impl Sized` may not live long enough //~^ ERROR the parameter type `impl Sized` may not live long enough
} }
@ -30,7 +31,8 @@ fn bar<T : Sized>(d: T, p: & mut ()) -> impl Sized + '_ { //~ NOTE the parameter
} }
fn bar1<'b, T : Sized>(d: T, p: &'b mut ()) -> impl Sized + '_ { fn bar1<'b, T : Sized>(d: T, p: &'b mut ()) -> impl Sized + '_ {
//~^ HELP consider adding an explicit lifetime bound... //~^ NOTE the parameter type `T` must be valid for the lifetime `'b` as defined here...
//~| HELP consider adding an explicit lifetime bound...
(d, p) //~ NOTE ...so that the type `T` will meet its required lifetime bounds (d, p) //~ NOTE ...so that the type `T` will meet its required lifetime bounds
//~^ ERROR the parameter type `T` may not live long enough //~^ ERROR the parameter type `T` may not live long enough
} }

View File

@ -1,27 +1,23 @@
error[E0311]: the parameter type `impl Sized` may not live long enough error[E0311]: the parameter type `impl Sized` may not live long enough
--> $DIR/issue-105544.rs:7:5 --> $DIR/issue-105544.rs:7:5
| |
LL | (d, p)
| ^^^^^^
|
note: the parameter type `impl Sized` must be valid for the anonymous lifetime defined here...
--> $DIR/issue-105544.rs:5:26
|
LL | fn foo(d: impl Sized, p: &mut ()) -> impl Sized + '_ { LL | fn foo(d: impl Sized, p: &mut ()) -> impl Sized + '_ {
| ^^^^^^^ | ------- the parameter type `impl Sized` must be valid for the anonymous lifetime defined here...
note: ...so that the type `impl Sized` will meet its required lifetime bounds LL |
--> $DIR/issue-105544.rs:7:5
|
LL | (d, p) LL | (d, p)
| ^^^^^^ | ^^^^^^ ...so that the type `impl Sized` will meet its required lifetime bounds
|
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
LL | fn foo<'a>(d: impl Sized + 'a, p: &'a mut ()) -> impl Sized + 'a { LL | fn foo<'a>(d: impl Sized + 'a, p: &'a mut ()) -> impl Sized + 'a {
| ++++ ++++ ++ ~~ | ++++ ++++ ++ ~~
error[E0309]: the parameter type `impl Sized` may not live long enough error[E0309]: the parameter type `impl Sized` may not live long enough
--> $DIR/issue-105544.rs:14:5 --> $DIR/issue-105544.rs:15:5
| |
LL | fn foo1<'b>(d: impl Sized, p: &'b mut ()) -> impl Sized + '_ {
| -- the parameter type `impl Sized` must be valid for the lifetime `'b` as defined here...
...
LL | (d, p) LL | (d, p)
| ^^^^^^ ...so that the type `impl Sized` will meet its required lifetime bounds | ^^^^^^ ...so that the type `impl Sized` will meet its required lifetime bounds
| |
@ -31,50 +27,39 @@ LL | fn foo1<'b>(d: impl Sized + 'b, p: &'b mut ()) -> impl Sized + '_ {
| ++++ | ++++
error[E0311]: the parameter type `impl Sized + 'a` may not live long enough error[E0311]: the parameter type `impl Sized + 'a` may not live long enough
--> $DIR/issue-105544.rs:20:5 --> $DIR/issue-105544.rs:21:5
|
LL | (d, p)
| ^^^^^^
|
note: the parameter type `impl Sized + 'a` must be valid for the anonymous lifetime defined here...
--> $DIR/issue-105544.rs:18:36
| |
LL | fn foo2<'a>(d: impl Sized + 'a, p: &mut ()) -> impl Sized + '_ { LL | fn foo2<'a>(d: impl Sized + 'a, p: &mut ()) -> impl Sized + '_ {
| ^^^^^^^ | ------- the parameter type `impl Sized + 'a` must be valid for the anonymous lifetime defined here...
note: ...so that the type `impl Sized + 'a` will meet its required lifetime bounds LL |
--> $DIR/issue-105544.rs:20:5
|
LL | (d, p) LL | (d, p)
| ^^^^^^ | ^^^^^^ ...so that the type `impl Sized + 'a` will meet its required lifetime bounds
|
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
LL | fn foo2<'b, 'a>(d: impl Sized + 'a + 'b, p: &'b mut ()) -> impl Sized + 'b { LL | fn foo2<'b, 'a>(d: impl Sized + 'a + 'b, p: &'b mut ()) -> impl Sized + 'b {
| +++ ++++ ++ ~~ | +++ ++++ ++ ~~
error[E0311]: the parameter type `T` may not live long enough error[E0311]: the parameter type `T` may not live long enough
--> $DIR/issue-105544.rs:27:5 --> $DIR/issue-105544.rs:28:5
|
LL | (d, p)
| ^^^^^^
|
note: the parameter type `T` must be valid for the anonymous lifetime defined here...
--> $DIR/issue-105544.rs:25:28
| |
LL | fn bar<T : Sized>(d: T, p: & mut ()) -> impl Sized + '_ { LL | fn bar<T : Sized>(d: T, p: & mut ()) -> impl Sized + '_ {
| ^^^^^^^^ | -------- the parameter type `T` must be valid for the anonymous lifetime defined here...
note: ...so that the type `T` will meet its required lifetime bounds LL |
--> $DIR/issue-105544.rs:27:5
|
LL | (d, p) LL | (d, p)
| ^^^^^^ | ^^^^^^ ...so that the type `T` will meet its required lifetime bounds
|
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
LL | fn bar<'a, T : Sized + 'a>(d: T, p: &'a mut ()) -> impl Sized + 'a { LL | fn bar<'a, T : Sized + 'a>(d: T, p: &'a mut ()) -> impl Sized + 'a {
| +++ ++++ ++ ~~ | +++ ++++ ++ ~~
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/issue-105544.rs:34:5 --> $DIR/issue-105544.rs:36:5
| |
LL | fn bar1<'b, T : Sized>(d: T, p: &'b mut ()) -> impl Sized + '_ {
| -- the parameter type `T` must be valid for the lifetime `'b` as defined here...
...
LL | (d, p) LL | (d, p)
| ^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^ ...so that the type `T` will meet its required lifetime bounds
| |
@ -84,21 +69,14 @@ LL | fn bar1<'b, T : Sized + 'b>(d: T, p: &'b mut ()) -> impl Sized + '_ {
| ++++ | ++++
error[E0311]: the parameter type `T` may not live long enough error[E0311]: the parameter type `T` may not live long enough
--> $DIR/issue-105544.rs:40:5 --> $DIR/issue-105544.rs:42:5
|
LL | (d, p)
| ^^^^^^
|
note: the parameter type `T` must be valid for the anonymous lifetime defined here...
--> $DIR/issue-105544.rs:38:38
| |
LL | fn bar2<'a, T : Sized + 'a>(d: T, p: &mut ()) -> impl Sized + '_ { LL | fn bar2<'a, T : Sized + 'a>(d: T, p: &mut ()) -> impl Sized + '_ {
| ^^^^^^^ | ------- the parameter type `T` must be valid for the anonymous lifetime defined here...
note: ...so that the type `T` will meet its required lifetime bounds LL |
--> $DIR/issue-105544.rs:40:5
|
LL | (d, p) LL | (d, p)
| ^^^^^^ | ^^^^^^ ...so that the type `T` will meet its required lifetime bounds
|
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
LL | fn bar2<'b, 'a, T : Sized + 'a + 'b>(d: T, p: &'b mut ()) -> impl Sized + 'b { LL | fn bar2<'b, 'a, T : Sized + 'a + 'b>(d: T, p: &'b mut ()) -> impl Sized + 'b {

View File

@ -1,25 +1,14 @@
error[E0311]: the parameter type `T` may not live long enough error[E0311]: the parameter type `T` may not live long enough
--> $DIR/missing-lifetimes-in-signature-2.rs:23:5 --> $DIR/missing-lifetimes-in-signature-2.rs:23:5
| |
LL | / foo.bar(move |_| {
LL | |
LL | | t.test();
LL | | });
| |______^
|
note: the parameter type `T` must be valid for the anonymous lifetime defined here...
--> $DIR/missing-lifetimes-in-signature-2.rs:22:38
|
LL | fn func<T: Test>(_dummy: &Foo, foo: &Foo, t: T) { LL | fn func<T: Test>(_dummy: &Foo, foo: &Foo, t: T) {
| ^^^ | --- the parameter type `T` must be valid for the anonymous lifetime defined here...
note: ...so that the type `T` will meet its required lifetime bounds
--> $DIR/missing-lifetimes-in-signature-2.rs:23:5
|
LL | / foo.bar(move |_| { LL | / foo.bar(move |_| {
LL | | LL | |
LL | | t.test(); LL | | t.test();
LL | | }); LL | | });
| |______^ | |______^ ...so that the type `T` will meet its required lifetime bounds
|
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
LL | fn func<'a, T: Test + 'a>(_dummy: &Foo, foo: &Foo<'a>, t: T) { LL | fn func<'a, T: Test + 'a>(_dummy: &Foo, foo: &Foo<'a>, t: T) {

View File

@ -28,25 +28,15 @@ LL | fn foo<G, T>(g: G, dest: &mut T) -> impl FnOnce() + '_
error[E0311]: the parameter type `G` may not live long enough error[E0311]: the parameter type `G` may not live long enough
--> $DIR/missing-lifetimes-in-signature.rs:30:5 --> $DIR/missing-lifetimes-in-signature.rs:30:5
| |
LL | / move || {
LL | |
LL | | *dest = g.get();
LL | | }
| |_____^
|
note: the parameter type `G` must be valid for the anonymous lifetime defined here...
--> $DIR/missing-lifetimes-in-signature.rs:26:26
|
LL | fn bar<G, T>(g: G, dest: &mut T) -> impl FnOnce() + '_ LL | fn bar<G, T>(g: G, dest: &mut T) -> impl FnOnce() + '_
| ^^^^^^ | ------ the parameter type `G` must be valid for the anonymous lifetime defined here...
note: ...so that the type `G` will meet its required lifetime bounds ...
--> $DIR/missing-lifetimes-in-signature.rs:30:5
|
LL | / move || { LL | / move || {
LL | | LL | |
LL | | *dest = g.get(); LL | | *dest = g.get();
LL | | } LL | | }
| |_____^ | |_____^ ...so that the type `G` will meet its required lifetime bounds
|
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
LL ~ fn bar<'a, G, T>(g: G, dest: &'a mut T) -> impl FnOnce() + 'a LL ~ fn bar<'a, G, T>(g: G, dest: &'a mut T) -> impl FnOnce() + 'a
@ -57,25 +47,15 @@ LL ~ G: Get<T> + 'a,
error[E0311]: the parameter type `G` may not live long enough error[E0311]: the parameter type `G` may not live long enough
--> $DIR/missing-lifetimes-in-signature.rs:52:5 --> $DIR/missing-lifetimes-in-signature.rs:52:5
| |
LL | / move || {
LL | |
LL | | *dest = g.get();
LL | | }
| |_____^
|
note: the parameter type `G` must be valid for the anonymous lifetime defined here...
--> $DIR/missing-lifetimes-in-signature.rs:48:34
|
LL | fn qux<'a, G: 'a, T>(g: G, dest: &mut T) -> impl FnOnce() + '_ LL | fn qux<'a, G: 'a, T>(g: G, dest: &mut T) -> impl FnOnce() + '_
| ^^^^^^ | ------ the parameter type `G` must be valid for the anonymous lifetime defined here...
note: ...so that the type `G` will meet its required lifetime bounds ...
--> $DIR/missing-lifetimes-in-signature.rs:52:5
|
LL | / move || { LL | / move || {
LL | | LL | |
LL | | *dest = g.get(); LL | | *dest = g.get();
LL | | } LL | | }
| |_____^ | |_____^ ...so that the type `G` will meet its required lifetime bounds
|
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
LL | fn qux<'b, 'a, G: 'a + 'b, T>(g: G, dest: &'b mut T) -> impl FnOnce() + 'b LL | fn qux<'b, 'a, G: 'a + 'b, T>(g: G, dest: &'b mut T) -> impl FnOnce() + 'b
@ -84,25 +64,14 @@ LL | fn qux<'b, 'a, G: 'a + 'b, T>(g: G, dest: &'b mut T) -> impl FnOnce() + 'b
error[E0311]: the parameter type `G` may not live long enough error[E0311]: the parameter type `G` may not live long enough
--> $DIR/missing-lifetimes-in-signature.rs:61:9 --> $DIR/missing-lifetimes-in-signature.rs:61:9
| |
LL | / move || {
LL | |
LL | | *dest = g.get();
LL | | }
| |_________^
|
note: the parameter type `G` must be valid for the anonymous lifetime defined here...
--> $DIR/missing-lifetimes-in-signature.rs:60:47
|
LL | fn qux<'b, G: Get<T> + 'b, T>(g: G, dest: &mut T) -> impl FnOnce() + '_ { LL | fn qux<'b, G: Get<T> + 'b, T>(g: G, dest: &mut T) -> impl FnOnce() + '_ {
| ^^^^^^ | ------ the parameter type `G` must be valid for the anonymous lifetime defined here...
note: ...so that the type `G` will meet its required lifetime bounds
--> $DIR/missing-lifetimes-in-signature.rs:61:9
|
LL | / move || { LL | / move || {
LL | | LL | |
LL | | *dest = g.get(); LL | | *dest = g.get();
LL | | } LL | | }
| |_________^ | |_________^ ...so that the type `G` will meet its required lifetime bounds
|
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
LL | fn qux<'c, 'b, G: Get<T> + 'b + 'c, T>(g: G, dest: &'c mut T) -> impl FnOnce() + 'c { LL | fn qux<'c, 'b, G: Get<T> + 'b + 'c, T>(g: G, dest: &'c mut T) -> impl FnOnce() + 'c {
@ -111,27 +80,16 @@ LL | fn qux<'c, 'b, G: Get<T> + 'b + 'c, T>(g: G, dest: &'c mut T) -> impl F
error[E0311]: the parameter type `G` may not live long enough error[E0311]: the parameter type `G` may not live long enough
--> $DIR/missing-lifetimes-in-signature.rs:73:5 --> $DIR/missing-lifetimes-in-signature.rs:73:5
| |
LL | / move || {
LL | |
LL | |
LL | | *dest = g.get();
LL | | }
| |_____^
|
note: the parameter type `G` must be valid for the anonymous lifetime defined here...
--> $DIR/missing-lifetimes-in-signature.rs:69:34
|
LL | fn bat<'a, G: 'a, T>(g: G, dest: &mut T) -> impl FnOnce() + '_ + 'a LL | fn bat<'a, G: 'a, T>(g: G, dest: &mut T) -> impl FnOnce() + '_ + 'a
| ^^^^^^ | ------ the parameter type `G` must be valid for the anonymous lifetime defined here...
note: ...so that the type `G` will meet its required lifetime bounds ...
--> $DIR/missing-lifetimes-in-signature.rs:73:5
|
LL | / move || { LL | / move || {
LL | | LL | |
LL | | LL | |
LL | | *dest = g.get(); LL | | *dest = g.get();
LL | | } LL | | }
| |_____^ | |_____^ ...so that the type `G` will meet its required lifetime bounds
|
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
LL | fn bat<'b, 'a, G: 'a + 'b, T>(g: G, dest: &'b mut T) -> impl FnOnce() + 'b + 'a LL | fn bat<'b, 'a, G: 'a + 'b, T>(g: G, dest: &'b mut T) -> impl FnOnce() + 'b + 'a
@ -153,6 +111,9 @@ LL | | }
error[E0309]: the parameter type `G` may not live long enough error[E0309]: the parameter type `G` may not live long enough
--> $DIR/missing-lifetimes-in-signature.rs:85:5 --> $DIR/missing-lifetimes-in-signature.rs:85:5
| |
LL | fn bak<'a, G, T>(g: G, dest: &'a mut T) -> impl FnOnce() + 'a
| -- the parameter type `G` must be valid for the lifetime `'a` as defined here...
...
LL | / move || { LL | / move || {
LL | | LL | |
LL | | *dest = g.get(); LL | | *dest = g.get();

View File

@ -1,6 +1,9 @@
error[E0309]: the parameter type `Self` may not live long enough error[E0309]: the parameter type `Self` may not live long enough
--> $DIR/type-param-bound-scope.rs:11:9 --> $DIR/type-param-bound-scope.rs:11:9
| |
LL | trait Trait1<'a>: Sized {
| -- the parameter type `Self` must be valid for the lifetime `'a` as defined here...
LL | fn foo(self, lt: Inv<'a>) {
LL | check_bound(self, lt) LL | check_bound(self, lt)
| ^^^^^^^^^^^^^^^^^^^^^ ...so that the type `Self` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^^^^^^ ...so that the type `Self` will meet its required lifetime bounds
| |
@ -12,6 +15,8 @@ LL | trait Trait1<'a>: Sized where Self: 'a {
error[E0309]: the parameter type `Self` may not live long enough error[E0309]: the parameter type `Self` may not live long enough
--> $DIR/type-param-bound-scope.rs:18:9 --> $DIR/type-param-bound-scope.rs:18:9
| |
LL | fn foo<'a>(self, lt: Inv<'a>) {
| -- the parameter type `Self` must be valid for the lifetime `'a` as defined here...
LL | check_bound(self, lt) LL | check_bound(self, lt)
| ^^^^^^^^^^^^^^^^^^^^^ ...so that the type `Self` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^^^^^^ ...so that the type `Self` will meet its required lifetime bounds
| |
@ -23,6 +28,8 @@ LL | fn foo<'a>(self, lt: Inv<'a>) where Self: 'a {
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/type-param-bound-scope.rs:25:9 --> $DIR/type-param-bound-scope.rs:25:9
| |
LL | fn foo<'a>(arg: T, lt: Inv<'a>) {
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
LL | check_bound(arg, lt) LL | check_bound(arg, lt)
| ^^^^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
| |
@ -34,6 +41,9 @@ LL | fn foo<'a>(arg: T, lt: Inv<'a>) where T: 'a {
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/type-param-bound-scope.rs:32:9 --> $DIR/type-param-bound-scope.rs:32:9
| |
LL | trait Trait4<'a> {
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
LL | fn foo<T>(arg: T, lt: Inv<'a>) {
LL | check_bound(arg, lt) LL | check_bound(arg, lt)
| ^^^^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
| |
@ -45,6 +55,9 @@ LL | fn foo<T: 'a>(arg: T, lt: Inv<'a>) {
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/type-param-bound-scope.rs:42:9 --> $DIR/type-param-bound-scope.rs:42:9
| |
LL | impl<'a, T> Trait5<'a> for T {
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
LL | fn foo(self, lt: Inv<'a>) {
LL | check_bound(self, lt); LL | check_bound(self, lt);
| ^^^^^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
| |

View File

@ -1,19 +1,12 @@
error[E0311]: the parameter type `A` may not live long enough error[E0311]: the parameter type `A` may not live long enough
--> $DIR/type-param-missing-lifetime.rs:16:9 --> $DIR/type-param-missing-lifetime.rs:16:9
| |
LL | check_bound(arg, self.0 .0);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
note: the parameter type `A` must be valid for the anonymous lifetime as defined here...
--> $DIR/type-param-missing-lifetime.rs:14:21
|
LL | impl<X> MyTy<Elided<'_, X>> { LL | impl<X> MyTy<Elided<'_, X>> {
| ^^ | -- the parameter type `A` must be valid for the anonymous lifetime as defined here...
note: ...so that the type `A` will meet its required lifetime bounds LL | async fn foo<A>(self, arg: A, _: &str) -> &str {
--> $DIR/type-param-missing-lifetime.rs:16:9
|
LL | check_bound(arg, self.0 .0); LL | check_bound(arg, self.0 .0);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...so that the type `A` will meet its required lifetime bounds
|
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
LL ~ impl<'a, X> MyTy<Elided<'a, X>> { LL ~ impl<'a, X> MyTy<Elided<'a, X>> {
@ -23,19 +16,12 @@ LL ~ async fn foo<A: 'a>(self, arg: A, _: &str) -> &str {
error[E0311]: the parameter type `A` may not live long enough error[E0311]: the parameter type `A` may not live long enough
--> $DIR/type-param-missing-lifetime.rs:33:9 --> $DIR/type-param-missing-lifetime.rs:33:9
| |
LL | check_bound(arg, lt);
| ^^^^^^^^^^^^^^^^^^^^
|
note: the parameter type `A` must be valid for the anonymous lifetime defined here...
--> $DIR/type-param-missing-lifetime.rs:27:13
|
LL | lt: Inv<'_>, LL | lt: Inv<'_>,
| ^^^^^^^ | ------- the parameter type `A` must be valid for the anonymous lifetime defined here...
note: ...so that the type `A` will meet its required lifetime bounds ...
--> $DIR/type-param-missing-lifetime.rs:33:9
|
LL | check_bound(arg, lt); LL | check_bound(arg, lt);
| ^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^ ...so that the type `A` will meet its required lifetime bounds
|
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
LL ~ async fn foo2<'b>( LL ~ async fn foo2<'b>(
@ -51,19 +37,11 @@ LL ~ ) where A: 'b {
error[E0311]: the parameter type `A` may not live long enough error[E0311]: the parameter type `A` may not live long enough
--> $DIR/type-param-missing-lifetime.rs:40:9 --> $DIR/type-param-missing-lifetime.rs:40:9
| |
LL | check_bound(arg, lt);
| ^^^^^^^^^^^^^^^^^^^^
|
note: the parameter type `A` must be valid for the anonymous lifetime defined here...
--> $DIR/type-param-missing-lifetime.rs:39:51
|
LL | async fn bar2<'b>(_dummy: &'a u8, arg: A, lt: Inv<'_>) { LL | async fn bar2<'b>(_dummy: &'a u8, arg: A, lt: Inv<'_>) {
| ^^^^^^^ | ------- the parameter type `A` must be valid for the anonymous lifetime defined here...
note: ...so that the type `A` will meet its required lifetime bounds
--> $DIR/type-param-missing-lifetime.rs:40:9
|
LL | check_bound(arg, lt); LL | check_bound(arg, lt);
| ^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^ ...so that the type `A` will meet its required lifetime bounds
|
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
LL | async fn bar2<'c, 'b>(_dummy: &'a u8, arg: A, lt: Inv<'c>) where A: 'c { LL | async fn bar2<'c, 'b>(_dummy: &'a u8, arg: A, lt: Inv<'c>) where A: 'c {
@ -72,19 +50,12 @@ LL | async fn bar2<'c, 'b>(_dummy: &'a u8, arg: A, lt: Inv<'c>) where A: 'c
error[E0311]: the parameter type `A` may not live long enough error[E0311]: the parameter type `A` may not live long enough
--> $DIR/type-param-missing-lifetime.rs:47:9 --> $DIR/type-param-missing-lifetime.rs:47:9
| |
LL | check_bound(self.0 .1, self.0 .0);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
note: the parameter type `A` must be valid for the anonymous lifetime as defined here...
--> $DIR/type-param-missing-lifetime.rs:45:21
|
LL | impl<A> MyTy<Elided<'_, A>> { LL | impl<A> MyTy<Elided<'_, A>> {
| ^^ | -- the parameter type `A` must be valid for the anonymous lifetime as defined here...
note: ...so that the type `A` will meet its required lifetime bounds LL | async fn foo3(self) {
--> $DIR/type-param-missing-lifetime.rs:47:9
|
LL | check_bound(self.0 .1, self.0 .0); LL | check_bound(self.0 .1, self.0 .0);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...so that the type `A` will meet its required lifetime bounds
|
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
LL | impl<'a, A: 'a> MyTy<Elided<'a, A>> { LL | impl<'a, A: 'a> MyTy<Elided<'a, A>> {

View File

@ -6,6 +6,7 @@ fn foo(d: impl Debug + 'static) {
//~^ HELP consider adding an explicit lifetime bound... //~^ HELP consider adding an explicit lifetime bound...
bar(d); bar(d);
//~^ ERROR the parameter type `impl Debug` may not live long enough //~^ ERROR the parameter type `impl Debug` may not live long enough
//~| NOTE the parameter type `impl Debug` must be valid for the static lifetime...
//~| NOTE ...so that the type `impl Debug` will meet its required lifetime bounds //~| NOTE ...so that the type `impl Debug` will meet its required lifetime bounds
} }

View File

@ -6,6 +6,7 @@ fn foo(d: impl Debug) {
//~^ HELP consider adding an explicit lifetime bound... //~^ HELP consider adding an explicit lifetime bound...
bar(d); bar(d);
//~^ ERROR the parameter type `impl Debug` may not live long enough //~^ ERROR the parameter type `impl Debug` may not live long enough
//~| NOTE the parameter type `impl Debug` must be valid for the static lifetime...
//~| NOTE ...so that the type `impl Debug` will meet its required lifetime bounds //~| NOTE ...so that the type `impl Debug` will meet its required lifetime bounds
} }

View File

@ -2,7 +2,10 @@ error[E0310]: the parameter type `impl Debug` may not live long enough
--> $DIR/suggest-impl-trait-lifetime.rs:7:5 --> $DIR/suggest-impl-trait-lifetime.rs:7:5
| |
LL | bar(d); LL | bar(d);
| ^^^^^^ ...so that the type `impl Debug` will meet its required lifetime bounds | ^^^^^^
| |
| the parameter type `impl Debug` must be valid for the static lifetime...
| ...so that the type `impl Debug` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |

View File

@ -46,7 +46,10 @@ error[E0310]: the parameter type `T` may not live long enough
--> $DIR/closure_wf_outlives.rs:54:22 --> $DIR/closure_wf_outlives.rs:54:22
| |
LL | type Opaque<T> = impl Sized; LL | type Opaque<T> = impl Sized;
| ^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds... | ^^^^^^^^^^
| |
| the parameter type `T` must be valid for the static lifetime...
| ...so that the type `T` will meet its required lifetime bounds...
| |
note: ...that is required by this bound note: ...that is required by this bound
--> $DIR/closure_wf_outlives.rs:59:12 --> $DIR/closure_wf_outlives.rs:59:12

View File

@ -17,7 +17,10 @@ error[E0310]: the parameter type `T` may not live long enough
--> $DIR/generic_type_does_not_live_long_enough.rs:13:9 --> $DIR/generic_type_does_not_live_long_enough.rs:13:9
| |
LL | t LL | t
| ^ ...so that the type `T` will meet its required lifetime bounds | ^
| |
| the parameter type `T` must be valid for the static lifetime...
| ...so that the type `T` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |

View File

@ -22,7 +22,10 @@ error[E0310]: the parameter type `A` may not live long enough
--> $DIR/implied_lifetime_wf_check3.rs:29:41 --> $DIR/implied_lifetime_wf_check3.rs:29:41
| |
LL | fn test<A>() where Ty<A>: 'static { assert_static::<A>() } LL | fn test<A>() where Ty<A>: 'static { assert_static::<A>() }
| ^^^^^^^^^^^^^^^^^^ ...so that the type `A` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^^^
| |
| the parameter type `A` must be valid for the static lifetime...
| ...so that the type `A` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |

View File

@ -2,7 +2,10 @@ error[E0310]: the parameter type `A` may not live long enough
--> $DIR/implied_lifetime_wf_check4_static.rs:4:18 --> $DIR/implied_lifetime_wf_check4_static.rs:4:18
| |
LL | type Ty<A> = impl Sized + 'static; LL | type Ty<A> = impl Sized + 'static;
| ^^^^^^^^^^^^^^^^^^^^ ...so that the type `A` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^^^^^^
| |
| the parameter type `A` must be valid for the static lifetime...
| ...so that the type `A` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |

View File

@ -1,6 +1,8 @@
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/wf-in-associated-type.rs:36:23 --> $DIR/wf-in-associated-type.rs:36:23
| |
LL | impl<'a, T> Trait<'a, T> for () {
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
LL | type Opaque = impl Sized + 'a; LL | type Opaque = impl Sized + 'a;
| ^^^^^^^^^^^^^^^ ...so that the type `&'a T` will meet its required lifetime bounds | ^^^^^^^^^^^^^^^ ...so that the type `&'a T` will meet its required lifetime bounds
| |
@ -12,6 +14,8 @@ LL | impl<'a, T: 'a> Trait<'a, T> for () {
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/wf-in-associated-type.rs:36:23 --> $DIR/wf-in-associated-type.rs:36:23
| |
LL | impl<'a, T> Trait<'a, T> for () {
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
LL | type Opaque = impl Sized + 'a; LL | type Opaque = impl Sized + 'a;
| ^^^^^^^^^^^^^^^ ...so that the reference type `&'a T` does not outlive the data it points at | ^^^^^^^^^^^^^^^ ...so that the reference type `&'a T` does not outlive the data it points at
| |

View File

@ -2,7 +2,10 @@ error[E0310]: the parameter type `T` may not live long enough
--> $DIR/wf-nested.rs:55:27 --> $DIR/wf-nested.rs:55:27
| |
LL | type InnerOpaque<T> = impl Sized; LL | type InnerOpaque<T> = impl Sized;
| ^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds... | ^^^^^^^^^^
| |
| the parameter type `T` must be valid for the static lifetime...
| ...so that the type `T` will meet its required lifetime bounds...
| |
note: ...that is required by this bound note: ...that is required by this bound
--> $DIR/wf-nested.rs:12:20 --> $DIR/wf-nested.rs:12:20

View File

@ -2,7 +2,10 @@ error[E0310]: the parameter type `T` may not live long enough
--> $DIR/wf-nested.rs:46:17 --> $DIR/wf-nested.rs:46:17
| |
LL | let _ = outer.get(); LL | let _ = outer.get();
| ^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds | ^^^^^^^^^^^
| |
| the parameter type `T` must be valid for the static lifetime...
| ...so that the type `T` will meet its required lifetime bounds
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |

View File

@ -1,6 +1,8 @@
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/wf-impl-associated-type-region.rs:10:16 --> $DIR/wf-impl-associated-type-region.rs:10:16
| |
LL | impl<'a, T> Foo<'a> for T {
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
LL | type Bar = &'a T; LL | type Bar = &'a T;
| ^^^^^ ...so that the reference type `&'a T` does not outlive the data it points at | ^^^^^ ...so that the reference type `&'a T` does not outlive the data it points at
| |

View File

@ -2,7 +2,10 @@ error[E0310]: the parameter type `T` may not live long enough
--> $DIR/wf-in-fn-type-static.rs:13:8 --> $DIR/wf-in-fn-type-static.rs:13:8
| |
LL | x: fn() -> &'static T LL | x: fn() -> &'static T
| ^^^^^^^^^^^^^^^^^^ ...so that the reference type `&'static T` does not outlive the data it points at | ^^^^^^^^^^^^^^^^^^
| |
| the parameter type `T` must be valid for the static lifetime...
| ...so that the reference type `&'static T` does not outlive the data it points at
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |
@ -13,7 +16,10 @@ error[E0310]: the parameter type `T` may not live long enough
--> $DIR/wf-in-fn-type-static.rs:18:8 --> $DIR/wf-in-fn-type-static.rs:18:8
| |
LL | x: fn(&'static T) LL | x: fn(&'static T)
| ^^^^^^^^^^^^^^ ...so that the reference type `&'static T` does not outlive the data it points at | ^^^^^^^^^^^^^^
| |
| the parameter type `T` must be valid for the static lifetime...
| ...so that the reference type `&'static T` does not outlive the data it points at
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |

View File

@ -2,7 +2,10 @@ error[E0310]: the parameter type `T` may not live long enough
--> $DIR/wf-in-obj-type-static.rs:14:8 --> $DIR/wf-in-obj-type-static.rs:14:8
| |
LL | x: dyn Object<&'static T> LL | x: dyn Object<&'static T>
| ^^^^^^^^^^^^^^^^^^^^^^ ...so that the reference type `&'static T` does not outlive the data it points at | ^^^^^^^^^^^^^^^^^^^^^^
| |
| the parameter type `T` must be valid for the static lifetime...
| ...so that the reference type `&'static T` does not outlive the data it points at
| |
help: consider adding an explicit lifetime bound... help: consider adding an explicit lifetime bound...
| |

View File

@ -1,6 +1,8 @@
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/wf-outlives-ty-in-fn-or-trait.rs:9:16 --> $DIR/wf-outlives-ty-in-fn-or-trait.rs:9:16
| |
LL | impl<'a, T> Trait<'a, T> for usize {
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
LL | type Out = &'a fn(T); LL | type Out = &'a fn(T);
| ^^^^^^^^^ ...so that the reference type `&'a fn(T)` does not outlive the data it points at | ^^^^^^^^^ ...so that the reference type `&'a fn(T)` does not outlive the data it points at
| |
@ -12,6 +14,8 @@ LL | impl<'a, T: 'a> Trait<'a, T> for usize {
error[E0309]: the parameter type `T` may not live long enough error[E0309]: the parameter type `T` may not live long enough
--> $DIR/wf-outlives-ty-in-fn-or-trait.rs:19:16 --> $DIR/wf-outlives-ty-in-fn-or-trait.rs:19:16
| |
LL | impl<'a, T> Trait<'a, T> for u32 {
| -- the parameter type `T` must be valid for the lifetime `'a` as defined here...
LL | type Out = &'a dyn Baz<T>; LL | type Out = &'a dyn Baz<T>;
| ^^^^^^^^^^^^^^ ...so that the reference type `&'a (dyn Baz<T> + 'a)` does not outlive the data it points at | ^^^^^^^^^^^^^^ ...so that the reference type `&'a (dyn Baz<T> + 'a)` does not outlive the data it points at
| |

View File

@ -1,6 +1,9 @@
error[E0309]: the associated type `<Self as SomeTrait<'a>>::Type1` may not live long enough error[E0309]: the associated type `<Self as SomeTrait<'a>>::Type1` may not live long enough
--> $DIR/wf-trait-associated-type-region.rs:9:18 --> $DIR/wf-trait-associated-type-region.rs:9:18
| |
LL | trait SomeTrait<'a> {
| -- the associated type `<Self as SomeTrait<'a>>::Type1` must be valid for the lifetime `'a` as defined here...
LL | type Type1;
LL | type Type2 = &'a Self::Type1; LL | type Type2 = &'a Self::Type1;
| ^^^^^^^^^^^^^^^ ...so that the reference type `&'a <Self as SomeTrait<'a>>::Type1` does not outlive the data it points at | ^^^^^^^^^^^^^^^ ...so that the reference type `&'a <Self as SomeTrait<'a>>::Type1` does not outlive the data it points at
| |