xref: /aosp_15_r20/external/clang/test/SemaObjC/synthesized-ivar.m (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s
2*67e74705SXin Li@interface I
3*67e74705SXin Li{
4*67e74705SXin Li}
5*67e74705SXin Li@property int IP;
6*67e74705SXin Li@end
7*67e74705SXin Li
8*67e74705SXin Li@implementation I
9*67e74705SXin Li@synthesize IP;
10*67e74705SXin Li- (int) Meth {
11*67e74705SXin Li   return IP;
12*67e74705SXin Li}
13*67e74705SXin Li@end
14*67e74705SXin Li
15*67e74705SXin Li// rdar://7823675
16*67e74705SXin Liint f0(I *a) { return a->IP; } // expected-error {{instance variable 'IP' is private}}
17*67e74705SXin Li
18*67e74705SXin Li// rdar://8769582
19*67e74705SXin Li
20*67e74705SXin Li@interface I1 {
21*67e74705SXin Li int protected_ivar;
22*67e74705SXin Li}
23*67e74705SXin Li@property int PROP_INMAIN;
24*67e74705SXin Li@end
25*67e74705SXin Li
26*67e74705SXin Li@interface I1() {
27*67e74705SXin Li int private_ivar;
28*67e74705SXin Li}
29*67e74705SXin Li@property int PROP_INCLASSEXT;
30*67e74705SXin Li@end
31*67e74705SXin Li
32*67e74705SXin Li@implementation I1
33*67e74705SXin Li- (int) Meth {
34*67e74705SXin Li   _PROP_INMAIN = 1;
35*67e74705SXin Li   _PROP_INCLASSEXT = 2;
36*67e74705SXin Li   protected_ivar = 1;	// OK
37*67e74705SXin Li   return private_ivar; // OK
38*67e74705SXin Li}
39*67e74705SXin Li@end
40*67e74705SXin Li
41*67e74705SXin Li
42*67e74705SXin Li@interface DER : I1
43*67e74705SXin Li@end
44*67e74705SXin Li
45*67e74705SXin Li@implementation DER
46*67e74705SXin Li- (int) Meth {
47*67e74705SXin Li   protected_ivar = 1;	// OK
48*67e74705SXin Li   _PROP_INMAIN = 1; // expected-error {{instance variable '_PROP_INMAIN' is private}}
49*67e74705SXin Li   _PROP_INCLASSEXT = 2; // expected-error {{instance variable '_PROP_INCLASSEXT' is private}}
50*67e74705SXin Li   return private_ivar; // expected-error {{instance variable 'private_ivar' is private}}
51*67e74705SXin Li}
52*67e74705SXin Li@end
53*67e74705SXin Li
54*67e74705SXin Li@interface A
55*67e74705SXin Li@property (weak) id testObjectWeakProperty; // expected-note {{declared here}}
56*67e74705SXin Li@end
57*67e74705SXin Li
58*67e74705SXin Li@implementation A
59*67e74705SXin Li// rdar://9605088
60*67e74705SXin Li@synthesize testObjectWeakProperty; // expected-error {{cannot synthesize weak property because the current deployment target does not support weak references}}
61*67e74705SXin Li@end
62