Home | History | Annotate | Download | only in SemaObjC
      1 // RUN: %clang_cc1 -fsyntax-only -verify %s
      2 
      3 typedef struct { int y; } Abstract;
      4 
      5 typedef struct { int x; } Alternate;
      6 
      7 #define INTERFERE_TYPE Alternate*
      8 
      9 @protocol A
     10 @property Abstract *x; // expected-note {{using}}
     11 @end
     12 
     13 @interface B
     14 @property Abstract *y; // expected-note {{using}}
     15 @end
     16 
     17 @interface B (Category)
     18 @property Abstract *z; // expected-note {{using}}
     19 @end
     20 
     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
     29 
     30 void f0(id a0) {
     31   Abstract *l = [a0 x]; // expected-warning {{multiple methods named 'x' found}} 
     32 }
     33 
     34 void f1(id a0) {
     35   Abstract *l = [a0 y]; // expected-warning {{multiple methods named 'y' found}}
     36 }
     37 
     38 void f2(id a0) {
     39   Abstract *l = [a0 z]; // expected-warning {{multiple methods named 'z' found}}
     40 }
     41 
     42 void f3(id a0, Abstract *a1) { 
     43   [ a0 setX: a1];
     44 }
     45 
     46 void f4(id a0, Abstract *a1) { 
     47   [ a0 setY: a1];
     48 }
     49 
     50 void f5(id a0, Abstract *a1) { 
     51   [ a0 setZ: a1];
     52 }
     53 
     54 // pr7861
     55 void f6(id<A> a0) {
     56   Abstract *l = [a0 x];
     57 }
     58 
     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];
     65 }
     66 
     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}}
     73 }
     74 
     75 // rdar://19265296
     76 #pragma clang diagnostic ignored "-Wobjc-multiple-method-names"
     77 @interface NSObject 
     78 + (id)alloc;
     79 + (id)class;
     80 - (id) init;
     81 @end
     82 
     83 @class NSString;
     84 @interface A : NSObject
     85 - (instancetype)initWithType:(NSString *)whatever;
     86 @end
     87 
     88 @interface Test : NSObject @end
     89 
     90 @implementation Test
     91 + (instancetype)foo
     92 {
     93     return [[[self class] alloc] initWithType:3];
     94 }
     95 - (instancetype)initWithType:(int)whatever
     96 {
     97     return [super init];
     98 }
     99 @end
    100