1// RUN: %clang_cc1 -fsyntax-only -verify -Wmissing-noreturn -fobjc-exceptions -Wno-objc-root-class %s
2
3int test1() {
4  id a;
5  @throw a;
6}
7
8// PR5286
9void test2(int a) {
10  while (1) {
11    if (a)
12      return;
13  }
14}
15
16// PR5286
17void test3(int a) {  // expected-warning {{function 'test3' could be declared with attribute 'noreturn'}}
18  while (1) {
19    if (a)
20      @throw (id)0;
21  }
22}
23
24// <rdar://problem/4289832> - This code always returns, we should not
25//  issue a noreturn warning.
26@class NSException;
27@class NSString;
28NSString *rdar_4289832() {  // no-warning
29    @try
30    {
31        return @"a";
32    }
33    @catch(NSException *exception)
34    {
35        return @"b";
36    }
37    @finally
38    {
39    }
40}
41
42void exit(int) __attribute__((noreturn));
43@interface rdar10098695
44@end
45
46@implementation rdar10098695
47- (void)method { // expected-warning{{method 'method' could be declared with attribute 'noreturn'}}
48  exit(1);
49}
50@end
51