]> git.lizzy.rs Git - rust.git/blob - src/test/ui/reachable/expr_match.rs
Rollup merge of #53317 - estebank:abolish-ice, r=oli-obk
[rust.git] / src / test / ui / reachable / expr_match.rs
1 // Copyright 2016 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10
11 #![allow(unused_variables)]
12 #![allow(unused_assignments)]
13 #![allow(dead_code)]
14 #![deny(unreachable_code)]
15
16 fn a() {
17     // The match is considered unreachable here, because the `return`
18     // diverges:
19     match {return} { } //~ ERROR unreachable
20 }
21
22 fn b() {
23     match () { () => return }
24     println!("I am dead");
25     //~^ ERROR unreachable statement
26 }
27
28 fn c() {
29     match () { () if false => return, () => () }
30     println!("I am not dead");
31 }
32
33 fn d() {
34     match () { () if false => return, () => return }
35     println!("I am dead");
36     //~^ ERROR unreachable statement
37 }
38
39 fn e() {
40     // Here the compiler fails to figure out that the `println` is dead.
41     match () { () if return => (), () => return }
42     println!("I am dead");
43 }
44
45 fn f() {
46     match Some(()) { None => (), Some(()) => return }
47     println!("I am not dead");
48 }
49
50 fn g() {
51     match Some(()) { None => return, Some(()) => () }
52     println!("I am not dead");
53 }
54
55 fn main() { }