| // RUN: %clang_cc1 -x objective-c++ -triple x86_64-apple-darwin10 -fsyntax-only -verify -Wno-objc-root-class %s |
| // rdar://9070460 |
| |
| class TCPPObject |
| { |
| public: |
| TCPPObject(const TCPPObject& inObj); |
| TCPPObject(); |
| ~TCPPObject(); |
| |
| TCPPObject& operator=(const TCPPObject& inObj)const ; // expected-note {{'operator=' declared here}} |
| |
| void* Data(); |
| |
| private: |
| void* fData; |
| }; |
| |
| |
| typedef const TCPPObject& CREF_TCPPObject; |
| |
| @interface TNSObject |
| @property (assign, readwrite, nonatomic) CREF_TCPPObject cppObjectNonAtomic; |
| @property (assign, readwrite) CREF_TCPPObject cppObjectAtomic; |
| @property (assign, readwrite, nonatomic) const TCPPObject& cppObjectDynamic; |
| @end |
| |
| |
| @implementation TNSObject |
| |
| @synthesize cppObjectNonAtomic; |
| @synthesize cppObjectAtomic; // expected-error{{atomic property of reference type 'CREF_TCPPObject' (aka 'const TCPPObject &') cannot have non-trivial assignment operator}} |
| @dynamic cppObjectDynamic; |
| |
| - (const TCPPObject&) cppObjectNonAtomic |
| { |
| return cppObjectNonAtomic; |
| } |
| |
| - (void) setCppObjectNonAtomic: (const TCPPObject&)cppObject |
| { |
| cppObjectNonAtomic = cppObject; |
| } |
| @end |
| |
| |
| // <rdar://problem/11052352> |
| @interface NSObject |
| + alloc; |
| - init; |
| - class; |
| @end |
| |
| template<typename T> void f() { |
| NSObject *o = [NSObject.alloc init]; |
| [o class]; |
| } |
| |
| template void f<int>(); |
| |
| // rdar://13602832 |
| // |
| // Make sure that the default-argument checker looks through |
| // pseudo-object expressions correctly. The default argument |
| // needs to force l2r to test this effectively because the checker |
| // is syntactic and runs before placeholders are handled. |
| @interface Test13602832 |
| - (int) x; |
| @end |
| namespace test13602832 { |
| template <int N> void foo(Test13602832 *a, int limit = a.x + N) {} // expected-error {{default argument references parameter 'a'}} |
| |
| void test(Test13602832 *a) { |
| // FIXME: this is a useless cascade error. |
| foo<1024>(a); // expected-error {{no matching function}} |
| } |
| } |