blob: 7a5feb42e5b1ef920d42e638c49f0df9f8a5893c [file] [log] [blame]
Fariborz Jahanian4088ec02010-09-09 23:01:10 +00001// RUN: %clang_cc1 -fsyntax-only -verify %s
2// rdar: // 8379892
3
4struct X {
5 X();
6 X(const X&);
7 ~X();
John McCall09431682010-11-18 19:01:18 +00008
9 static int staticData;
10 int data;
11 void method();
Fariborz Jahanian4088ec02010-09-09 23:01:10 +000012};
13
14@interface A {
15 X xval;
16}
17
18- (X)x;
19- (void)setx:(X)x;
20@end
21
22void f(A* a) {
23 a.x = X(); // expected-error {{setter method is needed to assign to object using property assignment syntax}}
24}
25
John McCall09431682010-11-18 19:01:18 +000026struct Y : X { };
27
28@interface B {
29@private
30 Y *y;
31}
32- (Y)value;
33- (void)setValue : (Y) arg;
34@property Y value;
35@end
36
37void g(B *b) {
38 b.value.data = 17; // expected-error {{not assignable}}
39 b.value.staticData = 17;
40 b.value.method();
41}
Douglas Gregor109ec1b2011-04-20 18:19:55 +000042
43@interface C
44@end
45
46@implementation C
47- (void)method:(B *)b {
48 // <rdar://problem/8985943>
49 b.operator+ = 17; // expected-error{{'operator+' is not a valid property name (accessing an object of type 'B *')}}
Douglas Gregorcbec9592011-04-20 18:20:33 +000050 b->operator+ = 17; // expected-error{{'B' does not have a member named 'operator+'}}
Douglas Gregor109ec1b2011-04-20 18:19:55 +000051}
52@end