1// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s
2
3@interface Test {
4   int x;
5}
6
7-(void) setX: (int) d;
8@end
9
10extern struct foo x;
11
12@implementation Test
13
14-(void) setX: (int) n {
15   x = n;
16}
17
18@end
19
20@interface Ivar
21- (float*)method;
22@end
23
24@interface A {
25  A *Ivar;
26}
27- (int*)method;
28@end
29
30@implementation A
31- (int*)method {
32  int *ip = [Ivar method]; // expected-warning{{incompatible pointer types initializing 'int *' with an expression of type 'float *'}}
33                           // Note that there is no warning in Objective-C++
34  return 0;
35}
36@end
37
38@interface TwoIvars {
39  int a;
40  int b;
41}
42@end
43
44@implementation TwoIvars
45+ (int)classMethod {
46  return a + b; // expected-error{{instance variable 'a' accessed in class method}} \
47  // expected-error{{instance variable 'b' accessed in class method}}
48}
49@end
50
51// rdar://10309454
52@interface Radar10309454
53{
54  int IVAR; // expected-note 4 {{previous definition is here}}
55}
56@end
57
58@interface Radar10309454()
59{
60  int IVAR; // expected-error {{instance variable is already declared}}
61  int PIVAR; // expected-note {{previous definition is here}}
62}
63@end
64
65@interface Radar10309454()
66{
67  int IVAR; // expected-error {{instance variable is already declared}}
68}
69@end
70
71@interface Radar10309454()
72{
73  int IVAR; // expected-error {{instance variable is already declared}}
74  int PIVAR; // expected-error {{instance variable is already declared}}
75}
76@end
77
78@implementation Radar10309454
79{
80  int IVAR; // expected-error {{instance variable is already declared}}
81}
82@end
83
84// PR5984
85// rdar://14037151
86@interface Radar14037151 {
87  int myStatus;
88}
89- (int) test;
90@end
91
92@implementation Radar14037151
93- (int) test
94{
95  myStatus = 1;     // works
96   __typeof(myStatus) __in;  // works.
97  union U {
98    __typeof(myStatus) __in;  // fails.
99  };
100  struct S {
101    __typeof(myStatus) __in;  // fails.
102    struct S1 { // expected-warning {{declaration does not declare anything}}
103      __typeof(myStatus) __in;  // fails.
104      struct S { // expected-warning {{declaration does not declare anything}}
105        __typeof(myStatus) __in;  // fails.
106      };
107    };
108  };
109
110  return 0;
111}
112@end
113
114// rdar://14278560
115@class NSString, NSData, NSNumber;
116
117@interface NSObject
118{
119  Class isa;
120}
121@end
122
123@interface Foo
124{
125  int a;
126  NSString* b;
127  NSData* c;
128}
129@end
130
131@interface Bar : Foo
132@end
133
134@interface Bar () {
135	NSString *q_strong;
136	NSNumber *r_strong;
137	int d; // expected-note {{previous definition is here}}
138	NSString *e_strong; // expected-note {{previous definition is here}}
139	NSData *f_weak; // expected-note {{previous definition is here}}
140	int g; // expected-note 2 {{previous definition is here}}
141}
142@end
143
144@interface Bar () {
145	int g; // expected-note {{previous definition is here}} \
146               // expected-error {{instance variable is already declared}}
147}
148@end
149
150@implementation Bar {
151	int d; // expected-error {{instance variable is already declared}}
152	NSString *e_strong; // expected-error {{instance variable is already declared}}
153	NSData *f_weak; // expected-error {{instance variable is already declared}}
154	NSData *g; // expected-error 2 {{instance variable is already declared}}
155}
156@end
157