From 947adedebc480917b8490bc16e8b2d82b441095a Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Thu, 26 Mar 2015 11:07:04 -0700 Subject: Add test for thread_local keyword. For gcc only for the time being. Bug: 19800080 Bug: 16696563 Change-Id: Ifaa59a131ca2d9030554cee7ce631dcb1d081938 --- tests/__cxa_thread_atexit_test.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'tests/__cxa_thread_atexit_test.cpp') diff --git a/tests/__cxa_thread_atexit_test.cpp b/tests/__cxa_thread_atexit_test.cpp index 017731498..fea60b719 100644 --- a/tests/__cxa_thread_atexit_test.cpp +++ b/tests/__cxa_thread_atexit_test.cpp @@ -20,6 +20,36 @@ #include +static std::string class_with_dtor_output; + +class ClassWithDtor { + public: + void set_message(const std::string& msg) { + message = msg; + } + + ~ClassWithDtor() { + class_with_dtor_output += message; + } + private: + std::string message; +}; + +thread_local ClassWithDtor class_with_dtor; + +static void* thread_nop(void* arg) { + class_with_dtor.set_message(*static_cast(arg)); + return nullptr; +} + +TEST(thread_local, smoke) { + std::string msg("dtor called."); + pthread_t t; + ASSERT_EQ(0, pthread_create(&t, nullptr, thread_nop, &msg)); + ASSERT_EQ(0, pthread_join(t, nullptr)); + ASSERT_EQ("dtor called.", class_with_dtor_output); +} + extern "C" int __cxa_thread_atexit_impl(void (*fn)(void*), void* arg, void* dso_handle); static void thread_atexit_fn1(void* arg) { -- cgit v1.2.3