brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · dcddf3a Raw
95 lines · c
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-exception5 6#import <Block.h>7#import <stdio.h>8#import <stdlib.h>9 10// CONFIG C++11 12int recovered = 0;13 14 15 16int constructors = 0;17int destructors = 0;18 19#define CONST const20 21class TestObject22{23public:24	TestObject(CONST TestObject& inObj);25	TestObject();26	~TestObject();27	28	TestObject& operator=(CONST TestObject& inObj);29        30        void test(void);31 32	int version() CONST { return _version; }33private:34	mutable int _version;35};36 37TestObject::TestObject(CONST TestObject& inObj)38	39{40        ++constructors;41        _version = inObj._version;42	//printf("%p (%d) -- TestObject(const TestObject&) called", this, _version); 43}44 45 46TestObject::TestObject()47{48        _version = ++constructors;49	//printf("%p (%d) -- TestObject() called\n", this, _version); 50}51 52 53TestObject::~TestObject()54{55	//printf("%p -- ~TestObject() called\n", this);56        ++destructors;57}58 59#if 160TestObject& TestObject::operator=(CONST TestObject& inObj)61{62	//printf("%p -- operator= called", this);63        _version = inObj._version;64	return *this;65}66#endif67 68void TestObject::test(void)  {69    void (^b)(void) = ^{ recovered = _version; };70    void (^b2)(void) = Block_copy(b);71    b2();72    Block_release(b2);73}74 75 76 77void testRoutine() {78    TestObject one;79 80    81    one.test();82}83    84    85 86int 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);94}95