1// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s 2// rdar: // 8379892 3 4struct 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 22void f(A* a) { 23 a.x = X(); // expected-error {{no setter method 'setX:' for assignment to property}} 24} 25 26struct 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} 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 55class Forward; 56@interface D { // expected-note 2 {{'D' declared here}} 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{{instance variable access cannot be qualified with 'Forward::'}} 67 d.D::property = 17; // expected-error{{'D' is not a class, namespace, or scoped enumeration}} 68 d->D::ivar = 12; // expected-error{{'D' is not a class, namespace, or scoped enumeration}} 69} 70