propert-dot-error.mm revision 5a706dc1b17f875c7fce20f1fbf9ca372be4c331
19a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org// RUN: %clang_cc1 -fsyntax-only -verify %s 23484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// rdar: // 8379892 33484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org 47c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.orgstruct X { 5196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org X(); 67c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org X(const X&); 7196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org ~X(); 8196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 9196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org static int staticData; 10196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org int data; 11196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org void method(); 12c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org}; 13c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org 14c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org@interface A { 15c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org X xval; 16c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org} 17c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org 18c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org- (X)x; 19c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org- (void)setx:(X)x; 20830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org@end 21830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org 22830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.orgvoid f(A* a) { 23830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org a.x = X(); // expected-error {{setter method is needed to assign to object using property assignment syntax}} 24830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org} 25c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org 26830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.orgstruct Y : X { }; 27830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org 28af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org@interface B { 29af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org@private 30af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org Y *y; 31af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org} 32af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org- (Y)value; 33af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org- (void)setValue : (Y) arg; 34af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org@property Y value; 35af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org@end 36af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org 37af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgvoid g(B *b) { 38af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org b.value.data = 17; // expected-error {{not assignable}} 39af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org b.value.staticData = 17; 40af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org b.value.method(); 41af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org} 42af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org 43af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org@interface C 44af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org@end 45af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org 46af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org@implementation C 47c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org- (void)method:(B *)b { 48486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org // <rdar://problem/8985943> 49c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org b.operator+ = 17; // expected-error{{'operator+' is not a valid property name (accessing an object of type 'B *')}} 50c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org b->operator+ = 17; // expected-error{{'B' does not have a member named 'operator+'}} 517c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org} 527c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org@end 537c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org 547c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org// PR9759 557028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.orgclass Forward; 567028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org@interface D { 577028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org@public 584efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org int ivar; 594efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org} 604efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org 614efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org@property int property; 624efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org@end 634efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org 64830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.orgvoid testD(D *d) { 65830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org d.Forward::property = 17; // expected-error{{property access cannot be qualified with 'Forward::'}} 66830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org d->Forward::ivar = 12; // expected-error{{ivar access cannot be qualified with 'Forward::'}} 67830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org d.D::property = 17; // expected-error{{expected a class or namespace}} 68830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org d->D::ivar = 12; // expected-error{{expected a class or namespace}} 69830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org} 70830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org