#include "prx/libc/include/HostThreadLocal.hpp" #include #include #include namespace { std::atomic destroyed{0}; struct Value { std::vector data = std::vector(256, 42); ~Value() { for (auto item : data) if (item != 42) std::abort(); ++destroyed; } }; struct First {}; struct Second {}; } #ifdef _WIN32 #define TEST_EXPORT __declspec(dllexport) #else #define TEST_EXPORT #endif extern "C" TEST_EXPORT void TouchHostThreadLocal() { auto& first = HostThreadLocal(); auto& second = HostThreadLocal(); if (&first == &second || &first != &HostThreadLocal()) std::abort(); } extern "C" TEST_EXPORT unsigned DestroyedHostThreadLocals() { return destroyed.load(); }