1//===--------------------- cxa_thread_atexit_test.cpp ---------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// UNSUPPORTED: libcxxabi-no-threads
11// REQUIRES: linux
12
13#include <assert.h>
14#include <cxxabi.h>
15
16static bool AtexitImplCalled = false;
17
18extern "C" int __cxa_thread_atexit_impl(void (*dtor)(void *), void *obj,
19                                        void *dso_symbol) {
20  assert(dtor == reinterpret_cast<void (*)(void *)>(1));
21  assert(obj == reinterpret_cast<void *>(2));
22  assert(dso_symbol == reinterpret_cast<void *>(3));
23  AtexitImplCalled = true;
24  return 4;
25}
26
27int main() {
28  int RV = __cxxabiv1::__cxa_thread_atexit(
29      reinterpret_cast<void (*)(void *)>(1), reinterpret_cast<void *>(2),
30      reinterpret_cast<void *>(3));
31  assert(RV == 4);
32  assert(AtexitImplCalled);
33  return 0;
34}
35