main ()
{
  long int D.18432;
  unsigned int D.18433;
  unsigned int i.0;
  unsigned int D.18435;
  long int * D.18436;
  long int D.18437;
  sizetype offset.1;
  sizetype D.18439;
  unsigned char * D.18440;
  unsigned int size.2;
  unsigned char * D.18442;
  int D.18443;
  sizetype dest_offset.3;
  sizetype D.18448;
  unsigned char * D.18449;
  sizetype src_offset.4;
  sizetype D.18451;
  unsigned char * D.18452;
  unsigned char * D.18453;
  unsigned char * D.18454;
  int D.18455;
  sizetype D.18459;
  unsigned char * D.18460;
  unsigned char * D.18461;
  int D.18462;
  sizetype D.18466;
  unsigned char * D.18467;
  unsigned char * D.18468;
  int D.18469;
  int D.18473;
  unsigned char * random_mem;
  unsigned char * reference;
  unsigned char * playground;
  long int * long_random_mem;
  int i;
  int offset;
  int size;
  int src_offset;
  int dest_offset;
  static const char __PRETTY_FUNCTION__[5] = "main";

  random_mem = malloc (2048);
  reference = malloc (2048);
  playground = malloc (2048);
  D.18432 = time (0B);
  D.18433 = (unsigned int) D.18432;
  srandom (D.18433);
  long_random_mem = random_mem;
  i = 0;
  goto <D.18411>;
  <D.18410>:
  i.0 = (unsigned int) i;
  D.18435 = i.0 * 4;
  D.18436 = long_random_mem + D.18435;
  D.18437 = random ();
  *D.18436 = D.18437;
  i = i + 1;
  <D.18411>:
  i.0 = (unsigned int) i;
  if (i.0 <= 511) goto <D.18410>; else goto <D.18412>;
  <D.18412>:
  offset = 0;
  goto <D.18418>;
  <D.18417>:
  size = 0;
  goto <D.18415>;
  <D.18414>:
  memcpy (reference, random_mem, 2048);
  memcpy (playground, random_mem, 2048);
  offset.1 = (sizetype) offset;
  D.18439 = offset.1 + 128;
  D.18440 = reference + D.18439;
  size.2 = (unsigned int) size;
  bzero (D.18440, size.2);
  offset.1 = (sizetype) offset;
  D.18439 = offset.1 + 128;
  D.18442 = playground + D.18439;
  size.2 = (unsigned int) size;
  mono_gc_bzero_atomic (D.18442, size.2);
  {
    D.18443 = memcmp (reference, playground, 2048);
    if (D.18443 == 0) goto <D.18444>; else goto <D.18445>;
    <D.18444>:
    goto <D.18446>;
    <D.18445>:
    __assert_fail ("!memcmp (reference, playground, POOL_SIZE)", "test-gc-memfuncs.c", 65, &__PRETTY_FUNCTION__);
    <D.18446>:
  }
  size = size + 1;
  <D.18415>:
  if (size <= 256) goto <D.18414>; else goto <D.18416>;
  <D.18416>:
  offset = offset + 1;
  <D.18418>:
  if (offset <= 64) goto <D.18417>; else goto <D.18419>;
  <D.18419>:
  src_offset = -32;
  goto <D.18427>;
  <D.18426>:
  dest_offset = -32;
  goto <D.18424>;
  <D.18423>:
  size = 0;
  goto <D.18421>;
  <D.18420>:
  memcpy (reference, random_mem, 2048);
  memcpy (playground, random_mem, 2048);
  dest_offset.3 = (sizetype) dest_offset;
  D.18448 = dest_offset.3 + 128;
  D.18449 = reference + D.18448;
  src_offset.4 = (sizetype) src_offset;
  D.18451 = src_offset.4 + 128;
  D.18452 = reference + D.18451;
  size.2 = (unsigned int) size;
  memmove (D.18449, D.18452, size.2);
  dest_offset.3 = (sizetype) dest_offset;
  D.18448 = dest_offset.3 + 128;
  D.18453 = playground + D.18448;
  src_offset.4 = (sizetype) src_offset;
  D.18451 = src_offset.4 + 128;
  D.18454 = playground + D.18451;
  size.2 = (unsigned int) size;
  mono_gc_memmove_atomic (D.18453, D.18454, size.2);
  {
    D.18455 = memcmp (reference, playground, 2048);
    if (D.18455 == 0) goto <D.18456>; else goto <D.18457>;
    <D.18456>:
    goto <D.18458>;
    <D.18457>:
    __assert_fail ("!memcmp (reference, playground, POOL_SIZE)", "test-gc-memfuncs.c", 80, &__PRETTY_FUNCTION__);
    <D.18458>:
  }
  memcpy (reference, random_mem, 2048);
  memcpy (playground, random_mem, 2048);
  dest_offset.3 = (sizetype) dest_offset;
  D.18448 = dest_offset.3 + 128;
  D.18449 = reference + D.18448;
  src_offset.4 = (sizetype) src_offset;
  D.18459 = src_offset.4 + 1024;
  D.18460 = reference + D.18459;
  size.2 = (unsigned int) size;
  memmove (D.18449, D.18460, size.2);
  dest_offset.3 = (sizetype) dest_offset;
  D.18448 = dest_offset.3 + 128;
  D.18453 = playground + D.18448;
  src_offset.4 = (sizetype) src_offset;
  D.18459 = src_offset.4 + 1024;
  D.18461 = playground + D.18459;
  size.2 = (unsigned int) size;
  mono_gc_memmove_atomic (D.18453, D.18461, size.2);
  {
    D.18462 = memcmp (reference, playground, 2048);
    if (D.18462 == 0) goto <D.18463>; else goto <D.18464>;
    <D.18463>:
    goto <D.18465>;
    <D.18464>:
    __assert_fail ("!memcmp (reference, playground, POOL_SIZE)", "test-gc-memfuncs.c", 89, &__PRETTY_FUNCTION__);
    <D.18465>:
  }
  memcpy (reference, random_mem, 2048);
  memcpy (playground, random_mem, 2048);
  dest_offset.3 = (sizetype) dest_offset;
  D.18466 = dest_offset.3 + 1024;
  D.18467 = reference + D.18466;
  src_offset.4 = (sizetype) src_offset;
  D.18451 = src_offset.4 + 128;
  D.18452 = reference + D.18451;
  size.2 = (unsigned int) size;
  memmove (D.18467, D.18452, size.2);
  dest_offset.3 = (sizetype) dest_offset;
  D.18466 = dest_offset.3 + 1024;
  D.18468 = playground + D.18466;
  src_offset.4 = (sizetype) src_offset;
  D.18451 = src_offset.4 + 128;
  D.18454 = playground + D.18451;
  size.2 = (unsigned int) size;
  mono_gc_memmove_atomic (D.18468, D.18454, size.2);
  {
    D.18469 = memcmp (reference, playground, 2048);
    if (D.18469 == 0) goto <D.18470>; else goto <D.18471>;
    <D.18470>:
    goto <D.18472>;
    <D.18471>:
    __assert_fail ("!memcmp (reference, playground, POOL_SIZE)", "test-gc-memfuncs.c", 98, &__PRETTY_FUNCTION__);
    <D.18472>:
  }
  size = size + 1;
  <D.18421>:
  if (size <= 256) goto <D.18420>; else goto <D.18422>;
  <D.18422>:
  dest_offset = dest_offset + 1;
  <D.18424>:
  if (dest_offset <= 32) goto <D.18423>; else goto <D.18425>;
  <D.18425>:
  src_offset = src_offset + 1;
  <D.18427>:
  if (src_offset <= 32) goto <D.18426>; else goto <D.18428>;
  <D.18428>:
  D.18473 = 0;
  return D.18473;
}


bzero (void * __dest, size_t __len)
{
  unsigned int D.18475;

  D.18475 = __builtin_object_size (__dest, 0);
  __builtin___memset_chk (__dest, 0, __len, D.18475);
}


memcpy (void * restrict __dest, const void * restrict __src, size_t __len)
{
  void * D.18476;
  unsigned int D.18477;

  D.18477 = __builtin_object_size (__dest, 0);
  D.18476 = __builtin___memcpy_chk (__dest, __src, __len, D.18477);
  return D.18476;
}


memmove (void * __dest, const void * __src, size_t __len)
{
  void * D.18479;
  unsigned int D.18480;

  D.18480 = __builtin_object_size (__dest, 0);
  D.18479 = __builtin___memmove_chk (__dest, __src, __len, D.18480);
  return D.18479;
}


