[ASan/Win] Use clang rather than clang-cl by default for lit tests. Make Windows...
[blocksruntime.git] / test / BlocksRuntime / copyconstructor.C
blob626d33e80e80c35f8b7b87b2569e65d3ff2d05ec
1 //
2 //                     The LLVM Compiler Infrastructure
3 //
4 // This file is distributed under the University of Illinois Open Source
5 // License. See LICENSE.TXT for details.
7 #include <stdio.h>
8 #include <Block.h>
10 // CONFIG C++ rdar://6243400,rdar://6289367
13 int constructors = 0;
14 int destructors = 0;
17 #define CONST const
19 class TestObject
21 public:
22         TestObject(CONST TestObject& inObj);
23         TestObject();
24         ~TestObject();
25         
26         TestObject& operator=(CONST TestObject& inObj);
28         int version() CONST { return _version; }
29 private:
30         mutable int _version;
33 TestObject::TestObject(CONST TestObject& inObj)
34         
36         ++constructors;
37         _version = inObj._version;
38         //printf("%p (%d) -- TestObject(const TestObject&) called\n", this, _version); 
42 TestObject::TestObject()
44         _version = ++constructors;
45         //printf("%p (%d) -- TestObject() called\n", this, _version); 
49 TestObject::~TestObject()
51         //printf("%p -- ~TestObject() called\n", this);
52         ++destructors;
56 TestObject& TestObject::operator=(CONST TestObject& inObj)
58         //printf("%p -- operator= called\n", this);
59         _version = inObj._version;
60         return *this;
65 void testRoutine() {
66     TestObject one;
67     
68     void (^b)(void) = ^{ printf("my const copy of one is %d\n", one.version()); };
70     
71     
73 int main(int argc, char *argv[]) {
74     testRoutine();
75     if (constructors == 0) {
76         printf("No copy constructors!!!\n");
77         return 1;
78     }
79     if (constructors != destructors) {
80         printf("%d constructors but only %d destructors\n", constructors, destructors);
81         return 1;
82     }
83     printf("%s:success\n", argv[0]);
84     return 0;