47 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
| // RUN: %clang_cc1 -fsyntax-only -verify %s
 | |
| 
 | |
| @interface MyBase 
 | |
| - (void) rootInstanceMethod;
 | |
| @end
 | |
| 
 | |
| @interface MyIntermediate: MyBase
 | |
| @end
 | |
| 
 | |
| @interface MyDerived: MyIntermediate
 | |
| - (void) instanceMethod;
 | |
| + (void) classMethod;
 | |
| @end
 | |
| 
 | |
| @implementation MyDerived
 | |
| - (void) instanceMethod {
 | |
| }
 | |
| 
 | |
| + (void) classMethod {                    /* If a class method is not found, the root  */
 | |
|     [self rootInstanceMethod];            /* class is searched for an instance method  */
 | |
|     [MyIntermediate rootInstanceMethod];  /* with the same name.                       */
 | |
| 
 | |
|     [self instanceMethod];// expected-warning {{'+instanceMethod' not found (return type defaults to 'id')}}
 | |
|     [MyDerived instanceMethod];// expected-warning {{'+instanceMethod' not found (return type defaults to 'id')}}
 | |
| }
 | |
| @end
 | |
| 
 | |
| @interface Object @end
 | |
| 
 | |
| @interface Class1
 | |
| - (void)setWindow:(Object *)wdw;
 | |
| @end
 | |
| 
 | |
| @interface Class2
 | |
| - (void)setWindow:(Class1 *)window;
 | |
| @end
 | |
| 
 | |
| #define nil (void*)0
 | |
| 
 | |
| id foo(void) {
 | |
|   Object *obj;
 | |
|   id obj2 = obj;
 | |
|   [obj setWindow:nil]; // expected-warning {{'Object' may not respond to 'setWindow:'}}
 | |
| 
 | |
|   return obj;
 | |
| }
 |