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