Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / clang / test / SemaObjCXX / property-reference.mm
blob61bfd764f2f44a7c9cd92917dd02bbba84e89f97
1 // RUN: %clang_cc1 -x objective-c++ -triple x86_64-apple-darwin10 -fsyntax-only -verify -Wno-objc-root-class %s
3 class TCPPObject
5 public:
6         TCPPObject(const TCPPObject& inObj);
7         TCPPObject();
8         ~TCPPObject();
9         
10         TCPPObject& operator=(const TCPPObject& inObj)const ; // expected-note {{'operator=' declared here}}
12         void* Data();
13         
14 private:
15         void* fData;
19 typedef const TCPPObject& CREF_TCPPObject;
21 @interface TNSObject
22 @property (assign, readwrite, nonatomic) CREF_TCPPObject cppObjectNonAtomic;
23 @property (assign, readwrite) CREF_TCPPObject cppObjectAtomic;
24 @property (assign, readwrite, nonatomic) const TCPPObject& cppObjectDynamic;
25 @end
28 @implementation TNSObject
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;
34 - (const TCPPObject&) cppObjectNonAtomic
36         return cppObjectNonAtomic;
39 - (void) setCppObjectNonAtomic: (const TCPPObject&)cppObject
41         cppObjectNonAtomic = cppObject;
43 @end
46 @interface NSObject
47 + alloc;
48 - init;
49 - class;
50 @end
52 template<typename T> void f() {
53   NSObject *o = [NSObject.alloc init];
54   [o class];
57 template void f<int>();
59 // Make sure that the default-argument checker looks through
60 // pseudo-object expressions correctly.  The default argument
61 // needs to force l2r to test this effectively because the checker
62 // is syntactic and runs before placeholders are handled.
63 @interface Test13602832
64 - (int) x;
65 @end
66 namespace test13602832 {
67   template <int N> void foo(Test13602832 *a, int limit = a.x + N) {} // expected-error {{default argument references parameter 'a'}}
69   void test(Test13602832 *a) {
70     // FIXME: this is a useless cascade error.
71     foo<1024>(a); // expected-error {{no matching function}}
72   }