1 | // RUN: %clang_cc1 -fsyntax-only -verify %s |
2 | // rdar://8155806 |
3 | |
4 | @interface Subclass |
5 | { |
6 | int setterOnly; |
7 | } |
8 | - (void) setSetterOnly : (int) arg; |
9 | @end |
10 | |
11 | int func (int arg, Subclass *x) { |
12 | if (x.setterOnly) { // expected-error {{no getter method for read from property}} |
13 | x.setterOnly = 1; |
14 | } |
15 | func(x.setterOnly + 1, x); // expected-error {{no getter method for read from property}} |
16 | int i = x.setterOnly + 1; // expected-error {{no getter method for read from property}} |
17 | return x.setterOnly + 1; // expected-error {{no getter method for read from property}} |
18 | } |
19 | |
20 | // <rdar://problem/12765391> |
21 | |
22 | @interface TestClass |
23 | + (void) setSetterOnly : (int) arg; |
24 | @end |
25 | |
26 | int func2 (int arg) { |
27 | if (TestClass.setterOnly) { // expected-error {{no getter method for read from property}} |
28 | TestClass.setterOnly = 1; |
29 | } |
30 | func(TestClass.setterOnly + 1, x); // expected-error {{no getter method for read from property}} \ |
31 | // expected-error {{use of undeclared identifier 'x'}} |
32 | int i = TestClass.setterOnly + 1; // expected-error {{no getter method for read from property}} |
33 | return TestClass.setterOnly + 1; // expected-error {{no getter method for read from property}} |
34 | } |
35 | |
36 | @interface Sub : Subclass |
37 | - (int) func3; |
38 | @end |
39 | @implementation Sub |
40 | - (int) func3 { |
41 | return super.setterOnly; // expected-error {{no getter method for read from property}} |
42 | } |
43 | @end |
44 | |