propert-dot-error.mm revision 3c3b7f90a863af43fa63043d396553ecf205351c
1a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// RUN: %clang_cc1 -fsyntax-only -verify %s
2a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// rdar: // 8379892
3a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
4a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)struct X {
52385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  X();
62385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  X(const X&);
7a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  ~X();
858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  static int staticData;
1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  int data;
1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void method();
1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)};
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci@interface A {
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  X xval;
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
17a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
18a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)- (X)x;
19a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)- (void)setx:(X)x;
20a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)@end
21a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
22a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void f(A* a) {
2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  a.x = X(); // expected-error {{no setter method 'setX:' for assignment to property}}
24a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
26a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)struct Y : X { };
27a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)@interface B {
2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)@private
30a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  Y *y;
3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
3203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)- (Y)value;
3303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)- (void)setValue : (Y) arg;
3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)@property Y value;
35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)@end
3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
3703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void g(B *b) {
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  b.value.data = 17; // expected-error {{not assignable}}
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  b.value.staticData = 17;
4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  b.value.method();
4103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
4203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
4303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)@interface C
4403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)@end
4503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)@implementation C
47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)- (void)method:(B *)b {
4803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // <rdar://problem/8985943>
4903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  b.operator+ = 17; // expected-error{{'operator+' is not a valid property name (accessing an object of type 'B *')}}
5003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  b->operator+ = 17; // expected-error{{'B' does not have a member named 'operator+'}}
5103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
5203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)@end
53a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// PR9759
55a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)class Forward;
5603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)@interface D {
5703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)@public
5803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  int ivar;
59a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
6003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
6103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)@property int property;
621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci@end
631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid testD(D *d) {
651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  d.Forward::property = 17; // expected-error{{property access cannot be qualified with 'Forward::'}}
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  d->Forward::ivar = 12; // expected-error{{ivar access cannot be qualified with 'Forward::'}}
671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  d.D::property = 17; // expected-error{{expected a class or namespace}}
68a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  d->D::ivar = 12; // expected-error{{expected a class or namespace}}
69a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
7003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)