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)