blob: 2237411aaf0c4413e0c8095a4081532db33c06a4 [file] [log] [blame]
Patrick Beardb2f68202012-04-06 18:12:22 +00001// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s
Fariborz Jahanian4088ec02010-09-09 23:01:10 +00002// 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) {
John McCall3c3b7f92011-10-25 17:37:35 +000023 a.x = X(); // expected-error {{no setter method 'setX:' for assignment to property}}
Fariborz Jahanian4088ec02010-09-09 23:01:10 +000024}
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
Douglas Gregorb5ae92f2011-10-09 23:22:49 +000053
54// PR9759
55class Forward;
56@interface D {
57@public
58 int ivar;
59}
60
61@property int property;
62@end
63
64void testD(D *d) {
65 d.Forward::property = 17; // expected-error{{property access cannot be qualified with 'Forward::'}}
66 d->Forward::ivar = 12; // expected-error{{ivar access cannot be qualified with 'Forward::'}}
Douglas Gregor5a706dc2011-10-10 16:09:49 +000067 d.D::property = 17; // expected-error{{expected a class or namespace}}
68 d->D::ivar = 12; // expected-error{{expected a class or namespace}}
Douglas Gregorb5ae92f2011-10-09 23:22:49 +000069}