update tests and add stderr files
This commit is contained in:
parent
a13c9f6bfd
commit
f87189dd3c
10 changed files with 72 additions and 81 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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`.
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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`.
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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`.
|
||||
|
|
|
|||
|
|
@ -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`.
|
||||
|
|
@ -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`.
|
||||
|
|
@ -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`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue