forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			71 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
| // RUN: %clang_cc1 -fsyntax-only -verify -fobjc-exceptions %s
 | |
| // RUN: %clang_cc1 -fsyntax-only -verify -fobjc-exceptions -x objective-c++ %s
 | |
| void * proc();
 | |
| 
 | |
| @interface NSConstantString
 | |
| @end
 | |
| 
 | |
| @interface Frob
 | |
| @end
 | |
| 
 | |
| @interface Frob1
 | |
| @end
 | |
| 
 | |
| void * foo()
 | |
| {
 | |
|   @try {
 | |
|     return proc();
 | |
|   }
 | |
|   @catch (Frob* ex) {
 | |
|     @throw;
 | |
|   }
 | |
|   @catch (Frob1* ex) {
 | |
|     @throw proc();
 | |
|   }
 | |
|   @finally {
 | |
|     @try {
 | |
|       return proc();
 | |
|     }
 | |
|     @catch (Frob* ex) {
 | |
|       @throw 1,2; // expected-error {{@throw requires an Objective-C object type ('int' invalid)}} \
 | |
| 				  // expected-warning {{expression result unused}}
 | |
|     }
 | |
|     @catch (float x) {  // expected-error {{@catch parameter is not a pointer to an interface type}}
 | |
|       
 | |
|     }
 | |
|     @catch(...) {
 | |
|       @throw (4,3,proc()); // expected-warning {{expression result unused}} \
 | |
| 						   // expected-warning {{expression result unused}}
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   @try {  // expected-error {{@try statement without a @catch and @finally clause}}
 | |
|     return proc();
 | |
|   }
 | |
| }
 | |
| 
 | |
| 
 | |
| void bar()
 | |
| {
 | |
|   @try {}// expected-error {{@try statement without a @catch and @finally clause}}
 | |
|   @"s"; //  expected-warning {{result unused}}
 | |
| }
 | |
| 
 | |
| void baz()
 | |
| {
 | |
|   @try {}// expected-error {{@try statement without a @catch and @finally clause}}
 | |
|   @try {}
 | |
|   @finally {}
 | |
| }
 | |
| 
 | |
| void noTwoTokenLookAheadRequiresABitOfFancyFootworkInTheParser() {
 | |
|     @try {
 | |
|         // Do something
 | |
|     } @catch (...) {}
 | |
|     @try {
 | |
|         // Do something
 | |
|     } @catch (...) {}
 | |
|     return;
 | |
| }
 | |
| 
 |