[clang] Implement lifetime analysis for lifetime_capture_by(X) (#115921)
[llvm-project.git] / clang / test / SemaObjC / method-lookup-3.m
blob8857c3cbd84fe126bf6d99a988eb6c6fd5e32090
1 // RUN: %clang_cc1 -fsyntax-only -verify %s
3 typedef struct { int y; } Abstract;
5 typedef struct { int x; } Alternate;
7 #define INTERFERE_TYPE Alternate*
9 @protocol A
10 @property Abstract *x; // expected-note {{using}}
11 @end
13 @interface B
14 @property Abstract *y; // expected-note {{using}}
15 @end
17 @interface B (Category)
18 @property Abstract *z; // expected-note {{using}}
19 @end
21 @interface InterferencePre
22 -(void) x; // expected-note {{also found}}
23 -(void) y; // expected-note {{also found}}
24 -(void) z; // expected-note {{also found}}
25 -(void) setX: (INTERFERE_TYPE) arg; 
26 -(void) setY: (INTERFERE_TYPE) arg;
27 -(void) setZ: (INTERFERE_TYPE) arg;
28 @end
30 void f0(id a0) {
31   Abstract *l = [a0 x]; // expected-warning {{multiple methods named 'x' found}} 
34 void f1(id a0) {
35   Abstract *l = [a0 y]; // expected-warning {{multiple methods named 'y' found}}
38 void f2(id a0) {
39   Abstract *l = [a0 z]; // expected-warning {{multiple methods named 'z' found}}
42 void f3(id a0, Abstract *a1) { 
43   [ a0 setX: a1];
46 void f4(id a0, Abstract *a1) { 
47   [ a0 setY: a1];
50 void f5(id a0, Abstract *a1) { 
51   [ a0 setZ: a1];
54 // pr7861
55 void f6(id<A> a0) {
56   Abstract *l = [a0 x];
59 struct test3a { int x, y; };
60 struct test3b { unsigned x, y; };
61 @interface Test3A - (struct test3a) test3; @end
62 @interface Test3B - (struct test3b) test3; @end
63 void test3(id x) {
64   (void) [x test3];
67 struct test4a { int x, y; };
68 struct test4b { float x, y; };
69 @interface Test4A - (struct test4a) test4; @end //expected-note{{using}}
70 @interface Test4B - (struct test4b) test4; @end //expected-note{{also found}}
71 void test4(id x) {
72   (void) [x test4]; //expected-warning {{multiple methods named 'test4' found}}
75 #pragma clang diagnostic ignored "-Wobjc-multiple-method-names"
76 @interface NSObject 
77 + (id)alloc;
78 + (id)class;
79 - (id) init;
80 @end
82 @class NSString;
83 @interface A : NSObject
84 - (instancetype)initWithType:(NSString *)whatever;
85 @end
87 @interface Test : NSObject @end
89 @implementation Test
90 + (instancetype)foo
92     return [[[self class] alloc] initWithType:3];
94 - (instancetype)initWithType:(int)whatever
96     return [super init];
98 @end