/* Test program for the annotations that suppress both reads and writes. */

#include <assert.h>  /* assert() */
#include <pthread.h>
#include <stdio.h>   /* EOF */
#include <unistd.h>  /* getopt() */
#include "../../drd/drd.h"

static int s_a;
static int s_b;
static int s_c;

static void* thread_func(void* arg)
{
  /* Read s_a and modify s_b. */
  s_b = s_a;
  /* Modify s_c. */
  s_c = 1;

  return NULL;
}

int main(int argc, char** argv)
{
  int optchar;
  int ign_rw = 1;
  int tmp;
  pthread_t tid;

  while ((optchar = getopt(argc, argv, "r")) != EOF)
  {
    switch (optchar)
    {
    case 'r':
      ign_rw = 0;
      break;
    default:
      assert(0);
    }
  }

  pthread_create(&tid, 0, thread_func, 0);
  if (ign_rw)
    ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN();
  /* Read s_b and modify s_a. */
  s_a = s_b;
  if (ign_rw)
    ANNOTATE_IGNORE_READS_AND_WRITES_END();

  /*
   * Insert a delay here in order to make sure the load of s_c happens
   * after s_c has been modified.
   */
  sleep(1);

  /* Read s_c. */
  tmp = s_c;

  pthread_join(tid, 0);

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

  return 0;
}
