Home | History | Annotate | Download | only in test
      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 
     16 static bool AtexitImplCalled = false;
     17 
     18 extern "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 
     27 int 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