2009-12-16 04:14:24 +08:00
|
|
|
// RUN: %clang_cc1 -fsyntax-only -verify %s
|
2009-03-05 01:50:39 +08:00
|
|
|
|
|
|
|
@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. */
|
|
|
|
|
2010-12-01 09:07:24 +08:00
|
|
|
[self instanceMethod];// expected-warning {{'+instanceMethod' not found (return type defaults to 'id')}}
|
2009-03-05 01:50:39 +08:00
|
|
|
[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;
|
2010-04-11 15:04:01 +08:00
|
|
|
[obj setWindow:nil]; // expected-warning {{'Object' may not respond to 'setWindow:'}}
|
2009-03-05 01:50:39 +08:00
|
|
|
|
|
|
|
return obj;
|
|
|
|
}
|