--- /dev/null
+error[E0308]: mismatched types
+ --> $DIR/variance-associated-types2.rs:17:42
+ |
+LL | let _: Box<dyn Foo<Bar = &'a u32>> = make();
+ | ^^^^^^ lifetime mismatch
+ |
+ = note: expected trait object `dyn Foo<Bar = &'a u32>`
+ found trait object `dyn Foo<Bar = &'static u32>`
+note: the lifetime `'a` as defined here...
+ --> $DIR/variance-associated-types2.rs:16:9
+ |
+LL | fn take<'a>(_: &'a u32) {
+ | ^^
+ = note: ...does not necessarily outlive the static lifetime
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
error: lifetime may not live long enough
- --> $DIR/variance-associated-types2.rs:13:12
+ --> $DIR/variance-associated-types2.rs:17:12
|
LL | fn take<'a>(_: &'a u32) {
| -- lifetime `'a` defined here
// Test that dyn Foo<Bar = T> is invariant with respect to T.
// Failure to enforce invariance here can be weaponized, see #71550 for details.
+// revisions: base nll
+// ignore-compare-mode-nll
+//[nll] compile-flags: -Z borrowck=mir
+
trait Foo {
type Bar;
}
fn take<'a>(_: &'a u32) {
let _: Box<dyn Foo<Bar = &'a u32>> = make();
- //~^ ERROR mismatched types [E0308]
+ //[base]~^ ERROR mismatched types [E0308]
+ //[nll]~^^ ERROR lifetime may not live long enough
}
fn main() {}
+++ /dev/null
-error[E0308]: mismatched types
- --> $DIR/variance-associated-types2.rs:13:42
- |
-LL | let _: Box<dyn Foo<Bar = &'a u32>> = make();
- | ^^^^^^ lifetime mismatch
- |
- = note: expected trait object `dyn Foo<Bar = &'a u32>`
- found trait object `dyn Foo<Bar = &'static u32>`
-note: the lifetime `'a` as defined here...
- --> $DIR/variance-associated-types2.rs:12:9
- |
-LL | fn take<'a>(_: &'a u32) {
- | ^^
- = note: ...does not necessarily outlive the static lifetime
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0308`.
--- /dev/null
+error[E0308]: mismatched types
+ --> $DIR/variance-btree-invariant-types.rs:8:5
+ |
+LL | v
+ | ^ lifetime mismatch
+ |
+ = note: expected struct `std::collections::btree_map::IterMut<'_, &'new (), _>`
+ found struct `std::collections::btree_map::IterMut<'_, &'static (), _>`
+note: the lifetime `'new` as defined here...
+ --> $DIR/variance-btree-invariant-types.rs:7:21
+ |
+LL | fn iter_cov_key<'a, 'new>(v: IterMut<'a, &'static (), ()>) -> IterMut<'a, &'new (), ()> {
+ | ^^^^
+ = note: ...does not necessarily outlive the static lifetime
+
+error[E0308]: mismatched types
+ --> $DIR/variance-btree-invariant-types.rs:13:5
+ |
+LL | v
+ | ^ lifetime mismatch
+ |
+ = note: expected struct `std::collections::btree_map::IterMut<'_, _, &'new ()>`
+ found struct `std::collections::btree_map::IterMut<'_, _, &'static ()>`
+note: the lifetime `'new` as defined here...
+ --> $DIR/variance-btree-invariant-types.rs:12:21
+ |
+LL | fn iter_cov_val<'a, 'new>(v: IterMut<'a, (), &'static ()>) -> IterMut<'a, (), &'new ()> {
+ | ^^^^
+ = note: ...does not necessarily outlive the static lifetime
+
+error[E0308]: mismatched types
+ --> $DIR/variance-btree-invariant-types.rs:18:5
+ |
+LL | v
+ | ^ lifetime mismatch
+ |
+ = note: expected struct `std::collections::btree_map::IterMut<'_, &'static (), _>`
+ found struct `std::collections::btree_map::IterMut<'_, &'new (), _>`
+note: the lifetime `'new` as defined here...
+ --> $DIR/variance-btree-invariant-types.rs:17:24
+ |
+LL | fn iter_contra_key<'a, 'new>(v: IterMut<'a, &'new (), ()>) -> IterMut<'a, &'static (), ()> {
+ | ^^^^
+ = note: ...does not necessarily outlive the static lifetime
+
+error[E0308]: mismatched types
+ --> $DIR/variance-btree-invariant-types.rs:23:5
+ |
+LL | v
+ | ^ lifetime mismatch
+ |
+ = note: expected struct `std::collections::btree_map::IterMut<'_, _, &'static ()>`
+ found struct `std::collections::btree_map::IterMut<'_, _, &'new ()>`
+note: the lifetime `'new` as defined here...
+ --> $DIR/variance-btree-invariant-types.rs:22:24
+ |
+LL | fn iter_contra_val<'a, 'new>(v: IterMut<'a, (), &'new ()>) -> IterMut<'a, (), &'static ()> {
+ | ^^^^
+ = note: ...does not necessarily outlive the static lifetime
+
+error[E0308]: mismatched types
+ --> $DIR/variance-btree-invariant-types.rs:29:5
+ |
+LL | v
+ | ^ lifetime mismatch
+ |
+ = note: expected struct `RangeMut<'_, &'new (), _>`
+ found struct `RangeMut<'_, &'static (), _>`
+note: the lifetime `'new` as defined here...
+ --> $DIR/variance-btree-invariant-types.rs:28:22
+ |
+LL | fn range_cov_key<'a, 'new>(v: RangeMut<'a, &'static (), ()>) -> RangeMut<'a, &'new (), ()> {
+ | ^^^^
+ = note: ...does not necessarily outlive the static lifetime
+
+error[E0308]: mismatched types
+ --> $DIR/variance-btree-invariant-types.rs:34:5
+ |
+LL | v
+ | ^ lifetime mismatch
+ |
+ = note: expected struct `RangeMut<'_, _, &'new ()>`
+ found struct `RangeMut<'_, _, &'static ()>`
+note: the lifetime `'new` as defined here...
+ --> $DIR/variance-btree-invariant-types.rs:33:22
+ |
+LL | fn range_cov_val<'a, 'new>(v: RangeMut<'a, (), &'static ()>) -> RangeMut<'a, (), &'new ()> {
+ | ^^^^
+ = note: ...does not necessarily outlive the static lifetime
+
+error[E0308]: mismatched types
+ --> $DIR/variance-btree-invariant-types.rs:39:5
+ |
+LL | v
+ | ^ lifetime mismatch
+ |
+ = note: expected struct `RangeMut<'_, &'static (), _>`
+ found struct `RangeMut<'_, &'new (), _>`
+note: the lifetime `'new` as defined here...
+ --> $DIR/variance-btree-invariant-types.rs:38:25
+ |
+LL | fn range_contra_key<'a, 'new>(v: RangeMut<'a, &'new (), ()>) -> RangeMut<'a, &'static (), ()> {
+ | ^^^^
+ = note: ...does not necessarily outlive the static lifetime
+
+error[E0308]: mismatched types
+ --> $DIR/variance-btree-invariant-types.rs:44:5
+ |
+LL | v
+ | ^ lifetime mismatch
+ |
+ = note: expected struct `RangeMut<'_, _, &'static ()>`
+ found struct `RangeMut<'_, _, &'new ()>`
+note: the lifetime `'new` as defined here...
+ --> $DIR/variance-btree-invariant-types.rs:43:25
+ |
+LL | fn range_contra_val<'a, 'new>(v: RangeMut<'a, (), &'new ()>) -> RangeMut<'a, (), &'static ()> {
+ | ^^^^
+ = note: ...does not necessarily outlive the static lifetime
+
+error[E0308]: mismatched types
+ --> $DIR/variance-btree-invariant-types.rs:51:5
+ |
+LL | v
+ | ^ lifetime mismatch
+ |
+ = note: expected struct `std::collections::btree_map::OccupiedEntry<'_, &'new (), _>`
+ found struct `std::collections::btree_map::OccupiedEntry<'_, &'static (), _>`
+note: the lifetime `'new` as defined here...
+ --> $DIR/variance-btree-invariant-types.rs:49:20
+ |
+LL | fn occ_cov_key<'a, 'new>(v: OccupiedEntry<'a, &'static (), ()>)
+ | ^^^^
+ = note: ...does not necessarily outlive the static lifetime
+
+error[E0308]: mismatched types
+ --> $DIR/variance-btree-invariant-types.rs:57:5
+ |
+LL | v
+ | ^ lifetime mismatch
+ |
+ = note: expected struct `std::collections::btree_map::OccupiedEntry<'_, _, &'new ()>`
+ found struct `std::collections::btree_map::OccupiedEntry<'_, _, &'static ()>`
+note: the lifetime `'new` as defined here...
+ --> $DIR/variance-btree-invariant-types.rs:55:20
+ |
+LL | fn occ_cov_val<'a, 'new>(v: OccupiedEntry<'a, (), &'static ()>)
+ | ^^^^
+ = note: ...does not necessarily outlive the static lifetime
+
+error[E0308]: mismatched types
+ --> $DIR/variance-btree-invariant-types.rs:63:5
+ |
+LL | v
+ | ^ lifetime mismatch
+ |
+ = note: expected struct `std::collections::btree_map::OccupiedEntry<'_, &'static (), _>`
+ found struct `std::collections::btree_map::OccupiedEntry<'_, &'new (), _>`
+note: the lifetime `'new` as defined here...
+ --> $DIR/variance-btree-invariant-types.rs:61:23
+ |
+LL | fn occ_contra_key<'a, 'new>(v: OccupiedEntry<'a, &'new (), ()>)
+ | ^^^^
+ = note: ...does not necessarily outlive the static lifetime
+
+error[E0308]: mismatched types
+ --> $DIR/variance-btree-invariant-types.rs:69:5
+ |
+LL | v
+ | ^ lifetime mismatch
+ |
+ = note: expected struct `std::collections::btree_map::OccupiedEntry<'_, _, &'static ()>`
+ found struct `std::collections::btree_map::OccupiedEntry<'_, _, &'new ()>`
+note: the lifetime `'new` as defined here...
+ --> $DIR/variance-btree-invariant-types.rs:67:23
+ |
+LL | fn occ_contra_val<'a, 'new>(v: OccupiedEntry<'a, (), &'new ()>)
+ | ^^^^
+ = note: ...does not necessarily outlive the static lifetime
+
+error[E0308]: mismatched types
+ --> $DIR/variance-btree-invariant-types.rs:76:5
+ |
+LL | v
+ | ^ lifetime mismatch
+ |
+ = note: expected struct `std::collections::btree_map::VacantEntry<'_, &'new (), _>`
+ found struct `std::collections::btree_map::VacantEntry<'_, &'static (), _>`
+note: the lifetime `'new` as defined here...
+ --> $DIR/variance-btree-invariant-types.rs:74:20
+ |
+LL | fn vac_cov_key<'a, 'new>(v: VacantEntry<'a, &'static (), ()>)
+ | ^^^^
+ = note: ...does not necessarily outlive the static lifetime
+
+error[E0308]: mismatched types
+ --> $DIR/variance-btree-invariant-types.rs:82:5
+ |
+LL | v
+ | ^ lifetime mismatch
+ |
+ = note: expected struct `std::collections::btree_map::VacantEntry<'_, _, &'new ()>`
+ found struct `std::collections::btree_map::VacantEntry<'_, _, &'static ()>`
+note: the lifetime `'new` as defined here...
+ --> $DIR/variance-btree-invariant-types.rs:80:20
+ |
+LL | fn vac_cov_val<'a, 'new>(v: VacantEntry<'a, (), &'static ()>)
+ | ^^^^
+ = note: ...does not necessarily outlive the static lifetime
+
+error[E0308]: mismatched types
+ --> $DIR/variance-btree-invariant-types.rs:88:5
+ |
+LL | v
+ | ^ lifetime mismatch
+ |
+ = note: expected struct `std::collections::btree_map::VacantEntry<'_, &'static (), _>`
+ found struct `std::collections::btree_map::VacantEntry<'_, &'new (), _>`
+note: the lifetime `'new` as defined here...
+ --> $DIR/variance-btree-invariant-types.rs:86:23
+ |
+LL | fn vac_contra_key<'a, 'new>(v: VacantEntry<'a, &'new (), ()>)
+ | ^^^^
+ = note: ...does not necessarily outlive the static lifetime
+
+error[E0308]: mismatched types
+ --> $DIR/variance-btree-invariant-types.rs:94:5
+ |
+LL | v
+ | ^ lifetime mismatch
+ |
+ = note: expected struct `std::collections::btree_map::VacantEntry<'_, _, &'static ()>`
+ found struct `std::collections::btree_map::VacantEntry<'_, _, &'new ()>`
+note: the lifetime `'new` as defined here...
+ --> $DIR/variance-btree-invariant-types.rs:92:23
+ |
+LL | fn vac_contra_val<'a, 'new>(v: VacantEntry<'a, (), &'new ()>)
+ | ^^^^
+ = note: ...does not necessarily outlive the static lifetime
+
+error: aborting due to 16 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
error: lifetime may not live long enough
- --> $DIR/variance-btree-invariant-types.rs:4:5
+ --> $DIR/variance-btree-invariant-types.rs:8:5
|
LL | fn iter_cov_key<'a, 'new>(v: IterMut<'a, &'static (), ()>) -> IterMut<'a, &'new (), ()> {
| ---- lifetime `'new` defined here
= help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
error: lifetime may not live long enough
- --> $DIR/variance-btree-invariant-types.rs:7:5
+ --> $DIR/variance-btree-invariant-types.rs:13:5
|
LL | fn iter_cov_val<'a, 'new>(v: IterMut<'a, (), &'static ()>) -> IterMut<'a, (), &'new ()> {
| ---- lifetime `'new` defined here
= help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
error: lifetime may not live long enough
- --> $DIR/variance-btree-invariant-types.rs:10:5
+ --> $DIR/variance-btree-invariant-types.rs:18:5
|
LL | fn iter_contra_key<'a, 'new>(v: IterMut<'a, &'new (), ()>) -> IterMut<'a, &'static (), ()> {
| ---- lifetime `'new` defined here
= help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
error: lifetime may not live long enough
- --> $DIR/variance-btree-invariant-types.rs:13:5
+ --> $DIR/variance-btree-invariant-types.rs:23:5
|
LL | fn iter_contra_val<'a, 'new>(v: IterMut<'a, (), &'new ()>) -> IterMut<'a, (), &'static ()> {
| ---- lifetime `'new` defined here
= help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
error: lifetime may not live long enough
- --> $DIR/variance-btree-invariant-types.rs:17:5
+ --> $DIR/variance-btree-invariant-types.rs:29:5
|
LL | fn range_cov_key<'a, 'new>(v: RangeMut<'a, &'static (), ()>) -> RangeMut<'a, &'new (), ()> {
| ---- lifetime `'new` defined here
= help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
error: lifetime may not live long enough
- --> $DIR/variance-btree-invariant-types.rs:20:5
+ --> $DIR/variance-btree-invariant-types.rs:34:5
|
LL | fn range_cov_val<'a, 'new>(v: RangeMut<'a, (), &'static ()>) -> RangeMut<'a, (), &'new ()> {
| ---- lifetime `'new` defined here
= help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
error: lifetime may not live long enough
- --> $DIR/variance-btree-invariant-types.rs:23:5
+ --> $DIR/variance-btree-invariant-types.rs:39:5
|
LL | fn range_contra_key<'a, 'new>(v: RangeMut<'a, &'new (), ()>) -> RangeMut<'a, &'static (), ()> {
| ---- lifetime `'new` defined here
= help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
error: lifetime may not live long enough
- --> $DIR/variance-btree-invariant-types.rs:26:5
+ --> $DIR/variance-btree-invariant-types.rs:44:5
|
LL | fn range_contra_val<'a, 'new>(v: RangeMut<'a, (), &'new ()>) -> RangeMut<'a, (), &'static ()> {
| ---- lifetime `'new` defined here
= help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
error: lifetime may not live long enough
- --> $DIR/variance-btree-invariant-types.rs:31:5
+ --> $DIR/variance-btree-invariant-types.rs:51:5
|
LL | fn occ_cov_key<'a, 'new>(v: OccupiedEntry<'a, &'static (), ()>)
| ---- lifetime `'new` defined here
= help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
error: lifetime may not live long enough
- --> $DIR/variance-btree-invariant-types.rs:35:5
+ --> $DIR/variance-btree-invariant-types.rs:57:5
|
LL | fn occ_cov_val<'a, 'new>(v: OccupiedEntry<'a, (), &'static ()>)
| ---- lifetime `'new` defined here
= help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
error: lifetime may not live long enough
- --> $DIR/variance-btree-invariant-types.rs:39:5
+ --> $DIR/variance-btree-invariant-types.rs:63:5
|
LL | fn occ_contra_key<'a, 'new>(v: OccupiedEntry<'a, &'new (), ()>)
| ---- lifetime `'new` defined here
= help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
error: lifetime may not live long enough
- --> $DIR/variance-btree-invariant-types.rs:43:5
+ --> $DIR/variance-btree-invariant-types.rs:69:5
|
LL | fn occ_contra_val<'a, 'new>(v: OccupiedEntry<'a, (), &'new ()>)
| ---- lifetime `'new` defined here
= help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
error: lifetime may not live long enough
- --> $DIR/variance-btree-invariant-types.rs:48:5
+ --> $DIR/variance-btree-invariant-types.rs:76:5
|
LL | fn vac_cov_key<'a, 'new>(v: VacantEntry<'a, &'static (), ()>)
| ---- lifetime `'new` defined here
= help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
error: lifetime may not live long enough
- --> $DIR/variance-btree-invariant-types.rs:52:5
+ --> $DIR/variance-btree-invariant-types.rs:82:5
|
LL | fn vac_cov_val<'a, 'new>(v: VacantEntry<'a, (), &'static ()>)
| ---- lifetime `'new` defined here
= help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
error: lifetime may not live long enough
- --> $DIR/variance-btree-invariant-types.rs:56:5
+ --> $DIR/variance-btree-invariant-types.rs:88:5
|
LL | fn vac_contra_key<'a, 'new>(v: VacantEntry<'a, &'new (), ()>)
| ---- lifetime `'new` defined here
= help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
error: lifetime may not live long enough
- --> $DIR/variance-btree-invariant-types.rs:60:5
+ --> $DIR/variance-btree-invariant-types.rs:94:5
|
LL | fn vac_contra_val<'a, 'new>(v: VacantEntry<'a, (), &'new ()>)
| ---- lifetime `'new` defined here
use std::collections::btree_map::{IterMut, OccupiedEntry, RangeMut, VacantEntry};
+// revisions: base nll
+// ignore-compare-mode-nll
+//[nll] compile-flags: -Z borrowck=mir
+
fn iter_cov_key<'a, 'new>(v: IterMut<'a, &'static (), ()>) -> IterMut<'a, &'new (), ()> {
- v //~ ERROR mismatched types
+ v
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ lifetime may not live long enough
}
fn iter_cov_val<'a, 'new>(v: IterMut<'a, (), &'static ()>) -> IterMut<'a, (), &'new ()> {
- v //~ ERROR mismatched types
+ v
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ lifetime may not live long enough
}
fn iter_contra_key<'a, 'new>(v: IterMut<'a, &'new (), ()>) -> IterMut<'a, &'static (), ()> {
- v //~ ERROR mismatched types
+ v
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ lifetime may not live long enough
}
fn iter_contra_val<'a, 'new>(v: IterMut<'a, (), &'new ()>) -> IterMut<'a, (), &'static ()> {
- v //~ ERROR mismatched types
+ v
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ lifetime may not live long enough
}
fn range_cov_key<'a, 'new>(v: RangeMut<'a, &'static (), ()>) -> RangeMut<'a, &'new (), ()> {
- v //~ ERROR mismatched types
+ v
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ lifetime may not live long enough
}
fn range_cov_val<'a, 'new>(v: RangeMut<'a, (), &'static ()>) -> RangeMut<'a, (), &'new ()> {
- v //~ ERROR mismatched types
+ v
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ lifetime may not live long enough
}
fn range_contra_key<'a, 'new>(v: RangeMut<'a, &'new (), ()>) -> RangeMut<'a, &'static (), ()> {
- v //~ ERROR mismatched types
+ v
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ lifetime may not live long enough
}
fn range_contra_val<'a, 'new>(v: RangeMut<'a, (), &'new ()>) -> RangeMut<'a, (), &'static ()> {
- v //~ ERROR mismatched types
+ v
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ lifetime may not live long enough
}
fn occ_cov_key<'a, 'new>(v: OccupiedEntry<'a, &'static (), ()>)
-> OccupiedEntry<'a, &'new (), ()> {
- v //~ ERROR mismatched types
+ v
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ lifetime may not live long enough
}
fn occ_cov_val<'a, 'new>(v: OccupiedEntry<'a, (), &'static ()>)
-> OccupiedEntry<'a, (), &'new ()> {
- v //~ ERROR mismatched types
+ v
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ lifetime may not live long enough
}
fn occ_contra_key<'a, 'new>(v: OccupiedEntry<'a, &'new (), ()>)
-> OccupiedEntry<'a, &'static (), ()> {
- v //~ ERROR mismatched types
+ v
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ lifetime may not live long enough
}
fn occ_contra_val<'a, 'new>(v: OccupiedEntry<'a, (), &'new ()>)
-> OccupiedEntry<'a, (), &'static ()> {
- v //~ ERROR mismatched types
+ v
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ lifetime may not live long enough
}
fn vac_cov_key<'a, 'new>(v: VacantEntry<'a, &'static (), ()>)
-> VacantEntry<'a, &'new (), ()> {
- v //~ ERROR mismatched types
+ v
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ lifetime may not live long enough
}
fn vac_cov_val<'a, 'new>(v: VacantEntry<'a, (), &'static ()>)
-> VacantEntry<'a, (), &'new ()> {
- v //~ ERROR mismatched types
+ v
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ lifetime may not live long enough
}
fn vac_contra_key<'a, 'new>(v: VacantEntry<'a, &'new (), ()>)
-> VacantEntry<'a, &'static (), ()> {
- v //~ ERROR mismatched types
+ v
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ lifetime may not live long enough
}
fn vac_contra_val<'a, 'new>(v: VacantEntry<'a, (), &'new ()>)
-> VacantEntry<'a, (), &'static ()> {
- v //~ ERROR mismatched types
+ v
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ lifetime may not live long enough
}
+++ /dev/null
-error[E0308]: mismatched types
- --> $DIR/variance-btree-invariant-types.rs:4:5
- |
-LL | v
- | ^ lifetime mismatch
- |
- = note: expected struct `std::collections::btree_map::IterMut<'_, &'new (), _>`
- found struct `std::collections::btree_map::IterMut<'_, &'static (), _>`
-note: the lifetime `'new` as defined here...
- --> $DIR/variance-btree-invariant-types.rs:3:21
- |
-LL | fn iter_cov_key<'a, 'new>(v: IterMut<'a, &'static (), ()>) -> IterMut<'a, &'new (), ()> {
- | ^^^^
- = note: ...does not necessarily outlive the static lifetime
-
-error[E0308]: mismatched types
- --> $DIR/variance-btree-invariant-types.rs:7:5
- |
-LL | v
- | ^ lifetime mismatch
- |
- = note: expected struct `std::collections::btree_map::IterMut<'_, _, &'new ()>`
- found struct `std::collections::btree_map::IterMut<'_, _, &'static ()>`
-note: the lifetime `'new` as defined here...
- --> $DIR/variance-btree-invariant-types.rs:6:21
- |
-LL | fn iter_cov_val<'a, 'new>(v: IterMut<'a, (), &'static ()>) -> IterMut<'a, (), &'new ()> {
- | ^^^^
- = note: ...does not necessarily outlive the static lifetime
-
-error[E0308]: mismatched types
- --> $DIR/variance-btree-invariant-types.rs:10:5
- |
-LL | v
- | ^ lifetime mismatch
- |
- = note: expected struct `std::collections::btree_map::IterMut<'_, &'static (), _>`
- found struct `std::collections::btree_map::IterMut<'_, &'new (), _>`
-note: the lifetime `'new` as defined here...
- --> $DIR/variance-btree-invariant-types.rs:9:24
- |
-LL | fn iter_contra_key<'a, 'new>(v: IterMut<'a, &'new (), ()>) -> IterMut<'a, &'static (), ()> {
- | ^^^^
- = note: ...does not necessarily outlive the static lifetime
-
-error[E0308]: mismatched types
- --> $DIR/variance-btree-invariant-types.rs:13:5
- |
-LL | v
- | ^ lifetime mismatch
- |
- = note: expected struct `std::collections::btree_map::IterMut<'_, _, &'static ()>`
- found struct `std::collections::btree_map::IterMut<'_, _, &'new ()>`
-note: the lifetime `'new` as defined here...
- --> $DIR/variance-btree-invariant-types.rs:12:24
- |
-LL | fn iter_contra_val<'a, 'new>(v: IterMut<'a, (), &'new ()>) -> IterMut<'a, (), &'static ()> {
- | ^^^^
- = note: ...does not necessarily outlive the static lifetime
-
-error[E0308]: mismatched types
- --> $DIR/variance-btree-invariant-types.rs:17:5
- |
-LL | v
- | ^ lifetime mismatch
- |
- = note: expected struct `RangeMut<'_, &'new (), _>`
- found struct `RangeMut<'_, &'static (), _>`
-note: the lifetime `'new` as defined here...
- --> $DIR/variance-btree-invariant-types.rs:16:22
- |
-LL | fn range_cov_key<'a, 'new>(v: RangeMut<'a, &'static (), ()>) -> RangeMut<'a, &'new (), ()> {
- | ^^^^
- = note: ...does not necessarily outlive the static lifetime
-
-error[E0308]: mismatched types
- --> $DIR/variance-btree-invariant-types.rs:20:5
- |
-LL | v
- | ^ lifetime mismatch
- |
- = note: expected struct `RangeMut<'_, _, &'new ()>`
- found struct `RangeMut<'_, _, &'static ()>`
-note: the lifetime `'new` as defined here...
- --> $DIR/variance-btree-invariant-types.rs:19:22
- |
-LL | fn range_cov_val<'a, 'new>(v: RangeMut<'a, (), &'static ()>) -> RangeMut<'a, (), &'new ()> {
- | ^^^^
- = note: ...does not necessarily outlive the static lifetime
-
-error[E0308]: mismatched types
- --> $DIR/variance-btree-invariant-types.rs:23:5
- |
-LL | v
- | ^ lifetime mismatch
- |
- = note: expected struct `RangeMut<'_, &'static (), _>`
- found struct `RangeMut<'_, &'new (), _>`
-note: the lifetime `'new` as defined here...
- --> $DIR/variance-btree-invariant-types.rs:22:25
- |
-LL | fn range_contra_key<'a, 'new>(v: RangeMut<'a, &'new (), ()>) -> RangeMut<'a, &'static (), ()> {
- | ^^^^
- = note: ...does not necessarily outlive the static lifetime
-
-error[E0308]: mismatched types
- --> $DIR/variance-btree-invariant-types.rs:26:5
- |
-LL | v
- | ^ lifetime mismatch
- |
- = note: expected struct `RangeMut<'_, _, &'static ()>`
- found struct `RangeMut<'_, _, &'new ()>`
-note: the lifetime `'new` as defined here...
- --> $DIR/variance-btree-invariant-types.rs:25:25
- |
-LL | fn range_contra_val<'a, 'new>(v: RangeMut<'a, (), &'new ()>) -> RangeMut<'a, (), &'static ()> {
- | ^^^^
- = note: ...does not necessarily outlive the static lifetime
-
-error[E0308]: mismatched types
- --> $DIR/variance-btree-invariant-types.rs:31:5
- |
-LL | v
- | ^ lifetime mismatch
- |
- = note: expected struct `std::collections::btree_map::OccupiedEntry<'_, &'new (), _>`
- found struct `std::collections::btree_map::OccupiedEntry<'_, &'static (), _>`
-note: the lifetime `'new` as defined here...
- --> $DIR/variance-btree-invariant-types.rs:29:20
- |
-LL | fn occ_cov_key<'a, 'new>(v: OccupiedEntry<'a, &'static (), ()>)
- | ^^^^
- = note: ...does not necessarily outlive the static lifetime
-
-error[E0308]: mismatched types
- --> $DIR/variance-btree-invariant-types.rs:35:5
- |
-LL | v
- | ^ lifetime mismatch
- |
- = note: expected struct `std::collections::btree_map::OccupiedEntry<'_, _, &'new ()>`
- found struct `std::collections::btree_map::OccupiedEntry<'_, _, &'static ()>`
-note: the lifetime `'new` as defined here...
- --> $DIR/variance-btree-invariant-types.rs:33:20
- |
-LL | fn occ_cov_val<'a, 'new>(v: OccupiedEntry<'a, (), &'static ()>)
- | ^^^^
- = note: ...does not necessarily outlive the static lifetime
-
-error[E0308]: mismatched types
- --> $DIR/variance-btree-invariant-types.rs:39:5
- |
-LL | v
- | ^ lifetime mismatch
- |
- = note: expected struct `std::collections::btree_map::OccupiedEntry<'_, &'static (), _>`
- found struct `std::collections::btree_map::OccupiedEntry<'_, &'new (), _>`
-note: the lifetime `'new` as defined here...
- --> $DIR/variance-btree-invariant-types.rs:37:23
- |
-LL | fn occ_contra_key<'a, 'new>(v: OccupiedEntry<'a, &'new (), ()>)
- | ^^^^
- = note: ...does not necessarily outlive the static lifetime
-
-error[E0308]: mismatched types
- --> $DIR/variance-btree-invariant-types.rs:43:5
- |
-LL | v
- | ^ lifetime mismatch
- |
- = note: expected struct `std::collections::btree_map::OccupiedEntry<'_, _, &'static ()>`
- found struct `std::collections::btree_map::OccupiedEntry<'_, _, &'new ()>`
-note: the lifetime `'new` as defined here...
- --> $DIR/variance-btree-invariant-types.rs:41:23
- |
-LL | fn occ_contra_val<'a, 'new>(v: OccupiedEntry<'a, (), &'new ()>)
- | ^^^^
- = note: ...does not necessarily outlive the static lifetime
-
-error[E0308]: mismatched types
- --> $DIR/variance-btree-invariant-types.rs:48:5
- |
-LL | v
- | ^ lifetime mismatch
- |
- = note: expected struct `std::collections::btree_map::VacantEntry<'_, &'new (), _>`
- found struct `std::collections::btree_map::VacantEntry<'_, &'static (), _>`
-note: the lifetime `'new` as defined here...
- --> $DIR/variance-btree-invariant-types.rs:46:20
- |
-LL | fn vac_cov_key<'a, 'new>(v: VacantEntry<'a, &'static (), ()>)
- | ^^^^
- = note: ...does not necessarily outlive the static lifetime
-
-error[E0308]: mismatched types
- --> $DIR/variance-btree-invariant-types.rs:52:5
- |
-LL | v
- | ^ lifetime mismatch
- |
- = note: expected struct `std::collections::btree_map::VacantEntry<'_, _, &'new ()>`
- found struct `std::collections::btree_map::VacantEntry<'_, _, &'static ()>`
-note: the lifetime `'new` as defined here...
- --> $DIR/variance-btree-invariant-types.rs:50:20
- |
-LL | fn vac_cov_val<'a, 'new>(v: VacantEntry<'a, (), &'static ()>)
- | ^^^^
- = note: ...does not necessarily outlive the static lifetime
-
-error[E0308]: mismatched types
- --> $DIR/variance-btree-invariant-types.rs:56:5
- |
-LL | v
- | ^ lifetime mismatch
- |
- = note: expected struct `std::collections::btree_map::VacantEntry<'_, &'static (), _>`
- found struct `std::collections::btree_map::VacantEntry<'_, &'new (), _>`
-note: the lifetime `'new` as defined here...
- --> $DIR/variance-btree-invariant-types.rs:54:23
- |
-LL | fn vac_contra_key<'a, 'new>(v: VacantEntry<'a, &'new (), ()>)
- | ^^^^
- = note: ...does not necessarily outlive the static lifetime
-
-error[E0308]: mismatched types
- --> $DIR/variance-btree-invariant-types.rs:60:5
- |
-LL | v
- | ^ lifetime mismatch
- |
- = note: expected struct `std::collections::btree_map::VacantEntry<'_, _, &'static ()>`
- found struct `std::collections::btree_map::VacantEntry<'_, _, &'new ()>`
-note: the lifetime `'new` as defined here...
- --> $DIR/variance-btree-invariant-types.rs:58:23
- |
-LL | fn vac_contra_val<'a, 'new>(v: VacantEntry<'a, (), &'new ()>)
- | ^^^^
- = note: ...does not necessarily outlive the static lifetime
-
-error: aborting due to 16 previous errors
-
-For more information about this error, try `rustc --explain E0308`.
--- /dev/null
+error[E0623]: lifetime mismatch
+ --> $DIR/variance-cell-is-invariant.rs:18:25
+ |
+LL | fn use_<'short,'long>(c: Foo<'short>,
+ | ----------- these two types are declared with different lifetimes...
+LL | s: &'short isize,
+LL | l: &'long isize,
+ | ------------
+LL | _where:Option<&'short &'long ()>) {
+LL | let _: Foo<'long> = c;
+ | ^ ...but data from `c` flows into `l` here
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0623`.
error: lifetime may not live long enough
- --> $DIR/variance-cell-is-invariant.rs:14:12
+ --> $DIR/variance-cell-is-invariant.rs:18:12
|
LL | fn use_<'short,'long>(c: Foo<'short>,
| ------ ----- lifetime `'long` defined here
// Test that Cell is considered invariant with respect to its
// type.
+// revisions: base nll
+// ignore-compare-mode-nll
+//[nll] compile-flags: -Z borrowck=mir
+
use std::cell::Cell;
struct Foo<'a> {
s: &'short isize,
l: &'long isize,
_where:Option<&'short &'long ()>) {
- let _: Foo<'long> = c; //~ ERROR E0623
+ let _: Foo<'long> = c;
+ //[base]~^ ERROR E0623
+ //[nll]~^^ ERROR lifetime may not live long enough
}
fn main() {
+++ /dev/null
-error[E0623]: lifetime mismatch
- --> $DIR/variance-cell-is-invariant.rs:14:25
- |
-LL | fn use_<'short,'long>(c: Foo<'short>,
- | ----------- these two types are declared with different lifetimes...
-LL | s: &'short isize,
-LL | l: &'long isize,
- | ------------
-LL | _where:Option<&'short &'long ()>) {
-LL | let _: Foo<'long> = c;
- | ^ ...but data from `c` flows into `l` here
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0623`.
--- /dev/null
+error[E0308]: mismatched types
+ --> $DIR/variance-contravariant-arg-object.rs:18:5
+ |
+LL | v
+ | ^ lifetime mismatch
+ |
+ = note: expected trait object `dyn Get<&'min i32>`
+ found trait object `dyn Get<&'max i32>`
+note: the lifetime `'min` as defined here...
+ --> $DIR/variance-contravariant-arg-object.rs:14:21
+ |
+LL | fn get_min_from_max<'min, 'max>(v: Box<dyn Get<&'max i32>>)
+ | ^^^^
+note: ...does not necessarily outlive the lifetime `'max` as defined here
+ --> $DIR/variance-contravariant-arg-object.rs:14:27
+ |
+LL | fn get_min_from_max<'min, 'max>(v: Box<dyn Get<&'max i32>>)
+ | ^^^^
+
+error[E0308]: mismatched types
+ --> $DIR/variance-contravariant-arg-object.rs:28:5
+ |
+LL | v
+ | ^ lifetime mismatch
+ |
+ = note: expected trait object `dyn Get<&'max i32>`
+ found trait object `dyn Get<&'min i32>`
+note: the lifetime `'min` as defined here...
+ --> $DIR/variance-contravariant-arg-object.rs:23:21
+ |
+LL | fn get_max_from_min<'min, 'max, G>(v: Box<dyn Get<&'min i32>>)
+ | ^^^^
+note: ...does not necessarily outlive the lifetime `'max` as defined here
+ --> $DIR/variance-contravariant-arg-object.rs:23:27
+ |
+LL | fn get_max_from_min<'min, 'max, G>(v: Box<dyn Get<&'min i32>>)
+ | ^^^^
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
error: lifetime may not live long enough
- --> $DIR/variance-contravariant-arg-object.rs:14:5
+ --> $DIR/variance-contravariant-arg-object.rs:18:5
|
LL | fn get_min_from_max<'min, 'max>(v: Box<dyn Get<&'max i32>>)
| ---- ---- lifetime `'max` defined here
= help: consider adding the following bound: `'min: 'max`
error: lifetime may not live long enough
- --> $DIR/variance-contravariant-arg-object.rs:22:5
+ --> $DIR/variance-contravariant-arg-object.rs:28:5
|
LL | fn get_max_from_min<'min, 'max, G>(v: Box<dyn Get<&'min i32>>)
| ---- ---- lifetime `'max` defined here
// Test that even when `T` is only used in contravariant position, it
// is treated as invariant.
+// revisions: base nll
+// ignore-compare-mode-nll
+//[nll] compile-flags: -Z borrowck=mir
+
trait Get<T> : 'static {
fn get(&self, t: T);
}
-> Box<dyn Get<&'min i32>>
where 'max : 'min
{
- v //~ ERROR mismatched types
+ v
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ ERROR lifetime may not live long enough
}
fn get_max_from_min<'min, 'max, G>(v: Box<dyn Get<&'min i32>>)
where 'max : 'min
{
// Previously OK:
- v //~ ERROR mismatched types
+ v
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ ERROR lifetime may not live long enough
}
fn main() { }
+++ /dev/null
-error[E0308]: mismatched types
- --> $DIR/variance-contravariant-arg-object.rs:14:5
- |
-LL | v
- | ^ lifetime mismatch
- |
- = note: expected trait object `dyn Get<&'min i32>`
- found trait object `dyn Get<&'max i32>`
-note: the lifetime `'min` as defined here...
- --> $DIR/variance-contravariant-arg-object.rs:10:21
- |
-LL | fn get_min_from_max<'min, 'max>(v: Box<dyn Get<&'max i32>>)
- | ^^^^
-note: ...does not necessarily outlive the lifetime `'max` as defined here
- --> $DIR/variance-contravariant-arg-object.rs:10:27
- |
-LL | fn get_min_from_max<'min, 'max>(v: Box<dyn Get<&'max i32>>)
- | ^^^^
-
-error[E0308]: mismatched types
- --> $DIR/variance-contravariant-arg-object.rs:22:5
- |
-LL | v
- | ^ lifetime mismatch
- |
- = note: expected trait object `dyn Get<&'max i32>`
- found trait object `dyn Get<&'min i32>`
-note: the lifetime `'min` as defined here...
- --> $DIR/variance-contravariant-arg-object.rs:17:21
- |
-LL | fn get_max_from_min<'min, 'max, G>(v: Box<dyn Get<&'min i32>>)
- | ^^^^
-note: ...does not necessarily outlive the lifetime `'max` as defined here
- --> $DIR/variance-contravariant-arg-object.rs:17:27
- |
-LL | fn get_max_from_min<'min, 'max, G>(v: Box<dyn Get<&'min i32>>)
- | ^^^^
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0308`.
--- /dev/null
+error[E0308]: mismatched types
+ --> $DIR/variance-contravariant-arg-trait-match.rs:17:5
+ |
+LL | impls_get::<G,&'min i32>()
+ | ^^^^^^^^^^^^^^^^^^^^^^^^ lifetime mismatch
+ |
+ = note: expected type `Get<&'min i32>`
+ found type `Get<&'max i32>`
+note: the lifetime `'min` as defined here...
+ --> $DIR/variance-contravariant-arg-trait-match.rs:14:21
+ |
+LL | fn get_min_from_max<'min, 'max, G>()
+ | ^^^^
+note: ...does not necessarily outlive the lifetime `'max` as defined here
+ --> $DIR/variance-contravariant-arg-trait-match.rs:14:27
+ |
+LL | fn get_min_from_max<'min, 'max, G>()
+ | ^^^^
+
+error[E0308]: mismatched types
+ --> $DIR/variance-contravariant-arg-trait-match.rs:27:5
+ |
+LL | impls_get::<G,&'max i32>()
+ | ^^^^^^^^^^^^^^^^^^^^^^^^ lifetime mismatch
+ |
+ = note: expected type `Get<&'max i32>`
+ found type `Get<&'min i32>`
+note: the lifetime `'min` as defined here...
+ --> $DIR/variance-contravariant-arg-trait-match.rs:22:21
+ |
+LL | fn get_max_from_min<'min, 'max, G>()
+ | ^^^^
+note: ...does not necessarily outlive the lifetime `'max` as defined here
+ --> $DIR/variance-contravariant-arg-trait-match.rs:22:27
+ |
+LL | fn get_max_from_min<'min, 'max, G>()
+ | ^^^^
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
error: lifetime may not live long enough
- --> $DIR/variance-contravariant-arg-trait-match.rs:13:5
+ --> $DIR/variance-contravariant-arg-trait-match.rs:17:5
|
LL | fn get_min_from_max<'min, 'max, G>()
| ---- ---- lifetime `'max` defined here
= help: consider adding the following bound: `'min: 'max`
error: lifetime may not live long enough
- --> $DIR/variance-contravariant-arg-trait-match.rs:21:5
+ --> $DIR/variance-contravariant-arg-trait-match.rs:27:5
|
LL | fn get_max_from_min<'min, 'max, G>()
| ---- ---- lifetime `'max` defined here
// Test that even when `T` is only used in contravariant position, it
// is treated as invariant.
+// revisions: base nll
+// ignore-compare-mode-nll
+//[nll] compile-flags: -Z borrowck=mir
+
trait Get<T> {
fn get(&self, t: T);
}
fn get_min_from_max<'min, 'max, G>()
where 'max : 'min, G : Get<&'max i32>
{
- impls_get::<G,&'min i32>() //~ ERROR mismatched types
+ impls_get::<G,&'min i32>()
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ ERROR lifetime may not live long enough
}
fn get_max_from_min<'min, 'max, G>()
{
// Previously OK, but now an error because traits are invariant:
- impls_get::<G,&'max i32>() //~ ERROR mismatched types
+ impls_get::<G,&'max i32>()
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ ERROR lifetime may not live long enough
}
fn impls_get<G,T>() where G : Get<T> { }
+++ /dev/null
-error[E0308]: mismatched types
- --> $DIR/variance-contravariant-arg-trait-match.rs:13:5
- |
-LL | impls_get::<G,&'min i32>()
- | ^^^^^^^^^^^^^^^^^^^^^^^^ lifetime mismatch
- |
- = note: expected type `Get<&'min i32>`
- found type `Get<&'max i32>`
-note: the lifetime `'min` as defined here...
- --> $DIR/variance-contravariant-arg-trait-match.rs:10:21
- |
-LL | fn get_min_from_max<'min, 'max, G>()
- | ^^^^
-note: ...does not necessarily outlive the lifetime `'max` as defined here
- --> $DIR/variance-contravariant-arg-trait-match.rs:10:27
- |
-LL | fn get_min_from_max<'min, 'max, G>()
- | ^^^^
-
-error[E0308]: mismatched types
- --> $DIR/variance-contravariant-arg-trait-match.rs:21:5
- |
-LL | impls_get::<G,&'max i32>()
- | ^^^^^^^^^^^^^^^^^^^^^^^^ lifetime mismatch
- |
- = note: expected type `Get<&'max i32>`
- found type `Get<&'min i32>`
-note: the lifetime `'min` as defined here...
- --> $DIR/variance-contravariant-arg-trait-match.rs:16:21
- |
-LL | fn get_max_from_min<'min, 'max, G>()
- | ^^^^
-note: ...does not necessarily outlive the lifetime `'max` as defined here
- --> $DIR/variance-contravariant-arg-trait-match.rs:16:27
- |
-LL | fn get_max_from_min<'min, 'max, G>()
- | ^^^^
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0308`.
--- /dev/null
+error[E0308]: mismatched types
+ --> $DIR/variance-contravariant-self-trait-match.rs:17:5
+ |
+LL | impls_get::<&'min G>();
+ | ^^^^^^^^^^^^^^^^^^^^ lifetime mismatch
+ |
+ = note: expected type `<&'min G as Get>`
+ found type `<&'max G as Get>`
+note: the lifetime `'min` as defined here...
+ --> $DIR/variance-contravariant-self-trait-match.rs:14:21
+ |
+LL | fn get_min_from_max<'min, 'max, G>()
+ | ^^^^
+note: ...does not necessarily outlive the lifetime `'max` as defined here
+ --> $DIR/variance-contravariant-self-trait-match.rs:14:27
+ |
+LL | fn get_min_from_max<'min, 'max, G>()
+ | ^^^^
+
+error[E0308]: mismatched types
+ --> $DIR/variance-contravariant-self-trait-match.rs:28:5
+ |
+LL | impls_get::<&'max G>();
+ | ^^^^^^^^^^^^^^^^^^^^ lifetime mismatch
+ |
+ = note: expected type `<&'max G as Get>`
+ found type `<&'min G as Get>`
+note: the lifetime `'min` as defined here...
+ --> $DIR/variance-contravariant-self-trait-match.rs:22:21
+ |
+LL | fn get_max_from_min<'min, 'max, G>()
+ | ^^^^
+note: ...does not necessarily outlive the lifetime `'max` as defined here
+ --> $DIR/variance-contravariant-self-trait-match.rs:22:27
+ |
+LL | fn get_max_from_min<'min, 'max, G>()
+ | ^^^^
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
error: lifetime may not live long enough
- --> $DIR/variance-contravariant-self-trait-match.rs:13:5
+ --> $DIR/variance-contravariant-self-trait-match.rs:17:5
|
LL | fn get_min_from_max<'min, 'max, G>()
| ---- ---- lifetime `'max` defined here
= help: consider adding the following bound: `'min: 'max`
error: lifetime may not live long enough
- --> $DIR/variance-contravariant-self-trait-match.rs:22:5
+ --> $DIR/variance-contravariant-self-trait-match.rs:28:5
|
LL | fn get_max_from_min<'min, 'max, G>()
| ---- ---- lifetime `'max` defined here
// Test that even when `Self` is only used in contravariant position, it
// is treated as invariant.
+// revisions: base nll
+// ignore-compare-mode-nll
+//[nll] compile-flags: -Z borrowck=mir
+
trait Get {
fn get(&self);
}
fn get_min_from_max<'min, 'max, G>()
where 'max : 'min, G : 'max, &'max G : Get
{
- impls_get::<&'min G>(); //~ ERROR mismatched types
+ impls_get::<&'min G>();
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ ERROR lifetime may not live long enough
}
fn get_max_from_min<'min, 'max, G>()
// Previously OK, but now error because traits are invariant with
// respect to all inputs.
- impls_get::<&'max G>(); //~ ERROR mismatched types
+ impls_get::<&'max G>();
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ ERROR lifetime may not live long enough
}
fn impls_get<G>() where G : Get { }
+++ /dev/null
-error[E0308]: mismatched types
- --> $DIR/variance-contravariant-self-trait-match.rs:13:5
- |
-LL | impls_get::<&'min G>();
- | ^^^^^^^^^^^^^^^^^^^^ lifetime mismatch
- |
- = note: expected type `<&'min G as Get>`
- found type `<&'max G as Get>`
-note: the lifetime `'min` as defined here...
- --> $DIR/variance-contravariant-self-trait-match.rs:10:21
- |
-LL | fn get_min_from_max<'min, 'max, G>()
- | ^^^^
-note: ...does not necessarily outlive the lifetime `'max` as defined here
- --> $DIR/variance-contravariant-self-trait-match.rs:10:27
- |
-LL | fn get_min_from_max<'min, 'max, G>()
- | ^^^^
-
-error[E0308]: mismatched types
- --> $DIR/variance-contravariant-self-trait-match.rs:22:5
- |
-LL | impls_get::<&'max G>();
- | ^^^^^^^^^^^^^^^^^^^^ lifetime mismatch
- |
- = note: expected type `<&'max G as Get>`
- found type `<&'min G as Get>`
-note: the lifetime `'min` as defined here...
- --> $DIR/variance-contravariant-self-trait-match.rs:16:21
- |
-LL | fn get_max_from_min<'min, 'max, G>()
- | ^^^^
-note: ...does not necessarily outlive the lifetime `'max` as defined here
- --> $DIR/variance-contravariant-self-trait-match.rs:16:27
- |
-LL | fn get_max_from_min<'min, 'max, G>()
- | ^^^^
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0308`.
--- /dev/null
+error[E0308]: mismatched types
+ --> $DIR/variance-covariant-arg-object.rs:19:5
+ |
+LL | v
+ | ^ lifetime mismatch
+ |
+ = note: expected trait object `dyn Get<&'min i32>`
+ found trait object `dyn Get<&'max i32>`
+note: the lifetime `'min` as defined here...
+ --> $DIR/variance-covariant-arg-object.rs:14:21
+ |
+LL | fn get_min_from_max<'min, 'max>(v: Box<dyn Get<&'max i32>>)
+ | ^^^^
+note: ...does not necessarily outlive the lifetime `'max` as defined here
+ --> $DIR/variance-covariant-arg-object.rs:14:27
+ |
+LL | fn get_min_from_max<'min, 'max>(v: Box<dyn Get<&'max i32>>)
+ | ^^^^
+
+error[E0308]: mismatched types
+ --> $DIR/variance-covariant-arg-object.rs:28:5
+ |
+LL | v
+ | ^ lifetime mismatch
+ |
+ = note: expected trait object `dyn Get<&'max i32>`
+ found trait object `dyn Get<&'min i32>`
+note: the lifetime `'min` as defined here...
+ --> $DIR/variance-covariant-arg-object.rs:24:21
+ |
+LL | fn get_max_from_min<'min, 'max, G>(v: Box<dyn Get<&'min i32>>)
+ | ^^^^
+note: ...does not necessarily outlive the lifetime `'max` as defined here
+ --> $DIR/variance-covariant-arg-object.rs:24:27
+ |
+LL | fn get_max_from_min<'min, 'max, G>(v: Box<dyn Get<&'min i32>>)
+ | ^^^^
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
error: lifetime may not live long enough
- --> $DIR/variance-covariant-arg-object.rs:15:5
+ --> $DIR/variance-covariant-arg-object.rs:19:5
|
LL | fn get_min_from_max<'min, 'max>(v: Box<dyn Get<&'max i32>>)
| ---- ---- lifetime `'max` defined here
= help: consider adding the following bound: `'min: 'max`
error: lifetime may not live long enough
- --> $DIR/variance-covariant-arg-object.rs:22:5
+ --> $DIR/variance-covariant-arg-object.rs:28:5
|
LL | fn get_max_from_min<'min, 'max, G>(v: Box<dyn Get<&'min i32>>)
| ---- ---- lifetime `'max` defined here
// Test that even when `T` is only used in covariant position, it
// is treated as invariant.
+// revisions: base nll
+// ignore-compare-mode-nll
+//[nll] compile-flags: -Z borrowck=mir
+
trait Get<T> : 'static {
fn get(&self) -> T;
}
where 'max : 'min
{
// Previously OK, now an error as traits are invariant.
- v //~ ERROR mismatched types
+ v
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ ERROR lifetime may not live long enough
}
fn get_max_from_min<'min, 'max, G>(v: Box<dyn Get<&'min i32>>)
-> Box<dyn Get<&'max i32>>
where 'max : 'min
{
- v //~ ERROR mismatched types
+ v
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ ERROR lifetime may not live long enough
}
fn main() { }
+++ /dev/null
-error[E0308]: mismatched types
- --> $DIR/variance-covariant-arg-object.rs:15:5
- |
-LL | v
- | ^ lifetime mismatch
- |
- = note: expected trait object `dyn Get<&'min i32>`
- found trait object `dyn Get<&'max i32>`
-note: the lifetime `'min` as defined here...
- --> $DIR/variance-covariant-arg-object.rs:10:21
- |
-LL | fn get_min_from_max<'min, 'max>(v: Box<dyn Get<&'max i32>>)
- | ^^^^
-note: ...does not necessarily outlive the lifetime `'max` as defined here
- --> $DIR/variance-covariant-arg-object.rs:10:27
- |
-LL | fn get_min_from_max<'min, 'max>(v: Box<dyn Get<&'max i32>>)
- | ^^^^
-
-error[E0308]: mismatched types
- --> $DIR/variance-covariant-arg-object.rs:22:5
- |
-LL | v
- | ^ lifetime mismatch
- |
- = note: expected trait object `dyn Get<&'max i32>`
- found trait object `dyn Get<&'min i32>`
-note: the lifetime `'min` as defined here...
- --> $DIR/variance-covariant-arg-object.rs:18:21
- |
-LL | fn get_max_from_min<'min, 'max, G>(v: Box<dyn Get<&'min i32>>)
- | ^^^^
-note: ...does not necessarily outlive the lifetime `'max` as defined here
- --> $DIR/variance-covariant-arg-object.rs:18:27
- |
-LL | fn get_max_from_min<'min, 'max, G>(v: Box<dyn Get<&'min i32>>)
- | ^^^^
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0308`.
--- /dev/null
+error[E0308]: mismatched types
+ --> $DIR/variance-covariant-arg-trait-match.rs:18:5
+ |
+LL | impls_get::<G,&'min i32>()
+ | ^^^^^^^^^^^^^^^^^^^^^^^^ lifetime mismatch
+ |
+ = note: expected type `Get<&'min i32>`
+ found type `Get<&'max i32>`
+note: the lifetime `'min` as defined here...
+ --> $DIR/variance-covariant-arg-trait-match.rs:14:21
+ |
+LL | fn get_min_from_max<'min, 'max, G>()
+ | ^^^^
+note: ...does not necessarily outlive the lifetime `'max` as defined here
+ --> $DIR/variance-covariant-arg-trait-match.rs:14:27
+ |
+LL | fn get_min_from_max<'min, 'max, G>()
+ | ^^^^
+
+error[E0308]: mismatched types
+ --> $DIR/variance-covariant-arg-trait-match.rs:26:5
+ |
+LL | impls_get::<G,&'max i32>()
+ | ^^^^^^^^^^^^^^^^^^^^^^^^ lifetime mismatch
+ |
+ = note: expected type `Get<&'max i32>`
+ found type `Get<&'min i32>`
+note: the lifetime `'min` as defined here...
+ --> $DIR/variance-covariant-arg-trait-match.rs:23:21
+ |
+LL | fn get_max_from_min<'min, 'max, G>()
+ | ^^^^
+note: ...does not necessarily outlive the lifetime `'max` as defined here
+ --> $DIR/variance-covariant-arg-trait-match.rs:23:27
+ |
+LL | fn get_max_from_min<'min, 'max, G>()
+ | ^^^^
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
error: lifetime may not live long enough
- --> $DIR/variance-covariant-arg-trait-match.rs:14:5
+ --> $DIR/variance-covariant-arg-trait-match.rs:18:5
|
LL | fn get_min_from_max<'min, 'max, G>()
| ---- ---- lifetime `'max` defined here
= help: consider adding the following bound: `'min: 'max`
error: lifetime may not live long enough
- --> $DIR/variance-covariant-arg-trait-match.rs:20:5
+ --> $DIR/variance-covariant-arg-trait-match.rs:26:5
|
LL | fn get_max_from_min<'min, 'max, G>()
| ---- ---- lifetime `'max` defined here
// Test that even when `T` is only used in covariant position, it
// is treated as invariant.
+// revisions: base nll
+// ignore-compare-mode-nll
+//[nll] compile-flags: -Z borrowck=mir
+
trait Get<T> {
fn get(&self) -> T;
}
where 'max : 'min, G : Get<&'max i32>
{
// Previously OK, now an error as traits are invariant.
- impls_get::<G,&'min i32>() //~ ERROR mismatched types
+ impls_get::<G,&'min i32>()
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ ERROR lifetime may not live long enough
}
fn get_max_from_min<'min, 'max, G>()
where 'max : 'min, G : Get<&'min i32>
{
- impls_get::<G,&'max i32>() //~ ERROR mismatched types
+ impls_get::<G,&'max i32>()
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ ERROR lifetime may not live long enough
}
fn impls_get<G,T>() where G : Get<T> { }
+++ /dev/null
-error[E0308]: mismatched types
- --> $DIR/variance-covariant-arg-trait-match.rs:14:5
- |
-LL | impls_get::<G,&'min i32>()
- | ^^^^^^^^^^^^^^^^^^^^^^^^ lifetime mismatch
- |
- = note: expected type `Get<&'min i32>`
- found type `Get<&'max i32>`
-note: the lifetime `'min` as defined here...
- --> $DIR/variance-covariant-arg-trait-match.rs:10:21
- |
-LL | fn get_min_from_max<'min, 'max, G>()
- | ^^^^
-note: ...does not necessarily outlive the lifetime `'max` as defined here
- --> $DIR/variance-covariant-arg-trait-match.rs:10:27
- |
-LL | fn get_min_from_max<'min, 'max, G>()
- | ^^^^
-
-error[E0308]: mismatched types
- --> $DIR/variance-covariant-arg-trait-match.rs:20:5
- |
-LL | impls_get::<G,&'max i32>()
- | ^^^^^^^^^^^^^^^^^^^^^^^^ lifetime mismatch
- |
- = note: expected type `Get<&'max i32>`
- found type `Get<&'min i32>`
-note: the lifetime `'min` as defined here...
- --> $DIR/variance-covariant-arg-trait-match.rs:17:21
- |
-LL | fn get_max_from_min<'min, 'max, G>()
- | ^^^^
-note: ...does not necessarily outlive the lifetime `'max` as defined here
- --> $DIR/variance-covariant-arg-trait-match.rs:17:27
- |
-LL | fn get_max_from_min<'min, 'max, G>()
- | ^^^^
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0308`.
--- /dev/null
+error[E0308]: mismatched types
+ --> $DIR/variance-covariant-self-trait-match.rs:18:5
+ |
+LL | impls_get::<&'min G>();
+ | ^^^^^^^^^^^^^^^^^^^^ lifetime mismatch
+ |
+ = note: expected type `<&'min G as Get>`
+ found type `<&'max G as Get>`
+note: the lifetime `'min` as defined here...
+ --> $DIR/variance-covariant-self-trait-match.rs:14:21
+ |
+LL | fn get_min_from_max<'min, 'max, G>()
+ | ^^^^
+note: ...does not necessarily outlive the lifetime `'max` as defined here
+ --> $DIR/variance-covariant-self-trait-match.rs:14:27
+ |
+LL | fn get_min_from_max<'min, 'max, G>()
+ | ^^^^
+
+error[E0308]: mismatched types
+ --> $DIR/variance-covariant-self-trait-match.rs:26:5
+ |
+LL | impls_get::<&'max G>();
+ | ^^^^^^^^^^^^^^^^^^^^ lifetime mismatch
+ |
+ = note: expected type `<&'max G as Get>`
+ found type `<&'min G as Get>`
+note: the lifetime `'min` as defined here...
+ --> $DIR/variance-covariant-self-trait-match.rs:23:21
+ |
+LL | fn get_max_from_min<'min, 'max, G>()
+ | ^^^^
+note: ...does not necessarily outlive the lifetime `'max` as defined here
+ --> $DIR/variance-covariant-self-trait-match.rs:23:27
+ |
+LL | fn get_max_from_min<'min, 'max, G>()
+ | ^^^^
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
error: lifetime may not live long enough
- --> $DIR/variance-covariant-self-trait-match.rs:14:5
+ --> $DIR/variance-covariant-self-trait-match.rs:18:5
|
LL | fn get_min_from_max<'min, 'max, G>()
| ---- ---- lifetime `'max` defined here
= help: consider adding the following bound: `'min: 'max`
error: lifetime may not live long enough
- --> $DIR/variance-covariant-self-trait-match.rs:20:5
+ --> $DIR/variance-covariant-self-trait-match.rs:26:5
|
LL | fn get_max_from_min<'min, 'max, G>()
| ---- ---- lifetime `'max` defined here
// Test that even when `Self` is only used in covariant position, it
// is treated as invariant.
+// revisions: base nll
+// ignore-compare-mode-nll
+//[nll] compile-flags: -Z borrowck=mir
+
trait Get {
fn get() -> Self;
}
where 'max : 'min, G : 'max, &'max G : Get
{
// Previously OK, now an error as traits are invariant.
- impls_get::<&'min G>(); //~ ERROR mismatched types
+ impls_get::<&'min G>();
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ ERROR lifetime may not live long enough
}
fn get_max_from_min<'min, 'max, G>()
where 'max : 'min, G : 'max, &'min G : Get
{
- impls_get::<&'max G>(); //~ ERROR mismatched types
+ impls_get::<&'max G>();
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ ERROR lifetime may not live long enough
}
fn impls_get<G>() where G : Get { }
+++ /dev/null
-error[E0308]: mismatched types
- --> $DIR/variance-covariant-self-trait-match.rs:14:5
- |
-LL | impls_get::<&'min G>();
- | ^^^^^^^^^^^^^^^^^^^^ lifetime mismatch
- |
- = note: expected type `<&'min G as Get>`
- found type `<&'max G as Get>`
-note: the lifetime `'min` as defined here...
- --> $DIR/variance-covariant-self-trait-match.rs:10:21
- |
-LL | fn get_min_from_max<'min, 'max, G>()
- | ^^^^
-note: ...does not necessarily outlive the lifetime `'max` as defined here
- --> $DIR/variance-covariant-self-trait-match.rs:10:27
- |
-LL | fn get_min_from_max<'min, 'max, G>()
- | ^^^^
-
-error[E0308]: mismatched types
- --> $DIR/variance-covariant-self-trait-match.rs:20:5
- |
-LL | impls_get::<&'max G>();
- | ^^^^^^^^^^^^^^^^^^^^ lifetime mismatch
- |
- = note: expected type `<&'max G as Get>`
- found type `<&'min G as Get>`
-note: the lifetime `'min` as defined here...
- --> $DIR/variance-covariant-self-trait-match.rs:17:21
- |
-LL | fn get_max_from_min<'min, 'max, G>()
- | ^^^^
-note: ...does not necessarily outlive the lifetime `'max` as defined here
- --> $DIR/variance-covariant-self-trait-match.rs:17:27
- |
-LL | fn get_max_from_min<'min, 'max, G>()
- | ^^^^
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0308`.
--- /dev/null
+error[E0308]: mismatched types
+ --> $DIR/variance-invariant-arg-object.rs:15:5
+ |
+LL | v
+ | ^ lifetime mismatch
+ |
+ = note: expected trait object `dyn Get<&'min i32>`
+ found trait object `dyn Get<&'max i32>`
+note: the lifetime `'min` as defined here...
+ --> $DIR/variance-invariant-arg-object.rs:11:21
+ |
+LL | fn get_min_from_max<'min, 'max>(v: Box<dyn Get<&'max i32>>)
+ | ^^^^
+note: ...does not necessarily outlive the lifetime `'max` as defined here
+ --> $DIR/variance-invariant-arg-object.rs:11:27
+ |
+LL | fn get_min_from_max<'min, 'max>(v: Box<dyn Get<&'max i32>>)
+ | ^^^^
+
+error[E0308]: mismatched types
+ --> $DIR/variance-invariant-arg-object.rs:24:5
+ |
+LL | v
+ | ^ lifetime mismatch
+ |
+ = note: expected trait object `dyn Get<&'max i32>`
+ found trait object `dyn Get<&'min i32>`
+note: the lifetime `'min` as defined here...
+ --> $DIR/variance-invariant-arg-object.rs:20:21
+ |
+LL | fn get_max_from_min<'min, 'max, G>(v: Box<dyn Get<&'min i32>>)
+ | ^^^^
+note: ...does not necessarily outlive the lifetime `'max` as defined here
+ --> $DIR/variance-invariant-arg-object.rs:20:27
+ |
+LL | fn get_max_from_min<'min, 'max, G>(v: Box<dyn Get<&'min i32>>)
+ | ^^^^
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
error: lifetime may not live long enough
- --> $DIR/variance-invariant-arg-object.rs:11:5
+ --> $DIR/variance-invariant-arg-object.rs:15:5
|
LL | fn get_min_from_max<'min, 'max>(v: Box<dyn Get<&'max i32>>)
| ---- ---- lifetime `'max` defined here
= help: consider adding the following bound: `'min: 'max`
error: lifetime may not live long enough
- --> $DIR/variance-invariant-arg-object.rs:18:5
+ --> $DIR/variance-invariant-arg-object.rs:24:5
|
LL | fn get_max_from_min<'min, 'max, G>(v: Box<dyn Get<&'min i32>>)
| ---- ---- lifetime `'max` defined here
#![allow(dead_code)]
+// revisions: base nll
+// ignore-compare-mode-nll
+//[nll] compile-flags: -Z borrowck=mir
+
trait Get<T> : 'static {
fn get(&self, t: T) -> T;
}
-> Box<dyn Get<&'min i32>>
where 'max : 'min
{
- v //~ ERROR mismatched types
+ v
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ ERROR lifetime may not live long enough
}
fn get_max_from_min<'min, 'max, G>(v: Box<dyn Get<&'min i32>>)
-> Box<dyn Get<&'max i32>>
where 'max : 'min
{
- v //~ ERROR mismatched types
+ v
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ ERROR lifetime may not live long enough
}
fn main() { }
+++ /dev/null
-error[E0308]: mismatched types
- --> $DIR/variance-invariant-arg-object.rs:11:5
- |
-LL | v
- | ^ lifetime mismatch
- |
- = note: expected trait object `dyn Get<&'min i32>`
- found trait object `dyn Get<&'max i32>`
-note: the lifetime `'min` as defined here...
- --> $DIR/variance-invariant-arg-object.rs:7:21
- |
-LL | fn get_min_from_max<'min, 'max>(v: Box<dyn Get<&'max i32>>)
- | ^^^^
-note: ...does not necessarily outlive the lifetime `'max` as defined here
- --> $DIR/variance-invariant-arg-object.rs:7:27
- |
-LL | fn get_min_from_max<'min, 'max>(v: Box<dyn Get<&'max i32>>)
- | ^^^^
-
-error[E0308]: mismatched types
- --> $DIR/variance-invariant-arg-object.rs:18:5
- |
-LL | v
- | ^ lifetime mismatch
- |
- = note: expected trait object `dyn Get<&'max i32>`
- found trait object `dyn Get<&'min i32>`
-note: the lifetime `'min` as defined here...
- --> $DIR/variance-invariant-arg-object.rs:14:21
- |
-LL | fn get_max_from_min<'min, 'max, G>(v: Box<dyn Get<&'min i32>>)
- | ^^^^
-note: ...does not necessarily outlive the lifetime `'max` as defined here
- --> $DIR/variance-invariant-arg-object.rs:14:27
- |
-LL | fn get_max_from_min<'min, 'max, G>(v: Box<dyn Get<&'min i32>>)
- | ^^^^
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0308`.
--- /dev/null
+error[E0308]: mismatched types
+ --> $DIR/variance-invariant-arg-trait-match.rs:14:5
+ |
+LL | impls_get::<G,&'min i32>()
+ | ^^^^^^^^^^^^^^^^^^^^^^^^ lifetime mismatch
+ |
+ = note: expected type `Get<&'min i32>`
+ found type `Get<&'max i32>`
+note: the lifetime `'min` as defined here...
+ --> $DIR/variance-invariant-arg-trait-match.rs:11:21
+ |
+LL | fn get_min_from_max<'min, 'max, G>()
+ | ^^^^
+note: ...does not necessarily outlive the lifetime `'max` as defined here
+ --> $DIR/variance-invariant-arg-trait-match.rs:11:27
+ |
+LL | fn get_min_from_max<'min, 'max, G>()
+ | ^^^^
+
+error[E0308]: mismatched types
+ --> $DIR/variance-invariant-arg-trait-match.rs:22:5
+ |
+LL | impls_get::<G,&'max i32>()
+ | ^^^^^^^^^^^^^^^^^^^^^^^^ lifetime mismatch
+ |
+ = note: expected type `Get<&'max i32>`
+ found type `Get<&'min i32>`
+note: the lifetime `'min` as defined here...
+ --> $DIR/variance-invariant-arg-trait-match.rs:19:21
+ |
+LL | fn get_max_from_min<'min, 'max, G>()
+ | ^^^^
+note: ...does not necessarily outlive the lifetime `'max` as defined here
+ --> $DIR/variance-invariant-arg-trait-match.rs:19:27
+ |
+LL | fn get_max_from_min<'min, 'max, G>()
+ | ^^^^
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
error: lifetime may not live long enough
- --> $DIR/variance-invariant-arg-trait-match.rs:10:5
+ --> $DIR/variance-invariant-arg-trait-match.rs:14:5
|
LL | fn get_min_from_max<'min, 'max, G>()
| ---- ---- lifetime `'max` defined here
= help: consider adding the following bound: `'min: 'max`
error: lifetime may not live long enough
- --> $DIR/variance-invariant-arg-trait-match.rs:16:5
+ --> $DIR/variance-invariant-arg-trait-match.rs:22:5
|
LL | fn get_max_from_min<'min, 'max, G>()
| ---- ---- lifetime `'max` defined here
#![allow(dead_code)]
+// revisions: base nll
+// ignore-compare-mode-nll
+//[nll] compile-flags: -Z borrowck=mir
+
trait Get<T> {
fn get(&self, t: T) -> T;
}
fn get_min_from_max<'min, 'max, G>()
where 'max : 'min, G : Get<&'max i32>
{
- impls_get::<G,&'min i32>() //~ ERROR mismatched types
+ impls_get::<G,&'min i32>()
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ ERROR lifetime may not live long enough
}
fn get_max_from_min<'min, 'max, G>()
where 'max : 'min, G : Get<&'min i32>
{
- impls_get::<G,&'max i32>() //~ ERROR mismatched types
+ impls_get::<G,&'max i32>()
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ ERROR lifetime may not live long enough
}
fn impls_get<G,T>() where G : Get<T> { }
+++ /dev/null
-error[E0308]: mismatched types
- --> $DIR/variance-invariant-arg-trait-match.rs:10:5
- |
-LL | impls_get::<G,&'min i32>()
- | ^^^^^^^^^^^^^^^^^^^^^^^^ lifetime mismatch
- |
- = note: expected type `Get<&'min i32>`
- found type `Get<&'max i32>`
-note: the lifetime `'min` as defined here...
- --> $DIR/variance-invariant-arg-trait-match.rs:7:21
- |
-LL | fn get_min_from_max<'min, 'max, G>()
- | ^^^^
-note: ...does not necessarily outlive the lifetime `'max` as defined here
- --> $DIR/variance-invariant-arg-trait-match.rs:7:27
- |
-LL | fn get_min_from_max<'min, 'max, G>()
- | ^^^^
-
-error[E0308]: mismatched types
- --> $DIR/variance-invariant-arg-trait-match.rs:16:5
- |
-LL | impls_get::<G,&'max i32>()
- | ^^^^^^^^^^^^^^^^^^^^^^^^ lifetime mismatch
- |
- = note: expected type `Get<&'max i32>`
- found type `Get<&'min i32>`
-note: the lifetime `'min` as defined here...
- --> $DIR/variance-invariant-arg-trait-match.rs:13:21
- |
-LL | fn get_max_from_min<'min, 'max, G>()
- | ^^^^
-note: ...does not necessarily outlive the lifetime `'max` as defined here
- --> $DIR/variance-invariant-arg-trait-match.rs:13:27
- |
-LL | fn get_max_from_min<'min, 'max, G>()
- | ^^^^
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0308`.
--- /dev/null
+error[E0308]: mismatched types
+ --> $DIR/variance-invariant-self-trait-match.rs:14:5
+ |
+LL | impls_get::<&'min G>();
+ | ^^^^^^^^^^^^^^^^^^^^ lifetime mismatch
+ |
+ = note: expected type `<&'min G as Get>`
+ found type `<&'max G as Get>`
+note: the lifetime `'min` as defined here...
+ --> $DIR/variance-invariant-self-trait-match.rs:11:21
+ |
+LL | fn get_min_from_max<'min, 'max, G>()
+ | ^^^^
+note: ...does not necessarily outlive the lifetime `'max` as defined here
+ --> $DIR/variance-invariant-self-trait-match.rs:11:27
+ |
+LL | fn get_min_from_max<'min, 'max, G>()
+ | ^^^^
+
+error[E0308]: mismatched types
+ --> $DIR/variance-invariant-self-trait-match.rs:22:5
+ |
+LL | impls_get::<&'max G>();
+ | ^^^^^^^^^^^^^^^^^^^^ lifetime mismatch
+ |
+ = note: expected type `<&'max G as Get>`
+ found type `<&'min G as Get>`
+note: the lifetime `'min` as defined here...
+ --> $DIR/variance-invariant-self-trait-match.rs:19:21
+ |
+LL | fn get_max_from_min<'min, 'max, G>()
+ | ^^^^
+note: ...does not necessarily outlive the lifetime `'max` as defined here
+ --> $DIR/variance-invariant-self-trait-match.rs:19:27
+ |
+LL | fn get_max_from_min<'min, 'max, G>()
+ | ^^^^
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
error: lifetime may not live long enough
- --> $DIR/variance-invariant-self-trait-match.rs:10:5
+ --> $DIR/variance-invariant-self-trait-match.rs:14:5
|
LL | fn get_min_from_max<'min, 'max, G>()
| ---- ---- lifetime `'max` defined here
= help: consider adding the following bound: `'min: 'max`
error: lifetime may not live long enough
- --> $DIR/variance-invariant-self-trait-match.rs:16:5
+ --> $DIR/variance-invariant-self-trait-match.rs:22:5
|
LL | fn get_max_from_min<'min, 'max, G>()
| ---- ---- lifetime `'max` defined here
#![allow(dead_code)]
+// revisions: base nll
+// ignore-compare-mode-nll
+//[nll] compile-flags: -Z borrowck=mir
+
trait Get {
fn get(&self) -> Self;
}
fn get_min_from_max<'min, 'max, G>()
where 'max : 'min, &'max G : Get, G : 'max
{
- impls_get::<&'min G>(); //~ ERROR mismatched types
+ impls_get::<&'min G>();
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ ERROR lifetime may not live long enough
}
fn get_max_from_min<'min, 'max, G>()
where 'max : 'min, &'min G : Get, G : 'min
{
- impls_get::<&'max G>(); //~ ERROR mismatched types
+ impls_get::<&'max G>();
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ ERROR lifetime may not live long enough
}
fn impls_get<G>() where G : Get { }
+++ /dev/null
-error[E0308]: mismatched types
- --> $DIR/variance-invariant-self-trait-match.rs:10:5
- |
-LL | impls_get::<&'min G>();
- | ^^^^^^^^^^^^^^^^^^^^ lifetime mismatch
- |
- = note: expected type `<&'min G as Get>`
- found type `<&'max G as Get>`
-note: the lifetime `'min` as defined here...
- --> $DIR/variance-invariant-self-trait-match.rs:7:21
- |
-LL | fn get_min_from_max<'min, 'max, G>()
- | ^^^^
-note: ...does not necessarily outlive the lifetime `'max` as defined here
- --> $DIR/variance-invariant-self-trait-match.rs:7:27
- |
-LL | fn get_min_from_max<'min, 'max, G>()
- | ^^^^
-
-error[E0308]: mismatched types
- --> $DIR/variance-invariant-self-trait-match.rs:16:5
- |
-LL | impls_get::<&'max G>();
- | ^^^^^^^^^^^^^^^^^^^^ lifetime mismatch
- |
- = note: expected type `<&'max G as Get>`
- found type `<&'min G as Get>`
-note: the lifetime `'min` as defined here...
- --> $DIR/variance-invariant-self-trait-match.rs:13:21
- |
-LL | fn get_max_from_min<'min, 'max, G>()
- | ^^^^
-note: ...does not necessarily outlive the lifetime `'max` as defined here
- --> $DIR/variance-invariant-self-trait-match.rs:13:27
- |
-LL | fn get_max_from_min<'min, 'max, G>()
- | ^^^^
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0308`.
--- /dev/null
+error[E0621]: explicit lifetime required in the type of `get`
+ --> $DIR/variance-trait-matching.rs:28:5
+ |
+LL | fn get<'a, G>(get: &G) -> i32
+ | -- help: add explicit lifetime `'a` to the type of `get`: `&'a G`
+...
+LL | pick(get, &22)
+ | ^^^^ lifetime `'a` required
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0621`.
error[E0621]: explicit lifetime required in the type of `get`
- --> $DIR/variance-trait-matching.rs:24:5
+ --> $DIR/variance-trait-matching.rs:28:5
|
LL | fn get<'a, G>(get: &G) -> i32
| -- help: add explicit lifetime `'a` to the type of `get`: `&'a G`
#![allow(dead_code)]
+// revisions: base nll
+// ignore-compare-mode-nll
+//[nll] compile-flags: -Z borrowck=mir
+
// Get<T> is covariant in T
trait Get<T> {
fn get(&self) -> T;
+++ /dev/null
-error[E0621]: explicit lifetime required in the type of `get`
- --> $DIR/variance-trait-matching.rs:24:5
- |
-LL | fn get<'a, G>(get: &G) -> i32
- | -- help: add explicit lifetime `'a` to the type of `get`: `&'a G`
-...
-LL | pick(get, &22)
- | ^^^^ lifetime `'a` required
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0621`.
--- /dev/null
+error[E0308]: mismatched types
+ --> $DIR/variance-use-contravariant-struct-1.rs:14:5
+ |
+LL | v
+ | ^ lifetime mismatch
+ |
+ = note: expected struct `SomeStruct<&'min ()>`
+ found struct `SomeStruct<&'max ()>`
+note: the lifetime `'min` as defined here...
+ --> $DIR/variance-use-contravariant-struct-1.rs:10:8
+ |
+LL | fn foo<'min,'max>(v: SomeStruct<&'max ()>)
+ | ^^^^
+note: ...does not necessarily outlive the lifetime `'max` as defined here
+ --> $DIR/variance-use-contravariant-struct-1.rs:10:13
+ |
+LL | fn foo<'min,'max>(v: SomeStruct<&'max ()>)
+ | ^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
error: lifetime may not live long enough
- --> $DIR/variance-use-contravariant-struct-1.rs:12:5
+ --> $DIR/variance-use-contravariant-struct-1.rs:14:5
|
LL | fn foo<'min,'max>(v: SomeStruct<&'max ()>)
| ---- ---- lifetime `'max` defined here
// Test various uses of structs with distint variances to make sure
// they permit lifetimes to be approximated as expected.
-
+// revisions: base nll
+// ignore-compare-mode-nll
+//[nll] compile-flags: -Z borrowck=mir
struct SomeStruct<T>(fn(T));
-> SomeStruct<&'min ()>
where 'max : 'min
{
- v //~ ERROR mismatched types
+ v
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ ERROR lifetime may not live long enough
}
+++ /dev/null
-error[E0308]: mismatched types
- --> $DIR/variance-use-contravariant-struct-1.rs:12:5
- |
-LL | v
- | ^ lifetime mismatch
- |
- = note: expected struct `SomeStruct<&'min ()>`
- found struct `SomeStruct<&'max ()>`
-note: the lifetime `'min` as defined here...
- --> $DIR/variance-use-contravariant-struct-1.rs:8:8
- |
-LL | fn foo<'min,'max>(v: SomeStruct<&'max ()>)
- | ^^^^
-note: ...does not necessarily outlive the lifetime `'max` as defined here
- --> $DIR/variance-use-contravariant-struct-1.rs:8:13
- |
-LL | fn foo<'min,'max>(v: SomeStruct<&'max ()>)
- | ^^^^
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0308`.
--- /dev/null
+error[E0308]: mismatched types
+ --> $DIR/variance-use-covariant-struct-1.rs:14:5
+ |
+LL | v
+ | ^ lifetime mismatch
+ |
+ = note: expected struct `SomeStruct<&'max ()>`
+ found struct `SomeStruct<&'min ()>`
+note: the lifetime `'min` as defined here...
+ --> $DIR/variance-use-covariant-struct-1.rs:10:8
+ |
+LL | fn foo<'min,'max>(v: SomeStruct<&'min ()>)
+ | ^^^^
+note: ...does not necessarily outlive the lifetime `'max` as defined here
+ --> $DIR/variance-use-covariant-struct-1.rs:10:13
+ |
+LL | fn foo<'min,'max>(v: SomeStruct<&'min ()>)
+ | ^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
error: lifetime may not live long enough
- --> $DIR/variance-use-covariant-struct-1.rs:10:5
+ --> $DIR/variance-use-covariant-struct-1.rs:14:5
|
LL | fn foo<'min,'max>(v: SomeStruct<&'min ()>)
| ---- ---- lifetime `'max` defined here
// Test that a covariant struct does not permit the lifetime of a
// reference to be enlarged.
+// revisions: base nll
+// ignore-compare-mode-nll
+//[nll] compile-flags: -Z borrowck=mir
+
struct SomeStruct<T>(T);
fn foo<'min,'max>(v: SomeStruct<&'min ()>)
-> SomeStruct<&'max ()>
where 'max : 'min
{
- v //~ ERROR mismatched types
+ v
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ ERROR lifetime may not live long enough
}
fn main() { }
+++ /dev/null
-error[E0308]: mismatched types
- --> $DIR/variance-use-covariant-struct-1.rs:10:5
- |
-LL | v
- | ^ lifetime mismatch
- |
- = note: expected struct `SomeStruct<&'max ()>`
- found struct `SomeStruct<&'min ()>`
-note: the lifetime `'min` as defined here...
- --> $DIR/variance-use-covariant-struct-1.rs:6:8
- |
-LL | fn foo<'min,'max>(v: SomeStruct<&'min ()>)
- | ^^^^
-note: ...does not necessarily outlive the lifetime `'max` as defined here
- --> $DIR/variance-use-covariant-struct-1.rs:6:13
- |
-LL | fn foo<'min,'max>(v: SomeStruct<&'min ()>)
- | ^^^^
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0308`.
--- /dev/null
+error[E0308]: mismatched types
+ --> $DIR/variance-use-invariant-struct-1.rs:14:5
+ |
+LL | v
+ | ^ lifetime mismatch
+ |
+ = note: expected struct `SomeStruct<&'min ()>`
+ found struct `SomeStruct<&'max ()>`
+note: the lifetime `'min` as defined here...
+ --> $DIR/variance-use-invariant-struct-1.rs:10:8
+ |
+LL | fn foo<'min,'max>(v: SomeStruct<&'max ()>)
+ | ^^^^
+note: ...does not necessarily outlive the lifetime `'max` as defined here
+ --> $DIR/variance-use-invariant-struct-1.rs:10:13
+ |
+LL | fn foo<'min,'max>(v: SomeStruct<&'max ()>)
+ | ^^^^
+
+error[E0308]: mismatched types
+ --> $DIR/variance-use-invariant-struct-1.rs:23:5
+ |
+LL | v
+ | ^ lifetime mismatch
+ |
+ = note: expected struct `SomeStruct<&'max ()>`
+ found struct `SomeStruct<&'min ()>`
+note: the lifetime `'min` as defined here...
+ --> $DIR/variance-use-invariant-struct-1.rs:19:8
+ |
+LL | fn bar<'min,'max>(v: SomeStruct<&'min ()>)
+ | ^^^^
+note: ...does not necessarily outlive the lifetime `'max` as defined here
+ --> $DIR/variance-use-invariant-struct-1.rs:19:13
+ |
+LL | fn bar<'min,'max>(v: SomeStruct<&'min ()>)
+ | ^^^^
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
error: lifetime may not live long enough
- --> $DIR/variance-use-invariant-struct-1.rs:12:5
+ --> $DIR/variance-use-invariant-struct-1.rs:14:5
|
LL | fn foo<'min,'max>(v: SomeStruct<&'max ()>)
| ---- ---- lifetime `'max` defined here
= help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance
error: lifetime may not live long enough
- --> $DIR/variance-use-invariant-struct-1.rs:19:5
+ --> $DIR/variance-use-invariant-struct-1.rs:23:5
|
LL | fn bar<'min,'max>(v: SomeStruct<&'min ()>)
| ---- ---- lifetime `'max` defined here
// Test various uses of structs with distint variances to make sure
// they permit lifetimes to be approximated as expected.
-
+// revisions: base nll
+// ignore-compare-mode-nll
+//[nll] compile-flags: -Z borrowck=mir
struct SomeStruct<T>(*mut T);
-> SomeStruct<&'min ()>
where 'max : 'min
{
- v //~ ERROR mismatched types
+ v
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ ERROR lifetime may not live long enough
}
fn bar<'min,'max>(v: SomeStruct<&'min ()>)
-> SomeStruct<&'max ()>
where 'max : 'min
{
- v //~ ERROR mismatched types
+ v
+ //[base]~^ ERROR mismatched types
+ //[nll]~^^ ERROR lifetime may not live long enough
}
+++ /dev/null
-error[E0308]: mismatched types
- --> $DIR/variance-use-invariant-struct-1.rs:12:5
- |
-LL | v
- | ^ lifetime mismatch
- |
- = note: expected struct `SomeStruct<&'min ()>`
- found struct `SomeStruct<&'max ()>`
-note: the lifetime `'min` as defined here...
- --> $DIR/variance-use-invariant-struct-1.rs:8:8
- |
-LL | fn foo<'min,'max>(v: SomeStruct<&'max ()>)
- | ^^^^
-note: ...does not necessarily outlive the lifetime `'max` as defined here
- --> $DIR/variance-use-invariant-struct-1.rs:8:13
- |
-LL | fn foo<'min,'max>(v: SomeStruct<&'max ()>)
- | ^^^^
-
-error[E0308]: mismatched types
- --> $DIR/variance-use-invariant-struct-1.rs:19:5
- |
-LL | v
- | ^ lifetime mismatch
- |
- = note: expected struct `SomeStruct<&'max ()>`
- found struct `SomeStruct<&'min ()>`
-note: the lifetime `'min` as defined here...
- --> $DIR/variance-use-invariant-struct-1.rs:15:8
- |
-LL | fn bar<'min,'max>(v: SomeStruct<&'min ()>)
- | ^^^^
-note: ...does not necessarily outlive the lifetime `'max` as defined here
- --> $DIR/variance-use-invariant-struct-1.rs:15:13
- |
-LL | fn bar<'min,'max>(v: SomeStruct<&'min ()>)
- | ^^^^
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0308`.
--- /dev/null
+error[E0312]: lifetime of reference outlives lifetime of borrowed content...
+ --> $DIR/wf-static-method.rs:21:9
+ |
+LL | u
+ | ^
+ |
+note: ...the reference is valid for the lifetime `'a` as defined here...
+ --> $DIR/wf-static-method.rs:18:6
+ |
+LL | impl<'a, 'b> Foo<'a, 'b, Evil<'a, 'b>> for () {
+ | ^^
+note: ...but the borrowed content is only valid for the lifetime `'b` as defined here
+ --> $DIR/wf-static-method.rs:18:10
+ |
+LL | impl<'a, 'b> Foo<'a, 'b, Evil<'a, 'b>> for () {
+ | ^^
+
+error[E0478]: lifetime bound not satisfied
+ --> $DIR/wf-static-method.rs:32:18
+ |
+LL | let me = Self::make_me();
+ | ^^^^
+ |
+note: lifetime parameter instantiated with the lifetime `'b` as defined here
+ --> $DIR/wf-static-method.rs:29:10
+ |
+LL | impl<'a, 'b> Foo<'a, 'b, ()> for IndirectEvil<'a, 'b> {
+ | ^^
+note: but lifetime parameter must outlive the lifetime `'a` as defined here
+ --> $DIR/wf-static-method.rs:29:6
+ |
+LL | impl<'a, 'b> Foo<'a, 'b, ()> for IndirectEvil<'a, 'b> {
+ | ^^
+
+error[E0312]: lifetime of reference outlives lifetime of borrowed content...
+ --> $DIR/wf-static-method.rs:41:9
+ |
+LL | u
+ | ^
+ |
+note: ...the reference is valid for the lifetime `'a` as defined here...
+ --> $DIR/wf-static-method.rs:39:6
+ |
+LL | impl<'a, 'b> Evil<'a, 'b> {
+ | ^^
+note: ...but the borrowed content is only valid for the lifetime `'b` as defined here
+ --> $DIR/wf-static-method.rs:39:10
+ |
+LL | impl<'a, 'b> Evil<'a, 'b> {
+ | ^^
+
+error[E0495]: cannot infer an appropriate lifetime for lifetime parameter `'b` due to conflicting requirements
+ --> $DIR/wf-static-method.rs:51:5
+ |
+LL | <()>::static_evil(b)
+ | ^^^^^^^^^^^^^^^^^
+ |
+note: first, the lifetime cannot outlive the lifetime `'b` as defined here...
+ --> $DIR/wf-static-method.rs:50:13
+ |
+LL | fn evil<'a, 'b>(b: &'b u32) -> &'a u32 {
+ | ^^
+note: ...so that reference does not outlive borrowed content
+ --> $DIR/wf-static-method.rs:51:23
+ |
+LL | <()>::static_evil(b)
+ | ^
+note: but, the lifetime must be valid for the lifetime `'a` as defined here...
+ --> $DIR/wf-static-method.rs:50:9
+ |
+LL | fn evil<'a, 'b>(b: &'b u32) -> &'a u32 {
+ | ^^
+note: ...so that reference does not outlive borrowed content
+ --> $DIR/wf-static-method.rs:51:5
+ |
+LL | <()>::static_evil(b)
+ | ^^^^^^^^^^^^^^^^^^^^
+
+error[E0495]: cannot infer an appropriate lifetime for lifetime parameter `'b` due to conflicting requirements
+ --> $DIR/wf-static-method.rs:57:5
+ |
+LL | <IndirectEvil>::static_evil(b)
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+note: first, the lifetime cannot outlive the lifetime `'b` as defined here...
+ --> $DIR/wf-static-method.rs:56:22
+ |
+LL | fn indirect_evil<'a, 'b>(b: &'b u32) -> &'a u32 {
+ | ^^
+note: ...so that reference does not outlive borrowed content
+ --> $DIR/wf-static-method.rs:57:33
+ |
+LL | <IndirectEvil>::static_evil(b)
+ | ^
+note: but, the lifetime must be valid for the lifetime `'a` as defined here...
+ --> $DIR/wf-static-method.rs:56:18
+ |
+LL | fn indirect_evil<'a, 'b>(b: &'b u32) -> &'a u32 {
+ | ^^
+note: ...so that reference does not outlive borrowed content
+ --> $DIR/wf-static-method.rs:57:5
+ |
+LL | <IndirectEvil>::static_evil(b)
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error[E0495]: cannot infer an appropriate lifetime for lifetime parameter `'b` due to conflicting requirements
+ --> $DIR/wf-static-method.rs:63:5
+ |
+LL | <Evil>::inherent_evil(b)
+ | ^^^^^^^^^^^^^^^^^^^^^
+ |
+note: first, the lifetime cannot outlive the lifetime `'b` as defined here...
+ --> $DIR/wf-static-method.rs:62:22
+ |
+LL | fn inherent_evil<'a, 'b>(b: &'b u32) -> &'a u32 {
+ | ^^
+note: ...so that reference does not outlive borrowed content
+ --> $DIR/wf-static-method.rs:63:27
+ |
+LL | <Evil>::inherent_evil(b)
+ | ^
+note: but, the lifetime must be valid for the lifetime `'a` as defined here...
+ --> $DIR/wf-static-method.rs:62:18
+ |
+LL | fn inherent_evil<'a, 'b>(b: &'b u32) -> &'a u32 {
+ | ^^
+note: ...so that reference does not outlive borrowed content
+ --> $DIR/wf-static-method.rs:63:5
+ |
+LL | <Evil>::inherent_evil(b)
+ | ^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 6 previous errors
+
+Some errors have detailed explanations: E0312, E0478, E0495.
+For more information about an error, try `rustc --explain E0312`.
error: lifetime may not live long enough
- --> $DIR/wf-static-method.rs:17:9
+ --> $DIR/wf-static-method.rs:21:9
|
LL | impl<'a, 'b> Foo<'a, 'b, Evil<'a, 'b>> for () {
| -- -- lifetime `'b` defined here
= help: consider adding the following bound: `'b: 'a`
error: lifetime may not live long enough
- --> $DIR/wf-static-method.rs:26:18
+ --> $DIR/wf-static-method.rs:32:18
|
LL | impl<'a, 'b> Foo<'a, 'b, ()> for IndirectEvil<'a, 'b> {
| -- -- lifetime `'b` defined here
= help: consider adding the following bound: `'b: 'a`
error: lifetime may not live long enough
- --> $DIR/wf-static-method.rs:33:9
+ --> $DIR/wf-static-method.rs:41:9
|
LL | impl<'a, 'b> Evil<'a, 'b> {
| -- -- lifetime `'b` defined here
= help: consider adding the following bound: `'b: 'a`
error: lifetime may not live long enough
- --> $DIR/wf-static-method.rs:41:5
+ --> $DIR/wf-static-method.rs:51:5
|
LL | fn evil<'a, 'b>(b: &'b u32) -> &'a u32 {
| -- -- lifetime `'b` defined here
= help: consider adding the following bound: `'b: 'a`
error: lifetime may not live long enough
- --> $DIR/wf-static-method.rs:45:5
+ --> $DIR/wf-static-method.rs:57:5
|
LL | fn indirect_evil<'a, 'b>(b: &'b u32) -> &'a u32 {
| -- -- lifetime `'b` defined here
= help: consider adding the following bound: `'b: 'a`
error: lifetime may not live long enough
- --> $DIR/wf-static-method.rs:50:5
+ --> $DIR/wf-static-method.rs:63:5
|
LL | fn inherent_evil<'a, 'b>(b: &'b u32) -> &'a u32 {
| -- -- lifetime `'b` defined here
// static inherent methods isn't quite working - need to
// fix that before removing the check.
+// revisions: base nll
+// ignore-compare-mode-nll
+//[nll] compile-flags: -Z borrowck=mir
+
trait Foo<'a, 'b, T>: Sized {
fn make_me() -> Self { loop {} }
fn static_evil(u: &'b u32) -> &'a u32;
impl<'a, 'b> Foo<'a, 'b, Evil<'a, 'b>> for () {
fn make_me() -> Self { }
fn static_evil(u: &'b u32) -> &'a u32 {
- u //~ ERROR E0312
+ u
+ //[base]~^ ERROR E0312
+ //[nll]~^^ ERROR lifetime may not live long enough
}
}
impl<'a, 'b> Foo<'a, 'b, ()> for IndirectEvil<'a, 'b> {
fn make_me() -> Self { IndirectEvil(None) }
fn static_evil(u: &'b u32) -> &'a u32 {
- let me = Self::make_me(); //~ ERROR lifetime bound not satisfied
+ let me = Self::make_me();
+ //[base]~^ ERROR lifetime bound not satisfied
+ //[nll]~^^ ERROR lifetime may not live long enough
loop {} // (`me` could be used for the lifetime transmute).
}
}
impl<'a, 'b> Evil<'a, 'b> {
fn inherent_evil(u: &'b u32) -> &'a u32 {
- u //~ ERROR E0312
+ u
+ //[base]~^ ERROR E0312
+ //[nll]~^^ ERROR lifetime may not live long enough
}
}
// *check* that they hold.
fn evil<'a, 'b>(b: &'b u32) -> &'a u32 {
- <()>::static_evil(b) //~ ERROR cannot infer an appropriate lifetime
+ <()>::static_evil(b)
+ //[base]~^ ERROR cannot infer an appropriate lifetime
+ //[nll]~^^ ERROR lifetime may not live long enough
}
fn indirect_evil<'a, 'b>(b: &'b u32) -> &'a u32 {
<IndirectEvil>::static_evil(b)
- //~^ ERROR cannot infer an appropriate lifetime
+ //[base]~^ ERROR cannot infer an appropriate lifetime
+ //[nll]~^^ ERROR lifetime may not live long enough
}
fn inherent_evil<'a, 'b>(b: &'b u32) -> &'a u32 {
<Evil>::inherent_evil(b)
- //~^ ERROR cannot infer an appropriate lifetime
+ //[base]~^ ERROR cannot infer an appropriate lifetime
+ //[nll]~^^ ERROR lifetime may not live long enough
}
+++ /dev/null
-error[E0312]: lifetime of reference outlives lifetime of borrowed content...
- --> $DIR/wf-static-method.rs:17:9
- |
-LL | u
- | ^
- |
-note: ...the reference is valid for the lifetime `'a` as defined here...
- --> $DIR/wf-static-method.rs:14:6
- |
-LL | impl<'a, 'b> Foo<'a, 'b, Evil<'a, 'b>> for () {
- | ^^
-note: ...but the borrowed content is only valid for the lifetime `'b` as defined here
- --> $DIR/wf-static-method.rs:14:10
- |
-LL | impl<'a, 'b> Foo<'a, 'b, Evil<'a, 'b>> for () {
- | ^^
-
-error[E0478]: lifetime bound not satisfied
- --> $DIR/wf-static-method.rs:26:18
- |
-LL | let me = Self::make_me();
- | ^^^^
- |
-note: lifetime parameter instantiated with the lifetime `'b` as defined here
- --> $DIR/wf-static-method.rs:23:10
- |
-LL | impl<'a, 'b> Foo<'a, 'b, ()> for IndirectEvil<'a, 'b> {
- | ^^
-note: but lifetime parameter must outlive the lifetime `'a` as defined here
- --> $DIR/wf-static-method.rs:23:6
- |
-LL | impl<'a, 'b> Foo<'a, 'b, ()> for IndirectEvil<'a, 'b> {
- | ^^
-
-error[E0312]: lifetime of reference outlives lifetime of borrowed content...
- --> $DIR/wf-static-method.rs:33:9
- |
-LL | u
- | ^
- |
-note: ...the reference is valid for the lifetime `'a` as defined here...
- --> $DIR/wf-static-method.rs:31:6
- |
-LL | impl<'a, 'b> Evil<'a, 'b> {
- | ^^
-note: ...but the borrowed content is only valid for the lifetime `'b` as defined here
- --> $DIR/wf-static-method.rs:31:10
- |
-LL | impl<'a, 'b> Evil<'a, 'b> {
- | ^^
-
-error[E0495]: cannot infer an appropriate lifetime for lifetime parameter `'b` due to conflicting requirements
- --> $DIR/wf-static-method.rs:41:5
- |
-LL | <()>::static_evil(b)
- | ^^^^^^^^^^^^^^^^^
- |
-note: first, the lifetime cannot outlive the lifetime `'b` as defined here...
- --> $DIR/wf-static-method.rs:40:13
- |
-LL | fn evil<'a, 'b>(b: &'b u32) -> &'a u32 {
- | ^^
-note: ...so that reference does not outlive borrowed content
- --> $DIR/wf-static-method.rs:41:23
- |
-LL | <()>::static_evil(b)
- | ^
-note: but, the lifetime must be valid for the lifetime `'a` as defined here...
- --> $DIR/wf-static-method.rs:40:9
- |
-LL | fn evil<'a, 'b>(b: &'b u32) -> &'a u32 {
- | ^^
-note: ...so that reference does not outlive borrowed content
- --> $DIR/wf-static-method.rs:41:5
- |
-LL | <()>::static_evil(b)
- | ^^^^^^^^^^^^^^^^^^^^
-
-error[E0495]: cannot infer an appropriate lifetime for lifetime parameter `'b` due to conflicting requirements
- --> $DIR/wf-static-method.rs:45:5
- |
-LL | <IndirectEvil>::static_evil(b)
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
- |
-note: first, the lifetime cannot outlive the lifetime `'b` as defined here...
- --> $DIR/wf-static-method.rs:44:22
- |
-LL | fn indirect_evil<'a, 'b>(b: &'b u32) -> &'a u32 {
- | ^^
-note: ...so that reference does not outlive borrowed content
- --> $DIR/wf-static-method.rs:45:33
- |
-LL | <IndirectEvil>::static_evil(b)
- | ^
-note: but, the lifetime must be valid for the lifetime `'a` as defined here...
- --> $DIR/wf-static-method.rs:44:18
- |
-LL | fn indirect_evil<'a, 'b>(b: &'b u32) -> &'a u32 {
- | ^^
-note: ...so that reference does not outlive borrowed content
- --> $DIR/wf-static-method.rs:45:5
- |
-LL | <IndirectEvil>::static_evil(b)
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0495]: cannot infer an appropriate lifetime for lifetime parameter `'b` due to conflicting requirements
- --> $DIR/wf-static-method.rs:50:5
- |
-LL | <Evil>::inherent_evil(b)
- | ^^^^^^^^^^^^^^^^^^^^^
- |
-note: first, the lifetime cannot outlive the lifetime `'b` as defined here...
- --> $DIR/wf-static-method.rs:49:22
- |
-LL | fn inherent_evil<'a, 'b>(b: &'b u32) -> &'a u32 {
- | ^^
-note: ...so that reference does not outlive borrowed content
- --> $DIR/wf-static-method.rs:50:27
- |
-LL | <Evil>::inherent_evil(b)
- | ^
-note: but, the lifetime must be valid for the lifetime `'a` as defined here...
- --> $DIR/wf-static-method.rs:49:18
- |
-LL | fn inherent_evil<'a, 'b>(b: &'b u32) -> &'a u32 {
- | ^^
-note: ...so that reference does not outlive borrowed content
- --> $DIR/wf-static-method.rs:50:5
- |
-LL | <Evil>::inherent_evil(b)
- | ^^^^^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to 6 previous errors
-
-Some errors have detailed explanations: E0312, E0478, E0495.
-For more information about an error, try `rustc --explain E0312`.
--- /dev/null
+error: implementation of `Bar` is not general enough
+ --> $DIR/where-for-self-2.rs:27:5
+ |
+LL | foo(&X);
+ | ^^^ implementation of `Bar` is not general enough
+ |
+ = note: `&'0 u32` must implement `Bar`, for any lifetime `'0`...
+ = note: ...but `Bar` is actually implemented for the type `&'static u32`
+
+error: aborting due to previous error
+
error: implementation of `Bar` is not general enough
- --> $DIR/where-for-self-2.rs:23:5
+ --> $DIR/where-for-self-2.rs:27:5
|
LL | foo(&X);
| ^^^^^^^ implementation of `Bar` is not general enough
// specific lifetime is not enough to satisfy the `for<'a> ...` constraint, which
// should require *all* lifetimes.
+// revisions: base nll
+// ignore-compare-mode-nll
+//[nll] compile-flags: -Z borrowck=mir
+
static X: &'static u32 = &42;
trait Bar {
+++ /dev/null
-error: implementation of `Bar` is not general enough
- --> $DIR/where-for-self-2.rs:23:5
- |
-LL | foo(&X);
- | ^^^ implementation of `Bar` is not general enough
- |
- = note: `&'0 u32` must implement `Bar`, for any lifetime `'0`...
- = note: ...but `Bar` is actually implemented for the type `&'static u32`
-
-error: aborting due to previous error
-