xref: /freebsd-src/tools/regression/pthread/unwind/Test.cpp (revision 2a63c3be158216222d89a073dcbd6a72ee4aab5a)
1e04b953eSDavid Xu 
2*ef135466SEd Maste static int destructed;
3*ef135466SEd Maste static int destructed2;
4e04b953eSDavid Xu 
5e04b953eSDavid Xu class Test {
6e04b953eSDavid Xu public:
Test()7e04b953eSDavid Xu 	Test() { printf("Test::Test()\n"); }
~Test()8e04b953eSDavid Xu 	~Test() { printf("Test::~Test()\n"); destructed = 1; }
9e04b953eSDavid Xu };
10e04b953eSDavid Xu 
11e04b953eSDavid Xu void
cleanup_handler(void * arg __unused)12*ef135466SEd Maste cleanup_handler(void *arg __unused)
13e04b953eSDavid Xu {
14e04b953eSDavid Xu 	destructed2 = 1;
15e04b953eSDavid Xu 	printf("%s()\n", __func__);
16e04b953eSDavid Xu }
17e04b953eSDavid Xu 
18e04b953eSDavid Xu void
check_destruct(void)19e04b953eSDavid Xu check_destruct(void)
20e04b953eSDavid Xu {
21e04b953eSDavid Xu 	if (!destructed)
22e04b953eSDavid Xu 		printf("Bug, object destructor is not called\n");
23e04b953eSDavid Xu 	else
24e04b953eSDavid Xu 		printf("OK\n");
25e04b953eSDavid Xu }
26e04b953eSDavid Xu 
27e04b953eSDavid Xu void
check_destruct2(void)28e04b953eSDavid Xu check_destruct2(void)
29e04b953eSDavid Xu {
30e04b953eSDavid Xu 	if (!destructed)
31e04b953eSDavid Xu 		printf("Bug, object destructor is not called\n");
32e04b953eSDavid Xu 	else if (!destructed2)
33e04b953eSDavid Xu 		printf("Bug, cleanup handler is not called\n");
34e04b953eSDavid Xu 	else
35e04b953eSDavid Xu 		printf("OK\n");
36e04b953eSDavid Xu }
37