1// RUN: %clang_cc1 -fsyntax-only -verify -fobjc-exceptions %s 2// RUN: %clang_cc1 -fsyntax-only -verify -fobjc-exceptions -x objective-c++ %s 3void * proc(); 4 5@interface NSConstantString 6@end 7 8@interface Frob 9@end 10 11@interface Frob1 12@end 13 14void * foo() 15{ 16 @try { 17 return proc(); 18 } 19 @catch (Frob* ex) { 20 @throw; 21 } 22 @catch (Frob1* ex) { 23 @throw proc(); 24 } 25 @finally { 26 @try { 27 return proc(); 28 } 29 @catch (Frob* ex) { 30 @throw 1,2; // expected-error {{@throw requires an Objective-C object type ('int' invalid)}} \ 31 // expected-warning {{expression result unused}} 32 } 33 @catch (float x) { // expected-error {{@catch parameter is not a pointer to an interface type}} 34 35 } 36 @catch(...) { 37 @throw (4,3,proc()); // expected-warning {{expression result unused}} \ 38 // expected-warning {{expression result unused}} 39 } 40 } 41 42 @try { // expected-error {{@try statement without a @catch and @finally clause}} 43 return proc(); 44 } 45} 46 47 48void bar() 49{ 50 @try {}// expected-error {{@try statement without a @catch and @finally clause}} 51 @"s"; // expected-warning {{result unused}} 52} 53 54void baz() 55{ 56 @try {}// expected-error {{@try statement without a @catch and @finally clause}} 57 @try {} 58 @finally {} 59} 60 61void noTwoTokenLookAheadRequiresABitOfFancyFootworkInTheParser() { 62 @try { 63 // Do something 64 } @catch (...) {} 65 @try { 66 // Do something 67 } @catch (...) {} 68 return; 69} 70 71