| // RUN: clang-cc -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; |
| } |