74 lines · plain
1// RUN: %clang_cc1 -x objective-c++ -triple x86_64-apple-darwin10 -fsyntax-only -verify -Wno-objc-root-class %s2 3class TCPPObject4{5public:6 TCPPObject(const TCPPObject& inObj);7 TCPPObject();8 ~TCPPObject();9 10 TCPPObject& operator=(const TCPPObject& inObj)const ; // expected-note {{'operator=' declared here}}11 12 void* Data();13 14private:15 void* fData;16};17 18 19typedef const TCPPObject& CREF_TCPPObject;20 21@interface TNSObject22@property (assign, readwrite, nonatomic) CREF_TCPPObject cppObjectNonAtomic;23@property (assign, readwrite) CREF_TCPPObject cppObjectAtomic;24@property (assign, readwrite, nonatomic) const TCPPObject& cppObjectDynamic;25@end26 27 28@implementation TNSObject29 30@synthesize cppObjectNonAtomic;31@synthesize cppObjectAtomic; // expected-error{{atomic property of reference type 'CREF_TCPPObject' (aka 'const TCPPObject &') cannot have non-trivial assignment operator}}32@dynamic cppObjectDynamic;33 34- (const TCPPObject&) cppObjectNonAtomic35{36 return cppObjectNonAtomic;37}38 39- (void) setCppObjectNonAtomic: (const TCPPObject&)cppObject40{41 cppObjectNonAtomic = cppObject;42}43@end44 45 46@interface NSObject47+ alloc;48- init;49- class;50@end51 52template<typename T> void f() {53 NSObject *o = [NSObject.alloc init];54 [o class];55}56 57template void f<int>();58 59// Make sure that the default-argument checker looks through60// pseudo-object expressions correctly. The default argument61// needs to force l2r to test this effectively because the checker62// is syntactic and runs before placeholders are handled.63@interface Test1360283264- (int) x;65@end66namespace test13602832 {67 template <int N> void foo(Test13602832 *a, int limit = a.x + N) {} // expected-error {{default argument references parameter 'a'}}68 69 void test(Test13602832 *a) {70 // FIXME: this is a useless cascade error.71 foo<1024>(a); // expected-error {{no matching function}}72 }73}74