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