[LLD][COFF] Separate EC and native exports for ARM64X (#123652)
[llvm-project.git] / clang / test / SemaObjC / unqualified-to-qualified-class-warn.m
blobcc56fcc9d20b82509934580849195cc4590a2d36
1 // RUN: %clang_cc1  -fsyntax-only -verify %s
3 @protocol Fooable
4 - (void)foo;
5 @end
7 @protocol SubFooable <Fooable>
8 @end
10 @interface AClass
11 @end
13 @interface BClass : AClass <SubFooable>
14 @end
16 @implementation BClass
17 - (void)foo {
19 @end
21 void functionTakingAClassConformingToAProtocol(AClass <Fooable> *instance) { // expected-note {{passing argument to parameter 'instance' here}}
24 int main (void) {
25     AClass *aobject = 0;
26     BClass *bobject = 0;
27     functionTakingAClassConformingToAProtocol(aobject);  // expected-warning {{incompatible pointer types passing 'AClass *' to parameter of type 'AClass<Fooable> *'}}
28     functionTakingAClassConformingToAProtocol(bobject); // Shouldn't warn -  does implement Fooable
29     return 0;
32 @interface NSObject @end
34 @protocol MyProtocol
35 @end
37 @interface MyClass : NSObject 
40 @end
42 @implementation MyClass
43 @end
45 @interface MySubclass : MyClass <MyProtocol> 
48 @end
50 @interface MyTestClass : NSObject
52 @private
53         NSObject <MyProtocol> *someObj;
56 @property (nonatomic, assign) NSObject <MyProtocol> *someObj;
58 @end
60 @implementation MyTestClass
62 @synthesize someObj;
64 - (void)someMethod
66         MySubclass *foo;
67         [self setSomeObj:foo]; // no warning here!
70 @end