// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s // rdar: // 8379892 struct X { X(); X(const X&); ~X(); static int staticData; int data; void method(); }; @interface A { X xval; } - (X)x; - (void)setx:(X)x; @end void f(A* a) { a.x = X(); // expected-error {{no setter method 'setX:' for assignment to property}} } struct Y : X { }; @interface B { @private Y *y; } - (Y)value; - (void)setValue : (Y) arg; @property Y value; @end void g(B *b) { b.value.data = 17; // expected-error {{not assignable}} b.value.staticData = 17; b.value.method(); } @interface C @end @implementation C - (void)method:(B *)b { // b.operator+ = 17; // expected-error{{'operator+' is not a valid property name (accessing an object of type 'B *')}} b->operator+ = 17; // expected-error{{'B' does not have a member named 'operator+'}} } @end // PR9759 class Forward; @interface D { // expected-note 2 {{'D' declared here}} @public int ivar; } @property int property; @end void testD(D *d) { d.Forward::property = 17; // expected-error{{property access cannot be qualified with 'Forward::'}} d->Forward::ivar = 12; // expected-error{{instance variable access cannot be qualified with 'Forward::'}} d.D::property = 17; // expected-error{{'D' is not a class, namespace, or enumeration}} d->D::ivar = 12; // expected-error{{'D' is not a class, namespace, or enumeration}} }