Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / clang / test / SemaObjCXX / propert-dot-error.mm
blob31ee43a3c27d8c9cabb2724353d22bdec4620d85
1 // RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s
3 struct X {
4   X();
5   X(const X&);
6   ~X();
8   static int staticData;
9   int data;
10   void method();
13 @interface A {
14   X xval;
17 - (X)x;
18 - (void)setx:(X)x;
19 @end
21 void f(A* a) {
22   a.x = X(); // expected-error {{no setter method 'setX:' for assignment to property}}
25 struct Y : X { };
27 @interface B {
28 @private
29   Y *y;
31 - (Y)value;
32 - (void)setValue : (Y) arg;
33 @property Y value;
34 @end
36 void g(B *b) {
37   b.value.data = 17; // expected-error {{not assignable}}
38   b.value.staticData = 17;
39   b.value.method();
42 @interface C
43 @end
45 @implementation C
46 - (void)method:(B *)b {
47   b.operator+ = 17; // expected-error{{'operator+' is not a valid property name (accessing an object of type 'B *')}}
48   b->operator+ = 17; // expected-error{{'B' does not have a member named 'operator+'}}
50 @end
52 // PR9759
53 class Forward;
54 @interface D { // expected-note 2 {{'D' declared here}}
55 @public
56   int ivar;
59 @property int property;
60 @end
62 void testD(D *d) {
63   d.Forward::property = 17; // expected-error{{property access cannot be qualified with 'Forward::'}}
64   d->Forward::ivar = 12; // expected-error{{instance variable access cannot be qualified with 'Forward::'}}
65   d.D::property = 17; // expected-error{{'D' is not a class, namespace, or enumeration}}
66   d->D::ivar = 12; // expected-error{{'D' is not a class, namespace, or enumeration}}