38 lines
891 B
Rust
38 lines
891 B
Rust
//@ check-pass
|
|
//@ known-bug: #84533
|
|
|
|
// Should fail. Lifetimes are checked correctly when `foo` is called, but NOT
|
|
// when only the lifetime parameters are instantiated.
|
|
|
|
use std::marker::PhantomData;
|
|
|
|
#[allow(dead_code)]
|
|
fn foo<'b, 'a>() -> PhantomData<&'b &'a ()> {
|
|
PhantomData
|
|
}
|
|
|
|
#[allow(dead_code)]
|
|
#[allow(path_statements)]
|
|
fn caller<'b, 'a>() {
|
|
foo::<'b, 'a>;
|
|
}
|
|
|
|
// In contrast to above, below code correctly does NOT compile.
|
|
// fn caller<'b, 'a>() {
|
|
// foo::<'b, 'a>();
|
|
// }
|
|
|
|
// error: lifetime may not live long enough
|
|
// --> src/main.rs:22:5
|
|
// |
|
|
// 21 | fn caller<'b, 'a>() {
|
|
// | -- -- lifetime `'a` defined here
|
|
// | |
|
|
// | lifetime `'b` defined here
|
|
// 22 | foo::<'b, 'a>();
|
|
// | ^^^^^^^^^^^^^^^ requires that `'a` must outlive `'b`
|
|
// |
|
|
// = help: consider adding the following bound: `'a: 'b`
|
|
|
|
fn main() {}
|