32 lines
711 B
Rust
32 lines
711 B
Rust
|
// edition:2021
|
||
|
|
||
|
// regression test for #112056
|
||
|
|
||
|
struct Spooky<'b> {
|
||
|
owned: Option<&'static u32>,
|
||
|
borrowed: &'b &'static u32,
|
||
|
}
|
||
|
|
||
|
impl<'b> Spooky<'b> {
|
||
|
fn create_self_reference<'a>(&'a mut self) {
|
||
|
let mut closure = || {
|
||
|
if let Some(owned) = &self.owned {
|
||
|
let borrow: &'a &'static u32 = owned;
|
||
|
self.borrowed = borrow;
|
||
|
//~^ ERROR: lifetime may not live long enough
|
||
|
}
|
||
|
};
|
||
|
closure();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
fn main() {
|
||
|
let mut spooky: Spooky<'static> = Spooky {
|
||
|
owned: Some(&1),
|
||
|
borrowed: &&1,
|
||
|
};
|
||
|
spooky.create_self_reference();
|
||
|
spooky.owned = None;
|
||
|
println!("{}", **spooky.borrowed);
|
||
|
}
|