1*bcaeed49SFangrui Song // RUN: %clangxx_tsan %s -o %t 2*bcaeed49SFangrui Song // RUN: %deflake %run %t | FileCheck %s 3*bcaeed49SFangrui Song // RUN: %deflake %run %t 1 | FileCheck %s 4*bcaeed49SFangrui Song 5*bcaeed49SFangrui Song // The pthread_mutex_lock interceptor assumes incompatible internals w/ NetBSD 6*bcaeed49SFangrui Song // XFAIL: netbsd 7*bcaeed49SFangrui Song 8*bcaeed49SFangrui Song #include <pthread.h> 9*bcaeed49SFangrui Song #include <stdio.h> 10*bcaeed49SFangrui Song #include <stdlib.h> 11*bcaeed49SFangrui Song main(int argc,char * argv[])12*bcaeed49SFangrui Songint main(int argc, char *argv[]) { 13*bcaeed49SFangrui Song pthread_mutex_t *m = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t)); 14*bcaeed49SFangrui Song pthread_mutex_init(m, 0); 15*bcaeed49SFangrui Song pthread_mutex_lock(m); 16*bcaeed49SFangrui Song pthread_mutex_unlock(m); 17*bcaeed49SFangrui Song pthread_mutex_destroy(m); 18*bcaeed49SFangrui Song 19*bcaeed49SFangrui Song if (argc > 1 && argv[1][0] == '1') 20*bcaeed49SFangrui Song free(m); 21*bcaeed49SFangrui Song 22*bcaeed49SFangrui Song pthread_mutex_lock(m); 23*bcaeed49SFangrui Song // CHECK: WARNING: ThreadSanitizer: use of an invalid mutex (e.g. uninitialized or destroyed) 24*bcaeed49SFangrui Song // CHECK: #0 pthread_mutex_lock 25*bcaeed49SFangrui Song // CHECK: #1 main {{.*}}mutex_lock_destroyed.cpp:[[@LINE-3]] 26*bcaeed49SFangrui Song 27*bcaeed49SFangrui Song return 0; 28*bcaeed49SFangrui Song } 29