[tsan] Replace new/delete with a local variable in ThreadSpecificDtors unit test

On OS X, this unit test (ThreadSpecificDtors) fails, because the new and delete operators actually call the overridden operators, which end up using TLVs and crash. Since C++'s new and delete is not important in this test, let's just replace them with a local variable. This fixes the test on OS X.

Differential Revision: http://reviews.llvm.org/D14826

llvm-svn: 253583
This commit is contained in:
Kuba Brecka 2015-11-19 17:50:07 +00:00
parent 2763dc29a5
commit c7157bfd55
1 changed files with 7 additions and 8 deletions

View File

@ -35,7 +35,7 @@ static void thread_secific_dtor(void *v) {
__tsan_write4(&k->cnt);
EXPECT_EQ(pthread_mutex_unlock(k->mtx), 0);
if (k->val == 42) {
delete k;
// Okay.
} else if (k->val == 43 || k->val == 44) {
k->val--;
EXPECT_EQ(pthread_setspecific(k->key, k), 0);
@ -57,14 +57,13 @@ TEST(Posix, ThreadSpecificDtors) {
pthread_mutex_t mtx;
EXPECT_EQ(pthread_mutex_init(&mtx, 0), 0);
pthread_t th[3];
thread_key *k[3];
k[0] = new thread_key(key, &mtx, 42, &cnt);
k[1] = new thread_key(key, &mtx, 43, &cnt);
k[2] = new thread_key(key, &mtx, 44, &cnt);
EXPECT_EQ(pthread_create(&th[0], 0, dtors_thread, k[0]), 0);
EXPECT_EQ(pthread_create(&th[1], 0, dtors_thread, k[1]), 0);
thread_key k1 = thread_key(key, &mtx, 42, &cnt);
thread_key k2 = thread_key(key, &mtx, 43, &cnt);
thread_key k3 = thread_key(key, &mtx, 44, &cnt);
EXPECT_EQ(pthread_create(&th[0], 0, dtors_thread, &k1), 0);
EXPECT_EQ(pthread_create(&th[1], 0, dtors_thread, &k2), 0);
EXPECT_EQ(pthread_join(th[0], 0), 0);
EXPECT_EQ(pthread_create(&th[2], 0, dtors_thread, k[2]), 0);
EXPECT_EQ(pthread_create(&th[2], 0, dtors_thread, &k3), 0);
EXPECT_EQ(pthread_join(th[1], 0), 0);
EXPECT_EQ(pthread_join(th[2], 0), 0);
EXPECT_EQ(pthread_key_delete(key), 0);