]> git.lizzy.rs Git - rust.git/blob - src/test/ui/try-block/try-block-unreachable-code-lint.rs
Auto merge of #106143 - matthiaskrgr:rollup-3kpy1dc, r=matthiaskrgr
[rust.git] / src / test / ui / try-block / try-block-unreachable-code-lint.rs
1 // Test unreachable_code lint for `try {}` block ok-wrapping. See issues #54165, #63324.
2
3 // compile-flags: --edition 2018
4 // check-pass
5 #![feature(try_blocks)]
6 #![warn(unreachable_code)]
7
8 fn err() -> Result<u32, ()> {
9     Err(())
10 }
11
12 // In the following cases unreachable code is autogenerated and should not be reported.
13
14 fn test_ok_wrapped_divergent_expr_1() {
15     let res: Result<u32, ()> = try {
16         loop {
17             err()?;
18         }
19     };
20     println!("res: {:?}", res);
21 }
22
23 fn test_ok_wrapped_divergent_expr_2() {
24     let _: Result<u32, ()> = try {
25         return
26     };
27 }
28
29 fn test_autogenerated_unit_after_divergent_expr() {
30     let _: Result<(), ()> = try {
31         return;
32     };
33 }
34
35 // In the following cases unreachable code should be reported.
36
37 fn test_try_block_after_divergent_stmt() {
38     let _: Result<u32, ()> = {
39         return;
40
41         try {
42             loop {
43                 err()?;
44             }
45         }
46         //~^^^^^ WARNING unreachable expression
47     };
48 }
49
50 fn test_wrapped_divergent_expr() {
51     let _: Result<u32, ()> = {
52         Err(return)
53         //~^ WARNING unreachable call
54     };
55 }
56
57 fn test_expr_after_divergent_stmt_in_try_block() {
58     let res: Result<u32, ()> = try {
59         loop {
60             err()?;
61         }
62
63         42
64         //~^ WARNING unreachable expression
65     };
66     println!("res: {:?}", res);
67 }
68
69 fn main() {
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();
76 }