]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/SemaObjCXX/propert-dot-error.mm
Vendor import of clang trunk r238337:
[FreeBSD/FreeBSD.git] / test / SemaObjCXX / propert-dot-error.mm
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 }