From: Matthew Jasper Date: Tue, 9 Oct 2018 21:59:46 +0000 (+0100) Subject: Use the span of the user type for `AscribeUserType` X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=55ec10431318bb6b4ed0a01744c93a683918d592;p=rust.git Use the span of the user type for `AscribeUserType` Also change the order of the fake read for let and the AscribeUserType, so that we use the better span and message from the fake read in errors. --- diff --git a/src/librustc/mir/mod.rs b/src/librustc/mir/mod.rs index ea4eb761964..2587e19b1cb 100644 --- a/src/librustc/mir/mod.rs +++ b/src/librustc/mir/mod.rs @@ -710,7 +710,7 @@ pub struct LocalDecl<'tcx> { /// e.g. via `let x: T`, then we carry that type here. The MIR /// borrow checker needs this information since it can affect /// region inference. - pub user_ty: Option>, + pub user_ty: Option<(CanonicalTy<'tcx>, Span)>, /// Name of the local, used in debuginfo and pretty-printing. /// diff --git a/src/librustc/mir/visit.rs b/src/librustc/mir/visit.rs index d2b0a6a37a7..920dc88d6a8 100644 --- a/src/librustc/mir/visit.rs +++ b/src/librustc/mir/visit.rs @@ -735,7 +735,7 @@ fn super_local_decl(&mut self, local, source_info: *source_info, }); - if let Some(user_ty) = user_ty { + if let Some((user_ty, _)) = user_ty { self.visit_user_ty(user_ty); } self.visit_source_info(source_info); diff --git a/src/librustc_mir/borrow_check/nll/type_check/mod.rs b/src/librustc_mir/borrow_check/nll/type_check/mod.rs index 36eb695186c..1f3498b7ae0 100644 --- a/src/librustc_mir/borrow_check/nll/type_check/mod.rs +++ b/src/librustc_mir/borrow_check/nll/type_check/mod.rs @@ -310,12 +310,12 @@ fn visit_local_decl(&mut self, local: Local, local_decl: &LocalDecl<'tcx>) { self.super_local_decl(local, local_decl); self.sanitize_type(local_decl, local_decl.ty); - if let Some(user_ty) = local_decl.user_ty { + if let Some((user_ty, span)) = local_decl.user_ty { if let Err(terr) = self.cx.relate_type_and_user_type( local_decl.ty, ty::Variance::Invariant, user_ty, - Locations::All(local_decl.source_info.span), + Locations::All(span), ConstraintCategory::TypeAnnotation, ) { span_mirbug!( diff --git a/src/librustc_mir/build/matches/mod.rs b/src/librustc_mir/build/matches/mod.rs index c2a7172d54c..394fa4e077c 100644 --- a/src/librustc_mir/build/matches/mod.rs +++ b/src/librustc_mir/build/matches/mod.rs @@ -292,30 +292,32 @@ pub fn expr_into_pattern( .. }, user_ty: ascription_user_ty, + user_ty_span, } => { let place = self.storage_live_binding(block, var, irrefutable_pat.span, OutsideGuard); unpack!(block = self.into(&place, block, initializer)); - let source_info = self.source_info(irrefutable_pat.span); + // Inject a fake read, see comments on `FakeReadCause::ForLet`. + let pattern_source_info = self.source_info(irrefutable_pat.span); self.cfg.push( block, Statement { - source_info, - kind: StatementKind::AscribeUserType( - place.clone(), - ty::Variance::Invariant, - ascription_user_ty, - ), + source_info: pattern_source_info, + kind: StatementKind::FakeRead(FakeReadCause::ForLet, place.clone()), }, ); - // Inject a fake read, see comments on `FakeReadCause::ForLet`. + let ty_source_info = self.source_info(user_ty_span); self.cfg.push( block, Statement { - source_info, - kind: StatementKind::FakeRead(FakeReadCause::ForLet, place.clone()), + source_info: ty_source_info, + kind: StatementKind::AscribeUserType( + place.clone(), + ty::Variance::Invariant, + ascription_user_ty, + ), }, ); @@ -489,7 +491,7 @@ pub fn schedule_drop_for_binding(&mut self, var: NodeId, span: Span, for_guard: pub fn visit_bindings( &mut self, pattern: &Pattern<'tcx>, - mut pattern_user_ty: Option>, + mut pattern_user_ty: Option<(CanonicalTy<'tcx>, Span)>, f: &mut impl FnMut( &mut Self, Mutability, @@ -498,7 +500,7 @@ pub fn visit_bindings( NodeId, Span, Ty<'tcx>, - Option>, + Option<(CanonicalTy<'tcx>, Span)>, ), ) { match *pattern.kind { @@ -549,16 +551,15 @@ pub fn visit_bindings( // FIXME(#47184): extract or handle `pattern_user_ty` somehow self.visit_bindings(subpattern, None, f); } - PatternKind::AscribeUserType { ref subpattern, user_ty } => { + PatternKind::AscribeUserType { ref subpattern, user_ty, user_ty_span } => { // This corresponds to something like // // ``` - // let (p1: T1): T2 = ...; + // let A::<'a>(_): A<'static> = ...; // ``` // - // Not presently possible, though maybe someday. - assert!(pattern_user_ty.is_none()); - self.visit_bindings(subpattern, Some(user_ty), f) + // FIXME(#47184): handle `pattern_user_ty` somehow + self.visit_bindings(subpattern, Some((user_ty, user_ty_span)), f) } PatternKind::Leaf { ref subpatterns } | PatternKind::Variant { @@ -1469,7 +1470,7 @@ fn declare_binding( num_patterns: usize, var_id: NodeId, var_ty: Ty<'tcx>, - user_var_ty: Option>, + user_var_ty: Option<(CanonicalTy<'tcx>, Span)>, has_guard: ArmHasGuard, opt_match_place: Option<(Option>, Span)>, pat_span: Span, diff --git a/src/librustc_mir/build/matches/simplify.rs b/src/librustc_mir/build/matches/simplify.rs index 14da8e90838..494e7c03c3e 100644 --- a/src/librustc_mir/build/matches/simplify.rs +++ b/src/librustc_mir/build/matches/simplify.rs @@ -63,9 +63,9 @@ fn simplify_match_pair<'pat>(&mut self, candidate: &mut Candidate<'pat, 'tcx>) -> Result<(), MatchPair<'pat, 'tcx>> { match *match_pair.pattern.kind { - PatternKind::AscribeUserType { ref subpattern, user_ty } => { + PatternKind::AscribeUserType { ref subpattern, user_ty, user_ty_span } => { candidate.ascriptions.push(Ascription { - span: match_pair.pattern.span, + span: user_ty_span, user_ty, source: match_pair.place.clone(), }); diff --git a/src/librustc_mir/hair/cx/block.rs b/src/librustc_mir/hair/cx/block.rs index 2ab0a57a855..022c606a0f8 100644 --- a/src/librustc_mir/hair/cx/block.rs +++ b/src/librustc_mir/hair/cx/block.rs @@ -92,6 +92,7 @@ fn mirror_stmts<'a, 'gcx, 'tcx>(cx: &mut Cx<'a, 'gcx, 'tcx>, span: pattern.span, kind: Box::new(PatternKind::AscribeUserType { user_ty: *user_ty, + user_ty_span: ty.span, subpattern: pattern }) }; diff --git a/src/librustc_mir/hair/pattern/mod.rs b/src/librustc_mir/hair/pattern/mod.rs index 04090e5087f..0238a23895e 100644 --- a/src/librustc_mir/hair/pattern/mod.rs +++ b/src/librustc_mir/hair/pattern/mod.rs @@ -71,6 +71,7 @@ pub enum PatternKind<'tcx> { AscribeUserType { user_ty: CanonicalTy<'tcx>, subpattern: Pattern<'tcx>, + user_ty_span: Span, }, /// x, ref x, x @ P, etc @@ -692,6 +693,7 @@ fn lower_variant_or_leaf( kind = PatternKind::AscribeUserType { subpattern, user_ty, + user_ty_span: span, }; } @@ -1015,9 +1017,11 @@ fn super_fold_with>(&self, folder: &mut F) -> Self { PatternKind::AscribeUserType { ref subpattern, user_ty, + user_ty_span, } => PatternKind::AscribeUserType { subpattern: subpattern.fold_with(folder), user_ty: user_ty.fold_with(folder), + user_ty_span, }, PatternKind::Binding { mutability, diff --git a/src/test/mir-opt/basic_assignment.rs b/src/test/mir-opt/basic_assignment.rs index b474e1a0d6c..1abe63afa80 100644 --- a/src/test/mir-opt/basic_assignment.rs +++ b/src/test/mir-opt/basic_assignment.rs @@ -55,8 +55,8 @@ fn main() { // StorageDead(_3); // StorageLive(_4); // _4 = std::option::Option>::None; -// AscribeUserType(_4, o, Canonical { variables: [], value: std::option::Option> }); // FakeRead(ForLet, _4); +// AscribeUserType(_4, o, Canonical { variables: [], value: std::option::Option> }); // StorageLive(_5); // StorageLive(_6); // _6 = move _4; diff --git a/src/test/ui/nll/relate_tys/hr-fn-aaa-as-aba.stderr b/src/test/ui/nll/relate_tys/hr-fn-aaa-as-aba.stderr index 9a83872b965..a4d47eed6fb 100644 --- a/src/test/ui/nll/relate_tys/hr-fn-aaa-as-aba.stderr +++ b/src/test/ui/nll/relate_tys/hr-fn-aaa-as-aba.stderr @@ -5,10 +5,10 @@ LL | let a: for<'a, 'b> fn(&'a u32, &'b u32) -> &'a u32 = make_it(); | ^^^^^^^^^ error: higher-ranked subtype error - --> $DIR/hr-fn-aaa-as-aba.rs:32:9 + --> $DIR/hr-fn-aaa-as-aba.rs:32:12 | LL | let _: for<'a, 'b> fn(&'a u32, &'b u32) -> &'a u32 = make_it(); - | ^ + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: aborting due to 2 previous errors diff --git a/src/test/ui/nll/user-annotations/patterns.stderr b/src/test/ui/nll/user-annotations/patterns.stderr index b01dc65fc5f..0b0848e9913 100644 --- a/src/test/ui/nll/user-annotations/patterns.stderr +++ b/src/test/ui/nll/user-annotations/patterns.stderr @@ -131,12 +131,12 @@ LL | y //~ ERROR | ^ returning this value requires that `'a` must outlive `'static` error: unsatisfied lifetime constraints - --> $DIR/patterns.rs:117:9 + --> $DIR/patterns.rs:117:18 | LL | fn a_to_static_then_static<'a>(x: &'a u32) -> &'static u32 { | -- lifetime `'a` defined here LL | let (y, _z): (&'static u32, u32) = (x, 44); //~ ERROR - | ^^^^^^^ type annotation requires that `'a` must outlive `'static` + | ^^^^^^^^^^^^^^^^^^^ type annotation requires that `'a` must outlive `'static` error: aborting due to 14 previous errors diff --git a/src/test/ui/regions/region-object-lifetime-in-coercion.nll.stderr b/src/test/ui/regions/region-object-lifetime-in-coercion.nll.stderr index 53d3b2d5323..8fd195639fe 100644 --- a/src/test/ui/regions/region-object-lifetime-in-coercion.nll.stderr +++ b/src/test/ui/regions/region-object-lifetime-in-coercion.nll.stderr @@ -1,10 +1,10 @@ error[E0621]: explicit lifetime required in the type of `v` - --> $DIR/region-object-lifetime-in-coercion.rs:18:9 + --> $DIR/region-object-lifetime-in-coercion.rs:18:12 | LL | fn a(v: &[u8]) -> Box { | ----- help: add explicit lifetime `'static` to the type of `v`: `&'static [u8]` LL | let x: Box = Box::new(v); - | ^ lifetime `'static` required + | ^^^^^^^^^^^^^^^^^^ lifetime `'static` required error[E0621]: explicit lifetime required in the type of `v` --> $DIR/region-object-lifetime-in-coercion.rs:24:5 diff --git a/src/test/ui/regions/regions-addr-of-self.nll.stderr b/src/test/ui/regions/regions-addr-of-self.nll.stderr index 0e38abef668..1454c856f97 100644 --- a/src/test/ui/regions/regions-addr-of-self.nll.stderr +++ b/src/test/ui/regions/regions-addr-of-self.nll.stderr @@ -1,10 +1,10 @@ error: unsatisfied lifetime constraints - --> $DIR/regions-addr-of-self.rs:17:13 + --> $DIR/regions-addr-of-self.rs:17:16 | LL | pub fn chase_cat(&mut self) { | - let's call the lifetime of this reference `'1` LL | let p: &'static mut usize = &mut self.cats_chased; //~ ERROR cannot infer - | ^ type annotation requires that `'1` must outlive `'static` + | ^^^^^^^^^^^^^^^^^^ type annotation requires that `'1` must outlive `'static` error: aborting due to previous error diff --git a/src/test/ui/regions/regions-addr-of-upvar-self.nll.stderr b/src/test/ui/regions/regions-addr-of-upvar-self.nll.stderr index fd52494b499..0e48192eaff 100644 --- a/src/test/ui/regions/regions-addr-of-upvar-self.nll.stderr +++ b/src/test/ui/regions/regions-addr-of-upvar-self.nll.stderr @@ -1,33 +1,33 @@ error: unsatisfied lifetime constraints - --> $DIR/regions-addr-of-upvar-self.rs:20:17 + --> $DIR/regions-addr-of-upvar-self.rs:20:20 | LL | let _f = || { | -- lifetime `'1` represents this closure's body LL | let p: &'static mut usize = &mut self.food; //~ ERROR cannot infer - | ^ type annotation requires that `'1` must outlive `'static` + | ^^^^^^^^^^^^^^^^^^ type annotation requires that `'1` must outlive `'static` | = note: closure implements `FnMut`, so references to captured variables can't escape the closure error: unsatisfied lifetime constraints - --> $DIR/regions-addr-of-upvar-self.rs:20:17 + --> $DIR/regions-addr-of-upvar-self.rs:20:20 | LL | pub fn chase_cat(&mut self) { | --------- lifetime `'2` appears in the type of `self` LL | let _f = || { | -- lifetime `'1` represents this closure's body LL | let p: &'static mut usize = &mut self.food; //~ ERROR cannot infer - | ^ type annotation requires that `'1` must outlive `'2` + | ^^^^^^^^^^^^^^^^^^ type annotation requires that `'1` must outlive `'2` | = note: closure implements `FnMut`, so references to captured variables can't escape the closure error: unsatisfied lifetime constraints - --> $DIR/regions-addr-of-upvar-self.rs:20:17 + --> $DIR/regions-addr-of-upvar-self.rs:20:20 | LL | pub fn chase_cat(&mut self) { | - let's call the lifetime of this reference `'1` LL | let _f = || { LL | let p: &'static mut usize = &mut self.food; //~ ERROR cannot infer - | ^ type annotation requires that `'1` must outlive `'static` + | ^^^^^^^^^^^^^^^^^^ type annotation requires that `'1` must outlive `'static` error[E0597]: `self` does not live long enough --> $DIR/regions-addr-of-upvar-self.rs:20:46 diff --git a/src/test/ui/regions/regions-infer-contravariance-due-to-decl.nll.stderr b/src/test/ui/regions/regions-infer-contravariance-due-to-decl.nll.stderr index 2f3c7166867..aba285d427b 100644 --- a/src/test/ui/regions/regions-infer-contravariance-due-to-decl.nll.stderr +++ b/src/test/ui/regions/regions-infer-contravariance-due-to-decl.nll.stderr @@ -1,5 +1,5 @@ error: unsatisfied lifetime constraints - --> $DIR/regions-infer-contravariance-due-to-decl.rs:35:9 + --> $DIR/regions-infer-contravariance-due-to-decl.rs:35:12 | LL | fn use_<'short,'long>(c: Contravariant<'short>, | ------ ----- lifetime `'long` defined here @@ -7,7 +7,7 @@ LL | fn use_<'short,'long>(c: Contravariant<'short>, | lifetime `'short` defined here ... LL | let _: Contravariant<'long> = c; //~ ERROR E0623 - | ^ type annotation requires that `'short` must outlive `'long` + | ^^^^^^^^^^^^^^^^^^^^ type annotation requires that `'short` must outlive `'long` error: aborting due to previous error diff --git a/src/test/ui/regions/regions-infer-covariance-due-to-decl.nll.stderr b/src/test/ui/regions/regions-infer-covariance-due-to-decl.nll.stderr index 835438e9e5d..8bc6d565cf1 100644 --- a/src/test/ui/regions/regions-infer-covariance-due-to-decl.nll.stderr +++ b/src/test/ui/regions/regions-infer-covariance-due-to-decl.nll.stderr @@ -1,5 +1,5 @@ error: unsatisfied lifetime constraints - --> $DIR/regions-infer-covariance-due-to-decl.rs:32:9 + --> $DIR/regions-infer-covariance-due-to-decl.rs:32:12 | LL | fn use_<'short,'long>(c: Covariant<'long>, | ------ ----- lifetime `'long` defined here @@ -7,7 +7,7 @@ LL | fn use_<'short,'long>(c: Covariant<'long>, | lifetime `'short` defined here ... LL | let _: Covariant<'short> = c; //~ ERROR E0623 - | ^ type annotation requires that `'short` must outlive `'long` + | ^^^^^^^^^^^^^^^^^ type annotation requires that `'short` must outlive `'long` error: aborting due to previous error diff --git a/src/test/ui/regions/regions-variance-contravariant-use-covariant-in-second-position.nll.stderr b/src/test/ui/regions/regions-variance-contravariant-use-covariant-in-second-position.nll.stderr index 706d00a8424..668b75f5733 100644 --- a/src/test/ui/regions/regions-variance-contravariant-use-covariant-in-second-position.nll.stderr +++ b/src/test/ui/regions/regions-variance-contravariant-use-covariant-in-second-position.nll.stderr @@ -1,5 +1,5 @@ error: unsatisfied lifetime constraints - --> $DIR/regions-variance-contravariant-use-covariant-in-second-position.rs:35:9 + --> $DIR/regions-variance-contravariant-use-covariant-in-second-position.rs:35:12 | LL | fn use_<'short,'long>(c: S<'long, 'short>, | ------ ----- lifetime `'long` defined here @@ -7,7 +7,7 @@ LL | fn use_<'short,'long>(c: S<'long, 'short>, | lifetime `'short` defined here ... LL | let _: S<'long, 'long> = c; //~ ERROR E0623 - | ^ type annotation requires that `'short` must outlive `'long` + | ^^^^^^^^^^^^^^^ type annotation requires that `'short` must outlive `'long` error: aborting due to previous error diff --git a/src/test/ui/regions/regions-variance-contravariant-use-covariant.nll.stderr b/src/test/ui/regions/regions-variance-contravariant-use-covariant.nll.stderr index 144aa67f905..5d787e6dab6 100644 --- a/src/test/ui/regions/regions-variance-contravariant-use-covariant.nll.stderr +++ b/src/test/ui/regions/regions-variance-contravariant-use-covariant.nll.stderr @@ -1,5 +1,5 @@ error: unsatisfied lifetime constraints - --> $DIR/regions-variance-contravariant-use-covariant.rs:33:9 + --> $DIR/regions-variance-contravariant-use-covariant.rs:33:12 | LL | fn use_<'short,'long>(c: Contravariant<'short>, | ------ ----- lifetime `'long` defined here @@ -7,7 +7,7 @@ LL | fn use_<'short,'long>(c: Contravariant<'short>, | lifetime `'short` defined here ... LL | let _: Contravariant<'long> = c; //~ ERROR E0623 - | ^ type annotation requires that `'short` must outlive `'long` + | ^^^^^^^^^^^^^^^^^^^^ type annotation requires that `'short` must outlive `'long` error: aborting due to previous error diff --git a/src/test/ui/regions/regions-variance-covariant-use-contravariant.nll.stderr b/src/test/ui/regions/regions-variance-covariant-use-contravariant.nll.stderr index c9789f8555e..3fb29009668 100644 --- a/src/test/ui/regions/regions-variance-covariant-use-contravariant.nll.stderr +++ b/src/test/ui/regions/regions-variance-covariant-use-contravariant.nll.stderr @@ -1,5 +1,5 @@ error: unsatisfied lifetime constraints - --> $DIR/regions-variance-covariant-use-contravariant.rs:33:9 + --> $DIR/regions-variance-covariant-use-contravariant.rs:33:12 | LL | fn use_<'short,'long>(c: Covariant<'long>, | ------ ----- lifetime `'long` defined here @@ -7,7 +7,7 @@ LL | fn use_<'short,'long>(c: Covariant<'long>, | lifetime `'short` defined here ... LL | let _: Covariant<'short> = c; //~ ERROR E0623 - | ^ type annotation requires that `'short` must outlive `'long` + | ^^^^^^^^^^^^^^^^^ type annotation requires that `'short` must outlive `'long` error: aborting due to previous error diff --git a/src/test/ui/regions/regions-variance-invariant-use-contravariant.nll.stderr b/src/test/ui/regions/regions-variance-invariant-use-contravariant.nll.stderr index 488b70b5f0f..fb59ec1ca10 100644 --- a/src/test/ui/regions/regions-variance-invariant-use-contravariant.nll.stderr +++ b/src/test/ui/regions/regions-variance-invariant-use-contravariant.nll.stderr @@ -1,5 +1,5 @@ error: unsatisfied lifetime constraints - --> $DIR/regions-variance-invariant-use-contravariant.rs:30:9 + --> $DIR/regions-variance-invariant-use-contravariant.rs:30:12 | LL | fn use_<'short,'long>(c: Invariant<'long>, | ------ ----- lifetime `'long` defined here @@ -7,7 +7,7 @@ LL | fn use_<'short,'long>(c: Invariant<'long>, | lifetime `'short` defined here ... LL | let _: Invariant<'short> = c; //~ ERROR E0623 - | ^ type annotation requires that `'short` must outlive `'long` + | ^^^^^^^^^^^^^^^^^ type annotation requires that `'short` must outlive `'long` error: aborting due to previous error diff --git a/src/test/ui/regions/regions-variance-invariant-use-covariant.nll.stderr b/src/test/ui/regions/regions-variance-invariant-use-covariant.nll.stderr index fa7cfc33dc0..daf6a79136a 100644 --- a/src/test/ui/regions/regions-variance-invariant-use-covariant.nll.stderr +++ b/src/test/ui/regions/regions-variance-invariant-use-covariant.nll.stderr @@ -1,11 +1,11 @@ error: unsatisfied lifetime constraints - --> $DIR/regions-variance-invariant-use-covariant.rs:27:9 + --> $DIR/regions-variance-invariant-use-covariant.rs:27:12 | LL | fn use_<'b>(c: Invariant<'b>) { | -- lifetime `'b` defined here ... LL | let _: Invariant<'static> = c; //~ ERROR mismatched types - | ^ type annotation requires that `'b` must outlive `'static` + | ^^^^^^^^^^^^^^^^^^ type annotation requires that `'b` must outlive `'static` error: aborting due to previous error diff --git a/src/test/ui/try-block/try-block-bad-lifetime.stderr b/src/test/ui/try-block/try-block-bad-lifetime.stderr index ebf56dc9835..061bc19cec9 100644 --- a/src/test/ui/try-block/try-block-bad-lifetime.stderr +++ b/src/test/ui/try-block/try-block-bad-lifetime.stderr @@ -2,7 +2,7 @@ error[E0597]: `my_string` does not live long enough --> $DIR/try-block-bad-lifetime.rs:25:33 | LL | let result: Result<(), &str> = try { - | ------ borrow later used here + | ------ borrow later stored here LL | let my_string = String::from(""); LL | let my_str: & str = & my_string; | ^^^^^^^^^^^ borrowed value does not live long enough diff --git a/src/test/ui/variance/variance-cell-is-invariant.nll.stderr b/src/test/ui/variance/variance-cell-is-invariant.nll.stderr index 0172fcdc8f1..eb01c2bbb05 100644 --- a/src/test/ui/variance/variance-cell-is-invariant.nll.stderr +++ b/src/test/ui/variance/variance-cell-is-invariant.nll.stderr @@ -1,5 +1,5 @@ error: unsatisfied lifetime constraints - --> $DIR/variance-cell-is-invariant.rs:24:9 + --> $DIR/variance-cell-is-invariant.rs:24:12 | LL | fn use_<'short,'long>(c: Foo<'short>, | ------ ----- lifetime `'long` defined here @@ -7,7 +7,7 @@ LL | fn use_<'short,'long>(c: Foo<'short>, | lifetime `'short` defined here ... LL | let _: Foo<'long> = c; //~ ERROR E0623 - | ^ type annotation requires that `'short` must outlive `'long` + | ^^^^^^^^^^ type annotation requires that `'short` must outlive `'long` error: aborting due to previous error diff --git a/src/test/ui/wf/wf-static-method.nll.stderr b/src/test/ui/wf/wf-static-method.nll.stderr index 51aec2a949f..bfcb16c654f 100644 --- a/src/test/ui/wf/wf-static-method.nll.stderr +++ b/src/test/ui/wf/wf-static-method.nll.stderr @@ -9,6 +9,17 @@ LL | impl<'a, 'b> Foo<'a, 'b, Evil<'a, 'b>> for () { LL | u //~ ERROR E0312 | ^ returning this value requires that `'b` must outlive `'a` +error: unsatisfied lifetime constraints + --> $DIR/wf-static-method.rs:36:18 + | +LL | impl<'a, 'b> Foo<'a, 'b, ()> for IndirectEvil<'a, 'b> { + | -- -- lifetime `'b` defined here + | | + | lifetime `'a` defined here +... +LL | let me = Self::make_me(); //~ ERROR lifetime bound not satisfied + | ^^^^^^^^^^^^^^^ requires that `'b` must outlive `'a` + error: unsatisfied lifetime constraints --> $DIR/wf-static-method.rs:43:9 | @@ -20,5 +31,25 @@ LL | fn inherent_evil(u: &'b u32) -> &'a u32 { LL | u //~ ERROR E0312 | ^ returning this value requires that `'b` must outlive `'a` -error: aborting due to 2 previous errors +error: unsatisfied lifetime constraints + --> $DIR/wf-static-method.rs:51:5 + | +LL | fn evil<'a, 'b>(b: &'b u32) -> &'a u32 { + | -- -- lifetime `'b` defined here + | | + | lifetime `'a` defined here +LL | <()>::static_evil(b) //~ ERROR cannot infer an appropriate lifetime + | ^^^^^^^^^^^^^^^^^^^^ returning this value requires that `'b` must outlive `'a` + +error: unsatisfied lifetime constraints + --> $DIR/wf-static-method.rs:55:5 + | +LL | fn indirect_evil<'a, 'b>(b: &'b u32) -> &'a u32 { + | -- -- lifetime `'b` defined here + | | + | lifetime `'a` defined here +LL | ::static_evil(b) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ returning this value requires that `'b` must outlive `'a` + +error: aborting due to 5 previous errors