relaxed shared [5] int *shared shared_ptr_to_shared;
strict shared [5] int y[100 * THREADS];
strict shared [5] int z[100 * THREADS];
int x[100];
shared int shared_int;
int local_int = 99;
shared int *ptr_to_shared_int;

int
main ()
{
  int i;
  size_t size;
  upc_lock_t *lock;
  lock = upc_global_lock_alloc ();
  upc_barrier 1;
  upc_forall (i = 0; i < 100 * THREADS; ++i; &z[i])
    {
      int j;
      for (j = 0; j < 100; ++j)
	{
#pragma upc strict
	  if (x[i] < x[j])
	    {
	      upc_lock (lock);
	      z[i][j] = x[i] * y[j];
	      upc_unlock (lock);
	    }
	  else
	    {
	      upc_fence;
	      z[i][j] = -x[i] * y[j];
	      upc_fence;
	    }
	}
      upc_notify 10;
      upc_wait 10;
    }
  size = upc_blocksizeof (z);
  size = upc_localsizeof (z);
  size = upc_elemsizeof (z);
  upc_lock_free (lock);
}