1
Fork 0

Auto merge of #53175 - matthewjasper:more-return-stuff, r=nikomatsakis

[NLL] Returns are interesting for free regions

Based on #53088 - creating now to get feedback.

Closes #51175

* Make assigning to the return type interesting.
* Use "returning this value" instead of "return" in error messages.
* Prefer one of the explanations that we have a name for to a generic interesting cause in some cases.
* Treat causes that involve the destination of a call like assignments.
This commit is contained in:
bors 2018-08-18 11:57:46 +00:00
commit 7de3dea2b7
83 changed files with 235 additions and 176 deletions

View file

@ -14,7 +14,7 @@ use rustc::hir::def_id::DefId;
use rustc::infer::error_reporting::nice_region_error::NiceRegionError; use rustc::infer::error_reporting::nice_region_error::NiceRegionError;
use rustc::infer::InferCtxt; use rustc::infer::InferCtxt;
use rustc::mir::{self, Location, Mir, Place, Rvalue, StatementKind, TerminatorKind}; use rustc::mir::{self, Location, Mir, Place, Rvalue, StatementKind, TerminatorKind};
use rustc::ty::RegionVid; use rustc::ty::{TyCtxt, RegionVid};
use rustc_data_structures::indexed_vec::IndexVec; use rustc_data_structures::indexed_vec::IndexVec;
use rustc_errors::Diagnostic; use rustc_errors::Diagnostic;
use std::collections::VecDeque; use std::collections::VecDeque;
@ -42,7 +42,7 @@ impl fmt::Display for ConstraintCategory {
// Must end with a space. Allows for empty names to be provided. // Must end with a space. Allows for empty names to be provided.
match self { match self {
ConstraintCategory::Assignment => write!(f, "assignment "), ConstraintCategory::Assignment => write!(f, "assignment "),
ConstraintCategory::Return => write!(f, "return "), ConstraintCategory::Return => write!(f, "returning this value "),
ConstraintCategory::Cast => write!(f, "cast "), ConstraintCategory::Cast => write!(f, "cast "),
ConstraintCategory::CallArgument => write!(f, "argument "), ConstraintCategory::CallArgument => write!(f, "argument "),
_ => write!(f, ""), _ => write!(f, ""),
@ -67,6 +67,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
fn best_blame_constraint( fn best_blame_constraint(
&self, &self,
mir: &Mir<'tcx>, mir: &Mir<'tcx>,
tcx: TyCtxt<'_, '_, 'tcx>,
from_region: RegionVid, from_region: RegionVid,
target_test: impl Fn(RegionVid) -> bool, target_test: impl Fn(RegionVid) -> bool,
) -> (ConstraintCategory, Span, RegionVid) { ) -> (ConstraintCategory, Span, RegionVid) {
@ -92,7 +93,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
// Classify each of the constraints along the path. // Classify each of the constraints along the path.
let mut categorized_path: Vec<(ConstraintCategory, Span)> = path let mut categorized_path: Vec<(ConstraintCategory, Span)> = path
.iter() .iter()
.map(|&index| self.classify_constraint(index, mir)) .map(|&index| self.classify_constraint(index, mir, tcx))
.collect(); .collect();
debug!( debug!(
"best_blame_constraint: categorized_path={:#?}", "best_blame_constraint: categorized_path={:#?}",
@ -123,13 +124,15 @@ impl<'tcx> RegionInferenceContext<'tcx> {
let constraint = &self.constraints[path[i]]; let constraint = &self.constraints[path[i]];
let constraint_sup_scc = self.constraint_sccs.scc(constraint.sup); let constraint_sup_scc = self.constraint_sccs.scc(constraint.sup);
if constraint_sup_scc == target_scc {
return false;
}
match categorized_path[i].0 { match categorized_path[i].0 {
ConstraintCategory::Boring => false, ConstraintCategory::Boring => false,
_ => true, ConstraintCategory::Other => {
// other isn't interesting when the two lifetimes
// are unified.
constraint_sup_scc != self.constraint_sccs.scc(constraint.sub)
}
_ => constraint_sup_scc != target_scc,
} }
}); });
if let Some(i) = best_choice { if let Some(i) = best_choice {
@ -231,6 +234,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
&self, &self,
index: ConstraintIndex, index: ConstraintIndex,
mir: &Mir<'tcx>, mir: &Mir<'tcx>,
tcx: TyCtxt<'_, '_, 'tcx>,
) -> (ConstraintCategory, Span) { ) -> (ConstraintCategory, Span) {
let constraint = self.constraints[index]; let constraint = self.constraints[index];
debug!("classify_constraint: constraint={:?}", constraint); debug!("classify_constraint: constraint={:?}", constraint);
@ -254,7 +258,34 @@ impl<'tcx> RegionInferenceContext<'tcx> {
debug!("classify_constraint: terminator.kind={:?}", terminator.kind); debug!("classify_constraint: terminator.kind={:?}", terminator.kind);
match terminator.kind { match terminator.kind {
TerminatorKind::DropAndReplace { .. } => ConstraintCategory::Assignment, TerminatorKind::DropAndReplace { .. } => ConstraintCategory::Assignment,
TerminatorKind::Call { .. } => ConstraintCategory::CallArgument, // Classify calls differently depending on whether or not
// the sub region appears in the destination type (so the
// sup region is in the return type). If the return type
// contains the sub-region, then this is either an
// assignment or a return, depending on whether we are
// writing to the RETURN_PLACE or not.
//
// The idea here is that the region is being propagated
// from an input into the output place, so it's a kind of
// assignment. Otherwise, if the sub-region only appears in
// the argument types, then use the CallArgument
// classification.
TerminatorKind::Call { destination: Some((ref place, _)), .. } => {
if tcx.any_free_region_meets(
&place.ty(mir, tcx).to_ty(tcx),
|region| self.to_region_vid(region) == constraint.sub,
) {
match place {
Place::Local(mir::RETURN_PLACE) => ConstraintCategory::Return,
_ => ConstraintCategory::Assignment,
}
} else {
ConstraintCategory::CallArgument
}
}
TerminatorKind::Call { destination: None, .. } => {
ConstraintCategory::CallArgument
}
_ => ConstraintCategory::Other, _ => ConstraintCategory::Other,
} }
} else { } else {
@ -304,7 +335,12 @@ impl<'tcx> RegionInferenceContext<'tcx> {
) { ) {
debug!("report_error(fr={:?}, outlived_fr={:?})", fr, outlived_fr); debug!("report_error(fr={:?}, outlived_fr={:?})", fr, outlived_fr);
let (category, span, _) = self.best_blame_constraint(mir, fr, |r| r == outlived_fr); let (category, span, _) = self.best_blame_constraint(
mir,
infcx.tcx,
fr,
|r| r == outlived_fr
);
// Check if we can use one of the "nice region errors". // Check if we can use one of the "nice region errors".
if let (Some(f), Some(o)) = (self.to_error_region(fr), self.to_error_region(outlived_fr)) { if let (Some(f), Some(o)) = (self.to_error_region(fr), self.to_error_region(outlived_fr)) {
@ -417,7 +453,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
diag.span_label(span, format!( diag.span_label(span, format!(
"{} was supposed to return data with lifetime `{}` but it is returning \ "{} was supposed to return data with lifetime `{}` but it is returning \
data with lifetime `{}`", data with lifetime `{}`",
mir_def_name, fr_name, outlived_fr_name, mir_def_name, outlived_fr_name, fr_name
)); ));
}, },
_ => { _ => {
@ -446,10 +482,11 @@ impl<'tcx> RegionInferenceContext<'tcx> {
crate fn find_outlives_blame_span( crate fn find_outlives_blame_span(
&self, &self,
mir: &Mir<'tcx>, mir: &Mir<'tcx>,
tcx: TyCtxt<'_, '_, 'tcx>,
fr1: RegionVid, fr1: RegionVid,
fr2: RegionVid, fr2: RegionVid,
) -> Span { ) -> Span {
let (_, span, _) = self.best_blame_constraint(mir, fr1, |r| r == fr2); let (_, span, _) = self.best_blame_constraint(mir, tcx, fr1, |r| r == fr2);
span span
} }
} }

View file

@ -587,7 +587,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
infcx.extract_type_name(&return_ty) infcx.extract_type_name(&return_ty)
}); });
let mir_node_id = tcx.hir.as_local_node_id(mir_def_id).expect("non-local mir"); let mir_node_id = tcx.hir.as_local_node_id(mir_def_id).expect("non-local mir");
let (return_span, mir_description) = if let hir::ExprKind::Closure(_, _, _, span, gen_move) let (return_span, mir_description) = if let hir::ExprKind::Closure(_, _, _, span, gen_move)
= tcx.hir.expect_expr(mir_node_id).node = tcx.hir.expect_expr(mir_node_id).node

View file

@ -1040,7 +1040,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
longer_fr, shorter_fr, longer_fr, shorter_fr,
); );
let blame_span = self.find_outlives_blame_span(mir, longer_fr, shorter_fr); let blame_span = self.find_outlives_blame_span(mir, infcx.tcx, longer_fr, shorter_fr);
if let Some(propagated_outlives_requirements) = propagated_outlives_requirements { if let Some(propagated_outlives_requirements) = propagated_outlives_requirements {
// Shrink `fr` until we find a non-local region (if we do). // Shrink `fr` until we find a non-local region (if we do).
@ -1128,7 +1128,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
}; };
// Find the code to blame for the fact that `longer_fr` outlives `error_fr`. // Find the code to blame for the fact that `longer_fr` outlives `error_fr`.
let span = self.find_outlives_blame_span(mir, longer_fr, error_region); let span = self.find_outlives_blame_span(mir, infcx.tcx, longer_fr, error_region);
// Obviously, this error message is far from satisfactory. // Obviously, this error message is far from satisfactory.
// At present, though, it only appears in unit tests -- // At present, though, it only appears in unit tests --

View file

@ -877,8 +877,9 @@ impl<'a, 'gcx, 'tcx> TypeChecker<'a, 'gcx, 'tcx> {
// they are not caused by the user, but rather artifacts // they are not caused by the user, but rather artifacts
// of lowering. Assignments to other sorts of places *are* interesting // of lowering. Assignments to other sorts of places *are* interesting
// though. // though.
let is_temp = if let Place::Local(l) = place { let is_temp = if let Place::Local(l) = *place {
!mir.local_decls[*l].is_user_variable.is_some() l != RETURN_PLACE &&
!mir.local_decls[l].is_user_variable.is_some()
} else { } else {
false false
}; };
@ -1119,7 +1120,19 @@ impl<'a, 'gcx, 'tcx> TypeChecker<'a, 'gcx, 'tcx> {
match *destination { match *destination {
Some((ref dest, _target_block)) => { Some((ref dest, _target_block)) => {
let dest_ty = dest.ty(mir, tcx).to_ty(tcx); let dest_ty = dest.ty(mir, tcx).to_ty(tcx);
let locations = term_location.interesting(); let is_temp = if let Place::Local(l) = *dest {
l != RETURN_PLACE &&
!mir.local_decls[l].is_user_variable.is_some()
} else {
false
};
let locations = if is_temp {
term_location.boring()
} else {
term_location.interesting()
};
if let Err(terr) = self.sub_types(sig.output(), dest_ty, locations) { if let Err(terr) = self.sub_types(sig.output(), dest_ty, locations) {
span_mirbug!( span_mirbug!(
self, self,

View file

@ -18,7 +18,7 @@ LL | fn transmute<'a,'b>(x: &'a u32, y: &'b u32) -> (&'a u32, &'b u32) {
| | | |
| lifetime `'a` defined here | lifetime `'a` defined here
LL | let a = bar(foo, y); LL | let a = bar(foo, y);
| ^^^^^^^^^^^ argument requires that `'b` must outlive `'a` | ^^^^^^^^^^^ assignment requires that `'b` must outlive `'a`
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/project-fn-ret-contravariant.rs:54:12 --> $DIR/project-fn-ret-contravariant.rs:54:12
@ -29,7 +29,7 @@ LL | fn transmute<'a,'b>(x: &'a u32, y: &'b u32) -> (&'a u32, &'b u32) {
| lifetime `'a` defined here | lifetime `'a` defined here
LL | let a = bar(foo, y); LL | let a = bar(foo, y);
LL | let b = bar(foo, x); LL | let b = bar(foo, x);
| ^^^^^^^^^^^ argument requires that `'a` must outlive `'b` | ^^^^^^^^^^^ assignment requires that `'a` must outlive `'b`
error: aborting due to 2 previous errors error: aborting due to 2 previous errors

View file

@ -4,13 +4,13 @@ warning: not reporting region error due to nll
LL | bar(foo, x) //[transmute]~ ERROR E0495 LL | bar(foo, x) //[transmute]~ ERROR E0495
| ^^^ | ^^^
error: borrowed data escapes outside of function error: unsatisfied lifetime constraints
--> $DIR/project-fn-ret-contravariant.rs:48:4 --> $DIR/project-fn-ret-contravariant.rs:48:4
| |
LL | fn baz<'a,'b>(x: &'a u32) -> &'static u32 { LL | fn baz<'a,'b>(x: &'a u32) -> &'static u32 {
| - `x` is a reference that is only valid in the function body | -- lifetime `'a` defined here
LL | bar(foo, x) //[transmute]~ ERROR E0495 LL | bar(foo, x) //[transmute]~ ERROR E0495
| ^^^^^^^^^^^ `x` escapes the function body here | ^^^^^^^^^^^ returning this value requires that `'a` must outlive `'static`
error: aborting due to previous error error: aborting due to previous error

View file

@ -18,7 +18,7 @@ LL | fn transmute<'a,'b>(x: Type<'a>, y: Type<'b>) -> (Type<'a>, Type<'b>) {
| | | |
| lifetime `'a` defined here | lifetime `'a` defined here
LL | let a = bar(foo, y); //[krisskross]~ ERROR E0623 LL | let a = bar(foo, y); //[krisskross]~ ERROR E0623
| ^^^^^^^^^^^ argument requires that `'b` must outlive `'a` | ^^^^^^^^^^^ assignment requires that `'b` must outlive `'a`
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/project-fn-ret-invariant.rs:64:12 --> $DIR/project-fn-ret-invariant.rs:64:12
@ -29,7 +29,7 @@ LL | fn transmute<'a,'b>(x: Type<'a>, y: Type<'b>) -> (Type<'a>, Type<'b>) {
| lifetime `'a` defined here | lifetime `'a` defined here
LL | let a = bar(foo, y); //[krisskross]~ ERROR E0623 LL | let a = bar(foo, y); //[krisskross]~ ERROR E0623
LL | let b = bar(foo, x); LL | let b = bar(foo, x);
| ^^^^^^^^^^^ argument requires that `'a` must outlive `'b` | ^^^^^^^^^^^ assignment requires that `'a` must outlive `'b`
error: aborting due to 2 previous errors error: aborting due to 2 previous errors

View file

@ -4,14 +4,14 @@ warning: not reporting region error due to nll
LL | bar(foo, x) //[transmute]~ ERROR E0495 LL | bar(foo, x) //[transmute]~ ERROR E0495
| ^^^ | ^^^
error: borrowed data escapes outside of function error: unsatisfied lifetime constraints
--> $DIR/project-fn-ret-invariant.rs:58:4 --> $DIR/project-fn-ret-invariant.rs:58:4
| |
LL | fn baz<'a,'b>(x: Type<'a>) -> Type<'static> { LL | fn baz<'a,'b>(x: Type<'a>) -> Type<'static> {
| - `x` is a reference that is only valid in the function body | -- lifetime `'a` defined here
... ...
LL | bar(foo, x) //[transmute]~ ERROR E0495 LL | bar(foo, x) //[transmute]~ ERROR E0495
| ^^^^^^^^^^^ `x` escapes the function body here | ^^^^^^^^^^^ returning this value requires that `'a` must outlive `'static`
error: aborting due to previous error error: aborting due to previous error

View file

@ -35,7 +35,7 @@ LL | | //[mir]~^ ERROR cannot borrow `x` as mutable more than
LL | | *y = 1; LL | | *y = 1;
LL | | drop(y); LL | | drop(y);
LL | | } LL | | }
| |_________________^ requires that `'1` must outlive `'2` | |_________________^ returning this value requires that `'1` must outlive `'2`
| |
= note: closure implements `FnMut`, so references to captured variables can't escape the closure = note: closure implements `FnMut`, so references to captured variables can't escape the closure

View file

@ -35,7 +35,7 @@ LL | | //[mir]~^ ERROR cannot borrow `x` as mutable more than
LL | | *y = 1; LL | | *y = 1;
LL | | drop(y); LL | | drop(y);
LL | | } LL | | }
| |_________________^ requires that `'1` must outlive `'2` | |_________________^ returning this value requires that `'1` must outlive `'2`
| |
= note: closure implements `FnMut`, so references to captured variables can't escape the closure = note: closure implements `FnMut`, so references to captured variables can't escape the closure

View file

@ -5,14 +5,14 @@ LL | S { pointer: &mut *p.pointer }
| ^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/borrowck-reborrow-from-shorter-lived-andmut.rs:19:18 --> $DIR/borrowck-reborrow-from-shorter-lived-andmut.rs:19:5
| |
LL | fn copy_borrowed_ptr<'a,'b>(p: &'a mut S<'b>) -> S<'b> { LL | fn copy_borrowed_ptr<'a,'b>(p: &'a mut S<'b>) -> S<'b> {
| -- -- lifetime `'b` defined here | -- -- lifetime `'b` defined here
| | | |
| lifetime `'a` defined here | lifetime `'a` defined here
LL | S { pointer: &mut *p.pointer } LL | S { pointer: &mut *p.pointer }
| ^^^^^^^^^^^^^^^ requires that `'a` must outlive `'b` | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ function was supposed to return data with lifetime `'b` but it is returning data with lifetime `'a`
error: aborting due to previous error error: aborting due to previous error

View file

@ -5,10 +5,10 @@ LL | invoke(&x, |a, b| if a > b { a } else { b }); //~ ERROR E0495
| ^^^^^^ | ^^^^^^
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/E0621-does-not-trigger-for-closures.rs:25:26 --> $DIR/E0621-does-not-trigger-for-closures.rs:25:45
| |
LL | invoke(&x, |a, b| if a > b { a } else { b }); //~ ERROR E0495 LL | invoke(&x, |a, b| if a > b { a } else { b }); //~ ERROR E0495
| -- ^^^^^ requires that `'1` must outlive `'2` | -- ^ returning this value requires that `'1` must outlive `'2`
| || | ||
| |return type of closure is &'2 i32 | |return type of closure is &'2 i32
| has type `&'1 i32` | has type `&'1 i32`

View file

@ -40,13 +40,13 @@ error: unsatisfied lifetime constraints
--> $DIR/must_outlive_least_region_or_bound.rs:16:44 --> $DIR/must_outlive_least_region_or_bound.rs:16:44
| |
LL | fn explicit<'a>(x: &'a i32) -> impl Copy { x } LL | fn explicit<'a>(x: &'a i32) -> impl Copy { x }
| -- lifetime `'a` defined here ^ return requires that `'a` must outlive `'static` | -- lifetime `'a` defined here ^ returning this value requires that `'a` must outlive `'static`
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/must_outlive_least_region_or_bound.rs:22:69 --> $DIR/must_outlive_least_region_or_bound.rs:22:69
| |
LL | fn with_bound<'a>(x: &'a i32) -> impl LifetimeTrait<'a> + 'static { x } LL | fn with_bound<'a>(x: &'a i32) -> impl LifetimeTrait<'a> + 'static { x }
| -- lifetime `'a` defined here ^ return requires that `'a` must outlive `'static` | -- lifetime `'a` defined here ^ returning this value requires that `'a` must outlive `'static`
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/must_outlive_least_region_or_bound.rs:29:5 --> $DIR/must_outlive_least_region_or_bound.rs:29:5
@ -57,7 +57,7 @@ LL | fn move_lifetime_into_fn<'a, 'b>(x: &'a u32, y: &'b u32) -> impl Fn(&'a u32
| lifetime `'a` defined here | lifetime `'a` defined here
LL | //~^ ERROR lifetime mismatch LL | //~^ ERROR lifetime mismatch
LL | move |_| println!("{}", y) LL | move |_| println!("{}", y)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ function was supposed to return data with lifetime `'b` but it is returning data with lifetime `'a` | ^^^^^^^^^^^^^^^^^^^^^^^^^^ function was supposed to return data with lifetime `'a` but it is returning data with lifetime `'b`
error[E0310]: the parameter type `T` may not live long enough error[E0310]: the parameter type `T` may not live long enough
--> $DIR/must_outlive_least_region_or_bound.rs:34:5 --> $DIR/must_outlive_least_region_or_bound.rs:34:5

View file

@ -22,7 +22,7 @@ error: unsatisfied lifetime constraints
--> $DIR/mismatched.rs:16:46 --> $DIR/mismatched.rs:16:46
| |
LL | fn foo2(x: &'a u32, y: &'b u32) -> &'a u32 { y } //~ ERROR lifetime mismatch LL | fn foo2(x: &'a u32, y: &'b u32) -> &'a u32 { y } //~ ERROR lifetime mismatch
| -- -- ^ function was supposed to return data with lifetime `'b` but it is returning data with lifetime `'a` | -- -- ^ function was supposed to return data with lifetime `'a` but it is returning data with lifetime `'b`
| | | | | |
| | lifetime `'b` defined here | | lifetime `'b` defined here
| lifetime `'a` defined here | lifetime `'a` defined here

View file

@ -5,12 +5,12 @@ LL | B(a) //~ ERROR 22:5: 22:9: explicit lifetime required in the type of
| ^ | ^
error[E0621]: explicit lifetime required in the type of `a` error[E0621]: explicit lifetime required in the type of `a`
--> $DIR/issue-14285.rs:22:7 --> $DIR/issue-14285.rs:22:5
| |
LL | fn foo<'a>(a: &Foo) -> B<'a> { LL | fn foo<'a>(a: &Foo) -> B<'a> {
| ---- help: add explicit lifetime `'a` to the type of `a`: `&'a (dyn Foo + 'a)` | ---- help: add explicit lifetime `'a` to the type of `a`: `&'a (dyn Foo + 'a)`
LL | B(a) //~ ERROR 22:5: 22:9: explicit lifetime required in the type of `a` [E0621] LL | B(a) //~ ERROR 22:5: 22:9: explicit lifetime required in the type of `a` [E0621]
| ^ lifetime `'a` required | ^^^^ lifetime `'a` required
error: aborting due to previous error error: aborting due to previous error

View file

@ -5,12 +5,12 @@ LL | Parser { lexer: lexer }
| ^^^^^^ | ^^^^^^
error[E0621]: explicit lifetime required in the type of `lexer` error[E0621]: explicit lifetime required in the type of `lexer`
--> $DIR/issue-15034.rs:27:25 --> $DIR/issue-15034.rs:27:9
| |
LL | pub fn new(lexer: &'a mut Lexer) -> Parser<'a> { LL | pub fn new(lexer: &'a mut Lexer) -> Parser<'a> {
| ------------- help: add explicit lifetime `'a` to the type of `lexer`: `&'a mut Lexer<'a>` | ------------- help: add explicit lifetime `'a` to the type of `lexer`: `&'a mut Lexer<'a>`
LL | Parser { lexer: lexer } LL | Parser { lexer: lexer }
| ^^^^^ lifetime `'a` required | ^^^^^^^^^^^^^^^^^^^^^^^ lifetime `'a` required
error: aborting due to previous error error: aborting due to previous error

View file

@ -11,12 +11,12 @@ LL | thing{ x: x } //~ ERROR 16:5: 16:18: explicit lifetime required in the
| ^^^^^ | ^^^^^
error[E0621]: explicit lifetime required in the type of `x` error[E0621]: explicit lifetime required in the type of `x`
--> $DIR/issue-3154.rs:16:15 --> $DIR/issue-3154.rs:16:5
| |
LL | fn thing<'a,Q>(x: &Q) -> thing<'a,Q> { LL | fn thing<'a,Q>(x: &Q) -> thing<'a,Q> {
| -- help: add explicit lifetime `'a` to the type of `x`: `&'a Q` | -- help: add explicit lifetime `'a` to the type of `x`: `&'a Q`
LL | thing{ x: x } //~ ERROR 16:5: 16:18: explicit lifetime required in the type of `x` [E0621] LL | thing{ x: x } //~ ERROR 16:5: 16:18: explicit lifetime required in the type of `x` [E0621]
| ^ lifetime `'a` required | ^^^^^^^^^^^^^ lifetime `'a` required
error: aborting due to previous error error: aborting due to previous error

View file

@ -7,7 +7,7 @@ LL | || {
| |return type of closure is &'2 mut std::boxed::Box<()> | |return type of closure is &'2 mut std::boxed::Box<()>
| lifetime `'1` represents this closure's body | lifetime `'1` represents this closure's body
LL | &mut x LL | &mut x
| ^^^^^^ return requires that `'1` must outlive `'2` | ^^^^^^ returning this value requires that `'1` must outlive `'2`
| |
= note: closure implements `FnMut`, so references to captured variables can't escape the closure = note: closure implements `FnMut`, so references to captured variables can't escape the closure

View file

@ -9,7 +9,7 @@ LL | || {
LL | / || { LL | / || {
LL | | x.push(()) LL | | x.push(())
LL | | } LL | | }
| |_________^ requires that `'1` must outlive `'2` | |_________^ returning this value requires that `'1` must outlive `'2`
| |
= note: closure implements `FnMut`, so references to captured variables can't escape the closure = note: closure implements `FnMut`, so references to captured variables can't escape the closure

View file

@ -9,7 +9,7 @@ LL | || {
LL | / || { LL | / || {
LL | | let _y = &mut x; LL | | let _y = &mut x;
LL | | } LL | | }
| |_________^ requires that `'1` must outlive `'2` | |_________^ returning this value requires that `'1` must outlive `'2`
| |
= note: closure implements `FnMut`, so references to captured variables can't escape the closure = note: closure implements `FnMut`, so references to captured variables can't escape the closure

View file

@ -5,7 +5,7 @@ LL | match (&t,) { //~ ERROR cannot infer an appropriate lifetime
| ^^^^^ | ^^^^^
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/issue-52213.rs:13:11 --> $DIR/issue-52213.rs:13:20
| |
LL | fn transmute_lifetime<'a, 'b, T>(t: &'a (T,)) -> &'b T { LL | fn transmute_lifetime<'a, 'b, T>(t: &'a (T,)) -> &'b T {
| -- -- lifetime `'b` defined here | -- -- lifetime `'b` defined here
@ -13,7 +13,7 @@ LL | fn transmute_lifetime<'a, 'b, T>(t: &'a (T,)) -> &'b T {
| lifetime `'a` defined here | lifetime `'a` defined here
LL | match (&t,) { //~ ERROR cannot infer an appropriate lifetime LL | match (&t,) { //~ ERROR cannot infer an appropriate lifetime
LL | ((u,),) => u, LL | ((u,),) => u,
| ^ requires that `'a` must outlive `'b` | ^ returning this value requires that `'a` must outlive `'b`
error: aborting due to previous error error: aborting due to previous error

View file

@ -8,7 +8,7 @@ error: unsatisfied lifetime constraints
--> $DIR/issue-52533-1.rs:19:18 --> $DIR/issue-52533-1.rs:19:18
| |
LL | gimme(|x, y| y) LL | gimme(|x, y| y)
| - - ^ closure was supposed to return data with lifetime `'1` but it is returning data with lifetime `'2` | - - ^ closure was supposed to return data with lifetime `'2` but it is returning data with lifetime `'1`
| | | | | |
| | has type `&Foo<'_, '1, u32>` | | has type `&Foo<'_, '1, u32>`
| has type `&Foo<'_, '2, u32>` | has type `&Foo<'_, '2, u32>`

View file

@ -8,7 +8,7 @@ error: unsatisfied lifetime constraints
--> $DIR/issue-52533.rs:15:16 --> $DIR/issue-52533.rs:15:16
| |
LL | foo(|a, b| b) LL | foo(|a, b| b)
| - - ^ closure was supposed to return data with lifetime `'1` but it is returning data with lifetime `'2` | - - ^ closure was supposed to return data with lifetime `'2` but it is returning data with lifetime `'1`
| | | | | |
| | has type `&'1 u32` | | has type `&'1 u32`
| has type `&'2 u32` | has type `&'2 u32`

View file

@ -5,17 +5,13 @@ LL | &*x //~ ERROR explicit lifetime
| ^^^ | ^^^
error[E0621]: explicit lifetime required in the type of `x` error[E0621]: explicit lifetime required in the type of `x`
--> $DIR/42701_one_named_and_one_anonymous.rs:16:5 --> $DIR/42701_one_named_and_one_anonymous.rs:20:9
| |
LL | fn foo2<'a>(a: &'a Foo, x: &i32) -> &'a i32 { LL | fn foo2<'a>(a: &'a Foo, x: &i32) -> &'a i32 {
| ---- help: add explicit lifetime `'a` to the type of `x`: `&'a i32` | ---- help: add explicit lifetime `'a` to the type of `x`: `&'a i32`
LL | / if true { ...
LL | | let p: &i32 = &a.field; LL | &*x //~ ERROR explicit lifetime
LL | | &*p | ^^^ lifetime `'a` required
LL | | } else {
LL | | &*x //~ ERROR explicit lifetime
LL | | }
| |_____^ lifetime `'a` required
error: aborting due to previous error error: aborting due to previous error

View file

@ -5,12 +5,13 @@ LL | other //~ ERROR explicit lifetime
| ^^^^^ | ^^^^^
error[E0621]: explicit lifetime required in the type of `other` error[E0621]: explicit lifetime required in the type of `other`
--> $DIR/ex1-return-one-existing-name-early-bound-in-struct.rs:18:15 --> $DIR/ex1-return-one-existing-name-early-bound-in-struct.rs:21:21
| |
LL | fn bar(&self, other: Foo) -> Foo<'a> { LL | fn bar(&self, other: Foo) -> Foo<'a> {
| --- help: add explicit lifetime `'a` to the type of `other`: `Foo<'a>` | --- help: add explicit lifetime `'a` to the type of `other`: `Foo<'a>`
LL | match *self { ...
| ^^^^^ lifetime `'a` required LL | other //~ ERROR explicit lifetime
| ^^^^^ lifetime `'a` required
error: aborting due to previous error error: aborting due to previous error

View file

@ -5,12 +5,12 @@ LL | if x > y { x } else { y } //~ ERROR explicit lifetime
| ^ | ^
error[E0621]: explicit lifetime required in the type of `x` error[E0621]: explicit lifetime required in the type of `x`
--> $DIR/ex1-return-one-existing-name-if-else-2.rs:12:8 --> $DIR/ex1-return-one-existing-name-if-else-2.rs:12:16
| |
LL | fn foo<'a>(x: &i32, y: &'a i32) -> &'a i32 { LL | fn foo<'a>(x: &i32, y: &'a i32) -> &'a i32 {
| ---- help: add explicit lifetime `'a` to the type of `x`: `&'a i32` | ---- help: add explicit lifetime `'a` to the type of `x`: `&'a i32`
LL | if x > y { x } else { y } //~ ERROR explicit lifetime LL | if x > y { x } else { y } //~ ERROR explicit lifetime
| ^^^^^ lifetime `'a` required | ^ lifetime `'a` required
error: aborting due to previous error error: aborting due to previous error

View file

@ -5,12 +5,12 @@ LL | if x > y { x } else { y } //~ ERROR explicit lifetime
| ^ | ^
error[E0621]: explicit lifetime required in parameter type error[E0621]: explicit lifetime required in parameter type
--> $DIR/ex1-return-one-existing-name-if-else-3.rs:11:16 --> $DIR/ex1-return-one-existing-name-if-else-3.rs:12:27
| |
LL | fn foo<'a>((x, y): (&'a i32, &i32)) -> &'a i32 { LL | fn foo<'a>((x, y): (&'a i32, &i32)) -> &'a i32 {
| ^ --------------- help: add explicit lifetime `'a` to type: `(&'a i32, &'a i32)` | --------------- help: add explicit lifetime `'a` to type: `(&'a i32, &'a i32)`
| | LL | if x > y { x } else { y } //~ ERROR explicit lifetime
| lifetime `'a` required | ^ lifetime `'a` required
error: aborting due to previous error error: aborting due to previous error

View file

@ -5,12 +5,12 @@ LL | if x > y { x } else { y } //~ ERROR explicit lifetime
| ^ | ^
error[E0621]: explicit lifetime required in the type of `x` error[E0621]: explicit lifetime required in the type of `x`
--> $DIR/ex1-return-one-existing-name-if-else-using-impl-2.rs:14:7 --> $DIR/ex1-return-one-existing-name-if-else-using-impl-2.rs:14:15
| |
LL | fn foo<'a>(x: &i32, y: &'a i32) -> &'a i32 { LL | fn foo<'a>(x: &i32, y: &'a i32) -> &'a i32 {
| ---- help: add explicit lifetime `'a` to the type of `x`: `&'a i32` | ---- help: add explicit lifetime `'a` to the type of `x`: `&'a i32`
LL | if x > y { x } else { y } //~ ERROR explicit lifetime LL | if x > y { x } else { y } //~ ERROR explicit lifetime
| ^^^^^ lifetime `'a` required | ^ lifetime `'a` required
error: aborting due to previous error error: aborting due to previous error

View file

@ -5,13 +5,13 @@ LL | if true { &self.field } else { x } //~ ERROR explicit lifetime
| ^ | ^
error[E0621]: explicit lifetime required in the type of `x` error[E0621]: explicit lifetime required in the type of `x`
--> $DIR/ex1-return-one-existing-name-if-else-using-impl-3.rs:18:5 --> $DIR/ex1-return-one-existing-name-if-else-using-impl-3.rs:18:36
| |
LL | fn foo<'a>(&'a self, x: &i32) -> &i32 { LL | fn foo<'a>(&'a self, x: &i32) -> &i32 {
| ---- help: add explicit lifetime `'a` to the type of `x`: `&'a i32` | ---- help: add explicit lifetime `'a` to the type of `x`: `&'a i32`
LL | LL |
LL | if true { &self.field } else { x } //~ ERROR explicit lifetime LL | if true { &self.field } else { x } //~ ERROR explicit lifetime
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ lifetime `'a` required | ^ lifetime `'a` required
error: aborting due to previous error error: aborting due to previous error

View file

@ -5,7 +5,7 @@ LL | if x > y { x } else { y } //~ ERROR lifetime mismatch
| ^ | ^
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/ex1-return-one-existing-name-if-else-using-impl.rs:21:12 --> $DIR/ex1-return-one-existing-name-if-else-using-impl.rs:21:20
| |
LL | fn foo<'a>(x: &i32, y: &'a i32) -> &'a i32 { LL | fn foo<'a>(x: &i32, y: &'a i32) -> &'a i32 {
| -- - let's call the lifetime of this reference `'1` | -- - let's call the lifetime of this reference `'1`
@ -13,7 +13,7 @@ LL | fn foo<'a>(x: &i32, y: &'a i32) -> &'a i32 {
| lifetime `'a` defined here | lifetime `'a` defined here
LL | LL |
LL | if x > y { x } else { y } //~ ERROR lifetime mismatch LL | if x > y { x } else { y } //~ ERROR lifetime mismatch
| ^^^^^ requires that `'1` must outlive `'a` | ^ function was supposed to return data with lifetime `'a` but it is returning data with lifetime `'1`
error: aborting due to previous error error: aborting due to previous error

View file

@ -5,12 +5,12 @@ LL | if x > y { x } else { y } //~ ERROR explicit lifetime
| ^ | ^
error[E0621]: explicit lifetime required in the type of `y` error[E0621]: explicit lifetime required in the type of `y`
--> $DIR/ex1-return-one-existing-name-if-else.rs:12:8 --> $DIR/ex1-return-one-existing-name-if-else.rs:12:27
| |
LL | fn foo<'a>(x: &'a i32, y: &i32) -> &'a i32 { LL | fn foo<'a>(x: &'a i32, y: &i32) -> &'a i32 {
| ---- help: add explicit lifetime `'a` to the type of `y`: `&'a i32` | ---- help: add explicit lifetime `'a` to the type of `y`: `&'a i32`
LL | if x > y { x } else { y } //~ ERROR explicit lifetime LL | if x > y { x } else { y } //~ ERROR explicit lifetime
| ^^^^^ lifetime `'a` required | ^ lifetime `'a` required
error: aborting due to previous error error: aborting due to previous error

View file

@ -13,7 +13,7 @@ LL | fn foo<'a>(&self, x: &'a i32) -> &i32 {
| lifetime `'a` defined here | lifetime `'a` defined here
LL | LL |
LL | x //~ ERROR lifetime mismatch LL | x //~ ERROR lifetime mismatch
| ^ function was supposed to return data with lifetime `'a` but it is returning data with lifetime `'1` | ^ function was supposed to return data with lifetime `'1` but it is returning data with lifetime `'a`
error: aborting due to previous error error: aborting due to previous error

View file

@ -5,7 +5,7 @@ LL | if true { x } else { self } //~ ERROR lifetime mismatch
| ^^^^ | ^^^^
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/ex1-return-one-existing-name-self-is-anon.rs:18:9 --> $DIR/ex1-return-one-existing-name-self-is-anon.rs:18:30
| |
LL | fn foo<'a>(&self, x: &'a Foo) -> &'a Foo { LL | fn foo<'a>(&self, x: &'a Foo) -> &'a Foo {
| -- - let's call the lifetime of this reference `'1` | -- - let's call the lifetime of this reference `'1`
@ -13,7 +13,7 @@ LL | fn foo<'a>(&self, x: &'a Foo) -> &'a Foo {
| lifetime `'a` defined here | lifetime `'a` defined here
LL | LL |
LL | if true { x } else { self } //~ ERROR lifetime mismatch LL | if true { x } else { self } //~ ERROR lifetime mismatch
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ requires that `'1` must outlive `'a` | ^^^^ function was supposed to return data with lifetime `'a` but it is returning data with lifetime `'1`
error: aborting due to previous error error: aborting due to previous error

View file

@ -12,7 +12,7 @@ LL | fn foo<'a>(&self, x: &i32) -> &i32 {
| | | |
| let's call the lifetime of this reference `'2` | let's call the lifetime of this reference `'2`
LL | x //~ ERROR lifetime mismatch LL | x //~ ERROR lifetime mismatch
| ^ function was supposed to return data with lifetime `'1` but it is returning data with lifetime `'2` | ^ function was supposed to return data with lifetime `'2` but it is returning data with lifetime `'1`
error: aborting due to previous error error: aborting due to previous error

View file

@ -5,14 +5,14 @@ LL | if true { x } else { self } //~ ERROR lifetime mismatch
| ^ | ^
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/ex3-both-anon-regions-self-is-anon.rs:17:9 --> $DIR/ex3-both-anon-regions-self-is-anon.rs:17:19
| |
LL | fn foo<'a>(&self, x: &Foo) -> &Foo { LL | fn foo<'a>(&self, x: &Foo) -> &Foo {
| - - let's call the lifetime of this reference `'1` | - - let's call the lifetime of this reference `'1`
| | | |
| let's call the lifetime of this reference `'2` | let's call the lifetime of this reference `'2`
LL | if true { x } else { self } //~ ERROR lifetime mismatch LL | if true { x } else { self } //~ ERROR lifetime mismatch
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ requires that `'1` must outlive `'2` | ^ function was supposed to return data with lifetime `'2` but it is returning data with lifetime `'1`
error: aborting due to previous error error: aborting due to previous error

View file

@ -11,20 +11,22 @@ LL | s //~ ERROR E0312
| ^ | ^
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/lub-if.rs:34:8 --> $DIR/lub-if.rs:38:9
| |
LL | pub fn opt_str2<'a>(maybestr: &'a Option<String>) -> &'static str { LL | pub fn opt_str2<'a>(maybestr: &'a Option<String>) -> &'static str {
| -- lifetime `'a` defined here | -- lifetime `'a` defined here
LL | if maybestr.is_none() { ...
| ^^^^^^^^^^^^^^^^^^ requires that `'a` must outlive `'static` LL | s //~ ERROR E0312
| ^ returning this value requires that `'a` must outlive `'static`
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/lub-if.rs:43:8 --> $DIR/lub-if.rs:45:9
| |
LL | pub fn opt_str3<'a>(maybestr: &'a Option<String>) -> &'static str { LL | pub fn opt_str3<'a>(maybestr: &'a Option<String>) -> &'static str {
| -- lifetime `'a` defined here | -- lifetime `'a` defined here
LL | if maybestr.is_some() { ...
| ^^^^^^^^^^^^^^^^^^ requires that `'a` must outlive `'static` LL | s //~ ERROR E0312
| ^ returning this value requires that `'a` must outlive `'static`
error: aborting due to 2 previous errors error: aborting due to 2 previous errors

View file

@ -11,20 +11,22 @@ LL | s //~ ERROR E0312
| ^ | ^
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/lub-match.rs:36:11 --> $DIR/lub-match.rs:40:13
| |
LL | pub fn opt_str2<'a>(maybestr: &'a Option<String>) -> &'static str { LL | pub fn opt_str2<'a>(maybestr: &'a Option<String>) -> &'static str {
| -- lifetime `'a` defined here | -- lifetime `'a` defined here
LL | match *maybestr { ...
| ^^^^^^^^^ requires that `'a` must outlive `'static` LL | s //~ ERROR E0312
| ^ returning this value requires that `'a` must outlive `'static`
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/lub-match.rs:46:11 --> $DIR/lub-match.rs:49:13
| |
LL | pub fn opt_str3<'a>(maybestr: &'a Option<String>) -> &'static str { LL | pub fn opt_str3<'a>(maybestr: &'a Option<String>) -> &'static str {
| -- lifetime `'a` defined here | -- lifetime `'a` defined here
LL | match *maybestr { ...
| ^^^^^^^^^ requires that `'a` must outlive `'static` LL | s //~ ERROR E0312
| ^ returning this value requires that `'a` must outlive `'static`
error: aborting due to 2 previous errors error: aborting due to 2 previous errors

View file

@ -15,7 +15,7 @@ LL | fn bar<'a>(&'a mut self) -> &'a mut &'a i32 {
| | lifetime `'a` defined here | | lifetime `'a` defined here
LL | | match self.0 { ref mut x => x } //~ ERROR mismatched types LL | | match self.0 { ref mut x => x } //~ ERROR mismatched types
LL | | } LL | | }
| |_____^ requires that `'a` must outlive `'b` | |_____^ returning this value requires that `'a` must outlive `'b`
error: aborting due to previous error error: aborting due to previous error

View file

@ -16,7 +16,7 @@ LL | fn bar<'a>(&'a mut self) -> &'a mut &'a i32 {
LL | | let ref mut x = self.0; LL | | let ref mut x = self.0;
LL | | x //~ ERROR mismatched types LL | | x //~ ERROR mismatched types
LL | | } LL | | }
| |_____^ requires that `'a` must outlive `'b` | |_____^ returning this value requires that `'a` must outlive `'b`
error: aborting due to previous error error: aborting due to previous error

View file

@ -10,7 +10,7 @@ error: unsatisfied lifetime constraints
LL | fn foo<'a>(x: &'a u32) -> &'static u32 { LL | fn foo<'a>(x: &'a u32) -> &'static u32 {
| -- lifetime `'a` defined here | -- lifetime `'a` defined here
LL | &*x LL | &*x
| ^^^ requires that `'a` must outlive `'static` | ^^^ returning this value requires that `'a` must outlive `'static`
error: aborting due to previous error error: aborting due to previous error

View file

@ -12,7 +12,7 @@ LL | fn foo<'a, 'b>(x: &'a u32, y: &'b u32) -> &'b u32 {
| | | |
| lifetime `'a` defined here | lifetime `'a` defined here
LL | &*x LL | &*x
| ^^^ requires that `'a` must outlive `'b` | ^^^ function was supposed to return data with lifetime `'b` but it is returning data with lifetime `'a`
error: aborting due to previous error error: aborting due to previous error

View file

@ -19,7 +19,7 @@ error: unsatisfied lifetime constraints
--> $DIR/return-wrong-bound-region.rs:21:23 --> $DIR/return-wrong-bound-region.rs:21:23
| |
LL | expect_sig(|a, b| b); // ought to return `a` LL | expect_sig(|a, b| b); // ought to return `a`
| - - ^ closure was supposed to return data with lifetime `'1` but it is returning data with lifetime `'2` | - - ^ closure was supposed to return data with lifetime `'2` but it is returning data with lifetime `'1`
| | | | | |
| | has type `&'1 i32` | | has type `&'1 i32`
| has type `&'2 i32` | has type `&'2 i32`

View file

@ -2,7 +2,7 @@ error: unsatisfied lifetime constraints
--> $DIR/issue-48238.rs:21:13 --> $DIR/issue-48238.rs:21:13
| |
LL | move || use_val(&orig); //~ ERROR LL | move || use_val(&orig); //~ ERROR
| ------- ^^^^^^^^^^^^^^ argument requires that `'1` must outlive `'2` | ------- ^^^^^^^^^^^^^^ returning this value requires that `'1` must outlive `'2`
| | | | | |
| | return type of closure is &'2 u8 | | return type of closure is &'2 u8
| lifetime `'1` represents this closure's body | lifetime `'1` represents this closure's body

View file

@ -14,9 +14,9 @@
fn bar<'a, 'b>() -> fn(&'a u32, &'b u32) -> &'a u32 { fn bar<'a, 'b>() -> fn(&'a u32, &'b u32) -> &'a u32 {
let g: fn(_, _) -> _ = |_x, y| y; let g: fn(_, _) -> _ = |_x, y| y;
//~^ ERROR unsatisfied lifetime constraints
g g
//~^ WARNING not reporting region error due to nll //~^ WARNING not reporting region error due to nll
//~^^ ERROR unsatisfied lifetime constraints
} }
fn main() {} fn main() {}

View file

@ -1,18 +1,19 @@
warning: not reporting region error due to nll warning: not reporting region error due to nll
--> $DIR/mir_check_cast_closure.rs:18:5 --> $DIR/mir_check_cast_closure.rs:17:5
| |
LL | g LL | g
| ^ | ^
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/mir_check_cast_closure.rs:16:28 --> $DIR/mir_check_cast_closure.rs:17:5
| |
LL | fn bar<'a, 'b>() -> fn(&'a u32, &'b u32) -> &'a u32 { LL | fn bar<'a, 'b>() -> fn(&'a u32, &'b u32) -> &'a u32 {
| -- -- lifetime `'b` defined here | -- -- lifetime `'b` defined here
| | | |
| lifetime `'a` defined here | lifetime `'a` defined here
LL | let g: fn(_, _) -> _ = |_x, y| y; LL | let g: fn(_, _) -> _ = |_x, y| y;
| ^^^^^^^^^ cast requires that `'b` must outlive `'a` LL | g
| ^ returning this value requires that `'b` must outlive `'a`
error: aborting due to previous error error: aborting due to previous error

View file

@ -4,14 +4,14 @@ warning: not reporting region error due to nll
LL | let f: fn(_) -> _ = foo; LL | let f: fn(_) -> _ = foo;
| ^^^ | ^^^
error: borrowed data escapes outside of function error: unsatisfied lifetime constraints
--> $DIR/mir_check_cast_reify.rs:48:5 --> $DIR/mir_check_cast_reify.rs:48:5
| |
LL | fn bar<'a>(x: &'a u32) -> &'static u32 { LL | fn bar<'a>(x: &'a u32) -> &'static u32 {
| - `x` is a reference that is only valid in the function body | -- lifetime `'a` defined here
... ...
LL | f(x) LL | f(x)
| ^^^^ `x` escapes the function body here | ^^^^ returning this value requires that `'a` must outlive `'static`
error: aborting due to previous error error: aborting due to previous error

View file

@ -4,14 +4,14 @@ warning: not reporting region error due to nll
LL | let g: unsafe fn(_) -> _ = f; LL | let g: unsafe fn(_) -> _ = f;
| ^ | ^
error: borrowed data escapes outside of function error: unsatisfied lifetime constraints
--> $DIR/mir_check_cast_unsafe_fn.rs:20:14 --> $DIR/mir_check_cast_unsafe_fn.rs:20:14
| |
LL | fn bar<'a>(input: &'a u32, f: fn(&'a u32) -> &'a u32) -> &'static u32 { LL | fn bar<'a>(input: &'a u32, f: fn(&'a u32) -> &'a u32) -> &'static u32 {
| ----- `input` is a reference that is only valid in the function body | -- lifetime `'a` defined here
... ...
LL | unsafe { g(input) } LL | unsafe { g(input) }
| ^^^^^^^^ `input` escapes the function body here | ^^^^^^^^ returning this value requires that `'a` must outlive `'static`
error: aborting due to previous error error: aborting due to previous error

View file

@ -15,7 +15,7 @@ LL | | //~^ ERROR unsatisfied lifetime constraints
LL | | x LL | | x
LL | | //~^ WARNING not reporting region error due to nll LL | | //~^ WARNING not reporting region error due to nll
LL | | } LL | | }
| |_^ return requires that `'a` must outlive `'static` | |_^ returning this value requires that `'a` must outlive `'static`
error: aborting due to previous error error: aborting due to previous error

View file

@ -18,7 +18,7 @@ LL | | // for<'a,'b,'c>fn(&'a (SomeTrait+'c)) -> &'b (SomeTrait+'a)
... | ... |
LL | | //~| ERROR cannot infer LL | | //~| ERROR cannot infer
LL | | } LL | | }
| |_^ return requires that `'a` must outlive `'b` | |_^ returning this value requires that `'a` must outlive `'b`
error: aborting due to previous error error: aborting due to previous error

View file

@ -19,7 +19,7 @@ LL | fn load1<'a,'b>(a: &'a MyBox<SomeTrait>,
| lifetime `'a` defined here | lifetime `'a` defined here
... ...
LL | a //~ ERROR lifetime mismatch LL | a //~ ERROR lifetime mismatch
| ^ function was supposed to return data with lifetime `'a` but it is returning data with lifetime `'b` | ^ function was supposed to return data with lifetime `'b` but it is returning data with lifetime `'a`
error: borrowed data escapes outside of function error: borrowed data escapes outside of function
--> $DIR/object-lifetime-default-mybox.rs:41:5 --> $DIR/object-lifetime-default-mybox.rs:41:5

View file

@ -4,13 +4,15 @@ warning: not reporting region error due to nll
LL | x.borrowed() //~ ERROR cannot infer LL | x.borrowed() //~ ERROR cannot infer
| ^^^^^^^^ | ^^^^^^^^
error: borrowed data escapes outside of function error: unsatisfied lifetime constraints
--> $DIR/region-object-lifetime-2.rs:20:5 --> $DIR/region-object-lifetime-2.rs:20:5
| |
LL | fn borrowed_receiver_different_lifetimes<'a,'b>(x: &'a Foo) -> &'b () { LL | fn borrowed_receiver_different_lifetimes<'a,'b>(x: &'a Foo) -> &'b () {
| - `x` is a reference that is only valid in the function body | -- -- lifetime `'b` defined here
| |
| lifetime `'a` defined here
LL | x.borrowed() //~ ERROR cannot infer LL | x.borrowed() //~ ERROR cannot infer
| ^^^^^^^^^^^^ `x` escapes the function body here | ^^^^^^^^^^^^ returning this value requires that `'a` must outlive `'b`
error: aborting due to previous error error: aborting due to previous error

View file

@ -67,7 +67,7 @@ LL | fn d<'a,'b>(v: &'a [u8]) -> Box<Foo+'b> {
LL | | Box::new(v) LL | | Box::new(v)
LL | | //~^ ERROR cannot infer an appropriate lifetime due to conflicting LL | | //~^ ERROR cannot infer an appropriate lifetime due to conflicting
LL | | } LL | | }
| |_^ return requires that `'a` must outlive `'b` | |_^ returning this value requires that `'a` must outlive `'b`
error: aborting due to 4 previous errors error: aborting due to 4 previous errors

View file

@ -18,7 +18,7 @@ LL | fn a_fn1<'a,'b>(e: an_enum<'a>) -> an_enum<'b> {
| | | |
| lifetime `'a` defined here | lifetime `'a` defined here
LL | return e; //~ ERROR mismatched types LL | return e; //~ ERROR mismatched types
| ^ return requires that `'a` must outlive `'b` | ^ returning this value requires that `'a` must outlive `'b`
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/regions-bounds.rs:23:12 --> $DIR/regions-bounds.rs:23:12
@ -28,7 +28,7 @@ LL | fn a_fn3<'a,'b>(e: a_class<'a>) -> a_class<'b> {
| | | |
| lifetime `'a` defined here | lifetime `'a` defined here
LL | return e; //~ ERROR mismatched types LL | return e; //~ ERROR mismatched types
| ^ return requires that `'a` must outlive `'b` | ^ returning this value requires that `'a` must outlive `'b`
error: aborting due to 2 previous errors error: aborting due to 2 previous errors

View file

@ -13,7 +13,7 @@ LL | fn g<'a, T: 'static>(v: Box<A<T>+'a>) -> Box<X+'static> {
| | lifetime `'a` defined here | | lifetime `'a` defined here
LL | | box B(&*v) as Box<X> //~ ERROR cannot infer LL | | box B(&*v) as Box<X> //~ ERROR cannot infer
LL | | } LL | | }
| |_^ return requires that `'a` must outlive `'static` | |_^ returning this value requires that `'a` must outlive `'static`
error[E0597]: `*v` does not live long enough error[E0597]: `*v` does not live long enough
--> $DIR/regions-close-object-into-object-2.rs:20:11 --> $DIR/regions-close-object-into-object-2.rs:20:11

View file

@ -37,7 +37,7 @@ LL | fn i<'a, T, U>(v: Box<A<U>+'a>) -> Box<X+'static> {
| | lifetime `'a` defined here | | lifetime `'a` defined here
LL | | box B(&*v) as Box<X> //~ ERROR cannot infer LL | | box B(&*v) as Box<X> //~ ERROR cannot infer
LL | | } LL | | }
| |_^ return requires that `'a` must outlive `'static` | |_^ returning this value requires that `'a` must outlive `'static`
error[E0310]: the parameter type `U` may not live long enough error[E0310]: the parameter type `U` may not live long enough
--> $DIR/regions-close-object-into-object-4.rs:20:5 --> $DIR/regions-close-object-into-object-4.rs:20:5

View file

@ -5,14 +5,14 @@ LL | ast::add(x, y) //~ ERROR 17:5: 17:19: lifetime mismatch [E0623]
| ^^^^^^^^ | ^^^^^^^^
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/regions-creating-enums3.rs:17:14 --> $DIR/regions-creating-enums3.rs:17:5
| |
LL | fn mk_add_bad1<'a,'b>(x: &'a ast<'a>, y: &'b ast<'b>) -> ast<'a> { LL | fn mk_add_bad1<'a,'b>(x: &'a ast<'a>, y: &'b ast<'b>) -> ast<'a> {
| -- -- lifetime `'b` defined here | -- -- lifetime `'b` defined here
| | | |
| lifetime `'a` defined here | lifetime `'a` defined here
LL | ast::add(x, y) //~ ERROR 17:5: 17:19: lifetime mismatch [E0623] LL | ast::add(x, y) //~ ERROR 17:5: 17:19: lifetime mismatch [E0623]
| ^ requires that `'b` must outlive `'a` | ^^^^^^^^^^^^^^ function was supposed to return data with lifetime `'a` but it is returning data with lifetime `'b`
error: aborting due to previous error error: aborting due to previous error

View file

@ -5,14 +5,14 @@ LL | ast::add(x, y) //~ ERROR cannot infer
| ^^^^^^^^ | ^^^^^^^^
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/regions-creating-enums4.rs:17:14 --> $DIR/regions-creating-enums4.rs:17:5
| |
LL | fn mk_add_bad2<'a,'b>(x: &'a ast<'a>, y: &'a ast<'a>, z: &ast) -> ast<'b> { LL | fn mk_add_bad2<'a,'b>(x: &'a ast<'a>, y: &'a ast<'a>, z: &ast) -> ast<'b> {
| -- -- lifetime `'b` defined here | -- -- lifetime `'b` defined here
| | | |
| lifetime `'a` defined here | lifetime `'a` defined here
LL | ast::add(x, y) //~ ERROR cannot infer LL | ast::add(x, y) //~ ERROR cannot infer
| ^ requires that `'a` must outlive `'b` | ^^^^^^^^^^^^^^ returning this value requires that `'a` must outlive `'b`
error: aborting due to previous error error: aborting due to previous error

View file

@ -12,7 +12,7 @@ LL | impl<'a> Box<'a> {
LL | fn or<'b,G:GetRef<'b>>(&self, g2: G) -> &'a isize { LL | fn or<'b,G:GetRef<'b>>(&self, g2: G) -> &'a isize {
| -- lifetime `'b` defined here | -- lifetime `'b` defined here
LL | g2.get() LL | g2.get()
| ^^^^^^^^ argument requires that `'b` must outlive `'a` | ^^^^^^^^ returning this value requires that `'b` must outlive `'a`
error: aborting due to previous error error: aborting due to previous error

View file

@ -12,7 +12,7 @@ LL | fn get<'a,'b,G:GetRef<'a, isize>>(g1: G, b: &'b isize) -> &'b isize {
| | | |
| lifetime `'a` defined here | lifetime `'a` defined here
LL | g1.get() LL | g1.get()
| ^^^^^^^^ argument requires that `'a` must outlive `'b` | ^^^^^^^^ function was supposed to return data with lifetime `'b` but it is returning data with lifetime `'a`
error: aborting due to previous error error: aborting due to previous error

View file

@ -8,7 +8,7 @@ error: unsatisfied lifetime constraints
--> $DIR/regions-escape-method.rs:25:13 --> $DIR/regions-escape-method.rs:25:13
| |
LL | s.f(|p| p) //~ ERROR cannot infer LL | s.f(|p| p) //~ ERROR cannot infer
| -- ^ return requires that `'1` must outlive `'2` | -- ^ returning this value requires that `'1` must outlive `'2`
| || | ||
| |return type of closure is &'2 i32 | |return type of closure is &'2 i32
| has type `&'1 i32` | has type `&'1 i32`

View file

@ -8,7 +8,7 @@ error: unsatisfied lifetime constraints
--> $DIR/regions-escape-via-trait-or-not.rs:28:14 --> $DIR/regions-escape-via-trait-or-not.rs:28:14
| |
LL | with(|o| o) //~ ERROR cannot infer LL | with(|o| o) //~ ERROR cannot infer
| -- ^ return requires that `'1` must outlive `'2` | -- ^ returning this value requires that `'1` must outlive `'2`
| || | ||
| |return type of closure is &'2 isize | |return type of closure is &'2 isize
| has type `&'1 isize` | has type `&'1 isize`

View file

@ -19,7 +19,7 @@ LL | fn ordering2<'a, 'b>(x: &'a &'b usize, y: &'a usize) -> &'b usize {
| lifetime `'a` defined here | lifetime `'a` defined here
LL | // However, it is not safe to assume that 'b <= 'a LL | // However, it is not safe to assume that 'b <= 'a
LL | &*y //~ ERROR 23:5: 23:8: lifetime mismatch [E0623] LL | &*y //~ ERROR 23:5: 23:8: lifetime mismatch [E0623]
| ^^^ requires that `'a` must outlive `'b` | ^^^ function was supposed to return data with lifetime `'b` but it is returning data with lifetime `'a`
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/regions-free-region-ordering-callee.rs:28:24 --> $DIR/regions-free-region-ordering-callee.rs:28:24

View file

@ -15,7 +15,7 @@ LL | / match self.next {
LL | | Some(ref next) => next.get(), LL | | Some(ref next) => next.get(),
LL | | None => &self.val //~ ERROR cannot infer LL | | None => &self.val //~ ERROR cannot infer
LL | | } LL | | }
| |_____^ requires that `'a` must outlive `'b` | |_____^ returning this value requires that `'a` must outlive `'b`
error: aborting due to previous error error: aborting due to previous error

View file

@ -5,13 +5,17 @@ LL | Flag { //~ ERROR 25:13: 30:14: explicit lifetime required in th
| ^^^^ | ^^^^
error[E0621]: explicit lifetime required in the type of `s` error[E0621]: explicit lifetime required in the type of `s`
--> $DIR/regions-glb-free-free.rs:26:23 --> $DIR/regions-glb-free-free.rs:25:13
| |
LL | pub fn set_desc(self, s: &str) -> Flag<'a> { LL | pub fn set_desc(self, s: &str) -> Flag<'a> {
| ---- help: add explicit lifetime `'a` to the type of `s`: `&'a str` | ---- help: add explicit lifetime `'a` to the type of `s`: `&'a str`
LL | Flag { //~ ERROR 25:13: 30:14: explicit lifetime required in the type of `s` [E0621] LL | / Flag { //~ ERROR 25:13: 30:14: explicit lifetime required in the type of `s` [E0621]
LL | name: self.name, LL | | name: self.name,
| ^^^^^^^^^ lifetime `'a` required LL | | desc: s,
LL | | max_count: self.max_count,
LL | | value: self.value
LL | | }
| |_____________^ lifetime `'a` required
error: aborting due to previous error error: aborting due to previous error

View file

@ -4,13 +4,14 @@ warning: not reporting region error due to nll
LL | let z = with(|y| { select(x, y) }); LL | let z = with(|y| { select(x, y) });
| ^^^^^^^^^^^^ | ^^^^^^^^^^^^
error: borrowed data escapes outside of closure error: unsatisfied lifetime constraints
--> $DIR/regions-infer-call-3.rs:18:24 --> $DIR/regions-infer-call-3.rs:18:24
| |
LL | let z = with(|y| { select(x, y) }); LL | let z = with(|y| { select(x, y) });
| - ^^^^^^^^^^^^ `y` escapes the closure body here | -- ^^^^^^^^^^^^ returning this value requires that `'1` must outlive `'2`
| | | ||
| `y` is a reference that is only valid in the closure body | |return type of closure is &'2 isize
| has type `&'1 isize`
error: aborting due to previous error error: aborting due to previous error

View file

@ -10,7 +10,7 @@ error: unsatisfied lifetime constraints
LL | fn to_longer_lifetime<'r>(b_isize: invariant<'r>) -> invariant<'static> { LL | fn to_longer_lifetime<'r>(b_isize: invariant<'r>) -> invariant<'static> {
| -- lifetime `'r` defined here | -- lifetime `'r` defined here
LL | b_isize //~ ERROR mismatched types LL | b_isize //~ ERROR mismatched types
| ^^^^^^^ return requires that `'r` must outlive `'static` | ^^^^^^^ returning this value requires that `'r` must outlive `'static`
error: aborting due to previous error error: aborting due to previous error

View file

@ -10,7 +10,7 @@ error: unsatisfied lifetime constraints
LL | fn to_longer_lifetime<'r>(b_isize: invariant<'r>) -> invariant<'static> { LL | fn to_longer_lifetime<'r>(b_isize: invariant<'r>) -> invariant<'static> {
| -- lifetime `'r` defined here | -- lifetime `'r` defined here
LL | b_isize //~ ERROR mismatched types LL | b_isize //~ ERROR mismatched types
| ^^^^^^^ return requires that `'r` must outlive `'static` | ^^^^^^^ returning this value requires that `'r` must outlive `'static`
error: aborting due to previous error error: aborting due to previous error

View file

@ -10,7 +10,7 @@ error: unsatisfied lifetime constraints
LL | fn to_longer_lifetime<'r>(b_isize: Invariant<'r>) -> Invariant<'static> { LL | fn to_longer_lifetime<'r>(b_isize: Invariant<'r>) -> Invariant<'static> {
| -- lifetime `'r` defined here | -- lifetime `'r` defined here
LL | b_isize //~ ERROR mismatched types LL | b_isize //~ ERROR mismatched types
| ^^^^^^^ return requires that `'r` must outlive `'static` | ^^^^^^^ returning this value requires that `'r` must outlive `'static`
error: aborting due to previous error error: aborting due to previous error

View file

@ -14,7 +14,7 @@ error: unsatisfied lifetime constraints
--> $DIR/regions-infer-not-param.rs:25:54 --> $DIR/regions-infer-not-param.rs:25:54
| |
LL | fn take_direct<'a,'b>(p: direct<'a>) -> direct<'b> { p } //~ ERROR mismatched types LL | fn take_direct<'a,'b>(p: direct<'a>) -> direct<'b> { p } //~ ERROR mismatched types
| -- -- lifetime `'b` defined here ^ return requires that `'a` must outlive `'b` | -- -- lifetime `'b` defined here ^ returning this value requires that `'a` must outlive `'b`
| | | |
| lifetime `'a` defined here | lifetime `'a` defined here
@ -22,7 +22,7 @@ error: unsatisfied lifetime constraints
--> $DIR/regions-infer-not-param.rs:29:63 --> $DIR/regions-infer-not-param.rs:29:63
| |
LL | fn take_indirect2<'a,'b>(p: indirect2<'a>) -> indirect2<'b> { p } //~ ERROR mismatched types LL | fn take_indirect2<'a,'b>(p: indirect2<'a>) -> indirect2<'b> { p } //~ ERROR mismatched types
| -- -- lifetime `'b` defined here ^ function was supposed to return data with lifetime `'b` but it is returning data with lifetime `'a` | -- -- lifetime `'b` defined here ^ function was supposed to return data with lifetime `'a` but it is returning data with lifetime `'b`
| | | |
| lifetime `'a` defined here | lifetime `'a` defined here
@ -30,7 +30,7 @@ error: unsatisfied lifetime constraints
--> $DIR/regions-infer-not-param.rs:29:63 --> $DIR/regions-infer-not-param.rs:29:63
| |
LL | fn take_indirect2<'a,'b>(p: indirect2<'a>) -> indirect2<'b> { p } //~ ERROR mismatched types LL | fn take_indirect2<'a,'b>(p: indirect2<'a>) -> indirect2<'b> { p } //~ ERROR mismatched types
| -- -- lifetime `'b` defined here ^ return requires that `'a` must outlive `'b` | -- -- lifetime `'b` defined here ^ returning this value requires that `'a` must outlive `'b`
| | | |
| lifetime `'a` defined here | lifetime `'a` defined here

View file

@ -14,7 +14,7 @@ LL | fn copy_borrowed_ptr<'a, 'b, 'c>(p: &'a mut &'b mut &'c mut isize) -> &'b
| | lifetime `'a` defined here | | lifetime `'a` defined here
LL | | &mut ***p //~ ERROR 14:5: 14:14: lifetime mismatch [E0623] LL | | &mut ***p //~ ERROR 14:5: 14:14: lifetime mismatch [E0623]
LL | | } LL | | }
| |_^ requires that `'a` must outlive `'b` | |_^ function was supposed to return data with lifetime `'b` but it is returning data with lifetime `'a`
error: aborting due to previous error error: aborting due to previous error

View file

@ -14,7 +14,7 @@ LL | fn copy_borrowed_ptr<'a, 'b>(p: &'a mut &'b mut isize) -> &'b mut isize {
| | lifetime `'a` defined here | | lifetime `'a` defined here
LL | | &mut **p //~ ERROR 16:5: 16:13: lifetime mismatch [E0623] LL | | &mut **p //~ ERROR 16:5: 16:13: lifetime mismatch [E0623]
LL | | } LL | | }
| |_^ requires that `'a` must outlive `'b` | |_^ function was supposed to return data with lifetime `'b` but it is returning data with lifetime `'a`
error: aborting due to previous error error: aborting due to previous error

View file

@ -8,7 +8,7 @@ error: unsatisfied lifetime constraints
--> $DIR/regions-ret-borrowed-1.rs:20:14 --> $DIR/regions-ret-borrowed-1.rs:20:14
| |
LL | with(|o| o) LL | with(|o| o)
| -- ^ return requires that `'1` must outlive `'2` | -- ^ returning this value requires that `'1` must outlive `'2`
| || | ||
| |return type of closure is &'2 isize | |return type of closure is &'2 isize
| has type `&'1 isize` | has type `&'1 isize`

View file

@ -8,7 +8,7 @@ error: unsatisfied lifetime constraints
--> $DIR/regions-ret-borrowed.rs:23:14 --> $DIR/regions-ret-borrowed.rs:23:14
| |
LL | with(|o| o) LL | with(|o| o)
| -- ^ return requires that `'1` must outlive `'2` | -- ^ returning this value requires that `'1` must outlive `'2`
| || | ||
| |return type of closure is &'2 isize | |return type of closure is &'2 isize
| has type `&'1 isize` | has type `&'1 isize`

View file

@ -8,7 +8,7 @@ error: unsatisfied lifetime constraints
--> $DIR/regions-return-ref-to-upvar-issue-17403.rs:17:24 --> $DIR/regions-return-ref-to-upvar-issue-17403.rs:17:24
| |
LL | let mut f = || &mut x; //~ ERROR cannot infer LL | let mut f = || &mut x; //~ ERROR cannot infer
| -- ^^^^^^ return requires that `'1` must outlive `'2` | -- ^^^^^^ returning this value requires that `'1` must outlive `'2`
| || | ||
| |return type of closure is &'2 mut i32 | |return type of closure is &'2 mut i32
| lifetime `'1` represents this closure's body | lifetime `'1` represents this closure's body

View file

@ -22,7 +22,7 @@ error: unsatisfied lifetime constraints
LL | fn static_id_wrong_way<'a>(t: &'a ()) -> &'static () where 'static: 'a { LL | fn static_id_wrong_way<'a>(t: &'a ()) -> &'static () where 'static: 'a {
| -- lifetime `'a` defined here | -- lifetime `'a` defined here
LL | t //[ll]~ ERROR E0312 LL | t //[ll]~ ERROR E0312
| ^ return requires that `'a` must outlive `'static` | ^ returning this value requires that `'a` must outlive `'static`
error[E0621]: explicit lifetime required in the type of `u` error[E0621]: explicit lifetime required in the type of `u`
--> $DIR/regions-static-bound.rs:25:5 --> $DIR/regions-static-bound.rs:25:5

View file

@ -22,7 +22,7 @@ error: unsatisfied lifetime constraints
LL | fn static_id_wrong_way<'a>(t: &'a ()) -> &'static () where 'static: 'a { LL | fn static_id_wrong_way<'a>(t: &'a ()) -> &'static () where 'static: 'a {
| -- lifetime `'a` defined here | -- lifetime `'a` defined here
LL | t //[ll]~ ERROR E0312 LL | t //[ll]~ ERROR E0312
| ^ return requires that `'a` must outlive `'static` | ^ returning this value requires that `'a` must outlive `'static`
error[E0621]: explicit lifetime required in the type of `u` error[E0621]: explicit lifetime required in the type of `u`
--> $DIR/regions-static-bound.rs:25:5 --> $DIR/regions-static-bound.rs:25:5

View file

@ -22,7 +22,7 @@ LL | | // Without knowing 'a:'b, we can't coerce
LL | | x //~ ERROR lifetime bound not satisfied LL | | x //~ ERROR lifetime bound not satisfied
LL | | //~^ ERROR cannot infer an appropriate lifetime LL | | //~^ ERROR cannot infer an appropriate lifetime
LL | | } LL | | }
| |_^ return requires that `'a` must outlive `'b` | |_^ returning this value requires that `'a` must outlive `'b`
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/regions-trait-object-subtyping.rs:32:5 --> $DIR/regions-trait-object-subtyping.rs:32:5
@ -33,7 +33,7 @@ LL | fn foo4<'a:'b,'b>(x: Wrapper<&'a mut Dummy>) -> Wrapper<&'b mut Dummy> {
| lifetime `'a` defined here | lifetime `'a` defined here
LL | // We can't coerce because it is packed in `Wrapper` LL | // We can't coerce because it is packed in `Wrapper`
LL | x //~ ERROR mismatched types LL | x //~ ERROR mismatched types
| ^ return requires that `'b` must outlive `'a` | ^ returning this value requires that `'b` must outlive `'a`
error: aborting due to 2 previous errors error: aborting due to 2 previous errors

View file

@ -32,7 +32,7 @@ LL | fn a<T>(items: &[T]) -> Box<dyn Iterator<Item=&T>> {
LL | | // ^^^^^^^^^^^^^^^^^^^^^ bound *here* defaults to `'static` LL | | // ^^^^^^^^^^^^^^^^^^^^^ bound *here* defaults to `'static`
LL | | Box::new(items.iter()) //~ ERROR cannot infer an appropriate lifetime LL | | Box::new(items.iter()) //~ ERROR cannot infer an appropriate lifetime
LL | | } LL | | }
| |_^ return requires that `'1` must outlive `'static` | |_^ returning this value requires that `'1` must outlive `'static`
error: aborting due to previous error error: aborting due to previous error

View file

@ -76,7 +76,7 @@ error: unsatisfied lifetime constraints
LL | fn iter_cov_key<'a, 'new>(v: IterMut<'a, &'static (), ()>) -> IterMut<'a, &'new (), ()> { LL | fn iter_cov_key<'a, 'new>(v: IterMut<'a, &'static (), ()>) -> IterMut<'a, &'new (), ()> {
| ---- lifetime `'new` defined here | ---- lifetime `'new` defined here
LL | v //~ ERROR mismatched types LL | v //~ ERROR mismatched types
| ^ return requires that `'new` must outlive `'static` | ^ returning this value requires that `'new` must outlive `'static`
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/variance-btree-invariant-types.rs:19:5 --> $DIR/variance-btree-invariant-types.rs:19:5
@ -84,7 +84,7 @@ error: unsatisfied lifetime constraints
LL | fn iter_cov_val<'a, 'new>(v: IterMut<'a, (), &'static ()>) -> IterMut<'a, (), &'new ()> { LL | fn iter_cov_val<'a, 'new>(v: IterMut<'a, (), &'static ()>) -> IterMut<'a, (), &'new ()> {
| ---- lifetime `'new` defined here | ---- lifetime `'new` defined here
LL | v //~ ERROR mismatched types LL | v //~ ERROR mismatched types
| ^ return requires that `'new` must outlive `'static` | ^ returning this value requires that `'new` must outlive `'static`
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/variance-btree-invariant-types.rs:22:5 --> $DIR/variance-btree-invariant-types.rs:22:5
@ -92,7 +92,7 @@ error: unsatisfied lifetime constraints
LL | fn iter_contra_key<'a, 'new>(v: IterMut<'a, &'new (), ()>) -> IterMut<'a, &'static (), ()> { LL | fn iter_contra_key<'a, 'new>(v: IterMut<'a, &'new (), ()>) -> IterMut<'a, &'static (), ()> {
| ---- lifetime `'new` defined here | ---- lifetime `'new` defined here
LL | v //~ ERROR mismatched types LL | v //~ ERROR mismatched types
| ^ return requires that `'new` must outlive `'static` | ^ returning this value requires that `'new` must outlive `'static`
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/variance-btree-invariant-types.rs:25:5 --> $DIR/variance-btree-invariant-types.rs:25:5
@ -100,7 +100,7 @@ error: unsatisfied lifetime constraints
LL | fn iter_contra_val<'a, 'new>(v: IterMut<'a, (), &'new ()>) -> IterMut<'a, (), &'static ()> { LL | fn iter_contra_val<'a, 'new>(v: IterMut<'a, (), &'new ()>) -> IterMut<'a, (), &'static ()> {
| ---- lifetime `'new` defined here | ---- lifetime `'new` defined here
LL | v //~ ERROR mismatched types LL | v //~ ERROR mismatched types
| ^ return requires that `'new` must outlive `'static` | ^ returning this value requires that `'new` must outlive `'static`
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/variance-btree-invariant-types.rs:30:5 --> $DIR/variance-btree-invariant-types.rs:30:5
@ -109,7 +109,7 @@ LL | fn occ_cov_key<'a, 'new>(v: OccupiedEntry<'a, &'static (), ()>)
| ---- lifetime `'new` defined here | ---- lifetime `'new` defined here
LL | -> OccupiedEntry<'a, &'new (), ()> { LL | -> OccupiedEntry<'a, &'new (), ()> {
LL | v //~ ERROR mismatched types LL | v //~ ERROR mismatched types
| ^ return requires that `'new` must outlive `'static` | ^ returning this value requires that `'new` must outlive `'static`
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/variance-btree-invariant-types.rs:34:5 --> $DIR/variance-btree-invariant-types.rs:34:5
@ -118,7 +118,7 @@ LL | fn occ_cov_val<'a, 'new>(v: OccupiedEntry<'a, (), &'static ()>)
| ---- lifetime `'new` defined here | ---- lifetime `'new` defined here
LL | -> OccupiedEntry<'a, (), &'new ()> { LL | -> OccupiedEntry<'a, (), &'new ()> {
LL | v //~ ERROR mismatched types LL | v //~ ERROR mismatched types
| ^ return requires that `'new` must outlive `'static` | ^ returning this value requires that `'new` must outlive `'static`
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/variance-btree-invariant-types.rs:38:5 --> $DIR/variance-btree-invariant-types.rs:38:5
@ -127,7 +127,7 @@ LL | fn occ_contra_key<'a, 'new>(v: OccupiedEntry<'a, &'new (), ()>)
| ---- lifetime `'new` defined here | ---- lifetime `'new` defined here
LL | -> OccupiedEntry<'a, &'static (), ()> { LL | -> OccupiedEntry<'a, &'static (), ()> {
LL | v //~ ERROR mismatched types LL | v //~ ERROR mismatched types
| ^ return requires that `'new` must outlive `'static` | ^ returning this value requires that `'new` must outlive `'static`
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/variance-btree-invariant-types.rs:42:5 --> $DIR/variance-btree-invariant-types.rs:42:5
@ -136,7 +136,7 @@ LL | fn occ_contra_val<'a, 'new>(v: OccupiedEntry<'a, (), &'new ()>)
| ---- lifetime `'new` defined here | ---- lifetime `'new` defined here
LL | -> OccupiedEntry<'a, (), &'static ()> { LL | -> OccupiedEntry<'a, (), &'static ()> {
LL | v //~ ERROR mismatched types LL | v //~ ERROR mismatched types
| ^ return requires that `'new` must outlive `'static` | ^ returning this value requires that `'new` must outlive `'static`
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/variance-btree-invariant-types.rs:47:5 --> $DIR/variance-btree-invariant-types.rs:47:5
@ -145,7 +145,7 @@ LL | fn vac_cov_key<'a, 'new>(v: VacantEntry<'a, &'static (), ()>)
| ---- lifetime `'new` defined here | ---- lifetime `'new` defined here
LL | -> VacantEntry<'a, &'new (), ()> { LL | -> VacantEntry<'a, &'new (), ()> {
LL | v //~ ERROR mismatched types LL | v //~ ERROR mismatched types
| ^ return requires that `'new` must outlive `'static` | ^ returning this value requires that `'new` must outlive `'static`
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/variance-btree-invariant-types.rs:51:5 --> $DIR/variance-btree-invariant-types.rs:51:5
@ -154,7 +154,7 @@ LL | fn vac_cov_val<'a, 'new>(v: VacantEntry<'a, (), &'static ()>)
| ---- lifetime `'new` defined here | ---- lifetime `'new` defined here
LL | -> VacantEntry<'a, (), &'new ()> { LL | -> VacantEntry<'a, (), &'new ()> {
LL | v //~ ERROR mismatched types LL | v //~ ERROR mismatched types
| ^ return requires that `'new` must outlive `'static` | ^ returning this value requires that `'new` must outlive `'static`
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/variance-btree-invariant-types.rs:55:5 --> $DIR/variance-btree-invariant-types.rs:55:5
@ -163,7 +163,7 @@ LL | fn vac_contra_key<'a, 'new>(v: VacantEntry<'a, &'new (), ()>)
| ---- lifetime `'new` defined here | ---- lifetime `'new` defined here
LL | -> VacantEntry<'a, &'static (), ()> { LL | -> VacantEntry<'a, &'static (), ()> {
LL | v //~ ERROR mismatched types LL | v //~ ERROR mismatched types
| ^ return requires that `'new` must outlive `'static` | ^ returning this value requires that `'new` must outlive `'static`
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/variance-btree-invariant-types.rs:59:5 --> $DIR/variance-btree-invariant-types.rs:59:5
@ -172,7 +172,7 @@ LL | fn vac_contra_val<'a, 'new>(v: VacantEntry<'a, (), &'new ()>)
| ---- lifetime `'new` defined here | ---- lifetime `'new` defined here
LL | -> VacantEntry<'a, (), &'static ()> { LL | -> VacantEntry<'a, (), &'static ()> {
LL | v //~ ERROR mismatched types LL | v //~ ERROR mismatched types
| ^ return requires that `'new` must outlive `'static` | ^ returning this value requires that `'new` must outlive `'static`
error: aborting due to 12 previous errors error: aborting due to 12 previous errors

View file

@ -13,7 +13,7 @@ LL | fn foo<'min,'max>(v: SomeStruct<&'max ()>)
| lifetime `'min` defined here | lifetime `'min` defined here
... ...
LL | v //~ ERROR mismatched types LL | v //~ ERROR mismatched types
| ^ return requires that `'min` must outlive `'max` | ^ returning this value requires that `'min` must outlive `'max`
error: aborting due to previous error error: aborting due to previous error

View file

@ -13,7 +13,7 @@ LL | fn foo<'min,'max>(v: SomeStruct<&'min ()>)
| lifetime `'min` defined here | lifetime `'min` defined here
... ...
LL | v //~ ERROR mismatched types LL | v //~ ERROR mismatched types
| ^ return requires that `'min` must outlive `'max` | ^ returning this value requires that `'min` must outlive `'max`
error: aborting due to previous error error: aborting due to previous error

View file

@ -19,7 +19,7 @@ LL | fn foo<'min,'max>(v: SomeStruct<&'max ()>)
| lifetime `'min` defined here | lifetime `'min` defined here
... ...
LL | v //~ ERROR mismatched types LL | v //~ ERROR mismatched types
| ^ return requires that `'min` must outlive `'max` | ^ returning this value requires that `'min` must outlive `'max`
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/variance-use-invariant-struct-1.rs:29:5 --> $DIR/variance-use-invariant-struct-1.rs:29:5
@ -30,7 +30,7 @@ LL | fn bar<'min,'max>(v: SomeStruct<&'min ()>)
| lifetime `'min` defined here | lifetime `'min` defined here
... ...
LL | v //~ ERROR mismatched types LL | v //~ ERROR mismatched types
| ^ return requires that `'min` must outlive `'max` | ^ returning this value requires that `'min` must outlive `'max`
error: aborting due to 2 previous errors error: aborting due to 2 previous errors

View file

@ -37,7 +37,7 @@ LL | impl<'a, 'b> Foo<'a, 'b, Evil<'a, 'b>> for () {
| lifetime `'a` defined here | lifetime `'a` defined here
... ...
LL | u //~ ERROR E0312 LL | u //~ ERROR E0312
| ^ return requires that `'b` must outlive `'a` | ^ returning this value requires that `'b` must outlive `'a`
error: unsatisfied lifetime constraints error: unsatisfied lifetime constraints
--> $DIR/wf-static-method.rs:43:9 --> $DIR/wf-static-method.rs:43:9
@ -48,7 +48,7 @@ LL | impl<'a, 'b> Evil<'a, 'b> {
| lifetime `'a` defined here | lifetime `'a` defined here
LL | fn inherent_evil(u: &'b u32) -> &'a u32 { LL | fn inherent_evil(u: &'b u32) -> &'a u32 {
LL | u //~ ERROR E0312 LL | u //~ ERROR E0312
| ^ return requires that `'b` must outlive `'a` | ^ returning this value requires that `'b` must outlive `'a`
error: aborting due to 2 previous errors error: aborting due to 2 previous errors