blob: 28c2e1a308461c690eb225e8d5cf2d84ad2d4328 [file] [log] [blame]
Steve Naroff037cda52008-09-30 14:38:43 +00001// RUN: clang -fsyntax-only -verify %s
2
3typedef struct { int y; } Abstract;
4
5typedef struct { int x; } Alternate;
6
7#define INTERFERE_TYPE Alternate*
8
9@protocol A
Chris Lattner1326a3d2008-11-23 23:26:13 +000010@property Abstract *x; // expected-note {{using}}
Steve Naroff037cda52008-09-30 14:38:43 +000011@end
12
13@interface B
Chris Lattner1326a3d2008-11-23 23:26:13 +000014@property Abstract *y; // expected-note {{using}}
Steve Naroff037cda52008-09-30 14:38:43 +000015@end
16
17@interface B (Category)
Chris Lattner1326a3d2008-11-23 23:26:13 +000018@property Abstract *z; // expected-note {{using}}
Steve Naroff037cda52008-09-30 14:38:43 +000019@end
20
21@interface InterferencePre
Chris Lattner1326a3d2008-11-23 23:26:13 +000022-(void) x; // expected-note {{also found}}
23-(void) y; // expected-note {{also found}}
24-(void) z; // expected-note {{also found}}
Steve Narofffe6b0dc2008-10-21 10:37:50 +000025-(void) setX: (INTERFERE_TYPE) arg;
26-(void) setY: (INTERFERE_TYPE) arg;
27-(void) setZ: (INTERFERE_TYPE) arg;
Steve Naroff037cda52008-09-30 14:38:43 +000028@end
29
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) {
Steve Narofffe6b0dc2008-10-21 10:37:50 +000043 [ a0 setX: a1];
Steve Naroff037cda52008-09-30 14:38:43 +000044}
45
46void f4(id a0, Abstract *a1) {
Steve Narofffe6b0dc2008-10-21 10:37:50 +000047 [ a0 setY: a1];
Steve Naroff037cda52008-09-30 14:38:43 +000048}
49
50void f5(id a0, Abstract *a1) {
Steve Narofffe6b0dc2008-10-21 10:37:50 +000051 [ a0 setZ: a1];
Steve Naroff037cda52008-09-30 14:38:43 +000052}