1 | // RUN: %clang_cc1 -fsyntax-only -verify %s |
2 | |
3 | @interface A |
4 | -(int) x; |
5 | @property (readonly) int x; |
6 | @property int ok; |
7 | @end |
8 | |
9 | @interface B |
10 | -(void) setOk:(int)arg; |
11 | -(int) x; |
12 | -(int) ok; |
13 | @end |
14 | |
15 | void f0(A *a, B* b) { |
16 | a.x = 10; // expected-error {{assignment to readonly property}} |
17 | a.ok = 20; |
18 | b.x = 10; // expected-error {{no setter method 'setX:' for assignment to property}} |
19 | b.ok = 20; |
20 | } |
21 | |
22 | typedef struct { |
23 | int i1, i2; |
24 | } NSRect; |
25 | |
26 | NSRect NSMakeRect(); |
27 | |
28 | @interface NSWindow |
29 | { |
30 | NSRect _frame; |
31 | } |
32 | - (NSRect)frame; |
33 | @end |
34 | |
35 | @interface NSWindow (Category) |
36 | -(void)methodToMakeClangCrash; |
37 | @end |
38 | |
39 | @implementation NSWindow (Category) |
40 | -(void)methodToMakeClangCrash |
41 | { |
42 | self.frame = NSMakeRect(); // expected-error {{no setter method 'setFrame:' for assignment to property}} |
43 | } |
44 | @end |
45 | |