
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>

/* Simple test program, no race: parent only modifies x after child
   has modified it and then joined with the parent.  Tests simple
   thread lifetime segment handling. */

/* A simple function to "use" a value, so that gcc can't
   possibly optimise it into nothing. */
static void use ( int x ) {
   __asm__ __volatile__( "" : : "r"(x) : "cc","memory" );
}

static void* worker_thread ( void* argV )
{
  int* arg = (int*)argV;
  use(arg[5]); /* read access */
  return NULL;
}

int main ( void )
{
   pthread_t thread_id;
   volatile int* x = malloc(10 * sizeof(int));
   x[5] = 1;
   /* x[5] is Excl(parent) */

   pthread_create(&thread_id, 0, worker_thread, (void*)x);

   use(x[5]); /* read access */

   /* Just before the threads join, x[5] is ShR (read by both parent
      and child) */
   pthread_join(thread_id, 0);
   /* x[5] is Excl(parent), because only parent and child accessed it
      and child has merged to parent.  So now it's ok for parent to
      access it without locking. */

   x[5] = 0; /* write access */

   return x[5];
}
