// Test unreachable_code lint for `try {}` block ok-wrapping. See issues #54165, #63324. // compile-flags: --edition 2018 // check-pass #![feature(try_blocks)] #![warn(unreachable_code)] fn err() -> Result { Err(()) } // In the following cases unreachable code is autogenerated and should not be reported. fn test_ok_wrapped_divergent_expr_1() { let res: Result = try { loop { err()?; } }; println!("res: {:?}", res); } fn test_ok_wrapped_divergent_expr_2() { let _: Result = try { return }; } fn test_autogenerated_unit_after_divergent_expr() { let _: Result<(), ()> = try { return; }; } // In the following cases unreachable code should be reported. fn test_try_block_after_divergent_stmt() { let _: Result = { return; try { loop { err()?; } } //~^^^^^ WARNING unreachable expression }; } fn test_wrapped_divergent_expr() { let _: Result = { Err(return) //~^ WARNING unreachable call }; } fn test_expr_after_divergent_stmt_in_try_block() { let res: Result = try { loop { err()?; } 42 //~^ WARNING unreachable expression }; println!("res: {:?}", res); } fn main() { test_ok_wrapped_divergent_expr_1(); test_ok_wrapped_divergent_expr_2(); test_autogenerated_unit_after_divergent_expr(); test_try_block_after_divergent_stmt(); test_wrapped_divergent_expr(); test_expr_after_divergent_stmt_in_try_block(); }