Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / compiler-rt / test / BlocksRuntime / reference.C
blobdcddf3aa812df59e5a788a84b764321ffdd04403
1 //
2 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
3 // See https://llvm.org/LICENSE.txt for license information.
4 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 #import <Block.h>
7 #import <stdio.h>
8 #import <stdlib.h>
10 // CONFIG C++
12 int recovered = 0;
16 int constructors = 0;
17 int destructors = 0;
19 #define CONST const
21 class TestObject
23 public:
24         TestObject(CONST TestObject& inObj);
25         TestObject();
26         ~TestObject();
27         
28         TestObject& operator=(CONST TestObject& inObj);
29         
30         void test(void);
32         int version() CONST { return _version; }
33 private:
34         mutable int _version;
37 TestObject::TestObject(CONST TestObject& inObj)
38         
40         ++constructors;
41         _version = inObj._version;
42         //printf("%p (%d) -- TestObject(const TestObject&) called", this, _version); 
46 TestObject::TestObject()
48         _version = ++constructors;
49         //printf("%p (%d) -- TestObject() called\n", this, _version); 
53 TestObject::~TestObject()
55         //printf("%p -- ~TestObject() called\n", this);
56         ++destructors;
59 #if 1
60 TestObject& TestObject::operator=(CONST TestObject& inObj)
62         //printf("%p -- operator= called", this);
63         _version = inObj._version;
64         return *this;
66 #endif
68 void TestObject::test(void)  {
69     void (^b)(void) = ^{ recovered = _version; };
70     void (^b2)(void) = Block_copy(b);
71     b2();
72     Block_release(b2);
77 void testRoutine() {
78     TestObject one;
80     
81     one.test();
83     
84     
86 int main(int argc, char *argv[]) {
87     testRoutine();
88     if (recovered == 1) {
89         printf("%s: success\n", argv[0]);
90         exit(0);
91     }
92     printf("%s: *** didn't recover byref block variable\n", argv[0]);
93     exit(1);