1 // RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s 2 // rdar: // 8379892 3 4 struct X { 5 X(); 6 X(const X&); 7 ~X(); 8 9 static int staticData; 10 int data; 11 void method(); 12 }; 13 14 @interface A { 15 X xval; 16 } 17 18 - (X)x; 19 - (void)setx:(X)x; 20 @end 21 22 void f(A* a) { 23 a.x = X(); // expected-error {{no setter method 'setX:' for assignment to property}} 24 } 25 26 struct 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 37 void g(B *b) { 38 b.value.data = 17; // expected-error {{not assignable}} 39 b.value.staticData = 17; 40 b.value.method(); 41 } 42 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 *')}} 50 b->operator+ = 17; // expected-error{{'B' does not have a member named 'operator+'}} 51 } 52 @end 53 54 // PR9759 55 class Forward; 56 @interface D { // expected-note 2 {{'D' declared here}} 57 @public 58 int ivar; 59 } 60 61 @property int property; 62 @end 63 64 void testD(D *d) { 65 d.Forward::property = 17; // expected-error{{property access cannot be qualified with 'Forward::'}} 66 d->Forward::ivar = 12; // expected-error{{instance variable access cannot be qualified with 'Forward::'}} 67 d.D::property = 17; // expected-error{{'D' is not a class, namespace, or enumeration}} 68 d->D::ivar = 12; // expected-error{{'D' is not a class, namespace, or enumeration}} 69 } 70