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