main ()
{
  long int D.15881;
  unsigned int D.15882;
  unsigned int i.0;
  unsigned int D.15884;
  long int * D.15885;
  long int D.15886;
  unsigned int size.1;
  sizetype offset.2;
  sizetype D.15889;
  unsigned char * D.15890;
  unsigned char * D.15891;
  int D.15892;
  sizetype src_offset.3;
  sizetype D.15896;
  unsigned char * D.15897;
  sizetype dest_offset.4;
  sizetype D.15899;
  unsigned char * D.15900;
  unsigned char * D.15901;
  unsigned char * D.15902;
  int D.15903;
  sizetype D.15906;
  unsigned char * D.15907;
  unsigned char * D.15908;
  int D.15909;
  sizetype D.15912;
  unsigned char * D.15913;
  unsigned char * D.15914;
  int D.15915;
  int D.15918;
  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.15881 = time (0B);
  D.15882 = (unsigned int) D.15881;
  srandom (D.15882);
  long_random_mem = random_mem;
  i = 0;
  goto <D.15862>;
  <D.15861>:
  i.0 = (unsigned int) i;
  D.15884 = i.0 * 4;
  D.15885 = long_random_mem + D.15884;
  D.15886 = random ();
  *D.15885 = D.15886;
  i = i + 1;
  <D.15862>:
  i.0 = (unsigned int) i;
  if (i.0 <= 511) goto <D.15861>; else goto <D.15863>;
  <D.15863>:
  offset = 0;
  goto <D.15869>;
  <D.15868>:
  size = 0;
  goto <D.15866>;
  <D.15865>:
  memcpy (reference, random_mem, 2048);
  memcpy (playground, random_mem, 2048);
  size.1 = (unsigned int) size;
  offset.2 = (sizetype) offset;
  D.15889 = offset.2 + 128;
  D.15890 = reference + D.15889;
  bzero (D.15890, size.1);
  size.1 = (unsigned int) size;
  offset.2 = (sizetype) offset;
  D.15889 = offset.2 + 128;
  D.15891 = playground + D.15889;
  mono_gc_bzero_atomic (D.15891, size.1);
  D.15892 = memcmp (reference, playground, 2048);
  if (D.15892 != 0) goto <D.15893>; else goto <D.15894>;
  <D.15893>:
  __assert_fail ("!memcmp (reference, playground, 2048)", "test-gc-memfuncs.c", 65, &__PRETTY_FUNCTION__);
  <D.15894>:
  size = size + 1;
  <D.15866>:
  if (size <= 256) goto <D.15865>; else goto <D.15867>;
  <D.15867>:
  offset = offset + 1;
  <D.15869>:
  if (offset <= 64) goto <D.15868>; else goto <D.15870>;
  <D.15870>:
  src_offset = -32;
  goto <D.15878>;
  <D.15877>:
  dest_offset = -32;
  goto <D.15875>;
  <D.15874>:
  size = 0;
  goto <D.15872>;
  <D.15871>:
  memcpy (reference, random_mem, 2048);
  memcpy (playground, random_mem, 2048);
  size.1 = (unsigned int) size;
  src_offset.3 = (sizetype) src_offset;
  D.15896 = src_offset.3 + 128;
  D.15897 = reference + D.15896;
  dest_offset.4 = (sizetype) dest_offset;
  D.15899 = dest_offset.4 + 128;
  D.15900 = reference + D.15899;
  memmove (D.15900, D.15897, size.1);
  size.1 = (unsigned int) size;
  src_offset.3 = (sizetype) src_offset;
  D.15896 = src_offset.3 + 128;
  D.15901 = playground + D.15896;
  dest_offset.4 = (sizetype) dest_offset;
  D.15899 = dest_offset.4 + 128;
  D.15902 = playground + D.15899;
  mono_gc_memmove_atomic (D.15902, D.15901, size.1);
  D.15903 = memcmp (reference, playground, 2048);
  if (D.15903 != 0) goto <D.15904>; else goto <D.15905>;
  <D.15904>:
  __assert_fail ("!memcmp (reference, playground, 2048)", "test-gc-memfuncs.c", 80, &__PRETTY_FUNCTION__);
  <D.15905>:
  memcpy (reference, random_mem, 2048);
  memcpy (playground, random_mem, 2048);
  size.1 = (unsigned int) size;
  src_offset.3 = (sizetype) src_offset;
  D.15906 = src_offset.3 + 1024;
  D.15907 = reference + D.15906;
  dest_offset.4 = (sizetype) dest_offset;
  D.15899 = dest_offset.4 + 128;
  D.15900 = reference + D.15899;
  memmove (D.15900, D.15907, size.1);
  size.1 = (unsigned int) size;
  src_offset.3 = (sizetype) src_offset;
  D.15906 = src_offset.3 + 1024;
  D.15908 = playground + D.15906;
  dest_offset.4 = (sizetype) dest_offset;
  D.15899 = dest_offset.4 + 128;
  D.15902 = playground + D.15899;
  mono_gc_memmove_atomic (D.15902, D.15908, size.1);
  D.15909 = memcmp (reference, playground, 2048);
  if (D.15909 != 0) goto <D.15910>; else goto <D.15911>;
  <D.15910>:
  __assert_fail ("!memcmp (reference, playground, 2048)", "test-gc-memfuncs.c", 89, &__PRETTY_FUNCTION__);
  <D.15911>:
  memcpy (reference, random_mem, 2048);
  memcpy (playground, random_mem, 2048);
  size.1 = (unsigned int) size;
  src_offset.3 = (sizetype) src_offset;
  D.15896 = src_offset.3 + 128;
  D.15897 = reference + D.15896;
  dest_offset.4 = (sizetype) dest_offset;
  D.15912 = dest_offset.4 + 1024;
  D.15913 = reference + D.15912;
  memmove (D.15913, D.15897, size.1);
  size.1 = (unsigned int) size;
  src_offset.3 = (sizetype) src_offset;
  D.15896 = src_offset.3 + 128;
  D.15901 = playground + D.15896;
  dest_offset.4 = (sizetype) dest_offset;
  D.15912 = dest_offset.4 + 1024;
  D.15914 = playground + D.15912;
  mono_gc_memmove_atomic (D.15914, D.15901, size.1);
  D.15915 = memcmp (reference, playground, 2048);
  if (D.15915 != 0) goto <D.15916>; else goto <D.15917>;
  <D.15916>:
  __assert_fail ("!memcmp (reference, playground, 2048)", "test-gc-memfuncs.c", 98, &__PRETTY_FUNCTION__);
  <D.15917>:
  size = size + 1;
  <D.15872>:
  if (size <= 256) goto <D.15871>; else goto <D.15873>;
  <D.15873>:
  dest_offset = dest_offset + 1;
  <D.15875>:
  if (dest_offset <= 32) goto <D.15874>; else goto <D.15876>;
  <D.15876>:
  src_offset = src_offset + 1;
  <D.15878>:
  if (src_offset <= 32) goto <D.15877>; else goto <D.15879>;
  <D.15879>:
  D.15918 = 0;
  return D.15918;
}


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

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


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

  D.15922 = __builtin_object_size (__dest, 0);
  D.15921 = __builtin___memcpy_chk (__dest, __src, __len, D.15922);
  return D.15921;
}


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

  D.15925 = __builtin_object_size (__dest, 0);
  D.15924 = __builtin___memmove_chk (__dest, __src, __len, D.15925);
  return D.15924;
}


