99 lines · plain
1// RUN: %clang_cc1 -fsyntax-only -verify %s2 3typedef struct { int y; } Abstract;4 5typedef struct { int x; } Alternate;6 7#define INTERFERE_TYPE Alternate*8 9@protocol A10@property Abstract *x; // expected-note {{using}}11@end12 13@interface B14@property Abstract *y; // expected-note {{using}}15@end16 17@interface B (Category)18@property Abstract *z; // expected-note {{using}}19@end20 21@interface InterferencePre22-(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@end29 30void f0(id a0) {31 Abstract *l = [a0 x]; // expected-warning {{multiple methods named 'x' found}} 32}33 34void f1(id a0) {35 Abstract *l = [a0 y]; // expected-warning {{multiple methods named 'y' found}}36}37 38void f2(id a0) {39 Abstract *l = [a0 z]; // expected-warning {{multiple methods named 'z' found}}40}41 42void f3(id a0, Abstract *a1) { 43 [ a0 setX: a1];44}45 46void f4(id a0, Abstract *a1) { 47 [ a0 setY: a1];48}49 50void f5(id a0, Abstract *a1) { 51 [ a0 setZ: a1];52}53 54// pr786155void f6(id<A> a0) {56 Abstract *l = [a0 x];57}58 59struct test3a { int x, y; };60struct test3b { unsigned x, y; };61@interface Test3A - (struct test3a) test3; @end62@interface Test3B - (struct test3b) test3; @end63void test3(id x) {64 (void) [x test3];65}66 67struct test4a { int x, y; };68struct 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}}71void test4(id x) {72 (void) [x test4]; //expected-warning {{multiple methods named 'test4' found}}73}74 75#pragma clang diagnostic ignored "-Wobjc-multiple-method-names"76@interface NSObject 77+ (id)alloc;78+ (id)class;79- (id) init;80@end81 82@class NSString;83@interface A : NSObject84- (instancetype)initWithType:(NSString *)whatever;85@end86 87@interface Test : NSObject @end88 89@implementation Test90+ (instancetype)foo91{92 return [[[self class] alloc] initWithType:3];93}94- (instancetype)initWithType:(int)whatever95{96 return [super init];97}98@end99