Home | History | Annotate | Download | only in SemaObjC
      1 // RUN: %clang_cc1 -fsyntax-only -verify -Wmissing-noreturn -fobjc-exceptions -Wno-objc-root-class %s
      2 
      3 int test1() {
      4   id a;
      5   @throw a;
      6 }
      7 
      8 // PR5286
      9 void test2(int a) {
     10   while (1) {
     11     if (a)
     12       return;
     13   }
     14 }
     15 
     16 // PR5286
     17 void 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;
     28 NSString *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 
     42 void 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