// Test that we check that user type annotations are well-formed, even in dead // code. fn uninit<'a>() { return; let x: &'static &'a (); //~ ERROR lifetime may not live long enough } fn var_type<'a>() { return; let x: &'static &'a () = &&(); //~ ERROR lifetime may not live long enough } fn uninit_infer<'a>() { let x: &'static &'a _; //~ ERROR lifetime may not live long enough x = && (); } fn infer<'a>() { return; let x: &'static &'a _ = &&(); //~ ERROR lifetime may not live long enough } fn uninit_no_var<'a>() { return; let _: &'static &'a (); //~ ERROR lifetime may not live long enough } fn no_var<'a>() { return; let _: &'static &'a () = &&(); //~ ERROR lifetime may not live long enough } fn infer_no_var<'a>() { return; let _: &'static &'a _ = &&(); //~ ERROR lifetime may not live long enough } trait X<'a, 'b> {} struct C<'a, 'b, T: X<'a, 'b>>(T, &'a (), &'b ()); impl X<'_, '_> for i32 {} impl<'a> X<'a, 'a> for () {} // This type annotation is not well-formed because we substitute `()` for `_`. fn required_substs<'a>() { return; let _: C<'static, 'a, _> = C((), &(), &()); //~ ERROR lifetime may not live long enough } fn main() {}