| //@ 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); |
| } |