blob: 97da9c0d146771e2545dffa412aebe5820600873 [file] [log] [blame]
barte37ff332010-03-07 10:46:43 +00001/* 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 ANNOTATE_HAPPENS_AFTER(&i);
21
22 /* happens-after on a mutex. */
23 ANNOTATE_HAPPENS_BEFORE(&m);
24
25 /* happens-after on a condition variable. */
26 ANNOTATE_HAPPENS_BEFORE(&cv);
27
28 /* condition variable operation on a h.b. annotated object. */
29 ANNOTATE_HAPPENS_BEFORE(&i);
30 pthread_cond_init((pthread_cond_t*)&i, NULL);
31
32 /* The sequence below is fine. */
33 ANNOTATE_HAPPENS_DONE(&i);
34 ANNOTATE_HAPPENS_BEFORE(&i);
35 ANNOTATE_HAPPENS_AFTER(&i);
36 ANNOTATE_HAPPENS_DONE(&i);
37 ANNOTATE_HAPPENS_BEFORE(&i);
38 ANNOTATE_HAPPENS_DONE(&i);
39
40 /* happens-before after happens-after without intervening happens-done. */
41 ANNOTATE_HAPPENS_BEFORE(&i);
42 ANNOTATE_HAPPENS_AFTER(&i);
43 ANNOTATE_HAPPENS_BEFORE(&i);
44
45 fprintf(stderr, "Done.\n");
46 return 0;
47}
48
49/*
50 * Local variables:
51 * c-basic-offset: 2
52 * End:
53 */