12d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %clangxx_msan -m64 -fsanitize-memory-track-origins -O0 %s -o %t && %run %t 22d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 32d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// Regression test for a deadlock in pthread_getattr_np 42d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 52d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <assert.h> 62d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <pthread.h> 72d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 82d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesvoid *ThreadFn(void *) { 92d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines pthread_attr_t attr; 102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines int res = pthread_getattr_np(pthread_self(), &attr); 112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines assert(!res); 122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines return 0; 132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines} 142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesint main(void) { 162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines pthread_t t; 172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines int res = pthread_create(&t, 0, ThreadFn, 0); 182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines assert(!res); 192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines res = pthread_join(t, 0); 202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines assert(!res); 212d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines return 0; 222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines} 23