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 10 int 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