main ()
{
  long int D.16389;
  unsigned int D.16390;
  long unsigned int D.16391;
  long unsigned int D.16392;
  long int * D.16393;
  long int D.16394;
  unsigned int i.0;
  sizetype D.16396;
  sizetype D.16397;
  unsigned char * D.16398;
  long unsigned int D.16399;
  unsigned char * D.16400;
  int D.16401;
  sizetype D.16405;
  sizetype D.16406;
  unsigned char * D.16407;
  sizetype D.16408;
  sizetype D.16409;
  unsigned char * D.16410;
  unsigned char * D.16411;
  unsigned char * D.16412;
  int D.16413;
  sizetype D.16417;
  unsigned char * D.16418;
  unsigned char * D.16419;
  int D.16420;
  sizetype D.16424;
  unsigned char * D.16425;
  unsigned char * D.16426;
  int D.16427;
  int D.16431;

  {
    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.16389 = time (0B);
    D.16390 = (unsigned int) D.16389;
    srandom (D.16390);
    long_random_mem = random_mem;
    i = 0;
    goto <D.16370>;
    <D.16369>:
    D.16391 = (long unsigned int) i;
    D.16392 = D.16391 * 8;
    D.16393 = long_random_mem + D.16392;
    D.16394 = random ();
    *D.16393 = D.16394;
    i = i + 1;
    <D.16370>:
    i.0 = (unsigned int) i;
    if (i.0 <= 255) goto <D.16369>; else goto <D.16371>;
    <D.16371>:
    offset = 0;
    goto <D.16377>;
    <D.16376>:
    size = 0;
    goto <D.16374>;
    <D.16373>:
    memcpy (reference, random_mem, 2048);
    memcpy (playground, random_mem, 2048);
    D.16396 = (sizetype) offset;
    D.16397 = D.16396 + 128;
    D.16398 = reference + D.16397;
    D.16399 = (long unsigned int) size;
    bzero (D.16398, D.16399);
    D.16396 = (sizetype) offset;
    D.16397 = D.16396 + 128;
    D.16400 = playground + D.16397;
    D.16399 = (long unsigned int) size;
    mono_gc_bzero_atomic (D.16400, D.16399);
    {
      D.16401 = memcmp (reference, playground, 2048);
      if (D.16401 == 0) goto <D.16402>; else goto <D.16403>;
      <D.16402>:
      goto <D.16404>;
      <D.16403>:
      __assert_fail ("!memcmp (reference, playground, POOL_SIZE)", "test-gc-memfuncs.c", 65, &__PRETTY_FUNCTION__);
      <D.16404>:
    }
    size = size + 1;
    <D.16374>:
    if (size <= 256) goto <D.16373>; else goto <D.16375>;
    <D.16375>:
    offset = offset + 1;
    <D.16377>:
    if (offset <= 64) goto <D.16376>; else goto <D.16378>;
    <D.16378>:
    src_offset = -32;
    goto <D.16386>;
    <D.16385>:
    dest_offset = -32;
    goto <D.16383>;
    <D.16382>:
    size = 0;
    goto <D.16380>;
    <D.16379>:
    memcpy (reference, random_mem, 2048);
    memcpy (playground, random_mem, 2048);
    D.16405 = (sizetype) dest_offset;
    D.16406 = D.16405 + 128;
    D.16407 = reference + D.16406;
    D.16408 = (sizetype) src_offset;
    D.16409 = D.16408 + 128;
    D.16410 = reference + D.16409;
    D.16399 = (long unsigned int) size;
    memmove (D.16407, D.16410, D.16399);
    D.16405 = (sizetype) dest_offset;
    D.16406 = D.16405 + 128;
    D.16411 = playground + D.16406;
    D.16408 = (sizetype) src_offset;
    D.16409 = D.16408 + 128;
    D.16412 = playground + D.16409;
    D.16399 = (long unsigned int) size;
    mono_gc_memmove_atomic (D.16411, D.16412, D.16399);
    {
      D.16413 = memcmp (reference, playground, 2048);
      if (D.16413 == 0) goto <D.16414>; else goto <D.16415>;
      <D.16414>:
      goto <D.16416>;
      <D.16415>:
      __assert_fail ("!memcmp (reference, playground, POOL_SIZE)", "test-gc-memfuncs.c", 80, &__PRETTY_FUNCTION__);
      <D.16416>:
    }
    memcpy (reference, random_mem, 2048);
    memcpy (playground, random_mem, 2048);
    D.16405 = (sizetype) dest_offset;
    D.16406 = D.16405 + 128;
    D.16407 = reference + D.16406;
    D.16408 = (sizetype) src_offset;
    D.16417 = D.16408 + 1024;
    D.16418 = reference + D.16417;
    D.16399 = (long unsigned int) size;
    memmove (D.16407, D.16418, D.16399);
    D.16405 = (sizetype) dest_offset;
    D.16406 = D.16405 + 128;
    D.16411 = playground + D.16406;
    D.16408 = (sizetype) src_offset;
    D.16417 = D.16408 + 1024;
    D.16419 = playground + D.16417;
    D.16399 = (long unsigned int) size;
    mono_gc_memmove_atomic (D.16411, D.16419, D.16399);
    {
      D.16420 = memcmp (reference, playground, 2048);
      if (D.16420 == 0) goto <D.16421>; else goto <D.16422>;
      <D.16421>:
      goto <D.16423>;
      <D.16422>:
      __assert_fail ("!memcmp (reference, playground, POOL_SIZE)", "test-gc-memfuncs.c", 89, &__PRETTY_FUNCTION__);
      <D.16423>:
    }
    memcpy (reference, random_mem, 2048);
    memcpy (playground, random_mem, 2048);
    D.16405 = (sizetype) dest_offset;
    D.16424 = D.16405 + 1024;
    D.16425 = reference + D.16424;
    D.16408 = (sizetype) src_offset;
    D.16409 = D.16408 + 128;
    D.16410 = reference + D.16409;
    D.16399 = (long unsigned int) size;
    memmove (D.16425, D.16410, D.16399);
    D.16405 = (sizetype) dest_offset;
    D.16424 = D.16405 + 1024;
    D.16426 = playground + D.16424;
    D.16408 = (sizetype) src_offset;
    D.16409 = D.16408 + 128;
    D.16412 = playground + D.16409;
    D.16399 = (long unsigned int) size;
    mono_gc_memmove_atomic (D.16426, D.16412, D.16399);
    {
      D.16427 = memcmp (reference, playground, 2048);
      if (D.16427 == 0) goto <D.16428>; else goto <D.16429>;
      <D.16428>:
      goto <D.16430>;
      <D.16429>:
      __assert_fail ("!memcmp (reference, playground, POOL_SIZE)", "test-gc-memfuncs.c", 98, &__PRETTY_FUNCTION__);
      <D.16430>:
    }
    size = size + 1;
    <D.16380>:
    if (size <= 256) goto <D.16379>; else goto <D.16381>;
    <D.16381>:
    dest_offset = dest_offset + 1;
    <D.16383>:
    if (dest_offset <= 32) goto <D.16382>; else goto <D.16384>;
    <D.16384>:
    src_offset = src_offset + 1;
    <D.16386>:
    if (src_offset <= 32) goto <D.16385>; else goto <D.16387>;
    <D.16387>:
    D.16431 = 0;
    return D.16431;
  }
  D.16431 = 0;
  return D.16431;
}


__attribute__((__artificial__, __gnu_inline__, __always_inline__, __leaf__, __nothrow__))
bzero (void * __dest, size_t __len)
{
  long unsigned int D.16433;

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


__attribute__((__artificial__, __gnu_inline__, __always_inline__, __nothrow__, __leaf__))
memcpy (void * restrict __dest, const void * restrict __src, size_t __len)
{
  void * D.16434;
  long unsigned int D.16435;

  D.16435 = __builtin_object_size (__dest, 0);
  D.16434 = __builtin___memcpy_chk (__dest, __src, __len, D.16435);
  return D.16434;
}


__attribute__((__artificial__, __gnu_inline__, __always_inline__, __nothrow__, __leaf__))
memmove (void * __dest, const void * __src, size_t __len)
{
  void * D.16437;
  long unsigned int D.16438;

  D.16438 = __builtin_object_size (__dest, 0);
  D.16437 = __builtin___memmove_chk (__dest, __src, __len, D.16438);
  return D.16437;
}


