| // RUN: %clang_cc1 -fsyntax-only -verify %s |
| |
| @interface A |
| -(int) x; |
| @property (readonly) int x; |
| @property int ok; |
| @end |
| |
| @interface B |
| -(void) setOk:(int)arg; |
| -(int) x; |
| -(int) ok; |
| @end |
| |
| void f0(A *a, B* b) { |
| a.x = 10; // expected-error {{assignment to readonly property}} |
| a.ok = 20; |
| b.x = 10; // expected-error {{no setter method 'setX:' for assignment to property}} |
| b.ok = 20; |
| } |
| |
| typedef struct { |
| int i1, i2; |
| } NSRect; |
| |
| NSRect NSMakeRect(); |
| |
| @interface NSWindow |
| { |
| NSRect _frame; |
| } |
| - (NSRect)frame; |
| @end |
| |
| @interface NSWindow (Category) |
| -(void)methodToMakeClangCrash; |
| @end |
| |
| @implementation NSWindow (Category) |
| -(void)methodToMakeClangCrash |
| { |
| self.frame = NSMakeRect(); // expected-error {{no setter method 'setFrame:' for assignment to property}} |
| } |
| @end |