xref: /llvm-project/clang/test/Sema/warn-unreachable.m (revision 22db4824b9e03fe8c2e9217d6832b71ac23c175f)
1// RUN: %clang_cc1 -fsyntax-only -fobjc-exceptions -verify -Wunreachable-code %s
2
3void f(void);
4
5void g1(void) {
6  @try {
7    f();
8    @throw @"";
9    f();  // expected-warning{{will never be executed}}
10  } @catch(id i) {
11    f();
12  }
13
14  // Completely empty.
15  @try {
16  } @catch(...) {
17  }
18
19  @try {
20    f();
21    return;
22  } @catch(id i = nil) {  // Catch block should not be marked as unreachable.
23    // Empty @catch body.
24  }
25}
26
27void g2(void) {
28  @try {
29    // Nested @try.
30    @try {
31      f();
32      @throw @"";
33      f(); // expected-warning{{will never be executed}}
34    } @catch(...) {
35    }
36    f();
37    @throw @"";
38    f(); // expected-warning{{will never be executed}}
39  } @catch(...) {
40    f();
41  }
42}
43
44void g3(void) {
45  @try {
46    @try {
47      f();
48    } @catch (...) {
49      @throw @""; // should exit outer try
50    }
51    @throw @"";
52    f(); // expected-warning{{never be executed}}
53  } @catch (...) {
54  }
55}
56