main ()
{
  long int D.16245;
  unsigned int D.16246;
  long unsigned int D.16247;
  long unsigned int D.16248;
  long int * D.16249;
  long int D.16250;
  unsigned int i.0;
  long unsigned int D.16252;
  sizetype D.16253;
  sizetype D.16254;
  unsigned char * D.16255;
  unsigned char * D.16256;
  int D.16257;
  sizetype D.16260;
  sizetype D.16261;
  unsigned char * D.16262;
  sizetype D.16263;
  sizetype D.16264;
  unsigned char * D.16265;
  unsigned char * D.16266;
  unsigned char * D.16267;
  int D.16268;
  sizetype D.16271;
  unsigned char * D.16272;
  unsigned char * D.16273;
  int D.16274;
  sizetype D.16277;
  unsigned char * D.16278;
  unsigned char * D.16279;
  int D.16280;
  int D.16283;
  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.16245 = time (0B);
  D.16246 = (unsigned int) D.16245;
  srandom (D.16246);
  long_random_mem = random_mem;
  i = 0;
  goto <D.16226>;
  <D.16225>:
  D.16247 = (long unsigned int) i;
  D.16248 = D.16247 * 8;
  D.16249 = long_random_mem + D.16248;
  D.16250 = random ();
  *D.16249 = D.16250;
  i = i + 1;
  <D.16226>:
  i.0 = (unsigned int) i;
  if (i.0 <= 255) goto <D.16225>; else goto <D.16227>;
  <D.16227>:
  offset = 0;
  goto <D.16233>;
  <D.16232>:
  size = 0;
  goto <D.16230>;
  <D.16229>:
  memcpy (reference, random_mem, 2048);
  memcpy (playground, random_mem, 2048);
  D.16252 = (long unsigned int) size;
  D.16253 = (sizetype) offset;
  D.16254 = D.16253 + 128;
  D.16255 = reference + D.16254;
  bzero (D.16255, D.16252);
  D.16252 = (long unsigned int) size;
  D.16253 = (sizetype) offset;
  D.16254 = D.16253 + 128;
  D.16256 = playground + D.16254;
  mono_gc_bzero_atomic (D.16256, D.16252);
  D.16257 = memcmp (reference, playground, 2048);
  if (D.16257 != 0) goto <D.16258>; else goto <D.16259>;
  <D.16258>:
  __assert_fail ("!memcmp (reference, playground, 2048)", "test-gc-memfuncs.c", 65, &__PRETTY_FUNCTION__);
  <D.16259>:
  size = size + 1;
  <D.16230>:
  if (size <= 256) goto <D.16229>; else goto <D.16231>;
  <D.16231>:
  offset = offset + 1;
  <D.16233>:
  if (offset <= 64) goto <D.16232>; else goto <D.16234>;
  <D.16234>:
  src_offset = -32;
  goto <D.16242>;
  <D.16241>:
  dest_offset = -32;
  goto <D.16239>;
  <D.16238>:
  size = 0;
  goto <D.16236>;
  <D.16235>:
  memcpy (reference, random_mem, 2048);
  memcpy (playground, random_mem, 2048);
  D.16252 = (long unsigned int) size;
  D.16260 = (sizetype) src_offset;
  D.16261 = D.16260 + 128;
  D.16262 = reference + D.16261;
  D.16263 = (sizetype) dest_offset;
  D.16264 = D.16263 + 128;
  D.16265 = reference + D.16264;
  memmove (D.16265, D.16262, D.16252);
  D.16252 = (long unsigned int) size;
  D.16260 = (sizetype) src_offset;
  D.16261 = D.16260 + 128;
  D.16266 = playground + D.16261;
  D.16263 = (sizetype) dest_offset;
  D.16264 = D.16263 + 128;
  D.16267 = playground + D.16264;
  mono_gc_memmove_atomic (D.16267, D.16266, D.16252);
  D.16268 = memcmp (reference, playground, 2048);
  if (D.16268 != 0) goto <D.16269>; else goto <D.16270>;
  <D.16269>:
  __assert_fail ("!memcmp (reference, playground, 2048)", "test-gc-memfuncs.c", 80, &__PRETTY_FUNCTION__);
  <D.16270>:
  memcpy (reference, random_mem, 2048);
  memcpy (playground, random_mem, 2048);
  D.16252 = (long unsigned int) size;
  D.16260 = (sizetype) src_offset;
  D.16271 = D.16260 + 1024;
  D.16272 = reference + D.16271;
  D.16263 = (sizetype) dest_offset;
  D.16264 = D.16263 + 128;
  D.16265 = reference + D.16264;
  memmove (D.16265, D.16272, D.16252);
  D.16252 = (long unsigned int) size;
  D.16260 = (sizetype) src_offset;
  D.16271 = D.16260 + 1024;
  D.16273 = playground + D.16271;
  D.16263 = (sizetype) dest_offset;
  D.16264 = D.16263 + 128;
  D.16267 = playground + D.16264;
  mono_gc_memmove_atomic (D.16267, D.16273, D.16252);
  D.16274 = memcmp (reference, playground, 2048);
  if (D.16274 != 0) goto <D.16275>; else goto <D.16276>;
  <D.16275>:
  __assert_fail ("!memcmp (reference, playground, 2048)", "test-gc-memfuncs.c", 89, &__PRETTY_FUNCTION__);
  <D.16276>:
  memcpy (reference, random_mem, 2048);
  memcpy (playground, random_mem, 2048);
  D.16252 = (long unsigned int) size;
  D.16260 = (sizetype) src_offset;
  D.16261 = D.16260 + 128;
  D.16262 = reference + D.16261;
  D.16263 = (sizetype) dest_offset;
  D.16277 = D.16263 + 1024;
  D.16278 = reference + D.16277;
  memmove (D.16278, D.16262, D.16252);
  D.16252 = (long unsigned int) size;
  D.16260 = (sizetype) src_offset;
  D.16261 = D.16260 + 128;
  D.16266 = playground + D.16261;
  D.16263 = (sizetype) dest_offset;
  D.16277 = D.16263 + 1024;
  D.16279 = playground + D.16277;
  mono_gc_memmove_atomic (D.16279, D.16266, D.16252);
  D.16280 = memcmp (reference, playground, 2048);
  if (D.16280 != 0) goto <D.16281>; else goto <D.16282>;
  <D.16281>:
  __assert_fail ("!memcmp (reference, playground, 2048)", "test-gc-memfuncs.c", 98, &__PRETTY_FUNCTION__);
  <D.16282>:
  size = size + 1;
  <D.16236>:
  if (size <= 256) goto <D.16235>; else goto <D.16237>;
  <D.16237>:
  dest_offset = dest_offset + 1;
  <D.16239>:
  if (dest_offset <= 32) goto <D.16238>; else goto <D.16240>;
  <D.16240>:
  src_offset = src_offset + 1;
  <D.16242>:
  if (src_offset <= 32) goto <D.16241>; else goto <D.16243>;
  <D.16243>:
  D.16283 = 0;
  return D.16283;
}


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

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


memcpy (void * restrict __dest, const void * restrict __src, size_t __len)
{
  void * D.16286;
  long unsigned int D.16287;

  D.16287 = __builtin_object_size (__dest, 0);
  D.16286 = __builtin___memcpy_chk (__dest, __src, __len, D.16287);
  return D.16286;
}


memmove (void * __dest, const void * __src, size_t __len)
{
  void * D.16289;
  long unsigned int D.16290;

  D.16290 = __builtin_object_size (__dest, 0);
  D.16289 = __builtin___memmove_chk (__dest, __src, __len, D.16290);
  return D.16289;
}


