1/* Test program that triggers several happens-before usage errors. */
2
3
4#include <stdlib.h>
5#include <stdio.h>
6#include <pthread.h>
7#include "unified_annotations.h"
8
9
10int main(int argc, char** argv)
11{
12  pthread_mutex_t m;
13  pthread_cond_t  cv;
14  int i[64];
15
16  pthread_mutex_init(&m, NULL);
17  pthread_cond_init(&cv, NULL);
18
19  /* happens-after without preceding happens-before. */
20  U_ANNOTATE_HAPPENS_AFTER(&i);
21
22  /* happens-after on a mutex. */
23  U_ANNOTATE_HAPPENS_BEFORE(&m);
24
25  /* happens-after on a condition variable. */
26  U_ANNOTATE_HAPPENS_BEFORE(&cv);
27
28  /* condition variable operation on a h.b. annotated object. */
29  U_ANNOTATE_HAPPENS_BEFORE(&i);
30  pthread_cond_init((pthread_cond_t*)&i, NULL);
31
32  /* The sequence below is fine. */
33  U_ANNOTATE_NEW_MEMORY(&i, sizeof(i));
34  U_ANNOTATE_HAPPENS_BEFORE(&i);
35  U_ANNOTATE_HAPPENS_AFTER(&i);
36  U_ANNOTATE_NEW_MEMORY(&i, sizeof(i));
37  U_ANNOTATE_HAPPENS_BEFORE(&i);
38  U_ANNOTATE_NEW_MEMORY(&i, sizeof(i));
39
40  /* happens-before after happens-after. */
41  U_ANNOTATE_HAPPENS_BEFORE(&i);
42  U_ANNOTATE_HAPPENS_AFTER(&i);
43  U_ANNOTATE_HAPPENS_BEFORE(&i);
44
45  fprintf(stderr, "Done.\n");
46  return 0;
47}
48