main ()
{
  long int D.15847;
  unsigned int D.15848;
  unsigned int i.0;
  unsigned int D.15850;
  long int * D.15851;
  long int D.15852;
  sizetype offset.1;
  sizetype D.15854;
  unsigned char * D.15855;
  unsigned int size.2;
  unsigned char * D.15857;
  int D.15858;
  sizetype dest_offset.3;
  sizetype D.15862;
  unsigned char * D.15863;
  sizetype src_offset.4;
  sizetype D.15865;
  unsigned char * D.15866;
  unsigned char * D.15867;
  unsigned char * D.15868;
  int D.15869;
  sizetype D.15872;
  unsigned char * D.15873;
  unsigned char * D.15874;
  int D.15875;
  sizetype D.15878;
  unsigned char * D.15879;
  unsigned char * D.15880;
  int D.15881;
  int D.15884;
  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.15847 = time (0B);
  D.15848 = (unsigned int) D.15847;
  srandom (D.15848);
  long_random_mem = random_mem;
  i = 0;
  goto <D.15828>;
  <D.15827>:
  i.0 = (unsigned int) i;
  D.15850 = i.0 * 4;
  D.15851 = long_random_mem + D.15850;
  D.15852 = random ();
  *D.15851 = D.15852;
  i = i + 1;
  <D.15828>:
  i.0 = (unsigned int) i;
  if (i.0 <= 511) goto <D.15827>; else goto <D.15829>;
  <D.15829>:
  offset = 0;
  goto <D.15835>;
  <D.15834>:
  size = 0;
  goto <D.15832>;
  <D.15831>:
  memcpy (reference, random_mem, 2048);
  memcpy (playground, random_mem, 2048);
  offset.1 = (sizetype) offset;
  D.15854 = offset.1 + 128;
  D.15855 = reference + D.15854;
  size.2 = (unsigned int) size;
  bzero (D.15855, size.2);
  offset.1 = (sizetype) offset;
  D.15854 = offset.1 + 128;
  D.15857 = playground + D.15854;
  size.2 = (unsigned int) size;
  mono_gc_bzero_atomic (D.15857, size.2);
  D.15858 = memcmp (reference, playground, 2048);
  if (D.15858 != 0) goto <D.15859>; else goto <D.15860>;
  <D.15859>:
  __assert_fail ("!memcmp (reference, playground, 2048)", "test-gc-memfuncs.c", 65, &__PRETTY_FUNCTION__);
  <D.15860>:
  size = size + 1;
  <D.15832>:
  if (size <= 256) goto <D.15831>; else goto <D.15833>;
  <D.15833>:
  offset = offset + 1;
  <D.15835>:
  if (offset <= 64) goto <D.15834>; else goto <D.15836>;
  <D.15836>:
  src_offset = -32;
  goto <D.15844>;
  <D.15843>:
  dest_offset = -32;
  goto <D.15841>;
  <D.15840>:
  size = 0;
  goto <D.15838>;
  <D.15837>:
  memcpy (reference, random_mem, 2048);
  memcpy (playground, random_mem, 2048);
  dest_offset.3 = (sizetype) dest_offset;
  D.15862 = dest_offset.3 + 128;
  D.15863 = reference + D.15862;
  src_offset.4 = (sizetype) src_offset;
  D.15865 = src_offset.4 + 128;
  D.15866 = reference + D.15865;
  size.2 = (unsigned int) size;
  memmove (D.15863, D.15866, size.2);
  dest_offset.3 = (sizetype) dest_offset;
  D.15862 = dest_offset.3 + 128;
  D.15867 = playground + D.15862;
  src_offset.4 = (sizetype) src_offset;
  D.15865 = src_offset.4 + 128;
  D.15868 = playground + D.15865;
  size.2 = (unsigned int) size;
  mono_gc_memmove_atomic (D.15867, D.15868, size.2);
  D.15869 = memcmp (reference, playground, 2048);
  if (D.15869 != 0) goto <D.15870>; else goto <D.15871>;
  <D.15870>:
  __assert_fail ("!memcmp (reference, playground, 2048)", "test-gc-memfuncs.c", 80, &__PRETTY_FUNCTION__);
  <D.15871>:
  memcpy (reference, random_mem, 2048);
  memcpy (playground, random_mem, 2048);
  dest_offset.3 = (sizetype) dest_offset;
  D.15862 = dest_offset.3 + 128;
  D.15863 = reference + D.15862;
  src_offset.4 = (sizetype) src_offset;
  D.15872 = src_offset.4 + 1024;
  D.15873 = reference + D.15872;
  size.2 = (unsigned int) size;
  memmove (D.15863, D.15873, size.2);
  dest_offset.3 = (sizetype) dest_offset;
  D.15862 = dest_offset.3 + 128;
  D.15867 = playground + D.15862;
  src_offset.4 = (sizetype) src_offset;
  D.15872 = src_offset.4 + 1024;
  D.15874 = playground + D.15872;
  size.2 = (unsigned int) size;
  mono_gc_memmove_atomic (D.15867, D.15874, size.2);
  D.15875 = memcmp (reference, playground, 2048);
  if (D.15875 != 0) goto <D.15876>; else goto <D.15877>;
  <D.15876>:
  __assert_fail ("!memcmp (reference, playground, 2048)", "test-gc-memfuncs.c", 89, &__PRETTY_FUNCTION__);
  <D.15877>:
  memcpy (reference, random_mem, 2048);
  memcpy (playground, random_mem, 2048);
  dest_offset.3 = (sizetype) dest_offset;
  D.15878 = dest_offset.3 + 1024;
  D.15879 = reference + D.15878;
  src_offset.4 = (sizetype) src_offset;
  D.15865 = src_offset.4 + 128;
  D.15866 = reference + D.15865;
  size.2 = (unsigned int) size;
  memmove (D.15879, D.15866, size.2);
  dest_offset.3 = (sizetype) dest_offset;
  D.15878 = dest_offset.3 + 1024;
  D.15880 = playground + D.15878;
  src_offset.4 = (sizetype) src_offset;
  D.15865 = src_offset.4 + 128;
  D.15868 = playground + D.15865;
  size.2 = (unsigned int) size;
  mono_gc_memmove_atomic (D.15880, D.15868, size.2);
  D.15881 = memcmp (reference, playground, 2048);
  if (D.15881 != 0) goto <D.15882>; else goto <D.15883>;
  <D.15882>:
  __assert_fail ("!memcmp (reference, playground, 2048)", "test-gc-memfuncs.c", 98, &__PRETTY_FUNCTION__);
  <D.15883>:
  size = size + 1;
  <D.15838>:
  if (size <= 256) goto <D.15837>; else goto <D.15839>;
  <D.15839>:
  dest_offset = dest_offset + 1;
  <D.15841>:
  if (dest_offset <= 32) goto <D.15840>; else goto <D.15842>;
  <D.15842>:
  src_offset = src_offset + 1;
  <D.15844>:
  if (src_offset <= 32) goto <D.15843>; else goto <D.15845>;
  <D.15845>:
  D.15884 = 0;
  return D.15884;
}


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

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


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

  D.15888 = __builtin_object_size (__dest, 0);
  D.15887 = __builtin___memcpy_chk (__dest, __src, __len, D.15888);
  return D.15887;
}


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

  D.15891 = __builtin_object_size (__dest, 0);
  D.15890 = __builtin___memmove_chk (__dest, __src, __len, D.15891);
  return D.15890;
}


