1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/** 2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * @file rwlock_type_checking.c 3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * 4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * @brief Test whether DRD reports attempts to use a user-defined rwlock as 5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * a POSIX rwlock and vice versa. 6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */ 7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _GNU_SOURCE 1 10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <pthread.h> 12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdio.h> 13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <string.h> 14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "../../config.h" 15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "../../drd/drd.h" 16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint main(int argc, char** argv) 19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pthread_rwlock_t posix_rwlock; 21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pthread_rwlock_t user_defined_rwlock; 22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown memset(&user_defined_rwlock, 0, sizeof(user_defined_rwlock)); 24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ANNOTATE_RWLOCK_CREATE(&user_defined_rwlock); 25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pthread_rwlock_init(&posix_rwlock, 0); 26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pthread_rwlock_init((pthread_rwlock_t*)&user_defined_rwlock, 0); 28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ANNOTATE_READERLOCK_RELEASED(&posix_rwlock); 30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pthread_rwlock_destroy(&posix_rwlock); 32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ANNOTATE_RWLOCK_DESTROY(&user_defined_rwlock); 33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fprintf(stderr, "Finished.\n"); 35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return 0; 37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 38