xref: /llvm-project/clang/test/SemaObjC/ivar-in-class-extension.m (revision 61740f6649173ec2d1e74dc3e11c3245fae8e0fb)
1acfbe9e1SPatrick Beard// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s
2afe1386eSFariborz Jahanian
3afe1386eSFariborz Jahanian@interface SomeClass  @end
4afe1386eSFariborz Jahanian
5afe1386eSFariborz Jahanianint fn1(SomeClass *obj) {
6afe1386eSFariborz Jahanian        obj->privateIvar = 1; // expected-error {{'SomeClass' does not have a member named 'privateIvar}}
7afe1386eSFariborz Jahanian        return obj->publicIvar;     // expected-error {{'SomeClass' does not have a member named 'publicIvar'}}
8afe1386eSFariborz Jahanian}
9afe1386eSFariborz Jahanian
10afe1386eSFariborz Jahanian@interface SomeClass () {
11afe1386eSFariborz Jahanian// @private by default
12afe1386eSFariborz Jahanian        int privateIvar;
13afe1386eSFariborz Jahanian@public
14afe1386eSFariborz Jahanian        int publicIvar;
15afe1386eSFariborz Jahanian}
16afe1386eSFariborz Jahanian@end
17afe1386eSFariborz Jahanian
18afe1386eSFariborz Jahanianint fn2(SomeClass *obj) {
19afe1386eSFariborz Jahanian	obj->publicIvar = 1;
20afe1386eSFariborz Jahanian        return obj->publicIvar    // ok
21afe1386eSFariborz Jahanian             + obj->privateIvar;  // expected-error {{instance variable 'privateIvar' is private}}
22afe1386eSFariborz Jahanian}
23afe1386eSFariborz Jahanian
24afe1386eSFariborz Jahanian@implementation SomeClass
25afe1386eSFariborz Jahanian
26afe1386eSFariborz Jahanianint fn3(SomeClass *obj) {
27afe1386eSFariborz Jahanian	obj->privateIvar = 2;
28afe1386eSFariborz Jahanian        return obj->publicIvar    // ok
29afe1386eSFariborz Jahanian             + obj->privateIvar;  // ok
30afe1386eSFariborz Jahanian    }
31afe1386eSFariborz Jahanian@end
32afe1386eSFariborz Jahanian
33afe1386eSFariborz Jahanian@interface SomeClass (Category)
346a0a2e0cSFariborz Jahanian    {
35*61740f66SFariborz Jahanian        int categoryIvar; // expected-error {{instance variables may not be placed in categories}}
36afe1386eSFariborz Jahanian    }
37afe1386eSFariborz Jahanian@end
38afe1386eSFariborz Jahanian
39afe1386eSFariborz Jahanian@interface SomeClass (Category1)
406a0a2e0cSFariborz Jahanian    {
41afe1386eSFariborz Jahanian    }
42afe1386eSFariborz Jahanian@end
43