#![forbid(unsafe_code)] include!("../prelude.rs"); use ::core::fmt::Display; #[with('local)] fn empty () {} #[with('local)] fn returns_local (n: u32) -> &'local dyn Display { &format_args!("{:#x}", n) } #[with('local)] fn uses_returns_local (n: u32) { #[with] let it: &dyn Display = returns_local(n); let _ = it.to_string(); } #[with('local)] fn uses_returns_local_and_returns_a_local_too (n: u32) -> &'local str { #[with] let it: &dyn Display = returns_local(n); let s = it.to_string(); &*s } #[with('local)] fn inside_if_uses_return_local_and_returns_a_local_itself (n: u32) -> &'local str { if true { #[with] let it: &dyn Display = returns_local(n); let s = it.to_string(); &*s } else { "" } } #[with('local)] fn inside_if_yadda_early_return (n: u32) -> &'local str { if true { #[with] let it: &dyn Display = returns_local(n); let s = it.to_string(); return &*s; } else { return ""; } "" } #[with('local)] fn inside_match_uses_return_local_and_returns_a_local_too (n: u32) -> &'local str { match true { | true => { #[with] let it: &dyn Display = returns_local(n); let s = it.to_string(); &*s }, | _ => "", } } #[with('local)] fn results () { #[with('local)] fn result () -> Result<&'local (), ()> { Err(())?; Ok(&()) } let _ = (|| Ok::<(), ()>({ #[with] let it = result(); it?; }))(); } const _: () = { enum Void {} type None = Option; #[with('local)] fn question_marks () -> None { #[with('local)] fn options () -> Option>> { fn _item_inside_function_body () -> Option<()> { None?; return None; } #[with] let _it = options()???; { fn _item_inside_trailing_stmts () -> Option<()> { None?; return None; } } None } #[with] let _it = options()???; #[with] let _snd = options()?; None } }; #[with('local)] fn loops () { #[with('local)] fn f () -> &'local () { &() } loop { let it: &'local () = f(); if false { continue; } if false { break; } if false { break (); } if true { return; } let _ = (it, ); } for _ in 0 .. { let it: &'local () = f(); if false { continue; } if false { break; } // if false { break (); } if true { return; } let _ = (it, ); } while false { let it: &'local () = f(); if false { continue; } if false { break; } // if false { break (); } if true { return; } let _ = (it, ); } while let 1 ..= 1 = 2 { let it: &'local () = f(); if false { continue; } if false { break; } // if false { break (); } if true { return; } let _ = (it, ); } }