update tests and add stderr files

This commit is contained in:
Niko Matsakis 2018-09-24 15:36:50 -04:00
parent a13c9f6bfd
commit f87189dd3c
10 changed files with 72 additions and 81 deletions

View file

@ -1,5 +1,7 @@
// Test that when we infer the lifetime to a subset of the fn body, it
// works out.
//
// compile-pass
trait MyTrait<'a> {
type Output;

View file

@ -74,18 +74,10 @@ where
T: Anything<'b>,
T::AssocType: 'a,
{
// This error is unfortunate. This code ought to type-check: we
// are projecting `<T as Anything<'b>>::AssocType`, and we know
// that this outlives `'a` because of the where-clause. However,
// the way the region checker works, we don't register this
// outlives obligation, and hence we get an error: this is because
// what we see is a projection like `<T as
// Anything<'?0>>::AssocType`, and we don't yet know if `?0` will
// equal `'b` or not, so we ignore the where-clause. Obviously we
// can do better here with a more involved verification step.
// We are projecting `<T as Anything<'b>>::AssocType`, and we know
// that this outlives `'a` because of the where-clause.
with_signature(cell, t, |cell, t| require(cell, t));
//~^ ERROR
}
#[rustc_regions]

View file

@ -106,7 +106,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ closure body requires that `'b` must outlive `'a`
note: External requirements
--> $DIR/projection-one-region-closure.rs:87:29
--> $DIR/projection-one-region-closure.rs:80:29
|
LL | with_signature(cell, t, |cell, t| require(cell, t));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -129,7 +129,7 @@ LL | | where
LL | | T: Anything<'b>,
LL | | T::AssocType: 'a,
... |
LL | | //~^ ERROR
LL | | with_signature(cell, t, |cell, t| require(cell, t));
LL | | }
| |_^
|
@ -139,16 +139,8 @@ LL | | }
T
]
error[E0309]: the associated type `<T as Anything<'_#5r>>::AssocType` may not live long enough
--> $DIR/projection-one-region-closure.rs:87:29
|
LL | with_signature(cell, t, |cell, t| require(cell, t));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= help: consider adding an explicit lifetime bound `<T as Anything<'_#5r>>::AssocType: ReEarlyBound(0, 'a)`...
note: External requirements
--> $DIR/projection-one-region-closure.rs:98:29
--> $DIR/projection-one-region-closure.rs:90:29
|
LL | with_signature(cell, t, |cell, t| require(cell, t));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -165,7 +157,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: where '_#2r: '_#3r
note: No external requirements
--> $DIR/projection-one-region-closure.rs:92:1
--> $DIR/projection-one-region-closure.rs:84:1
|
LL | / fn elements_outlive<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
LL | | where
@ -182,6 +174,6 @@ LL | | }
T
]
error: aborting due to 5 previous errors
error: aborting due to 4 previous errors
For more information about this error, try `rustc --explain E0309`.

View file

@ -64,18 +64,10 @@ where
T: Anything<'b>,
T::AssocType: 'a,
{
// This error is unfortunate. This code ought to type-check: we
// are projecting `<T as Anything<'b>>::AssocType`, and we know
// that this outlives `'a` because of the where-clause. However,
// the way the region checker works, we don't register this
// outlives obligation, and hence we get an error: this is because
// what we see is a projection like `<T as
// Anything<'?0>>::AssocType`, and we don't yet know if `?0` will
// equal `'b` or not, so we ignore the where-clause. Obviously we
// can do better here with a more involved verification step.
// We are projecting `<T as Anything<'b>>::AssocType`, and we know
// that this outlives `'a` because of the where-clause.
with_signature(cell, t, |cell, t| require(cell, t));
//~^ ERROR
}
#[rustc_regions]

View file

@ -88,7 +88,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ closure body requires that `'b` must outlive `'a`
note: External requirements
--> $DIR/projection-one-region-trait-bound-closure.rs:77:29
--> $DIR/projection-one-region-trait-bound-closure.rs:70:29
|
LL | with_signature(cell, t, |cell, t| require(cell, t));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -111,7 +111,7 @@ LL | | where
LL | | T: Anything<'b>,
LL | | T::AssocType: 'a,
... |
LL | | //~^ ERROR
LL | | with_signature(cell, t, |cell, t| require(cell, t));
LL | | }
| |_^
|
@ -121,16 +121,8 @@ LL | | }
T
]
error[E0309]: the associated type `<T as Anything<'_#5r>>::AssocType` may not live long enough
--> $DIR/projection-one-region-trait-bound-closure.rs:77:29
|
LL | with_signature(cell, t, |cell, t| require(cell, t));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= help: consider adding an explicit lifetime bound `<T as Anything<'_#5r>>::AssocType: ReEarlyBound(0, 'a)`...
note: External requirements
--> $DIR/projection-one-region-trait-bound-closure.rs:87:29
--> $DIR/projection-one-region-trait-bound-closure.rs:79:29
|
LL | with_signature(cell, t, |cell, t| require(cell, t));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -146,7 +138,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: where '_#2r: '_#3r
note: No external requirements
--> $DIR/projection-one-region-trait-bound-closure.rs:82:1
--> $DIR/projection-one-region-trait-bound-closure.rs:74:1
|
LL | / fn elements_outlive<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
LL | | where
@ -164,7 +156,7 @@ LL | | }
]
note: External requirements
--> $DIR/projection-one-region-trait-bound-closure.rs:99:29
--> $DIR/projection-one-region-trait-bound-closure.rs:91:29
|
LL | with_signature(cell, t, |cell, t| require(cell, t));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -179,7 +171,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: where '_#1r: '_#2r
note: No external requirements
--> $DIR/projection-one-region-trait-bound-closure.rs:91:1
--> $DIR/projection-one-region-trait-bound-closure.rs:83:1
|
LL | / fn one_region<'a, T>(cell: Cell<&'a ()>, t: T)
LL | | where
@ -195,6 +187,5 @@ LL | | }
T
]
error: aborting due to 3 previous errors
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0309`.

View file

@ -65,18 +65,10 @@ where
T: Anything<'b, 'c>,
T::AssocType: 'a,
{
// This error is unfortunate. This code ought to type-check: we
// are projecting `<T as Anything<'b>>::AssocType`, and we know
// that this outlives `'a` because of the where-clause. However,
// the way the region checker works, we don't register this
// outlives obligation, and hence we get an error: this is because
// what we see is a projection like `<T as
// Anything<'?0>>::AssocType`, and we don't yet know if `?0` will
// equal `'b` or not, so we ignore the where-clause. Obviously we
// can do better here with a more involved verification step.
// We are projecting `<T as Anything<'b>>::AssocType`, and we know
// that this outlives `'a` because of the where-clause.
with_signature(cell, t, |cell, t| require(cell, t));
//~^ ERROR associated type `<T as Anything<'_#6r, '_#7r>>::AssocType` may not live long enough
}
#[rustc_regions]

View file

@ -86,7 +86,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= help: consider adding an explicit lifetime bound `<T as Anything<'_#6r, '_#7r>>::AssocType: ReEarlyBound(0, 'a)`...
note: External requirements
--> $DIR/projection-two-region-trait-bound-closure.rs:78:29
--> $DIR/projection-two-region-trait-bound-closure.rs:71:29
|
LL | with_signature(cell, t, |cell, t| require(cell, t));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -110,7 +110,7 @@ LL | | where
LL | | T: Anything<'b, 'c>,
LL | | T::AssocType: 'a,
... |
LL | | //~^ ERROR associated type `<T as Anything<'_#6r, '_#7r>>::AssocType` may not live long enough
LL | | with_signature(cell, t, |cell, t| require(cell, t));
LL | | }
| |_^
|
@ -121,16 +121,8 @@ LL | | }
T
]
error[E0309]: the associated type `<T as Anything<'_#6r, '_#7r>>::AssocType` may not live long enough
--> $DIR/projection-two-region-trait-bound-closure.rs:78:29
|
LL | with_signature(cell, t, |cell, t| require(cell, t));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= help: consider adding an explicit lifetime bound `<T as Anything<'_#6r, '_#7r>>::AssocType: ReEarlyBound(0, 'a)`...
note: External requirements
--> $DIR/projection-two-region-trait-bound-closure.rs:88:29
--> $DIR/projection-two-region-trait-bound-closure.rs:80:29
|
LL | with_signature(cell, t, |cell, t| require(cell, t));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -147,7 +139,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: where <T as Anything<ReClosureBound('_#2r), ReClosureBound('_#3r)>>::AssocType: '_#4r
note: No external requirements
--> $DIR/projection-two-region-trait-bound-closure.rs:83:1
--> $DIR/projection-two-region-trait-bound-closure.rs:75:1
|
LL | / fn elements_outlive1<'a, 'b, 'c, T>(cell: Cell<&'a ()>, t: T)
LL | | where
@ -166,7 +158,7 @@ LL | | }
]
note: External requirements
--> $DIR/projection-two-region-trait-bound-closure.rs:97:29
--> $DIR/projection-two-region-trait-bound-closure.rs:89:29
|
LL | with_signature(cell, t, |cell, t| require(cell, t));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -183,7 +175,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: where <T as Anything<ReClosureBound('_#2r), ReClosureBound('_#3r)>>::AssocType: '_#4r
note: No external requirements
--> $DIR/projection-two-region-trait-bound-closure.rs:92:1
--> $DIR/projection-two-region-trait-bound-closure.rs:84:1
|
LL | / fn elements_outlive2<'a, 'b, 'c, T>(cell: Cell<&'a ()>, t: T)
LL | | where
@ -202,7 +194,7 @@ LL | | }
]
note: External requirements
--> $DIR/projection-two-region-trait-bound-closure.rs:105:29
--> $DIR/projection-two-region-trait-bound-closure.rs:97:29
|
LL | with_signature(cell, t, |cell, t| require(cell, t));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -218,7 +210,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: where <T as Anything<ReClosureBound('_#1r), ReClosureBound('_#1r)>>::AssocType: '_#2r
note: No external requirements
--> $DIR/projection-two-region-trait-bound-closure.rs:101:1
--> $DIR/projection-two-region-trait-bound-closure.rs:93:1
|
LL | / fn two_regions<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
LL | | where
@ -235,7 +227,7 @@ LL | | }
]
error: unsatisfied lifetime constraints
--> $DIR/projection-two-region-trait-bound-closure.rs:105:29
--> $DIR/projection-two-region-trait-bound-closure.rs:97:29
|
LL | fn two_regions<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
| -- -- lifetime `'b` defined here
@ -246,7 +238,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ closure body requires that `'b` must outlive `'a`
note: External requirements
--> $DIR/projection-two-region-trait-bound-closure.rs:115:29
--> $DIR/projection-two-region-trait-bound-closure.rs:107:29
|
LL | with_signature(cell, t, |cell, t| require(cell, t));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -262,7 +254,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: where <T as Anything<ReClosureBound('_#2r), ReClosureBound('_#2r)>>::AssocType: '_#3r
note: No external requirements
--> $DIR/projection-two-region-trait-bound-closure.rs:110:1
--> $DIR/projection-two-region-trait-bound-closure.rs:102:1
|
LL | / fn two_regions_outlive<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
LL | | where
@ -280,7 +272,7 @@ LL | | }
]
note: External requirements
--> $DIR/projection-two-region-trait-bound-closure.rs:127:29
--> $DIR/projection-two-region-trait-bound-closure.rs:119:29
|
LL | with_signature(cell, t, |cell, t| require(cell, t));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -295,7 +287,7 @@ LL | with_signature(cell, t, |cell, t| require(cell, t));
= note: where <T as Anything<ReClosureBound('_#1r), ReClosureBound('_#1r)>>::AssocType: '_#2r
note: No external requirements
--> $DIR/projection-two-region-trait-bound-closure.rs:119:1
--> $DIR/projection-two-region-trait-bound-closure.rs:111:1
|
LL | / fn one_region<'a, T>(cell: Cell<&'a ()>, t: T)
LL | | where
@ -311,6 +303,6 @@ LL | | }
T
]
error: aborting due to 4 previous errors
error: aborting due to 3 previous errors
For more information about this error, try `rustc --explain E0309`.

View file

@ -0,0 +1,11 @@
error[E0309]: the associated type `<T as MyTrait<'_>>::Output` may not live long enough
--> $DIR/projection-where-clause-env-wrong-bound.rs:17:5
|
LL | bar::<T::Output>() //~ ERROR may not live long enough
| ^^^^^^^^^^^^^^^^^^
|
= help: consider adding an explicit lifetime bound `<T as MyTrait<'_>>::Output: 'a`...
error: aborting due to previous error
For more information about this error, try `rustc --explain E0309`.

View file

@ -0,0 +1,16 @@
error[E0309]: the associated type `<T as MyTrait<'a>>::Output` may not live long enough
--> $DIR/projection-where-clause-env-wrong-lifetime.rs:14:5
|
LL | bar::<<T as MyTrait<'a>>::Output>() //~ ERROR the associated type `<T as MyTrait<'a>>::Output` may not live long enough
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= help: consider adding an explicit lifetime bound `<T as MyTrait<'a>>::Output: 'a`...
note: ...so that the type `<T as MyTrait<'a>>::Output` will meet its required lifetime bounds
--> $DIR/projection-where-clause-env-wrong-lifetime.rs:14:5
|
LL | bar::<<T as MyTrait<'a>>::Output>() //~ ERROR the associated type `<T as MyTrait<'a>>::Output` may not live long enough
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to previous error
For more information about this error, try `rustc --explain E0309`.

View file

@ -0,0 +1,11 @@
error[E0309]: the parameter type `T` may not live long enough
--> $DIR/projection-where-clause-none.rs:16:5
|
LL | bar::<T::Output>() //~ ERROR the parameter type `T` may not live long enough
| ^^^^^^^^^^^^^^^^^^
|
= help: consider adding an explicit lifetime bound `T: 'a`...
error: aborting due to previous error
For more information about this error, try `rustc --explain E0309`.