1 // Test unreachable_code lint for `try {}` block ok-wrapping. See issues #54165, #63324.
3 // compile-flags: --edition 2018
5 #![feature(try_blocks)]
6 #![warn(unreachable_code)]
8 fn err() -> Result<u32, ()> {
12 // In the following cases unreachable code is autogenerated and should not be reported.
14 fn test_ok_wrapped_divergent_expr_1() {
15 let res: Result<u32, ()> = try {
20 println!("res: {:?}", res);
23 fn test_ok_wrapped_divergent_expr_2() {
24 let _: Result<u32, ()> = try {
29 fn test_autogenerated_unit_after_divergent_expr() {
30 let _: Result<(), ()> = try {
35 // In the following cases unreachable code should be reported.
37 fn test_try_block_after_divergent_stmt() {
38 let _: Result<u32, ()> = {
46 //~^^^^^ WARNING unreachable expression
50 fn test_wrapped_divergent_expr() {
51 let _: Result<u32, ()> = {
53 //~^ WARNING unreachable call
57 fn test_expr_after_divergent_stmt_in_try_block() {
58 let res: Result<u32, ()> = try {
64 //~^ WARNING unreachable expression
66 println!("res: {:?}", res);
70 test_ok_wrapped_divergent_expr_1();
71 test_ok_wrapped_divergent_expr_2();
72 test_autogenerated_unit_after_divergent_expr();
73 test_try_block_after_divergent_stmt();
74 test_wrapped_divergent_expr();
75 test_expr_after_divergent_stmt_in_try_block();