blob: b86ae5e9f51ddc3a3974b440f8efe30562563434 [file] [log] [blame]
Patrick Beardb2f68202012-04-06 18:12:22 +00001// RUN: %clang_cc1 -x objective-c++ -triple x86_64-apple-darwin10 -fsyntax-only -verify -Wno-objc-root-class %s
Fariborz Jahanian61750f22011-03-30 16:59:30 +00002// rdar://9070460
3
4class TCPPObject
5{
6public:
7 TCPPObject(const TCPPObject& inObj);
8 TCPPObject();
9 ~TCPPObject();
10
Fariborz Jahanian20abee62012-01-10 00:37:01 +000011 TCPPObject& operator=(const TCPPObject& inObj)const ; // expected-note {{'operator=' declared here}}
Fariborz Jahanian61750f22011-03-30 16:59:30 +000012
13 void* Data();
14
15private:
16 void* fData;
17};
18
19
20typedef 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;
Fariborz Jahanian20abee62012-01-10 00:37:01 +000032@synthesize cppObjectAtomic; // expected-error{{atomic property of reference type 'CREF_TCPPObject' (aka 'const TCPPObject &') cannot have non-trivial assignment operator}}
Fariborz Jahanian61750f22011-03-30 16:59:30 +000033@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
Douglas Gregorf53bc312012-04-13 15:53:08 +000045
46
47// <rdar://problem/11052352>
48@interface NSObject
49+ alloc;
50- init;
51- class;
52@end
53
54template<typename T> void f() {
55 NSObject *o = [NSObject.alloc init];
56 [o class];
57}
58
59template void f<int>();