1*67e74705SXin Li// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s 2*67e74705SXin Li// rdar: // 8379892 3*67e74705SXin Li 4*67e74705SXin Listruct X { 5*67e74705SXin Li X(); 6*67e74705SXin Li X(const X&); 7*67e74705SXin Li ~X(); 8*67e74705SXin Li 9*67e74705SXin Li static int staticData; 10*67e74705SXin Li int data; 11*67e74705SXin Li void method(); 12*67e74705SXin Li}; 13*67e74705SXin Li 14*67e74705SXin Li@interface A { 15*67e74705SXin Li X xval; 16*67e74705SXin Li} 17*67e74705SXin Li 18*67e74705SXin Li- (X)x; 19*67e74705SXin Li- (void)setx:(X)x; 20*67e74705SXin Li@end 21*67e74705SXin Li 22*67e74705SXin Livoid f(A* a) { 23*67e74705SXin Li a.x = X(); // expected-error {{no setter method 'setX:' for assignment to property}} 24*67e74705SXin Li} 25*67e74705SXin Li 26*67e74705SXin Listruct Y : X { }; 27*67e74705SXin Li 28*67e74705SXin Li@interface B { 29*67e74705SXin Li@private 30*67e74705SXin Li Y *y; 31*67e74705SXin Li} 32*67e74705SXin Li- (Y)value; 33*67e74705SXin Li- (void)setValue : (Y) arg; 34*67e74705SXin Li@property Y value; 35*67e74705SXin Li@end 36*67e74705SXin Li 37*67e74705SXin Livoid g(B *b) { 38*67e74705SXin Li b.value.data = 17; // expected-error {{not assignable}} 39*67e74705SXin Li b.value.staticData = 17; 40*67e74705SXin Li b.value.method(); 41*67e74705SXin Li} 42*67e74705SXin Li 43*67e74705SXin Li@interface C 44*67e74705SXin Li@end 45*67e74705SXin Li 46*67e74705SXin Li@implementation C 47*67e74705SXin Li- (void)method:(B *)b { 48*67e74705SXin Li // <rdar://problem/8985943> 49*67e74705SXin Li b.operator+ = 17; // expected-error{{'operator+' is not a valid property name (accessing an object of type 'B *')}} 50*67e74705SXin Li b->operator+ = 17; // expected-error{{'B' does not have a member named 'operator+'}} 51*67e74705SXin Li} 52*67e74705SXin Li@end 53*67e74705SXin Li 54*67e74705SXin Li// PR9759 55*67e74705SXin Liclass Forward; 56*67e74705SXin Li@interface D { // expected-note 2 {{'D' declared here}} 57*67e74705SXin Li@public 58*67e74705SXin Li int ivar; 59*67e74705SXin Li} 60*67e74705SXin Li 61*67e74705SXin Li@property int property; 62*67e74705SXin Li@end 63*67e74705SXin Li 64*67e74705SXin Livoid testD(D *d) { 65*67e74705SXin Li d.Forward::property = 17; // expected-error{{property access cannot be qualified with 'Forward::'}} 66*67e74705SXin Li d->Forward::ivar = 12; // expected-error{{instance variable access cannot be qualified with 'Forward::'}} 67*67e74705SXin Li d.D::property = 17; // expected-error{{'D' is not a class, namespace, or enumeration}} 68*67e74705SXin Li d->D::ivar = 12; // expected-error{{'D' is not a class, namespace, or enumeration}} 69*67e74705SXin Li} 70