summaryrefslogtreecommitdiff
path: root/test/BlocksRuntime/copyconstructor.C
diff options
context:
space:
mode:
authorAlexey Samsonov <samsonov@google.com>2014-02-14 09:47:31 +0000
committerAlexey Samsonov <samsonov@google.com>2014-02-14 09:47:31 +0000
commit28d10da69f52af1b01fbc12fd503621713641500 (patch)
tree76222f9698fdaafdfe23235d18d5ac804ea515d6 /test/BlocksRuntime/copyconstructor.C
parent08c9d0bc3ac37d7d5def0318a1420e67cca53e41 (diff)
Move tests for BlocksRuntime and builtins to corresponding directories under test/
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@201396 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/BlocksRuntime/copyconstructor.C')
-rw-r--r--test/BlocksRuntime/copyconstructor.C85
1 files changed, 85 insertions, 0 deletions
diff --git a/test/BlocksRuntime/copyconstructor.C b/test/BlocksRuntime/copyconstructor.C
new file mode 100644
index 000000000..626d33e80
--- /dev/null
+++ b/test/BlocksRuntime/copyconstructor.C
@@ -0,0 +1,85 @@
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+
+#include <stdio.h>
+#include <Block.h>
+
+// CONFIG C++ rdar://6243400,rdar://6289367
+
+
+int constructors = 0;
+int destructors = 0;
+
+
+#define CONST const
+
+class TestObject
+{
+public:
+ TestObject(CONST TestObject& inObj);
+ TestObject();
+ ~TestObject();
+
+ TestObject& operator=(CONST TestObject& inObj);
+
+ int version() CONST { return _version; }
+private:
+ mutable int _version;
+};
+
+TestObject::TestObject(CONST TestObject& inObj)
+
+{
+ ++constructors;
+ _version = inObj._version;
+ //printf("%p (%d) -- TestObject(const TestObject&) called\n", this, _version);
+}
+
+
+TestObject::TestObject()
+{
+ _version = ++constructors;
+ //printf("%p (%d) -- TestObject() called\n", this, _version);
+}
+
+
+TestObject::~TestObject()
+{
+ //printf("%p -- ~TestObject() called\n", this);
+ ++destructors;
+}
+
+
+TestObject& TestObject::operator=(CONST TestObject& inObj)
+{
+ //printf("%p -- operator= called\n", this);
+ _version = inObj._version;
+ return *this;
+}
+
+
+
+void testRoutine() {
+ TestObject one;
+
+ void (^b)(void) = ^{ printf("my const copy of one is %d\n", one.version()); };
+}
+
+
+
+int main(int argc, char *argv[]) {
+ testRoutine();
+ if (constructors == 0) {
+ printf("No copy constructors!!!\n");
+ return 1;
+ }
+ if (constructors != destructors) {
+ printf("%d constructors but only %d destructors\n", constructors, destructors);
+ return 1;
+ }
+ printf("%s:success\n", argv[0]);
+ return 0;
+}