/*
 * Test program with happens-before / happens-after annotations that triggers
 * a data race. The data race will only be reported if happens-after
 * annotations that occur in different threads are not totally ordered. Or:
 * this is a test for the implementation of ordering annotations.
 */


#include <stdio.h>
#include <pthread.h>
#include "unified_annotations.h"


static int s_i;


static void* thread_func(void* arg)
{
  int i;

  U_ANNOTATE_HAPPENS_AFTER(&s_i);
  i = s_i;
  U_ANNOTATE_HAPPENS_AFTER(&s_i);
  *(int*)arg = i;
  return NULL;
}

int main(int argc, char** argv)
{
  const struct timespec delay = { 0, 100 * 1000 * 1000 };
  pthread_t tid[2];
  int result[2];

  U_ANNOTATE_HAPPENS_BEFORE(&s_i);
  pthread_create(&tid[0], 0, thread_func, &result[0]);
  pthread_create(&tid[1], 0, thread_func, &result[1]);

  nanosleep(&delay, 0);

  s_i = 1;

  pthread_join(tid[0], NULL);
  pthread_join(tid[1], NULL);

  fprintf(stderr, "Done.\n");

  return 0;
}
