xref: /llvm-project/clang/test/SemaObjC/class-method-lookup.m (revision 68500913ece9def8f11649fed41713d50e94728d)
18fbe78f6SDaniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify %s
2c2371eadSFariborz Jahanian
3c2371eadSFariborz Jahanian@interface MyBase
4c2371eadSFariborz Jahanian- (void) rootInstanceMethod;
5c2371eadSFariborz Jahanian@end
6c2371eadSFariborz Jahanian
7c2371eadSFariborz Jahanian@interface MyIntermediate: MyBase
8c2371eadSFariborz Jahanian@end
9c2371eadSFariborz Jahanian
10c2371eadSFariborz Jahanian@interface MyDerived: MyIntermediate
11c2371eadSFariborz Jahanian- (void) instanceMethod;
12c2371eadSFariborz Jahanian+ (void) classMethod;
13c2371eadSFariborz Jahanian@end
14c2371eadSFariborz Jahanian
15c2371eadSFariborz Jahanian@implementation MyDerived
16c2371eadSFariborz Jahanian- (void) instanceMethod {
17c2371eadSFariborz Jahanian}
18c2371eadSFariborz Jahanian
19c2371eadSFariborz Jahanian+ (void) classMethod {                    /* If a class method is not found, the root  */
20c2371eadSFariborz Jahanian    [self rootInstanceMethod];            /* class is searched for an instance method  */
21c2371eadSFariborz Jahanian    [MyIntermediate rootInstanceMethod];  /* with the same name.                       */
22c2371eadSFariborz Jahanian
23*68500913SFariborz Jahanian    [self instanceMethod];// expected-warning {{'+instanceMethod' not found (return type defaults to 'id')}}
24c2371eadSFariborz Jahanian    [MyDerived instanceMethod];// expected-warning {{'+instanceMethod' not found (return type defaults to 'id')}}
25c2371eadSFariborz Jahanian}
26c2371eadSFariborz Jahanian@end
27c2371eadSFariborz Jahanian
28c2371eadSFariborz Jahanian@interface Object @end
29c2371eadSFariborz Jahanian
30c2371eadSFariborz Jahanian@interface Class1
31c2371eadSFariborz Jahanian- (void)setWindow:(Object *)wdw;
32c2371eadSFariborz Jahanian@end
33c2371eadSFariborz Jahanian
34c2371eadSFariborz Jahanian@interface Class2
35c2371eadSFariborz Jahanian- (void)setWindow:(Class1 *)window;
36c2371eadSFariborz Jahanian@end
37c2371eadSFariborz Jahanian
38c2371eadSFariborz Jahanian#define nil (void*)0
39c2371eadSFariborz Jahanian
40c2371eadSFariborz Jahanianid foo(void) {
41c2371eadSFariborz Jahanian  Object *obj;
42c2371eadSFariborz Jahanian  id obj2 = obj;
4300dcffdeSChris Lattner  [obj setWindow:nil]; // expected-warning {{'Object' may not respond to 'setWindow:'}}
44c2371eadSFariborz Jahanian
45c2371eadSFariborz Jahanian  return obj;
46c2371eadSFariborz Jahanian}
47