describe_ptr (char * ptr)
{
  describe_pointer (ptr, 1);
}


describe_pointer (char * ptr, gboolean need_setup)
{
  int D.18396;
  char * start.0;
  char * start.1;
  long unsigned int D.18403;
  long unsigned int D.18404;
  int D.18406;
  long int ptr.2;
  long int start.3;
  long int D.18414;
  int D.18415;
  gboolean (*<T2d15>) (char *, char * *) D.18417;
  int D.18418;
  struct MonoVTable * (*<T2d2f>) (char *) D.18429;
  gboolean (*<T2c96>) (char *) D.18431;
  int D.18432;
  long unsigned int D.18436;
  char * iftmp.4;
  long unsigned int D.18440;
  int D.18448;
  struct MonoClass * D.18451;
  const char * D.18452;
  long int desc.5;
  int D.18454;
  const char * D.18455;
  unsigned int D.18456;
  int D.18457;
  struct MonoVTable * vtable;
  mword desc;
  int type;
  char * start;
  char * forwarded;
  mword size;
  void restart = <<< error >>>;
  void bridge = <<< error >>>;

  try
    {
      restart:
      D.18396 = sgen_ptr_in_nursery (ptr);
      if (D.18396 != 0) goto <D.18397>; else goto <D.18398>;
      <D.18397>:
      start.0 = describe_nursery_ptr (ptr, need_setup);
      start = start.0;
      start.1 = start;
      if (start.1 == 0B) goto <D.18401>; else goto <D.18402>;
      <D.18401>:
      return;
      <D.18402>:
      ptr = start;
      D.18403 = MEM[(mword *)ptr];
      D.18404 = D.18403 & 18446744073709551612;
      vtable = (struct MonoVTable *) D.18404;
      goto <D.18405>;
      <D.18398>:
      D.18406 = sgen_ptr_is_in_los (ptr, &start);
      if (D.18406 != 0) goto <D.18407>; else goto <D.18408>;
      <D.18407>:
      start.1 = start;
      if (ptr == start.1) goto <D.18409>; else goto <D.18410>;
      <D.18409>:
      start.1 = start;
      printf ("Pointer is the start of object %p in LOS space.\n", start.1);
      goto <D.18411>;
      <D.18410>:
      start.1 = start;
      ptr.2 = (long int) ptr;
      start.1 = start;
      start.3 = (long int) start.1;
      D.18414 = ptr.2 - start.3;
      D.18415 = (int) D.18414;
      printf ("Pointer is at offset 0x%x of object %p in LOS space.\n", D.18415, start.1);
      <D.18411>:
      ptr = start;
      mono_sgen_los_describe_pointer (ptr);
      D.18403 = MEM[(mword *)ptr];
      D.18404 = D.18403 & 18446744073709551612;
      vtable = (struct MonoVTable *) D.18404;
      goto <D.18416>;
      <D.18408>:
      D.18417 = major_collector.ptr_is_in_non_pinned_space;
      D.18418 = D.18417 (ptr, &start);
      if (D.18418 != 0) goto <D.18419>; else goto <D.18420>;
      <D.18419>:
      start.1 = start;
      if (ptr == start.1) goto <D.18421>; else goto <D.18422>;
      <D.18421>:
      start.1 = start;
      printf ("Pointer is the start of object %p in oldspace.\n", start.1);
      goto <D.18423>;
      <D.18422>:
      start.1 = start;
      if (start.1 != 0B) goto <D.18424>; else goto <D.18425>;
      <D.18424>:
      start.1 = start;
      ptr.2 = (long int) ptr;
      start.1 = start;
      start.3 = (long int) start.1;
      D.18414 = ptr.2 - start.3;
      D.18415 = (int) D.18414;
      printf ("Pointer is at offset 0x%x of object %p in oldspace.\n", D.18415, start.1);
      goto <D.18426>;
      <D.18425>:
      printf ("Pointer inside oldspace.\n");
      <D.18426>:
      <D.18423>:
      start.1 = start;
      if (start.1 != 0B) goto <D.18427>; else goto <D.18428>;
      <D.18427>:
      ptr = start;
      <D.18428>:
      D.18429 = major_collector.describe_pointer;
      vtable = D.18429 (ptr);
      goto <D.18430>;
      <D.18420>:
      D.18431 = major_collector.obj_is_from_pinned_alloc;
      D.18432 = D.18431 (ptr);
      if (D.18432 != 0) goto <D.18433>; else goto <D.18434>;
      <D.18433>:
      printf ("Pointer is inside a pinned chunk.\n");
      D.18403 = MEM[(mword *)ptr];
      D.18404 = D.18403 & 18446744073709551612;
      vtable = (struct MonoVTable *) D.18404;
      goto <D.18435>;
      <D.18434>:
      printf ("Pointer unknown.\n");
      return;
      <D.18435>:
      <D.18430>:
      <D.18416>:
      <D.18405>:
      D.18403 = MEM[(mword *)ptr];
      D.18436 = D.18403 & 2;
      if (D.18436 != 0) goto <D.18437>; else goto <D.18438>;
      <D.18437>:
      printf ("Object is pinned.\n");
      <D.18438>:
      D.18403 = MEM[(mword *)ptr];
      D.18440 = D.18403 & 1;
      if (D.18440 != 0) goto <D.18441>; else goto <D.18442>;
      <D.18441>:
      D.18403 = MEM[(mword *)ptr];
      D.18404 = D.18403 & 18446744073709551612;
      iftmp.4 = (char *) D.18404;
      goto <D.18443>;
      <D.18442>:
      iftmp.4 = 0B;
      <D.18443>:
      forwarded = iftmp.4;
      if (forwarded != 0B) goto <D.18444>; else goto <D.18445>;
      <D.18444>:
      printf ("Object is forwarded to %p:\n", forwarded);
      ptr = forwarded;
      goto restart;
      <D.18445>:
      printf ("VTable: %p\n", vtable);
      if (vtable == 0B) goto <D.18446>; else goto <D.18447>;
      <D.18446>:
      printf ("VTable is invalid (empty).\n");
      goto bridge;
      <D.18447>:
      D.18448 = sgen_ptr_in_nursery (vtable);
      if (D.18448 != 0) goto <D.18449>; else goto <D.18450>;
      <D.18449>:
      printf ("VTable is invalid (points inside nursery).\n");
      goto bridge;
      <D.18450>:
      D.18451 = vtable->klass;
      D.18452 = D.18451->name;
      printf ("Class: %s\n", D.18452);
      desc = MEM[(struct GCVTable *)vtable].desc;
      desc.5 = (long int) desc;
      printf ("Descriptor: %lx\n", desc.5);
      D.18454 = (int) desc;
      type = D.18454 & 7;
      D.18455 = descriptor_types[type];
      printf ("Descriptor type: %d (%s)\n", type, D.18455);
      D.18456 = sgen_safe_object_get_size (ptr);
      size = (mword) D.18456;
      D.18457 = (int) size;
      printf ("Size: %d\n", D.18457);
      bridge:
      sgen_bridge_describe_pointer (ptr);
    }
  finally
    {
      start = {CLOBBER};
    }
}


describe_nursery_ptr (char * ptr, gboolean need_setup)
{
  char * * valid_nursery_objects.6;
  long unsigned int D.18464;
  long unsigned int D.18465;
  char * * D.18466;
  char * D.18467;
  int valid_nursery_object_count.7;
  unsigned int D.18473;
  sizetype D.18474;
  char * D.18475;
  int gc_debug_level.8;
  _Bool D.18477;
  long int D.18478;
  long int D.18479;
  struct FILE * gc_debug_file.9;
  char * D.18483;
  long int ptr.10;
  long int obj.11;
  long int D.18493;
  int i;

  if (need_setup != 0) goto <D.18461>; else goto <D.18462>;
  <D.18461>:
  setup_valid_nursery_objects ();
  <D.18462>:
  i = 0;
  goto <D.18117>;
  <D.18116>:
  valid_nursery_objects.6 = valid_nursery_objects;
  D.18464 = (long unsigned int) i;
  D.18465 = D.18464 * 8;
  D.18466 = valid_nursery_objects.6 + D.18465;
  D.18467 = *D.18466;
  if (D.18467 >= ptr) goto <D.18115>; else goto <D.18468>;
  <D.18468>:
  i = i + 1;
  <D.18117>:
  valid_nursery_object_count.7 = valid_nursery_object_count;
  if (i < valid_nursery_object_count.7) goto <D.18116>; else goto <D.18115>;
  <D.18115>:
  valid_nursery_object_count.7 = valid_nursery_object_count;
  if (i >= valid_nursery_object_count.7) goto <D.18470>; else goto <D.18472>;
  <D.18472>:
  valid_nursery_objects.6 = valid_nursery_objects;
  D.18464 = (long unsigned int) i;
  D.18465 = D.18464 * 8;
  D.18466 = valid_nursery_objects.6 + D.18465;
  D.18467 = *D.18466;
  valid_nursery_objects.6 = valid_nursery_objects;
  D.18464 = (long unsigned int) i;
  D.18465 = D.18464 * 8;
  D.18466 = valid_nursery_objects.6 + D.18465;
  D.18467 = *D.18466;
  D.18473 = sgen_safe_object_get_size (D.18467);
  D.18474 = (sizetype) D.18473;
  D.18475 = D.18467 + D.18474;
  if (D.18475 < ptr) goto <D.18470>; else goto <D.18471>;
  <D.18470>:
  gc_debug_level.8 = gc_debug_level;
  D.18477 = gc_debug_level.8 >= 0;
  D.18478 = (long int) D.18477;
  D.18479 = __builtin_expect (D.18478, 0);
  if (D.18479 != 0) goto <D.18480>; else goto <D.18481>;
  <D.18480>:
  gc_debug_file.9 = gc_debug_file;
  fprintf (gc_debug_file.9, "nursery-ptr (unalloc\'d-memory)\n\n");
  gc_debug_file.9 = gc_debug_file;
  fflush (gc_debug_file.9);
  <D.18481>:
  D.18483 = 0B;
  return D.18483;
  <D.18471>:
  {
    char * obj;

    valid_nursery_objects.6 = valid_nursery_objects;
    D.18464 = (long unsigned int) i;
    D.18465 = D.18464 * 8;
    D.18466 = valid_nursery_objects.6 + D.18465;
    obj = *D.18466;
    if (obj == ptr) goto <D.18484>; else goto <D.18485>;
    <D.18484>:
    gc_debug_level.8 = gc_debug_level;
    D.18477 = gc_debug_level.8 >= 0;
    D.18478 = (long int) D.18477;
    D.18479 = __builtin_expect (D.18478, 0);
    if (D.18479 != 0) goto <D.18486>; else goto <D.18487>;
    <D.18486>:
    gc_debug_file.9 = gc_debug_file;
    fprintf (gc_debug_file.9, "nursery-ptr\n\n");
    gc_debug_file.9 = gc_debug_file;
    fflush (gc_debug_file.9);
    <D.18487>:
    goto <D.18488>;
    <D.18485>:
    gc_debug_level.8 = gc_debug_level;
    D.18477 = gc_debug_level.8 >= 0;
    D.18478 = (long int) D.18477;
    D.18479 = __builtin_expect (D.18478, 0);
    if (D.18479 != 0) goto <D.18489>; else goto <D.18490>;
    <D.18489>:
    ptr.10 = (long int) ptr;
    obj.11 = (long int) obj;
    D.18493 = ptr.10 - obj.11;
    gc_debug_file.9 = gc_debug_file;
    fprintf (gc_debug_file.9, "nursery-ptr (interior-ptr offset %td)\n\n", D.18493);
    gc_debug_file.9 = gc_debug_file;
    fflush (gc_debug_file.9);
    <D.18490>:
    <D.18488>:
    D.18483 = obj;
    return D.18483;
  }
}


setup_valid_nursery_objects ()
{
  char * * valid_nursery_objects.12;
  int sgen_nursery_size.13;
  long unsigned int D.18499;
  void * valid_nursery_objects.14;
  struct GCMemSection * nursery_section.15;
  char * D.18502;
  char * D.18503;

  valid_nursery_objects.12 = valid_nursery_objects;
  if (valid_nursery_objects.12 == 0B) goto <D.18496>; else goto <D.18497>;
  <D.18496>:
  sgen_nursery_size.13 = sgen_nursery_size;
  D.18499 = (long unsigned int) sgen_nursery_size.13;
  valid_nursery_objects.14 = sgen_alloc_os_memory (D.18499, 2, "debugging data");
  valid_nursery_objects = valid_nursery_objects.14;
  <D.18497>:
  valid_nursery_object_count = 0;
  nursery_section.15 = nursery_section;
  D.18502 = nursery_section.15->end_data;
  nursery_section.15 = nursery_section;
  D.18503 = nursery_section.15->data;
  sgen_scan_area_with_callback (D.18503, D.18502, setup_mono_sgen_scan_area_with_callback, 0B, 0);
}


setup_mono_sgen_scan_area_with_callback (char * object, size_t size, void * data)
{
  char * * valid_nursery_objects.16;
  int valid_nursery_object_count.17;
  int valid_nursery_object_count.18;
  int valid_nursery_object_count.19;
  long unsigned int D.18508;
  long unsigned int D.18509;
  char * * D.18510;

  valid_nursery_objects.16 = valid_nursery_objects;
  valid_nursery_object_count.17 = valid_nursery_object_count;
  valid_nursery_object_count.18 = valid_nursery_object_count.17;
  valid_nursery_object_count.19 = valid_nursery_object_count.18 + 1;
  valid_nursery_object_count = valid_nursery_object_count.19;
  D.18508 = (long unsigned int) valid_nursery_object_count.18;
  D.18509 = D.18508 * 8;
  D.18510 = valid_nursery_objects.16 + D.18509;
  *D.18510 = object;
}


fprintf (struct FILE * restrict __stream, const char * restrict __fmt)
{
  int D.18511;

  D.18511 = __fprintf_chk (__stream, 1, __fmt, __builtin_va_arg_pack ());
  return D.18511;
}


sgen_ptr_in_nursery (void * p)
{
  gboolean D.18513;
  int sgen_nursery_bits.20;
  int D.18515;
  int D.18516;
  long unsigned int D.18517;
  long unsigned int p.21;
  long unsigned int D.18519;
  char * sgen_nursery_start.22;
  long unsigned int sgen_nursery_start.23;
  _Bool D.18522;

  sgen_nursery_bits.20 = sgen_nursery_bits;
  D.18515 = 1 << sgen_nursery_bits.20;
  D.18516 = -D.18515;
  D.18517 = (long unsigned int) D.18516;
  p.21 = (long unsigned int) p;
  D.18519 = D.18517 & p.21;
  sgen_nursery_start.22 = sgen_nursery_start;
  sgen_nursery_start.23 = (long unsigned int) sgen_nursery_start.22;
  D.18522 = D.18519 == sgen_nursery_start.23;
  D.18513 = (gboolean) D.18522;
  return D.18513;
}


sgen_safe_object_get_size (struct MonoObject * obj)
{
  char * iftmp.24;
  long unsigned int D.18525;
  long unsigned int D.18526;
  long unsigned int D.18529;
  guint D.18533;
  struct MonoVTable * D.18534;
  char * forwarded;

  D.18525 = MEM[(mword *)obj];
  D.18526 = D.18525 & 1;
  if (D.18526 != 0) goto <D.18527>; else goto <D.18528>;
  <D.18527>:
  D.18525 = MEM[(mword *)obj];
  D.18529 = D.18525 & 18446744073709551612;
  iftmp.24 = (char *) D.18529;
  goto <D.18530>;
  <D.18528>:
  iftmp.24 = 0B;
  <D.18530>:
  forwarded = iftmp.24;
  if (forwarded != 0B) goto <D.18531>; else goto <D.18532>;
  <D.18531>:
  obj = forwarded;
  <D.18532>:
  D.18525 = MEM[(mword *)obj];
  D.18529 = D.18525 & 18446744073709551612;
  D.18534 = (struct MonoVTable *) D.18529;
  D.18533 = sgen_par_object_get_size (D.18534, obj);
  return D.18533;
}


sgen_par_object_get_size (struct MonoVTable * vtable, struct MonoObject * o)
{
  void * D.18536;
  long unsigned int D.18537;
  guint D.18542;
  int D.18543;
  int D.18544;
  unsigned int D.18545;
  long unsigned int D.18548;
  int D.18549;
  unsigned int D.18550;
  unsigned int element_size.25;
  unsigned int D.18552;
  long unsigned int D.18553;
  long unsigned int D.18554;
  struct MonoClass * D.18557;
  unsigned char D.18558;
  long unsigned int D.18559;
  long unsigned int D.18560;
  mword descr;
  mword type;

  D.18536 = vtable->gc_descr;
  descr = (mword) D.18536;
  type = descr & 7;
  D.18537 = type + 18446744073709551615;
  if (D.18537 <= 1) goto <D.18538>; else goto <D.18539>;
  <D.18538>:
  {
    mword size;

    size = descr & 65528;
    if (size == 0) goto <D.18540>; else goto <D.18541>;
    <D.18540>:
    D.18543 = MEM[(struct MonoString *)o].length;
    D.18544 = D.18543 * 2;
    D.18545 = (unsigned int) D.18544;
    D.18542 = D.18545 + 26;
    return D.18542;
    <D.18541>:
    D.18542 = (guint) size;
    return D.18542;
  }
  <D.18539>:
  if (type == 4) goto <D.18546>; else goto <D.18547>;
  <D.18546>:
  {
    int element_size;
    struct MonoArray * array;
    size_t size;

    D.18548 = descr >> 3;
    D.18549 = (int) D.18548;
    element_size = D.18549 & 1023;
    array = o;
    D.18550 = array->max_length;
    element_size.25 = (unsigned int) element_size;
    D.18552 = D.18550 * element_size.25;
    D.18553 = (long unsigned int) D.18552;
    size = D.18553 + 32;
    D.18554 = descr & 8192;
    if (D.18554 != 0) goto <D.18555>; else goto <D.18556>;
    <D.18555>:
    size = size + 3;
    size = size & 18446744073709551612;
    D.18557 = vtable->klass;
    D.18558 = D.18557->rank;
    D.18559 = (long unsigned int) D.18558;
    D.18560 = D.18559 * 8;
    size = D.18560 + size;
    <D.18556>:
    D.18542 = (guint) size;
    return D.18542;
  }
  <D.18547>:
  D.18542 = slow_object_get_size (vtable, o);
  return D.18542;
}


slow_object_get_size (struct MonoVTable * vtable, struct MonoObject * o)
{
  struct MonoClass * D.18562;
  guint D.18565;
  int D.18566;
  int D.18567;
  unsigned int D.18568;
  unsigned char D.18569;
  int D.18572;
  unsigned int D.18573;
  unsigned int D.18574;
  unsigned int D.18575;
  long unsigned int D.18576;
  struct MonoArrayBounds * D.18577;
  _Bool D.18578;
  long int D.18579;
  long int D.18580;
  long unsigned int D.18583;
  long unsigned int D.18584;
  int D.18585;
  struct MonoClass * klass;

  klass = vtable->klass;
  D.18562 = mono_defaults.string_class;
  if (D.18562 == klass) goto <D.18563>; else goto <D.18564>;
  <D.18563>:
  D.18566 = MEM[(struct MonoString *)o].length;
  D.18567 = D.18566 * 2;
  D.18568 = (unsigned int) D.18567;
  D.18565 = D.18568 + 26;
  return D.18565;
  <D.18564>:
  D.18569 = klass->rank;
  if (D.18569 != 0) goto <D.18570>; else goto <D.18571>;
  <D.18570>:
  {
    struct MonoArray * array;
    size_t size;

    array = o;
    D.18572 = klass->sizes.element_size;
    D.18573 = (unsigned int) D.18572;
    D.18574 = array->max_length;
    D.18575 = D.18573 * D.18574;
    D.18576 = (long unsigned int) D.18575;
    size = D.18576 + 32;
    D.18577 = array->bounds;
    D.18578 = D.18577 != 0B;
    D.18579 = (long int) D.18578;
    D.18580 = __builtin_expect (D.18579, 0);
    if (D.18580 != 0) goto <D.18581>; else goto <D.18582>;
    <D.18581>:
    size = size + 3;
    size = size & 18446744073709551612;
    D.18569 = klass->rank;
    D.18583 = (long unsigned int) D.18569;
    D.18584 = D.18583 * 8;
    size = D.18584 + size;
    <D.18582>:
    D.18565 = (guint) size;
    return D.18565;
  }
  <D.18571>:
  D.18585 = klass->instance_size;
  D.18565 = (guint) D.18585;
  return D.18565;
}


printf (const char * restrict __fmt)
{
  int D.18587;

  D.18587 = __printf_chk (1, __fmt, __builtin_va_arg_pack ());
  return D.18587;
}


sgen_check_consistency ()
{
  int gc_debug_level.26;
  _Bool D.18590;
  long int D.18591;
  long int D.18592;
  struct FILE * gc_debug_file.27;
  void (*<T2cf0>) (gboolean, gboolean, void (*IterateObjectCallbackFunc) (char *, size_t, void *), void *) D.18596;
  int missing_remsets.28;
  _Bool D.18602;
  long int D.18603;
  long int D.18604;

  missing_remsets = 0;
  gc_debug_level.26 = gc_debug_level;
  D.18590 = gc_debug_level.26 > 0;
  D.18591 = (long int) D.18590;
  D.18592 = __builtin_expect (D.18591, 0);
  if (D.18592 != 0) goto <D.18593>; else goto <D.18594>;
  <D.18593>:
  gc_debug_file.27 = gc_debug_file;
  fprintf (gc_debug_file.27, "Begin heap consistency check...\n");
  gc_debug_file.27 = gc_debug_file;
  fflush (gc_debug_file.27);
  <D.18594>:
  D.18596 = major_collector.iterate_objects;
  D.18596 (1, 1, check_consistency_callback, 0B);
  sgen_los_iterate_objects (check_consistency_callback, 0B);
  gc_debug_level.26 = gc_debug_level;
  D.18590 = gc_debug_level.26 > 0;
  D.18591 = (long int) D.18590;
  D.18592 = __builtin_expect (D.18591, 0);
  if (D.18592 != 0) goto <D.18597>; else goto <D.18598>;
  <D.18597>:
  gc_debug_file.27 = gc_debug_file;
  fprintf (gc_debug_file.27, "Heap consistency check done.\n");
  gc_debug_file.27 = gc_debug_file;
  fflush (gc_debug_file.27);
  <D.18598>:
  if (1 != 0) goto <D.18599>; else goto <D.18600>;
  <D.18599>:
  missing_remsets.28 = missing_remsets;
  D.18602 = missing_remsets.28 != 0;
  D.18603 = (long int) D.18602;
  D.18604 = __builtin_expect (D.18603, 0);
  if (D.18604 != 0) goto <D.18605>; else goto <D.18606>;
  <D.18605>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-debug.c", 204, "!missing_remsets");
  <D.18606>:
  <D.18600>:
}


check_consistency_callback (char * start, size_t size, void * dummy)
{
  long unsigned int D.18607;
  long unsigned int D.18608;
  struct MonoClass * D.18611;
  const char * D.18612;
  struct FILE * gc_debug_file.29;
  long unsigned int D.18614;
  long unsigned int D.18615;
  long unsigned int D.18618;
  long unsigned int D.18619;
  long unsigned int D.18620;
  long unsigned int D.18621;
  long unsigned int D.18622;
  long unsigned int D.18623;
  void * D.18624;
  int D.18627;
  struct SgenRemeberedSet * D.18630;
  gboolean (*<T2c96>) (char *) D.18631;
  int D.18632;
  int gc_debug_level.30;
  _Bool D.18636;
  long int D.18637;
  long int D.18638;
  struct MonoVTable * D.18641;
  struct MonoClass * D.18642;
  const char * D.18643;
  const char * D.18644;
  long int _objptr.31;
  long int start.32;
  long int D.18647;
  long unsigned int D.18648;
  long unsigned int D.18649;
  int D.18654;
  struct SgenRemeberedSet * D.18657;
  gboolean (*<T2c96>) (char *) D.18658;
  int D.18659;
  long unsigned int D.18666;
  long unsigned int D.18667;
  int D.18668;
  void * D.18669;
  int D.18672;
  struct SgenRemeberedSet * D.18675;
  gboolean (*<T2c96>) (char *) D.18676;
  int D.18677;
  long int _objptr.33;
  long int D.18683;
  long unsigned int D.18684;
  long unsigned int D.18685;
  long unsigned int D.18688;
  long unsigned int D.18689;
  int D.18690;
  int D.18693;
  struct SgenRemeberedSet * D.18696;
  gboolean (*<T2c96>) (char *) D.18697;
  int D.18698;
  long unsigned int D.18705;
  long unsigned int D.18708;
  int D.18709;
  int D.18710;
  unsigned int D.18713;
  unsigned int el_size.34;
  unsigned int D.18715;
  sizetype D.18716;
  void * D.18717;
  int D.18720;
  struct SgenRemeberedSet * D.18723;
  gboolean (*<T2c96>) (char *) D.18724;
  int D.18725;
  long int p.35;
  long int D.18731;
  long unsigned int D.18732;
  long unsigned int D.18733;
  int D.18739;
  int D.18740;
  long unsigned int D.18741;
  long unsigned int D.18742;
  long unsigned int D.18743;
  long unsigned int D.18744;
  void * * D.18745;
  void * D.18746;
  int D.18749;
  struct SgenRemeberedSet * D.18752;
  gboolean (*<T2c96>) (char *) D.18753;
  char * D.18754;
  int D.18755;
  long int D.18760;
  long int D.18761;
  long unsigned int D.18762;
  long unsigned int D.18763;
  sizetype D.18766;
  long unsigned int D.18770;
  void * D.18773;
  int D.18776;
  struct SgenRemeberedSet * D.18779;
  gboolean (*<T2c96>) (char *) D.18780;
  int D.18781;
  long int p.36;
  long int D.18787;
  long unsigned int D.18788;
  long unsigned int D.18789;
  long unsigned int D.18792;
  void * D.18795;
  int D.18798;
  struct SgenRemeberedSet * D.18801;
  gboolean (*<T2c96>) (char *) D.18802;
  int D.18803;
  long int _objptr.37;
  long int D.18809;
  long unsigned int D.18810;
  long unsigned int D.18811;
  long unsigned int D.18814;
  unsigned int D.18815;
  unsigned int D.18816;
  struct MonoVTable * D.18819;
  struct MonoClass * D.18820;
  const char * D.18821;
  const char * D.18822;
  gsize * bitmap_data.38;
  long unsigned int D.18824;
  void * D.18827;
  int D.18830;
  struct SgenRemeberedSet * D.18833;
  gboolean (*<T2c96>) (char *) D.18834;
  int D.18835;
  long int _objptr.39;
  long int D.18841;
  long unsigned int D.18842;
  long unsigned int D.18843;
  int bwords.40;
  long unsigned int D.18847;
  gsize * mbitmap_data.41;
  long unsigned int D.18849;
  unsigned int D.18850;
  unsigned int D.18851;
  struct MonoClass * D.18852;
  unsigned int el_size.42;
  unsigned int D.18854;
  sizetype D.18855;
  const char * D.18858;
  const char * D.18859;
  gsize * bitmap_data.43;
  long unsigned int D.18861;
  void * D.18864;
  int D.18867;
  struct SgenRemeberedSet * D.18870;
  gboolean (*<T2c96>) (char *) D.18871;
  int D.18872;
  long int _objptr.44;
  long int D.18878;
  long unsigned int D.18879;
  long unsigned int D.18880;
  unsigned int bwords.45;
  sizetype D.18884;
  struct GCVTable * vt;

  D.18607 = MEM[(mword *)start];
  D.18608 = D.18607 & 18446744073709551612;
  vt = (struct GCVTable *) D.18608;
  if (0 != 0) goto <D.18609>; else goto <D.18610>;
  <D.18609>:
  D.18611 = vt->klass;
  D.18612 = D.18611->name;
  gc_debug_file.29 = gc_debug_file;
  fprintf (gc_debug_file.29, "Scanning object %p, vtable: %p (%s)\n", start, vt, D.18612);
  gc_debug_file.29 = gc_debug_file;
  fflush (gc_debug_file.29);
  <D.18610>:
  {
    struct GCVTable * vt;
    mword desc;

    D.18607 = MEM[(mword *)start];
    D.18608 = D.18607 & 18446744073709551612;
    vt = (struct GCVTable *) D.18608;
    desc = vt->desc;
    D.18614 = desc & 7;
    switch (D.18614) <default: <D.17786>, case 1: <D.17701>, case 2: <D.17708>, case 3: <D.17752>, case 4: <D.17716>, case 5: <D.17746>, case 6: <D.17765>, case 7: <D.17785>>
    <D.17701>:
    D.18615 = desc & 4294901760;
    if (D.18615 != 0) goto <D.18616>; else goto <D.18617>;
    <D.18616>:
    {
      void * * _objptr_end;
      void * * _objptr;

      _objptr = start;
      D.18618 = desc >> 16;
      D.18619 = D.18618 & 255;
      D.18620 = D.18619 * 8;
      _objptr = _objptr + D.18620;
      D.18621 = desc >> 24;
      D.18622 = D.18621 & 255;
      D.18623 = D.18622 * 8;
      _objptr_end = _objptr + D.18623;
      D.18624 = *_objptr;
      if (D.18624 != 0B) goto <D.18625>; else goto <D.18626>;
      <D.18625>:
      D.18624 = *_objptr;
      D.18627 = sgen_ptr_in_nursery (D.18624);
      if (D.18627 != 0) goto <D.18628>; else goto <D.18629>;
      <D.18628>:
      D.18630 = sgen_get_remset ();
      D.18631 = D.18630->find_address;
      D.18632 = D.18631 (_objptr);
      if (D.18632 == 0) goto <D.18633>; else goto <D.18634>;
      <D.18633>:
      gc_debug_level.30 = gc_debug_level;
      D.18636 = gc_debug_level.30 >= 0;
      D.18637 = (long int) D.18636;
      D.18638 = __builtin_expect (D.18637, 0);
      if (D.18638 != 0) goto <D.18639>; else goto <D.18640>;
      <D.18639>:
      D.18641 = MEM[(struct MonoObject *)start].vtable;
      D.18642 = D.18641->klass;
      D.18643 = D.18642->name;
      D.18641 = MEM[(struct MonoObject *)start].vtable;
      D.18642 = D.18641->klass;
      D.18644 = D.18642->name_space;
      _objptr.31 = (long int) _objptr;
      start.32 = (long int) start;
      D.18647 = _objptr.31 - start.32;
      D.18624 = *_objptr;
      gc_debug_file.29 = gc_debug_file;
      fprintf (gc_debug_file.29, "Oldspace->newspace reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.18624, D.18647, start, D.18644, D.18643);
      gc_debug_file.29 = gc_debug_file;
      fflush (gc_debug_file.29);
      <D.18640>:
      D.18624 = *_objptr;
      D.18648 = MEM[(mword *)D.18624];
      D.18649 = D.18648 & 2;
      if (D.18649 == 0) goto <D.18650>; else goto <D.18651>;
      <D.18650>:
      missing_remsets = 1;
      <D.18651>:
      <D.18634>:
      <D.18629>:
      <D.18626>:
      _objptr = _objptr + 8;
      goto <D.17705>;
      <D.17704>:
      D.18624 = *_objptr;
      if (D.18624 != 0B) goto <D.18652>; else goto <D.18653>;
      <D.18652>:
      D.18624 = *_objptr;
      D.18654 = sgen_ptr_in_nursery (D.18624);
      if (D.18654 != 0) goto <D.18655>; else goto <D.18656>;
      <D.18655>:
      D.18657 = sgen_get_remset ();
      D.18658 = D.18657->find_address;
      D.18659 = D.18658 (_objptr);
      if (D.18659 == 0) goto <D.18660>; else goto <D.18661>;
      <D.18660>:
      gc_debug_level.30 = gc_debug_level;
      D.18636 = gc_debug_level.30 >= 0;
      D.18637 = (long int) D.18636;
      D.18638 = __builtin_expect (D.18637, 0);
      if (D.18638 != 0) goto <D.18662>; else goto <D.18663>;
      <D.18662>:
      D.18641 = MEM[(struct MonoObject *)start].vtable;
      D.18642 = D.18641->klass;
      D.18643 = D.18642->name;
      D.18641 = MEM[(struct MonoObject *)start].vtable;
      D.18642 = D.18641->klass;
      D.18644 = D.18642->name_space;
      _objptr.31 = (long int) _objptr;
      start.32 = (long int) start;
      D.18647 = _objptr.31 - start.32;
      D.18624 = *_objptr;
      gc_debug_file.29 = gc_debug_file;
      fprintf (gc_debug_file.29, "Oldspace->newspace reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.18624, D.18647, start, D.18644, D.18643);
      gc_debug_file.29 = gc_debug_file;
      fflush (gc_debug_file.29);
      <D.18663>:
      D.18624 = *_objptr;
      D.18648 = MEM[(mword *)D.18624];
      D.18649 = D.18648 & 2;
      if (D.18649 == 0) goto <D.18664>; else goto <D.18665>;
      <D.18664>:
      missing_remsets = 1;
      <D.18665>:
      <D.18661>:
      <D.18656>:
      <D.18653>:
      _objptr = _objptr + 8;
      <D.17705>:
      if (_objptr < _objptr_end) goto <D.17704>; else goto <D.17706>;
      <D.17706>:
    }
    <D.18617>:
    goto <D.17707>;
    <D.17708>:
    {
      void * * _objptr;
      gsize _bmap;

      _objptr = start;
      _bmap = desc >> 16;
      _objptr = _objptr + 16;
      {
        int _index;

        _index = __builtin_ctzl (_bmap);
        D.18666 = (long unsigned int) _index;
        D.18667 = D.18666 * 8;
        _objptr = _objptr + D.18667;
        D.18668 = _index + 1;
        _bmap = _bmap >> D.18668;
        D.18669 = *_objptr;
        if (D.18669 != 0B) goto <D.18670>; else goto <D.18671>;
        <D.18670>:
        D.18669 = *_objptr;
        D.18672 = sgen_ptr_in_nursery (D.18669);
        if (D.18672 != 0) goto <D.18673>; else goto <D.18674>;
        <D.18673>:
        D.18675 = sgen_get_remset ();
        D.18676 = D.18675->find_address;
        D.18677 = D.18676 (_objptr);
        if (D.18677 == 0) goto <D.18678>; else goto <D.18679>;
        <D.18678>:
        gc_debug_level.30 = gc_debug_level;
        D.18636 = gc_debug_level.30 >= 0;
        D.18637 = (long int) D.18636;
        D.18638 = __builtin_expect (D.18637, 0);
        if (D.18638 != 0) goto <D.18680>; else goto <D.18681>;
        <D.18680>:
        D.18641 = MEM[(struct MonoObject *)start].vtable;
        D.18642 = D.18641->klass;
        D.18643 = D.18642->name;
        D.18641 = MEM[(struct MonoObject *)start].vtable;
        D.18642 = D.18641->klass;
        D.18644 = D.18642->name_space;
        _objptr.33 = (long int) _objptr;
        start.32 = (long int) start;
        D.18683 = _objptr.33 - start.32;
        D.18669 = *_objptr;
        gc_debug_file.29 = gc_debug_file;
        fprintf (gc_debug_file.29, "Oldspace->newspace reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.18669, D.18683, start, D.18644, D.18643);
        gc_debug_file.29 = gc_debug_file;
        fflush (gc_debug_file.29);
        <D.18681>:
        D.18669 = *_objptr;
        D.18684 = MEM[(mword *)D.18669];
        D.18685 = D.18684 & 2;
        if (D.18685 == 0) goto <D.18686>; else goto <D.18687>;
        <D.18686>:
        missing_remsets = 1;
        <D.18687>:
        <D.18679>:
        <D.18674>:
        <D.18671>:
        _objptr = _objptr + 8;
      }
      goto <D.17714>;
      <D.17713>:
      {
        int _index;

        _index = __builtin_ctzl (_bmap);
        D.18688 = (long unsigned int) _index;
        D.18689 = D.18688 * 8;
        _objptr = _objptr + D.18689;
        D.18690 = _index + 1;
        _bmap = _bmap >> D.18690;
        D.18669 = *_objptr;
        if (D.18669 != 0B) goto <D.18691>; else goto <D.18692>;
        <D.18691>:
        D.18669 = *_objptr;
        D.18693 = sgen_ptr_in_nursery (D.18669);
        if (D.18693 != 0) goto <D.18694>; else goto <D.18695>;
        <D.18694>:
        D.18696 = sgen_get_remset ();
        D.18697 = D.18696->find_address;
        D.18698 = D.18697 (_objptr);
        if (D.18698 == 0) goto <D.18699>; else goto <D.18700>;
        <D.18699>:
        gc_debug_level.30 = gc_debug_level;
        D.18636 = gc_debug_level.30 >= 0;
        D.18637 = (long int) D.18636;
        D.18638 = __builtin_expect (D.18637, 0);
        if (D.18638 != 0) goto <D.18701>; else goto <D.18702>;
        <D.18701>:
        D.18641 = MEM[(struct MonoObject *)start].vtable;
        D.18642 = D.18641->klass;
        D.18643 = D.18642->name;
        D.18641 = MEM[(struct MonoObject *)start].vtable;
        D.18642 = D.18641->klass;
        D.18644 = D.18642->name_space;
        _objptr.33 = (long int) _objptr;
        start.32 = (long int) start;
        D.18683 = _objptr.33 - start.32;
        D.18669 = *_objptr;
        gc_debug_file.29 = gc_debug_file;
        fprintf (gc_debug_file.29, "Oldspace->newspace reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.18669, D.18683, start, D.18644, D.18643);
        gc_debug_file.29 = gc_debug_file;
        fflush (gc_debug_file.29);
        <D.18702>:
        D.18669 = *_objptr;
        D.18684 = MEM[(mword *)D.18669];
        D.18685 = D.18684 & 2;
        if (D.18685 == 0) goto <D.18703>; else goto <D.18704>;
        <D.18703>:
        missing_remsets = 1;
        <D.18704>:
        <D.18700>:
        <D.18695>:
        <D.18692>:
        _objptr = _objptr + 8;
      }
      <D.17714>:
      if (_bmap != 0) goto <D.17713>; else goto <D.17715>;
      <D.17715>:
    }
    goto <D.17707>;
    <D.17716>:
    D.18705 = desc & 4294950912;
    if (D.18705 != 0) goto <D.18706>; else goto <D.18707>;
    <D.18706>:
    {
      int el_size;
      int etype;

      D.18708 = desc >> 3;
      D.18709 = (int) D.18708;
      el_size = D.18709 & 1023;
      D.18710 = (int) desc;
      etype = D.18710 & 49152;
      if (etype == 16384) goto <D.18711>; else goto <D.18712>;
      <D.18711>:
      {
        void * * p;
        void * * end_refs;

        p = start + 32;
        D.18713 = MEM[(struct MonoArray *)start].max_length;
        el_size.34 = (unsigned int) el_size;
        D.18715 = D.18713 * el_size.34;
        D.18716 = (sizetype) D.18715;
        end_refs = p + D.18716;
        goto <D.17722>;
        <D.17721>:
        D.18717 = *p;
        if (D.18717 != 0B) goto <D.18718>; else goto <D.18719>;
        <D.18718>:
        D.18717 = *p;
        D.18720 = sgen_ptr_in_nursery (D.18717);
        if (D.18720 != 0) goto <D.18721>; else goto <D.18722>;
        <D.18721>:
        D.18723 = sgen_get_remset ();
        D.18724 = D.18723->find_address;
        D.18725 = D.18724 (p);
        if (D.18725 == 0) goto <D.18726>; else goto <D.18727>;
        <D.18726>:
        gc_debug_level.30 = gc_debug_level;
        D.18636 = gc_debug_level.30 >= 0;
        D.18637 = (long int) D.18636;
        D.18638 = __builtin_expect (D.18637, 0);
        if (D.18638 != 0) goto <D.18728>; else goto <D.18729>;
        <D.18728>:
        D.18641 = MEM[(struct MonoObject *)start].vtable;
        D.18642 = D.18641->klass;
        D.18643 = D.18642->name;
        D.18641 = MEM[(struct MonoObject *)start].vtable;
        D.18642 = D.18641->klass;
        D.18644 = D.18642->name_space;
        p.35 = (long int) p;
        start.32 = (long int) start;
        D.18731 = p.35 - start.32;
        D.18717 = *p;
        gc_debug_file.29 = gc_debug_file;
        fprintf (gc_debug_file.29, "Oldspace->newspace reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.18717, D.18731, start, D.18644, D.18643);
        gc_debug_file.29 = gc_debug_file;
        fflush (gc_debug_file.29);
        <D.18729>:
        D.18717 = *p;
        D.18732 = MEM[(mword *)D.18717];
        D.18733 = D.18732 & 2;
        if (D.18733 == 0) goto <D.18734>; else goto <D.18735>;
        <D.18734>:
        missing_remsets = 1;
        <D.18735>:
        <D.18727>:
        <D.18722>:
        <D.18719>:
        p = p + 8;
        <D.17722>:
        if (p < end_refs) goto <D.17721>; else goto <D.17723>;
        <D.17723>:
      }
      goto <D.18736>;
      <D.18712>:
      if (etype == 32768) goto <D.18737>; else goto <D.18738>;
      <D.18737>:
      {
        int offset;
        int num_refs;
        char * e_start;
        char * e_end;

        D.18618 = desc >> 16;
        D.18739 = (int) D.18618;
        offset = D.18739 & 255;
        D.18621 = desc >> 24;
        D.18740 = (int) D.18621;
        num_refs = D.18740 & 255;
        e_start = start + 32;
        D.18713 = MEM[(struct MonoArray *)start].max_length;
        el_size.34 = (unsigned int) el_size;
        D.18715 = D.18713 * el_size.34;
        D.18716 = (sizetype) D.18715;
        e_end = e_start + D.18716;
        goto <D.17734>;
        <D.17733>:
        {
          void * * p;
          int i;

          p = e_start;
          D.18741 = (long unsigned int) offset;
          D.18742 = D.18741 * 8;
          p = p + D.18742;
          i = 0;
          goto <D.17731>;
          <D.17730>:
          D.18743 = (long unsigned int) i;
          D.18744 = D.18743 * 8;
          D.18745 = p + D.18744;
          D.18746 = *D.18745;
          if (D.18746 != 0B) goto <D.18747>; else goto <D.18748>;
          <D.18747>:
          D.18743 = (long unsigned int) i;
          D.18744 = D.18743 * 8;
          D.18745 = p + D.18744;
          D.18746 = *D.18745;
          D.18749 = sgen_ptr_in_nursery (D.18746);
          if (D.18749 != 0) goto <D.18750>; else goto <D.18751>;
          <D.18750>:
          D.18752 = sgen_get_remset ();
          D.18753 = D.18752->find_address;
          D.18743 = (long unsigned int) i;
          D.18744 = D.18743 * 8;
          D.18754 = p + D.18744;
          D.18755 = D.18753 (D.18754);
          if (D.18755 == 0) goto <D.18756>; else goto <D.18757>;
          <D.18756>:
          gc_debug_level.30 = gc_debug_level;
          D.18636 = gc_debug_level.30 >= 0;
          D.18637 = (long int) D.18636;
          D.18638 = __builtin_expect (D.18637, 0);
          if (D.18638 != 0) goto <D.18758>; else goto <D.18759>;
          <D.18758>:
          D.18641 = MEM[(struct MonoObject *)start].vtable;
          D.18642 = D.18641->klass;
          D.18643 = D.18642->name;
          D.18641 = MEM[(struct MonoObject *)start].vtable;
          D.18642 = D.18641->klass;
          D.18644 = D.18642->name_space;
          D.18743 = (long unsigned int) i;
          D.18744 = D.18743 * 8;
          D.18754 = p + D.18744;
          D.18760 = (long int) D.18754;
          start.32 = (long int) start;
          D.18761 = D.18760 - start.32;
          D.18743 = (long unsigned int) i;
          D.18744 = D.18743 * 8;
          D.18745 = p + D.18744;
          D.18746 = *D.18745;
          gc_debug_file.29 = gc_debug_file;
          fprintf (gc_debug_file.29, "Oldspace->newspace reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.18746, D.18761, start, D.18644, D.18643);
          gc_debug_file.29 = gc_debug_file;
          fflush (gc_debug_file.29);
          <D.18759>:
          D.18743 = (long unsigned int) i;
          D.18744 = D.18743 * 8;
          D.18745 = p + D.18744;
          D.18746 = *D.18745;
          D.18762 = MEM[(mword *)D.18746];
          D.18763 = D.18762 & 2;
          if (D.18763 == 0) goto <D.18764>; else goto <D.18765>;
          <D.18764>:
          missing_remsets = 1;
          <D.18765>:
          <D.18757>:
          <D.18751>:
          <D.18748>:
          i = i + 1;
          <D.17731>:
          if (i < num_refs) goto <D.17730>; else goto <D.17732>;
          <D.17732>:
          D.18766 = (sizetype) el_size;
          e_start = e_start + D.18766;
        }
        <D.17734>:
        if (e_start < e_end) goto <D.17733>; else goto <D.17735>;
        <D.17735>:
      }
      goto <D.18767>;
      <D.18738>:
      if (etype == 49152) goto <D.18768>; else goto <D.18769>;
      <D.18768>:
      {
        char * e_start;
        char * e_end;

        e_start = start + 32;
        D.18713 = MEM[(struct MonoArray *)start].max_length;
        el_size.34 = (unsigned int) el_size;
        D.18715 = D.18713 * el_size.34;
        D.18716 = (sizetype) D.18715;
        e_end = e_start + D.18716;
        goto <D.17744>;
        <D.17743>:
        {
          void * * p;
          gsize _bmap;

          p = e_start;
          _bmap = desc >> 16;
          goto <D.17741>;
          <D.17740>:
          D.18770 = _bmap & 1;
          if (D.18770 != 0) goto <D.18771>; else goto <D.18772>;
          <D.18771>:
          D.18773 = *p;
          if (D.18773 != 0B) goto <D.18774>; else goto <D.18775>;
          <D.18774>:
          D.18773 = *p;
          D.18776 = sgen_ptr_in_nursery (D.18773);
          if (D.18776 != 0) goto <D.18777>; else goto <D.18778>;
          <D.18777>:
          D.18779 = sgen_get_remset ();
          D.18780 = D.18779->find_address;
          D.18781 = D.18780 (p);
          if (D.18781 == 0) goto <D.18782>; else goto <D.18783>;
          <D.18782>:
          gc_debug_level.30 = gc_debug_level;
          D.18636 = gc_debug_level.30 >= 0;
          D.18637 = (long int) D.18636;
          D.18638 = __builtin_expect (D.18637, 0);
          if (D.18638 != 0) goto <D.18784>; else goto <D.18785>;
          <D.18784>:
          D.18641 = MEM[(struct MonoObject *)start].vtable;
          D.18642 = D.18641->klass;
          D.18643 = D.18642->name;
          D.18641 = MEM[(struct MonoObject *)start].vtable;
          D.18642 = D.18641->klass;
          D.18644 = D.18642->name_space;
          p.36 = (long int) p;
          start.32 = (long int) start;
          D.18787 = p.36 - start.32;
          D.18773 = *p;
          gc_debug_file.29 = gc_debug_file;
          fprintf (gc_debug_file.29, "Oldspace->newspace reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.18773, D.18787, start, D.18644, D.18643);
          gc_debug_file.29 = gc_debug_file;
          fflush (gc_debug_file.29);
          <D.18785>:
          D.18773 = *p;
          D.18788 = MEM[(mword *)D.18773];
          D.18789 = D.18788 & 2;
          if (D.18789 == 0) goto <D.18790>; else goto <D.18791>;
          <D.18790>:
          missing_remsets = 1;
          <D.18791>:
          <D.18783>:
          <D.18778>:
          <D.18775>:
          <D.18772>:
          _bmap = _bmap >> 1;
          p = p + 8;
          <D.17741>:
          if (_bmap != 0) goto <D.17740>; else goto <D.17742>;
          <D.17742>:
          D.18766 = (sizetype) el_size;
          e_start = e_start + D.18766;
        }
        <D.17744>:
        if (e_start < e_end) goto <D.17743>; else goto <D.17745>;
        <D.17745>:
      }
      <D.18769>:
      <D.18767>:
      <D.18736>:
    }
    <D.18707>:
    goto <D.17707>;
    <D.17746>:
    {
      void * * _objptr;
      gsize _bmap;

      _objptr = start;
      _bmap = desc >> 3;
      _objptr = _objptr + 16;
      goto <D.17750>;
      <D.17749>:
      D.18792 = _bmap & 1;
      if (D.18792 != 0) goto <D.18793>; else goto <D.18794>;
      <D.18793>:
      D.18795 = *_objptr;
      if (D.18795 != 0B) goto <D.18796>; else goto <D.18797>;
      <D.18796>:
      D.18795 = *_objptr;
      D.18798 = sgen_ptr_in_nursery (D.18795);
      if (D.18798 != 0) goto <D.18799>; else goto <D.18800>;
      <D.18799>:
      D.18801 = sgen_get_remset ();
      D.18802 = D.18801->find_address;
      D.18803 = D.18802 (_objptr);
      if (D.18803 == 0) goto <D.18804>; else goto <D.18805>;
      <D.18804>:
      gc_debug_level.30 = gc_debug_level;
      D.18636 = gc_debug_level.30 >= 0;
      D.18637 = (long int) D.18636;
      D.18638 = __builtin_expect (D.18637, 0);
      if (D.18638 != 0) goto <D.18806>; else goto <D.18807>;
      <D.18806>:
      D.18641 = MEM[(struct MonoObject *)start].vtable;
      D.18642 = D.18641->klass;
      D.18643 = D.18642->name;
      D.18641 = MEM[(struct MonoObject *)start].vtable;
      D.18642 = D.18641->klass;
      D.18644 = D.18642->name_space;
      _objptr.37 = (long int) _objptr;
      start.32 = (long int) start;
      D.18809 = _objptr.37 - start.32;
      D.18795 = *_objptr;
      gc_debug_file.29 = gc_debug_file;
      fprintf (gc_debug_file.29, "Oldspace->newspace reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.18795, D.18809, start, D.18644, D.18643);
      gc_debug_file.29 = gc_debug_file;
      fflush (gc_debug_file.29);
      <D.18807>:
      D.18795 = *_objptr;
      D.18810 = MEM[(mword *)D.18795];
      D.18811 = D.18810 & 2;
      if (D.18811 == 0) goto <D.18812>; else goto <D.18813>;
      <D.18812>:
      missing_remsets = 1;
      <D.18813>:
      <D.18805>:
      <D.18800>:
      <D.18797>:
      <D.18794>:
      _bmap = _bmap >> 1;
      _objptr = _objptr + 8;
      <D.17750>:
      if (_bmap != 0) goto <D.17749>; else goto <D.17751>;
      <D.17751>:
    }
    goto <D.17707>;
    <D.17752>:
    {
      void * * _objptr;
      gsize * bitmap_data;
      int bwords;
      void * * start_run;

      _objptr = start;
      bitmap_data = sgen_get_complex_descriptor (desc);
      D.18814 = *bitmap_data;
      D.18815 = (unsigned int) D.18814;
      D.18816 = D.18815 + 4294967295;
      bwords = (int) D.18816;
      start_run = _objptr;
      bitmap_data = bitmap_data + 8;
      if (0 != 0) goto <D.18817>; else goto <D.18818>;
      <D.18817>:
      {
        struct MonoObject * myobj;

        myobj = start;
        D.18819 = myobj->vtable;
        D.18820 = D.18819->klass;
        D.18821 = D.18820->name;
        D.18819 = myobj->vtable;
        D.18820 = D.18819->klass;
        D.18822 = D.18820->name_space;
        monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", bwords, start, desc, D.18822, D.18821);
      }
      <D.18818>:
      goto <D.17763>;
      <D.17762>:
      {
        gsize _bmap;

        bitmap_data.38 = bitmap_data;
        bitmap_data = bitmap_data.38 + 8;
        _bmap = *bitmap_data.38;
        _objptr = start_run;
        goto <D.17760>;
        <D.17759>:
        D.18824 = _bmap & 1;
        if (D.18824 != 0) goto <D.18825>; else goto <D.18826>;
        <D.18825>:
        D.18827 = *_objptr;
        if (D.18827 != 0B) goto <D.18828>; else goto <D.18829>;
        <D.18828>:
        D.18827 = *_objptr;
        D.18830 = sgen_ptr_in_nursery (D.18827);
        if (D.18830 != 0) goto <D.18831>; else goto <D.18832>;
        <D.18831>:
        D.18833 = sgen_get_remset ();
        D.18834 = D.18833->find_address;
        D.18835 = D.18834 (_objptr);
        if (D.18835 == 0) goto <D.18836>; else goto <D.18837>;
        <D.18836>:
        gc_debug_level.30 = gc_debug_level;
        D.18636 = gc_debug_level.30 >= 0;
        D.18637 = (long int) D.18636;
        D.18638 = __builtin_expect (D.18637, 0);
        if (D.18638 != 0) goto <D.18838>; else goto <D.18839>;
        <D.18838>:
        D.18641 = MEM[(struct MonoObject *)start].vtable;
        D.18642 = D.18641->klass;
        D.18643 = D.18642->name;
        D.18641 = MEM[(struct MonoObject *)start].vtable;
        D.18642 = D.18641->klass;
        D.18644 = D.18642->name_space;
        _objptr.39 = (long int) _objptr;
        start.32 = (long int) start;
        D.18841 = _objptr.39 - start.32;
        D.18827 = *_objptr;
        gc_debug_file.29 = gc_debug_file;
        fprintf (gc_debug_file.29, "Oldspace->newspace reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.18827, D.18841, start, D.18644, D.18643);
        gc_debug_file.29 = gc_debug_file;
        fflush (gc_debug_file.29);
        <D.18839>:
        D.18827 = *_objptr;
        D.18842 = MEM[(mword *)D.18827];
        D.18843 = D.18842 & 2;
        if (D.18843 == 0) goto <D.18844>; else goto <D.18845>;
        <D.18844>:
        missing_remsets = 1;
        <D.18845>:
        <D.18837>:
        <D.18832>:
        <D.18829>:
        <D.18826>:
        _bmap = _bmap >> 1;
        _objptr = _objptr + 8;
        <D.17760>:
        if (_bmap != 0) goto <D.17759>; else goto <D.17761>;
        <D.17761>:
        start_run = start_run + 512;
      }
      <D.17763>:
      bwords.40 = bwords;
      bwords = bwords.40 + -1;
      if (bwords.40 > 0) goto <D.17762>; else goto <D.17764>;
      <D.17764>:
    }
    goto <D.17707>;
    <D.17765>:
    {
      gsize * mbitmap_data;
      int mbwords;
      int el_size;
      char * e_start;
      char * e_end;

      D.18847 = vt->desc;
      mbitmap_data = sgen_get_complex_descriptor (D.18847);
      mbitmap_data.41 = mbitmap_data;
      mbitmap_data = mbitmap_data.41 + 8;
      D.18849 = *mbitmap_data.41;
      D.18850 = (unsigned int) D.18849;
      D.18851 = D.18850 + 4294967295;
      mbwords = (int) D.18851;
      D.18852 = vt->klass;
      el_size = mono_array_element_size (D.18852);
      e_start = start + 32;
      D.18713 = MEM[(struct MonoArray *)start].max_length;
      el_size.42 = (unsigned int) el_size;
      D.18854 = D.18713 * el_size.42;
      D.18855 = (sizetype) D.18854;
      e_end = e_start + D.18855;
      if (0 != 0) goto <D.18856>; else goto <D.18857>;
      <D.18856>:
      D.18852 = vt->klass;
      D.18858 = D.18852->name;
      D.18852 = vt->klass;
      D.18859 = D.18852->name_space;
      D.18847 = vt->desc;
      monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", mbwords, start, D.18847, D.18859, D.18858);
      <D.18857>:
      goto <D.17783>;
      <D.17782>:
      {
        void * * _objptr;
        gsize * bitmap_data;
        unsigned int bwords;

        _objptr = e_start;
        bitmap_data = mbitmap_data;
        bwords = (unsigned int) mbwords;
        goto <D.17780>;
        <D.17779>:
        {
          gsize _bmap;
          void * * start_run;

          bitmap_data.43 = bitmap_data;
          bitmap_data = bitmap_data.43 + 8;
          _bmap = *bitmap_data.43;
          start_run = _objptr;
          goto <D.17777>;
          <D.17776>:
          D.18861 = _bmap & 1;
          if (D.18861 != 0) goto <D.18862>; else goto <D.18863>;
          <D.18862>:
          D.18864 = *_objptr;
          if (D.18864 != 0B) goto <D.18865>; else goto <D.18866>;
          <D.18865>:
          D.18864 = *_objptr;
          D.18867 = sgen_ptr_in_nursery (D.18864);
          if (D.18867 != 0) goto <D.18868>; else goto <D.18869>;
          <D.18868>:
          D.18870 = sgen_get_remset ();
          D.18871 = D.18870->find_address;
          D.18872 = D.18871 (_objptr);
          if (D.18872 == 0) goto <D.18873>; else goto <D.18874>;
          <D.18873>:
          gc_debug_level.30 = gc_debug_level;
          D.18636 = gc_debug_level.30 >= 0;
          D.18637 = (long int) D.18636;
          D.18638 = __builtin_expect (D.18637, 0);
          if (D.18638 != 0) goto <D.18875>; else goto <D.18876>;
          <D.18875>:
          D.18641 = MEM[(struct MonoObject *)start].vtable;
          D.18642 = D.18641->klass;
          D.18643 = D.18642->name;
          D.18641 = MEM[(struct MonoObject *)start].vtable;
          D.18642 = D.18641->klass;
          D.18644 = D.18642->name_space;
          _objptr.44 = (long int) _objptr;
          start.32 = (long int) start;
          D.18878 = _objptr.44 - start.32;
          D.18864 = *_objptr;
          gc_debug_file.29 = gc_debug_file;
          fprintf (gc_debug_file.29, "Oldspace->newspace reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.18864, D.18878, start, D.18644, D.18643);
          gc_debug_file.29 = gc_debug_file;
          fflush (gc_debug_file.29);
          <D.18876>:
          D.18864 = *_objptr;
          D.18879 = MEM[(mword *)D.18864];
          D.18880 = D.18879 & 2;
          if (D.18880 == 0) goto <D.18881>; else goto <D.18882>;
          <D.18881>:
          missing_remsets = 1;
          <D.18882>:
          <D.18874>:
          <D.18869>:
          <D.18866>:
          <D.18863>:
          _bmap = _bmap >> 1;
          _objptr = _objptr + 8;
          <D.17777>:
          if (_bmap != 0) goto <D.17776>; else goto <D.17778>;
          <D.17778>:
          _objptr = start_run + 512;
        }
        <D.17780>:
        bwords.45 = bwords;
        bwords = bwords.45 + 4294967295;
        if (bwords.45 != 0) goto <D.17779>; else goto <D.17781>;
        <D.17781>:
        D.18884 = (sizetype) el_size;
        e_start = e_start + D.18884;
      }
      <D.17783>:
      if (e_start < e_end) goto <D.17782>; else goto <D.17784>;
      <D.17784>:
    }
    goto <D.17707>;
    <D.17785>:
    goto <D.17707>;
    <D.17786>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 111);
    <D.17707>:
  }
}


sgen_check_mod_union_consistency ()
{
  void (*<T2cf0>) (gboolean, gboolean, void (*IterateObjectCallbackFunc) (char *, size_t, void *), void *) D.18886;
  int missing_remsets.46;
  _Bool D.18890;
  long int D.18891;
  long int D.18892;

  missing_remsets = 0;
  D.18886 = major_collector.iterate_objects;
  D.18886 (1, 1, check_mod_union_callback, 0B);
  sgen_los_iterate_objects (check_mod_union_callback, 1B);
  if (1 != 0) goto <D.18887>; else goto <D.18888>;
  <D.18887>:
  missing_remsets.46 = missing_remsets;
  D.18890 = missing_remsets.46 != 0;
  D.18891 = (long int) D.18890;
  D.18892 = __builtin_expect (D.18891, 0);
  if (D.18892 != 0) goto <D.18893>; else goto <D.18894>;
  <D.18893>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-debug.c", 258, "!missing_remsets");
  <D.18894>:
  <D.18888>:
}


check_mod_union_callback (char * start, size_t size, void * dummy)
{
  long int dummy.47;
  long unsigned int D.18896;
  long unsigned int D.18897;
  struct MonoClass * D.18900;
  const char * D.18901;
  struct FILE * gc_debug_file.48;
  int D.18903;
  struct LOSObject * D.18908;
  struct SgenMajorCollector * D.18910;
  guint8 * (*<T2d33>) (char *) D.18911;
  _Bool D.18912;
  long int D.18913;
  long int D.18914;
  long unsigned int D.18917;
  long unsigned int D.18918;
  long unsigned int D.18921;
  long unsigned int D.18922;
  long unsigned int D.18923;
  long unsigned int D.18924;
  long unsigned int D.18925;
  long unsigned int D.18926;
  void * D.18927;
  int D.18930;
  int D.18933;
  struct SgenRemeberedSet * D.18936;
  gboolean (*<T2d72>) (char *, guint8 *, char *) D.18937;
  int D.18938;
  int gc_debug_level.49;
  _Bool D.18942;
  long int D.18943;
  long int D.18944;
  struct MonoVTable * D.18947;
  struct MonoClass * D.18948;
  const char * D.18949;
  const char * D.18950;
  long int _objptr.50;
  long int start.51;
  long int D.18953;
  int D.18956;
  int D.18959;
  struct SgenRemeberedSet * D.18962;
  gboolean (*<T2d72>) (char *, guint8 *, char *) D.18963;
  int D.18964;
  long unsigned int D.18969;
  long unsigned int D.18970;
  int D.18971;
  void * D.18972;
  int D.18975;
  int D.18978;
  struct SgenRemeberedSet * D.18981;
  gboolean (*<T2d72>) (char *, guint8 *, char *) D.18982;
  int D.18983;
  long int _objptr.52;
  long int D.18989;
  long unsigned int D.18990;
  long unsigned int D.18991;
  int D.18992;
  int D.18995;
  int D.18998;
  struct SgenRemeberedSet * D.19001;
  gboolean (*<T2d72>) (char *, guint8 *, char *) D.19002;
  int D.19003;
  long unsigned int D.19008;
  long unsigned int D.19011;
  int D.19012;
  int D.19013;
  unsigned int D.19016;
  unsigned int el_size.53;
  unsigned int D.19018;
  sizetype D.19019;
  void * D.19020;
  int D.19023;
  int D.19026;
  struct SgenRemeberedSet * D.19029;
  gboolean (*<T2d72>) (char *, guint8 *, char *) D.19030;
  int D.19031;
  long int p.54;
  long int D.19037;
  int D.19041;
  int D.19042;
  long unsigned int D.19043;
  long unsigned int D.19044;
  long unsigned int D.19045;
  long unsigned int D.19046;
  void * * D.19047;
  void * D.19048;
  int D.19051;
  int D.19054;
  struct SgenRemeberedSet * D.19057;
  gboolean (*<T2d72>) (char *, guint8 *, char *) D.19058;
  char * D.19059;
  int D.19060;
  long int D.19065;
  long int D.19066;
  sizetype D.19067;
  long unsigned int D.19071;
  void * D.19074;
  int D.19077;
  int D.19080;
  struct SgenRemeberedSet * D.19083;
  gboolean (*<T2d72>) (char *, guint8 *, char *) D.19084;
  int D.19085;
  long int p.55;
  long int D.19091;
  long unsigned int D.19092;
  void * D.19095;
  int D.19098;
  int D.19101;
  struct SgenRemeberedSet * D.19104;
  gboolean (*<T2d72>) (char *, guint8 *, char *) D.19105;
  int D.19106;
  long int _objptr.56;
  long int D.19112;
  long unsigned int D.19113;
  unsigned int D.19114;
  unsigned int D.19115;
  struct MonoVTable * D.19118;
  struct MonoClass * D.19119;
  const char * D.19120;
  const char * D.19121;
  gsize * bitmap_data.57;
  long unsigned int D.19123;
  void * D.19126;
  int D.19129;
  int D.19132;
  struct SgenRemeberedSet * D.19135;
  gboolean (*<T2d72>) (char *, guint8 *, char *) D.19136;
  int D.19137;
  long int _objptr.58;
  long int D.19143;
  int bwords.59;
  long unsigned int D.19145;
  gsize * mbitmap_data.60;
  long unsigned int D.19147;
  unsigned int D.19148;
  unsigned int D.19149;
  struct MonoClass * D.19150;
  unsigned int el_size.61;
  unsigned int D.19152;
  sizetype D.19153;
  const char * D.19156;
  const char * D.19157;
  gsize * bitmap_data.62;
  long unsigned int D.19159;
  void * D.19162;
  int D.19165;
  int D.19168;
  struct SgenRemeberedSet * D.19171;
  gboolean (*<T2d72>) (char *, guint8 *, char *) D.19172;
  int D.19173;
  long int _objptr.63;
  long int D.19179;
  unsigned int bwords.64;
  sizetype D.19181;
  gboolean in_los;
  struct GCVTable * vt;
  guint8 * cards;

  dummy.47 = (long int) dummy;
  in_los = (gboolean) dummy.47;
  D.18896 = MEM[(mword *)start];
  D.18897 = D.18896 & 18446744073709551612;
  vt = (struct GCVTable *) D.18897;
  if (0 != 0) goto <D.18898>; else goto <D.18899>;
  <D.18898>:
  D.18900 = vt->klass;
  D.18901 = D.18900->name;
  gc_debug_file.48 = gc_debug_file;
  fprintf (gc_debug_file.48, "Scanning object %p, vtable: %p (%s)\n", start, vt, D.18901);
  gc_debug_file.48 = gc_debug_file;
  fflush (gc_debug_file.48);
  <D.18899>:
  D.18903 = is_major_or_los_object_marked (start);
  if (D.18903 == 0) goto <D.18904>; else goto <D.18905>;
  <D.18904>:
  return;
  <D.18905>:
  if (in_los != 0) goto <D.18906>; else goto <D.18907>;
  <D.18906>:
  D.18908 = sgen_los_header_for_object (start);
  cards = D.18908->cardtable_mod_union;
  goto <D.18909>;
  <D.18907>:
  D.18910 = sgen_get_major_collector ();
  D.18911 = D.18910->get_cardtable_mod_union_for_object;
  cards = D.18911 (start);
  <D.18909>:
  D.18912 = cards == 0B;
  D.18913 = (long int) D.18912;
  D.18914 = __builtin_expect (D.18913, 0);
  if (D.18914 != 0) goto <D.18915>; else goto <D.18916>;
  <D.18915>:
  monoeg_g_log (0B, 4, "we must have mod union for marked major objects");
  <D.17801>:
  goto <D.17801>;
  <D.18916>:
  {
    struct GCVTable * vt;
    mword desc;

    D.18896 = MEM[(mword *)start];
    D.18897 = D.18896 & 18446744073709551612;
    vt = (struct GCVTable *) D.18897;
    desc = vt->desc;
    D.18917 = desc & 7;
    switch (D.18917) <default: <D.17889>, case 1: <D.17804>, case 2: <D.17811>, case 3: <D.17855>, case 4: <D.17819>, case 5: <D.17849>, case 6: <D.17868>, case 7: <D.17888>>
    <D.17804>:
    D.18918 = desc & 4294901760;
    if (D.18918 != 0) goto <D.18919>; else goto <D.18920>;
    <D.18919>:
    {
      void * * _objptr_end;
      void * * _objptr;

      _objptr = start;
      D.18921 = desc >> 16;
      D.18922 = D.18921 & 255;
      D.18923 = D.18922 * 8;
      _objptr = _objptr + D.18923;
      D.18924 = desc >> 24;
      D.18925 = D.18924 & 255;
      D.18926 = D.18925 * 8;
      _objptr_end = _objptr + D.18926;
      D.18927 = *_objptr;
      if (D.18927 != 0B) goto <D.18928>; else goto <D.18929>;
      <D.18928>:
      D.18927 = *_objptr;
      D.18930 = sgen_ptr_in_nursery (D.18927);
      if (D.18930 == 0) goto <D.18931>; else goto <D.18932>;
      <D.18931>:
      D.18927 = *_objptr;
      D.18933 = is_major_or_los_object_marked (D.18927);
      if (D.18933 == 0) goto <D.18934>; else goto <D.18935>;
      <D.18934>:
      D.18936 = sgen_get_remset ();
      D.18937 = D.18936->find_address_with_cards;
      D.18938 = D.18937 (start, cards, _objptr);
      if (D.18938 == 0) goto <D.18939>; else goto <D.18940>;
      <D.18939>:
      gc_debug_level.49 = gc_debug_level;
      D.18942 = gc_debug_level.49 >= 0;
      D.18943 = (long int) D.18942;
      D.18944 = __builtin_expect (D.18943, 0);
      if (D.18944 != 0) goto <D.18945>; else goto <D.18946>;
      <D.18945>:
      D.18947 = MEM[(struct MonoObject *)start].vtable;
      D.18948 = D.18947->klass;
      D.18949 = D.18948->name;
      D.18947 = MEM[(struct MonoObject *)start].vtable;
      D.18948 = D.18947->klass;
      D.18950 = D.18948->name_space;
      _objptr.50 = (long int) _objptr;
      start.51 = (long int) start;
      D.18953 = _objptr.50 - start.51;
      D.18927 = *_objptr;
      gc_debug_file.48 = gc_debug_file;
      fprintf (gc_debug_file.48, "major->major reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.18927, D.18953, start, D.18950, D.18949);
      gc_debug_file.48 = gc_debug_file;
      fflush (gc_debug_file.48);
      <D.18946>:
      <D.18940>:
      <D.18935>:
      <D.18932>:
      <D.18929>:
      _objptr = _objptr + 8;
      goto <D.17808>;
      <D.17807>:
      D.18927 = *_objptr;
      if (D.18927 != 0B) goto <D.18954>; else goto <D.18955>;
      <D.18954>:
      D.18927 = *_objptr;
      D.18956 = sgen_ptr_in_nursery (D.18927);
      if (D.18956 == 0) goto <D.18957>; else goto <D.18958>;
      <D.18957>:
      D.18927 = *_objptr;
      D.18959 = is_major_or_los_object_marked (D.18927);
      if (D.18959 == 0) goto <D.18960>; else goto <D.18961>;
      <D.18960>:
      D.18962 = sgen_get_remset ();
      D.18963 = D.18962->find_address_with_cards;
      D.18964 = D.18963 (start, cards, _objptr);
      if (D.18964 == 0) goto <D.18965>; else goto <D.18966>;
      <D.18965>:
      gc_debug_level.49 = gc_debug_level;
      D.18942 = gc_debug_level.49 >= 0;
      D.18943 = (long int) D.18942;
      D.18944 = __builtin_expect (D.18943, 0);
      if (D.18944 != 0) goto <D.18967>; else goto <D.18968>;
      <D.18967>:
      D.18947 = MEM[(struct MonoObject *)start].vtable;
      D.18948 = D.18947->klass;
      D.18949 = D.18948->name;
      D.18947 = MEM[(struct MonoObject *)start].vtable;
      D.18948 = D.18947->klass;
      D.18950 = D.18948->name_space;
      _objptr.50 = (long int) _objptr;
      start.51 = (long int) start;
      D.18953 = _objptr.50 - start.51;
      D.18927 = *_objptr;
      gc_debug_file.48 = gc_debug_file;
      fprintf (gc_debug_file.48, "major->major reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.18927, D.18953, start, D.18950, D.18949);
      gc_debug_file.48 = gc_debug_file;
      fflush (gc_debug_file.48);
      <D.18968>:
      <D.18966>:
      <D.18961>:
      <D.18958>:
      <D.18955>:
      _objptr = _objptr + 8;
      <D.17808>:
      if (_objptr < _objptr_end) goto <D.17807>; else goto <D.17809>;
      <D.17809>:
    }
    <D.18920>:
    goto <D.17810>;
    <D.17811>:
    {
      void * * _objptr;
      gsize _bmap;

      _objptr = start;
      _bmap = desc >> 16;
      _objptr = _objptr + 16;
      {
        int _index;

        _index = __builtin_ctzl (_bmap);
        D.18969 = (long unsigned int) _index;
        D.18970 = D.18969 * 8;
        _objptr = _objptr + D.18970;
        D.18971 = _index + 1;
        _bmap = _bmap >> D.18971;
        D.18972 = *_objptr;
        if (D.18972 != 0B) goto <D.18973>; else goto <D.18974>;
        <D.18973>:
        D.18972 = *_objptr;
        D.18975 = sgen_ptr_in_nursery (D.18972);
        if (D.18975 == 0) goto <D.18976>; else goto <D.18977>;
        <D.18976>:
        D.18972 = *_objptr;
        D.18978 = is_major_or_los_object_marked (D.18972);
        if (D.18978 == 0) goto <D.18979>; else goto <D.18980>;
        <D.18979>:
        D.18981 = sgen_get_remset ();
        D.18982 = D.18981->find_address_with_cards;
        D.18983 = D.18982 (start, cards, _objptr);
        if (D.18983 == 0) goto <D.18984>; else goto <D.18985>;
        <D.18984>:
        gc_debug_level.49 = gc_debug_level;
        D.18942 = gc_debug_level.49 >= 0;
        D.18943 = (long int) D.18942;
        D.18944 = __builtin_expect (D.18943, 0);
        if (D.18944 != 0) goto <D.18986>; else goto <D.18987>;
        <D.18986>:
        D.18947 = MEM[(struct MonoObject *)start].vtable;
        D.18948 = D.18947->klass;
        D.18949 = D.18948->name;
        D.18947 = MEM[(struct MonoObject *)start].vtable;
        D.18948 = D.18947->klass;
        D.18950 = D.18948->name_space;
        _objptr.52 = (long int) _objptr;
        start.51 = (long int) start;
        D.18989 = _objptr.52 - start.51;
        D.18972 = *_objptr;
        gc_debug_file.48 = gc_debug_file;
        fprintf (gc_debug_file.48, "major->major reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.18972, D.18989, start, D.18950, D.18949);
        gc_debug_file.48 = gc_debug_file;
        fflush (gc_debug_file.48);
        <D.18987>:
        <D.18985>:
        <D.18980>:
        <D.18977>:
        <D.18974>:
        _objptr = _objptr + 8;
      }
      goto <D.17817>;
      <D.17816>:
      {
        int _index;

        _index = __builtin_ctzl (_bmap);
        D.18990 = (long unsigned int) _index;
        D.18991 = D.18990 * 8;
        _objptr = _objptr + D.18991;
        D.18992 = _index + 1;
        _bmap = _bmap >> D.18992;
        D.18972 = *_objptr;
        if (D.18972 != 0B) goto <D.18993>; else goto <D.18994>;
        <D.18993>:
        D.18972 = *_objptr;
        D.18995 = sgen_ptr_in_nursery (D.18972);
        if (D.18995 == 0) goto <D.18996>; else goto <D.18997>;
        <D.18996>:
        D.18972 = *_objptr;
        D.18998 = is_major_or_los_object_marked (D.18972);
        if (D.18998 == 0) goto <D.18999>; else goto <D.19000>;
        <D.18999>:
        D.19001 = sgen_get_remset ();
        D.19002 = D.19001->find_address_with_cards;
        D.19003 = D.19002 (start, cards, _objptr);
        if (D.19003 == 0) goto <D.19004>; else goto <D.19005>;
        <D.19004>:
        gc_debug_level.49 = gc_debug_level;
        D.18942 = gc_debug_level.49 >= 0;
        D.18943 = (long int) D.18942;
        D.18944 = __builtin_expect (D.18943, 0);
        if (D.18944 != 0) goto <D.19006>; else goto <D.19007>;
        <D.19006>:
        D.18947 = MEM[(struct MonoObject *)start].vtable;
        D.18948 = D.18947->klass;
        D.18949 = D.18948->name;
        D.18947 = MEM[(struct MonoObject *)start].vtable;
        D.18948 = D.18947->klass;
        D.18950 = D.18948->name_space;
        _objptr.52 = (long int) _objptr;
        start.51 = (long int) start;
        D.18989 = _objptr.52 - start.51;
        D.18972 = *_objptr;
        gc_debug_file.48 = gc_debug_file;
        fprintf (gc_debug_file.48, "major->major reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.18972, D.18989, start, D.18950, D.18949);
        gc_debug_file.48 = gc_debug_file;
        fflush (gc_debug_file.48);
        <D.19007>:
        <D.19005>:
        <D.19000>:
        <D.18997>:
        <D.18994>:
        _objptr = _objptr + 8;
      }
      <D.17817>:
      if (_bmap != 0) goto <D.17816>; else goto <D.17818>;
      <D.17818>:
    }
    goto <D.17810>;
    <D.17819>:
    D.19008 = desc & 4294950912;
    if (D.19008 != 0) goto <D.19009>; else goto <D.19010>;
    <D.19009>:
    {
      int el_size;
      int etype;

      D.19011 = desc >> 3;
      D.19012 = (int) D.19011;
      el_size = D.19012 & 1023;
      D.19013 = (int) desc;
      etype = D.19013 & 49152;
      if (etype == 16384) goto <D.19014>; else goto <D.19015>;
      <D.19014>:
      {
        void * * p;
        void * * end_refs;

        p = start + 32;
        D.19016 = MEM[(struct MonoArray *)start].max_length;
        el_size.53 = (unsigned int) el_size;
        D.19018 = D.19016 * el_size.53;
        D.19019 = (sizetype) D.19018;
        end_refs = p + D.19019;
        goto <D.17825>;
        <D.17824>:
        D.19020 = *p;
        if (D.19020 != 0B) goto <D.19021>; else goto <D.19022>;
        <D.19021>:
        D.19020 = *p;
        D.19023 = sgen_ptr_in_nursery (D.19020);
        if (D.19023 == 0) goto <D.19024>; else goto <D.19025>;
        <D.19024>:
        D.19020 = *p;
        D.19026 = is_major_or_los_object_marked (D.19020);
        if (D.19026 == 0) goto <D.19027>; else goto <D.19028>;
        <D.19027>:
        D.19029 = sgen_get_remset ();
        D.19030 = D.19029->find_address_with_cards;
        D.19031 = D.19030 (start, cards, p);
        if (D.19031 == 0) goto <D.19032>; else goto <D.19033>;
        <D.19032>:
        gc_debug_level.49 = gc_debug_level;
        D.18942 = gc_debug_level.49 >= 0;
        D.18943 = (long int) D.18942;
        D.18944 = __builtin_expect (D.18943, 0);
        if (D.18944 != 0) goto <D.19034>; else goto <D.19035>;
        <D.19034>:
        D.18947 = MEM[(struct MonoObject *)start].vtable;
        D.18948 = D.18947->klass;
        D.18949 = D.18948->name;
        D.18947 = MEM[(struct MonoObject *)start].vtable;
        D.18948 = D.18947->klass;
        D.18950 = D.18948->name_space;
        p.54 = (long int) p;
        start.51 = (long int) start;
        D.19037 = p.54 - start.51;
        D.19020 = *p;
        gc_debug_file.48 = gc_debug_file;
        fprintf (gc_debug_file.48, "major->major reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.19020, D.19037, start, D.18950, D.18949);
        gc_debug_file.48 = gc_debug_file;
        fflush (gc_debug_file.48);
        <D.19035>:
        <D.19033>:
        <D.19028>:
        <D.19025>:
        <D.19022>:
        p = p + 8;
        <D.17825>:
        if (p < end_refs) goto <D.17824>; else goto <D.17826>;
        <D.17826>:
      }
      goto <D.19038>;
      <D.19015>:
      if (etype == 32768) goto <D.19039>; else goto <D.19040>;
      <D.19039>:
      {
        int offset;
        int num_refs;
        char * e_start;
        char * e_end;

        D.18921 = desc >> 16;
        D.19041 = (int) D.18921;
        offset = D.19041 & 255;
        D.18924 = desc >> 24;
        D.19042 = (int) D.18924;
        num_refs = D.19042 & 255;
        e_start = start + 32;
        D.19016 = MEM[(struct MonoArray *)start].max_length;
        el_size.53 = (unsigned int) el_size;
        D.19018 = D.19016 * el_size.53;
        D.19019 = (sizetype) D.19018;
        e_end = e_start + D.19019;
        goto <D.17837>;
        <D.17836>:
        {
          void * * p;
          int i;

          p = e_start;
          D.19043 = (long unsigned int) offset;
          D.19044 = D.19043 * 8;
          p = p + D.19044;
          i = 0;
          goto <D.17834>;
          <D.17833>:
          D.19045 = (long unsigned int) i;
          D.19046 = D.19045 * 8;
          D.19047 = p + D.19046;
          D.19048 = *D.19047;
          if (D.19048 != 0B) goto <D.19049>; else goto <D.19050>;
          <D.19049>:
          D.19045 = (long unsigned int) i;
          D.19046 = D.19045 * 8;
          D.19047 = p + D.19046;
          D.19048 = *D.19047;
          D.19051 = sgen_ptr_in_nursery (D.19048);
          if (D.19051 == 0) goto <D.19052>; else goto <D.19053>;
          <D.19052>:
          D.19045 = (long unsigned int) i;
          D.19046 = D.19045 * 8;
          D.19047 = p + D.19046;
          D.19048 = *D.19047;
          D.19054 = is_major_or_los_object_marked (D.19048);
          if (D.19054 == 0) goto <D.19055>; else goto <D.19056>;
          <D.19055>:
          D.19057 = sgen_get_remset ();
          D.19058 = D.19057->find_address_with_cards;
          D.19045 = (long unsigned int) i;
          D.19046 = D.19045 * 8;
          D.19059 = p + D.19046;
          D.19060 = D.19058 (start, cards, D.19059);
          if (D.19060 == 0) goto <D.19061>; else goto <D.19062>;
          <D.19061>:
          gc_debug_level.49 = gc_debug_level;
          D.18942 = gc_debug_level.49 >= 0;
          D.18943 = (long int) D.18942;
          D.18944 = __builtin_expect (D.18943, 0);
          if (D.18944 != 0) goto <D.19063>; else goto <D.19064>;
          <D.19063>:
          D.18947 = MEM[(struct MonoObject *)start].vtable;
          D.18948 = D.18947->klass;
          D.18949 = D.18948->name;
          D.18947 = MEM[(struct MonoObject *)start].vtable;
          D.18948 = D.18947->klass;
          D.18950 = D.18948->name_space;
          D.19045 = (long unsigned int) i;
          D.19046 = D.19045 * 8;
          D.19059 = p + D.19046;
          D.19065 = (long int) D.19059;
          start.51 = (long int) start;
          D.19066 = D.19065 - start.51;
          D.19045 = (long unsigned int) i;
          D.19046 = D.19045 * 8;
          D.19047 = p + D.19046;
          D.19048 = *D.19047;
          gc_debug_file.48 = gc_debug_file;
          fprintf (gc_debug_file.48, "major->major reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.19048, D.19066, start, D.18950, D.18949);
          gc_debug_file.48 = gc_debug_file;
          fflush (gc_debug_file.48);
          <D.19064>:
          <D.19062>:
          <D.19056>:
          <D.19053>:
          <D.19050>:
          i = i + 1;
          <D.17834>:
          if (i < num_refs) goto <D.17833>; else goto <D.17835>;
          <D.17835>:
          D.19067 = (sizetype) el_size;
          e_start = e_start + D.19067;
        }
        <D.17837>:
        if (e_start < e_end) goto <D.17836>; else goto <D.17838>;
        <D.17838>:
      }
      goto <D.19068>;
      <D.19040>:
      if (etype == 49152) goto <D.19069>; else goto <D.19070>;
      <D.19069>:
      {
        char * e_start;
        char * e_end;

        e_start = start + 32;
        D.19016 = MEM[(struct MonoArray *)start].max_length;
        el_size.53 = (unsigned int) el_size;
        D.19018 = D.19016 * el_size.53;
        D.19019 = (sizetype) D.19018;
        e_end = e_start + D.19019;
        goto <D.17847>;
        <D.17846>:
        {
          void * * p;
          gsize _bmap;

          p = e_start;
          _bmap = desc >> 16;
          goto <D.17844>;
          <D.17843>:
          D.19071 = _bmap & 1;
          if (D.19071 != 0) goto <D.19072>; else goto <D.19073>;
          <D.19072>:
          D.19074 = *p;
          if (D.19074 != 0B) goto <D.19075>; else goto <D.19076>;
          <D.19075>:
          D.19074 = *p;
          D.19077 = sgen_ptr_in_nursery (D.19074);
          if (D.19077 == 0) goto <D.19078>; else goto <D.19079>;
          <D.19078>:
          D.19074 = *p;
          D.19080 = is_major_or_los_object_marked (D.19074);
          if (D.19080 == 0) goto <D.19081>; else goto <D.19082>;
          <D.19081>:
          D.19083 = sgen_get_remset ();
          D.19084 = D.19083->find_address_with_cards;
          D.19085 = D.19084 (start, cards, p);
          if (D.19085 == 0) goto <D.19086>; else goto <D.19087>;
          <D.19086>:
          gc_debug_level.49 = gc_debug_level;
          D.18942 = gc_debug_level.49 >= 0;
          D.18943 = (long int) D.18942;
          D.18944 = __builtin_expect (D.18943, 0);
          if (D.18944 != 0) goto <D.19088>; else goto <D.19089>;
          <D.19088>:
          D.18947 = MEM[(struct MonoObject *)start].vtable;
          D.18948 = D.18947->klass;
          D.18949 = D.18948->name;
          D.18947 = MEM[(struct MonoObject *)start].vtable;
          D.18948 = D.18947->klass;
          D.18950 = D.18948->name_space;
          p.55 = (long int) p;
          start.51 = (long int) start;
          D.19091 = p.55 - start.51;
          D.19074 = *p;
          gc_debug_file.48 = gc_debug_file;
          fprintf (gc_debug_file.48, "major->major reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.19074, D.19091, start, D.18950, D.18949);
          gc_debug_file.48 = gc_debug_file;
          fflush (gc_debug_file.48);
          <D.19089>:
          <D.19087>:
          <D.19082>:
          <D.19079>:
          <D.19076>:
          <D.19073>:
          _bmap = _bmap >> 1;
          p = p + 8;
          <D.17844>:
          if (_bmap != 0) goto <D.17843>; else goto <D.17845>;
          <D.17845>:
          D.19067 = (sizetype) el_size;
          e_start = e_start + D.19067;
        }
        <D.17847>:
        if (e_start < e_end) goto <D.17846>; else goto <D.17848>;
        <D.17848>:
      }
      <D.19070>:
      <D.19068>:
      <D.19038>:
    }
    <D.19010>:
    goto <D.17810>;
    <D.17849>:
    {
      void * * _objptr;
      gsize _bmap;

      _objptr = start;
      _bmap = desc >> 3;
      _objptr = _objptr + 16;
      goto <D.17853>;
      <D.17852>:
      D.19092 = _bmap & 1;
      if (D.19092 != 0) goto <D.19093>; else goto <D.19094>;
      <D.19093>:
      D.19095 = *_objptr;
      if (D.19095 != 0B) goto <D.19096>; else goto <D.19097>;
      <D.19096>:
      D.19095 = *_objptr;
      D.19098 = sgen_ptr_in_nursery (D.19095);
      if (D.19098 == 0) goto <D.19099>; else goto <D.19100>;
      <D.19099>:
      D.19095 = *_objptr;
      D.19101 = is_major_or_los_object_marked (D.19095);
      if (D.19101 == 0) goto <D.19102>; else goto <D.19103>;
      <D.19102>:
      D.19104 = sgen_get_remset ();
      D.19105 = D.19104->find_address_with_cards;
      D.19106 = D.19105 (start, cards, _objptr);
      if (D.19106 == 0) goto <D.19107>; else goto <D.19108>;
      <D.19107>:
      gc_debug_level.49 = gc_debug_level;
      D.18942 = gc_debug_level.49 >= 0;
      D.18943 = (long int) D.18942;
      D.18944 = __builtin_expect (D.18943, 0);
      if (D.18944 != 0) goto <D.19109>; else goto <D.19110>;
      <D.19109>:
      D.18947 = MEM[(struct MonoObject *)start].vtable;
      D.18948 = D.18947->klass;
      D.18949 = D.18948->name;
      D.18947 = MEM[(struct MonoObject *)start].vtable;
      D.18948 = D.18947->klass;
      D.18950 = D.18948->name_space;
      _objptr.56 = (long int) _objptr;
      start.51 = (long int) start;
      D.19112 = _objptr.56 - start.51;
      D.19095 = *_objptr;
      gc_debug_file.48 = gc_debug_file;
      fprintf (gc_debug_file.48, "major->major reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.19095, D.19112, start, D.18950, D.18949);
      gc_debug_file.48 = gc_debug_file;
      fflush (gc_debug_file.48);
      <D.19110>:
      <D.19108>:
      <D.19103>:
      <D.19100>:
      <D.19097>:
      <D.19094>:
      _bmap = _bmap >> 1;
      _objptr = _objptr + 8;
      <D.17853>:
      if (_bmap != 0) goto <D.17852>; else goto <D.17854>;
      <D.17854>:
    }
    goto <D.17810>;
    <D.17855>:
    {
      void * * _objptr;
      gsize * bitmap_data;
      int bwords;
      void * * start_run;

      _objptr = start;
      bitmap_data = sgen_get_complex_descriptor (desc);
      D.19113 = *bitmap_data;
      D.19114 = (unsigned int) D.19113;
      D.19115 = D.19114 + 4294967295;
      bwords = (int) D.19115;
      start_run = _objptr;
      bitmap_data = bitmap_data + 8;
      if (0 != 0) goto <D.19116>; else goto <D.19117>;
      <D.19116>:
      {
        struct MonoObject * myobj;

        myobj = start;
        D.19118 = myobj->vtable;
        D.19119 = D.19118->klass;
        D.19120 = D.19119->name;
        D.19118 = myobj->vtable;
        D.19119 = D.19118->klass;
        D.19121 = D.19119->name_space;
        monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", bwords, start, desc, D.19121, D.19120);
      }
      <D.19117>:
      goto <D.17866>;
      <D.17865>:
      {
        gsize _bmap;

        bitmap_data.57 = bitmap_data;
        bitmap_data = bitmap_data.57 + 8;
        _bmap = *bitmap_data.57;
        _objptr = start_run;
        goto <D.17863>;
        <D.17862>:
        D.19123 = _bmap & 1;
        if (D.19123 != 0) goto <D.19124>; else goto <D.19125>;
        <D.19124>:
        D.19126 = *_objptr;
        if (D.19126 != 0B) goto <D.19127>; else goto <D.19128>;
        <D.19127>:
        D.19126 = *_objptr;
        D.19129 = sgen_ptr_in_nursery (D.19126);
        if (D.19129 == 0) goto <D.19130>; else goto <D.19131>;
        <D.19130>:
        D.19126 = *_objptr;
        D.19132 = is_major_or_los_object_marked (D.19126);
        if (D.19132 == 0) goto <D.19133>; else goto <D.19134>;
        <D.19133>:
        D.19135 = sgen_get_remset ();
        D.19136 = D.19135->find_address_with_cards;
        D.19137 = D.19136 (start, cards, _objptr);
        if (D.19137 == 0) goto <D.19138>; else goto <D.19139>;
        <D.19138>:
        gc_debug_level.49 = gc_debug_level;
        D.18942 = gc_debug_level.49 >= 0;
        D.18943 = (long int) D.18942;
        D.18944 = __builtin_expect (D.18943, 0);
        if (D.18944 != 0) goto <D.19140>; else goto <D.19141>;
        <D.19140>:
        D.18947 = MEM[(struct MonoObject *)start].vtable;
        D.18948 = D.18947->klass;
        D.18949 = D.18948->name;
        D.18947 = MEM[(struct MonoObject *)start].vtable;
        D.18948 = D.18947->klass;
        D.18950 = D.18948->name_space;
        _objptr.58 = (long int) _objptr;
        start.51 = (long int) start;
        D.19143 = _objptr.58 - start.51;
        D.19126 = *_objptr;
        gc_debug_file.48 = gc_debug_file;
        fprintf (gc_debug_file.48, "major->major reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.19126, D.19143, start, D.18950, D.18949);
        gc_debug_file.48 = gc_debug_file;
        fflush (gc_debug_file.48);
        <D.19141>:
        <D.19139>:
        <D.19134>:
        <D.19131>:
        <D.19128>:
        <D.19125>:
        _bmap = _bmap >> 1;
        _objptr = _objptr + 8;
        <D.17863>:
        if (_bmap != 0) goto <D.17862>; else goto <D.17864>;
        <D.17864>:
        start_run = start_run + 512;
      }
      <D.17866>:
      bwords.59 = bwords;
      bwords = bwords.59 + -1;
      if (bwords.59 > 0) goto <D.17865>; else goto <D.17867>;
      <D.17867>:
    }
    goto <D.17810>;
    <D.17868>:
    {
      gsize * mbitmap_data;
      int mbwords;
      int el_size;
      char * e_start;
      char * e_end;

      D.19145 = vt->desc;
      mbitmap_data = sgen_get_complex_descriptor (D.19145);
      mbitmap_data.60 = mbitmap_data;
      mbitmap_data = mbitmap_data.60 + 8;
      D.19147 = *mbitmap_data.60;
      D.19148 = (unsigned int) D.19147;
      D.19149 = D.19148 + 4294967295;
      mbwords = (int) D.19149;
      D.19150 = vt->klass;
      el_size = mono_array_element_size (D.19150);
      e_start = start + 32;
      D.19016 = MEM[(struct MonoArray *)start].max_length;
      el_size.61 = (unsigned int) el_size;
      D.19152 = D.19016 * el_size.61;
      D.19153 = (sizetype) D.19152;
      e_end = e_start + D.19153;
      if (0 != 0) goto <D.19154>; else goto <D.19155>;
      <D.19154>:
      D.19150 = vt->klass;
      D.19156 = D.19150->name;
      D.19150 = vt->klass;
      D.19157 = D.19150->name_space;
      D.19145 = vt->desc;
      monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", mbwords, start, D.19145, D.19157, D.19156);
      <D.19155>:
      goto <D.17886>;
      <D.17885>:
      {
        void * * _objptr;
        gsize * bitmap_data;
        unsigned int bwords;

        _objptr = e_start;
        bitmap_data = mbitmap_data;
        bwords = (unsigned int) mbwords;
        goto <D.17883>;
        <D.17882>:
        {
          gsize _bmap;
          void * * start_run;

          bitmap_data.62 = bitmap_data;
          bitmap_data = bitmap_data.62 + 8;
          _bmap = *bitmap_data.62;
          start_run = _objptr;
          goto <D.17880>;
          <D.17879>:
          D.19159 = _bmap & 1;
          if (D.19159 != 0) goto <D.19160>; else goto <D.19161>;
          <D.19160>:
          D.19162 = *_objptr;
          if (D.19162 != 0B) goto <D.19163>; else goto <D.19164>;
          <D.19163>:
          D.19162 = *_objptr;
          D.19165 = sgen_ptr_in_nursery (D.19162);
          if (D.19165 == 0) goto <D.19166>; else goto <D.19167>;
          <D.19166>:
          D.19162 = *_objptr;
          D.19168 = is_major_or_los_object_marked (D.19162);
          if (D.19168 == 0) goto <D.19169>; else goto <D.19170>;
          <D.19169>:
          D.19171 = sgen_get_remset ();
          D.19172 = D.19171->find_address_with_cards;
          D.19173 = D.19172 (start, cards, _objptr);
          if (D.19173 == 0) goto <D.19174>; else goto <D.19175>;
          <D.19174>:
          gc_debug_level.49 = gc_debug_level;
          D.18942 = gc_debug_level.49 >= 0;
          D.18943 = (long int) D.18942;
          D.18944 = __builtin_expect (D.18943, 0);
          if (D.18944 != 0) goto <D.19176>; else goto <D.19177>;
          <D.19176>:
          D.18947 = MEM[(struct MonoObject *)start].vtable;
          D.18948 = D.18947->klass;
          D.18949 = D.18948->name;
          D.18947 = MEM[(struct MonoObject *)start].vtable;
          D.18948 = D.18947->klass;
          D.18950 = D.18948->name_space;
          _objptr.63 = (long int) _objptr;
          start.51 = (long int) start;
          D.19179 = _objptr.63 - start.51;
          D.19162 = *_objptr;
          gc_debug_file.48 = gc_debug_file;
          fprintf (gc_debug_file.48, "major->major reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.19162, D.19179, start, D.18950, D.18949);
          gc_debug_file.48 = gc_debug_file;
          fflush (gc_debug_file.48);
          <D.19177>:
          <D.19175>:
          <D.19170>:
          <D.19167>:
          <D.19164>:
          <D.19161>:
          _bmap = _bmap >> 1;
          _objptr = _objptr + 8;
          <D.17880>:
          if (_bmap != 0) goto <D.17879>; else goto <D.17881>;
          <D.17881>:
          _objptr = start_run + 512;
        }
        <D.17883>:
        bwords.64 = bwords;
        bwords = bwords.64 + 4294967295;
        if (bwords.64 != 0) goto <D.17882>; else goto <D.17884>;
        <D.17884>:
        D.19181 = (sizetype) el_size;
        e_start = e_start + D.19181;
      }
      <D.17886>:
      if (e_start < e_end) goto <D.17885>; else goto <D.17887>;
      <D.17887>:
    }
    goto <D.17810>;
    <D.17888>:
    goto <D.17810>;
    <D.17889>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 111);
    <D.17810>:
  }
}


is_major_or_los_object_marked (char * obj)
{
  unsigned int D.19184;
  gboolean D.19187;
  struct SgenMajorCollector * D.19188;
  gboolean (*<T2c96>) (char *) D.19189;

  D.19184 = sgen_safe_object_get_size (obj);
  if (D.19184 > 8000) goto <D.19185>; else goto <D.19186>;
  <D.19185>:
  D.19187 = sgen_los_object_is_pinned (obj);
  return D.19187;
  <D.19186>:
  D.19188 = sgen_get_major_collector ();
  D.19189 = D.19188->is_object_live;
  D.19187 = D.19189 (obj);
  return D.19187;
}


sgen_check_major_refs ()
{
  void (*<T2cf0>) (gboolean, gboolean, void (*IterateObjectCallbackFunc) (char *, size_t, void *), void *) D.19191;

  D.19191 = major_collector.iterate_objects;
  D.19191 (1, 1, check_major_refs_callback, 0B);
  sgen_los_iterate_objects (check_major_refs_callback, 0B);
}


check_major_refs_callback (char * start, size_t size, void * dummy)
{
  long unsigned int D.19192;
  long unsigned int D.19193;
  long unsigned int D.19194;
  long unsigned int D.19195;
  long unsigned int D.19198;
  long unsigned int D.19199;
  long unsigned int D.19200;
  long unsigned int D.19201;
  long unsigned int D.19202;
  long unsigned int D.19203;
  void * D.19204;
  long unsigned int D.19207;
  long unsigned int D.19208;
  unsigned int D.19211;
  long int _objptr.65;
  long int start.66;
  long int D.19214;
  unsigned int D.19219;
  long unsigned int D.19220;
  long unsigned int D.19221;
  int D.19222;
  void * D.19223;
  long unsigned int D.19226;
  long unsigned int D.19227;
  unsigned int D.19230;
  long int _objptr.67;
  long int D.19232;
  long unsigned int D.19233;
  long unsigned int D.19234;
  int D.19235;
  unsigned int D.19240;
  long unsigned int D.19241;
  long unsigned int D.19244;
  int D.19245;
  int D.19246;
  unsigned int D.19249;
  unsigned int el_size.68;
  unsigned int D.19251;
  sizetype D.19252;
  void * D.19253;
  long unsigned int D.19256;
  long unsigned int D.19257;
  unsigned int D.19260;
  long int p.69;
  long int D.19262;
  int D.19266;
  int D.19267;
  long unsigned int D.19268;
  long unsigned int D.19269;
  long unsigned int D.19270;
  long unsigned int D.19271;
  void * * D.19272;
  void * D.19273;
  long unsigned int D.19276;
  long unsigned int D.19277;
  unsigned int D.19280;
  sizetype D.19281;
  char * D.19282;
  long int D.19283;
  long int D.19284;
  sizetype D.19285;
  long unsigned int D.19289;
  void * D.19292;
  long unsigned int D.19295;
  long unsigned int D.19296;
  unsigned int D.19299;
  long int p.70;
  long int D.19301;
  long unsigned int D.19302;
  void * D.19305;
  long unsigned int D.19308;
  long unsigned int D.19309;
  unsigned int D.19312;
  long int _objptr.71;
  long int D.19314;
  long unsigned int D.19315;
  unsigned int D.19316;
  unsigned int D.19317;
  struct MonoVTable * D.19320;
  struct MonoClass * D.19321;
  const char * D.19322;
  const char * D.19323;
  gsize * bitmap_data.72;
  long unsigned int D.19325;
  void * D.19328;
  long unsigned int D.19331;
  long unsigned int D.19332;
  unsigned int D.19335;
  long int _objptr.73;
  long int D.19337;
  int bwords.74;
  long unsigned int D.19339;
  gsize * mbitmap_data.75;
  long unsigned int D.19341;
  unsigned int D.19342;
  unsigned int D.19343;
  struct MonoClass * D.19344;
  unsigned int el_size.76;
  unsigned int D.19346;
  sizetype D.19347;
  const char * D.19350;
  const char * D.19351;
  gsize * bitmap_data.77;
  long unsigned int D.19353;
  void * D.19356;
  long unsigned int D.19359;
  long unsigned int D.19360;
  unsigned int D.19363;
  long int _objptr.78;
  long int D.19365;
  unsigned int bwords.79;
  sizetype D.19367;

  {
    struct GCVTable * vt;
    mword desc;

    D.19192 = MEM[(mword *)start];
    D.19193 = D.19192 & 18446744073709551612;
    vt = (struct GCVTable *) D.19193;
    desc = vt->desc;
    D.19194 = desc & 7;
    switch (D.19194) <default: <D.17995>, case 1: <D.17900>, case 2: <D.17909>, case 3: <D.17959>, case 4: <D.17919>, case 5: <D.17952>, case 6: <D.17973>, case 7: <D.17994>>
    <D.17900>:
    D.19195 = desc & 4294901760;
    if (D.19195 != 0) goto <D.19196>; else goto <D.19197>;
    <D.19196>:
    {
      void * * _objptr_end;
      void * * _objptr;

      _objptr = start;
      D.19198 = desc >> 16;
      D.19199 = D.19198 & 255;
      D.19200 = D.19199 * 8;
      _objptr = _objptr + D.19200;
      D.19201 = desc >> 24;
      D.19202 = D.19201 & 255;
      D.19203 = D.19202 * 8;
      _objptr_end = _objptr + D.19203;
      D.19204 = *_objptr;
      if (D.19204 != 0B) goto <D.19205>; else goto <D.19206>;
      <D.19205>:
      D.19204 = *_objptr;
      D.19207 = MEM[(mword *)D.19204];
      D.19208 = D.19207 & 18446744073709551612;
      if (D.19208 == 0) goto <D.19209>; else goto <D.19210>;
      <D.19209>:
      D.19211 = sgen_safe_object_get_size (start);
      _objptr.65 = (long int) _objptr;
      start.66 = (long int) start;
      D.19214 = _objptr.65 - start.66;
      monoeg_g_log (0B, 4, "Could not load vtable for obj %p slot %d (size %d)", start, D.19214, D.19211);
      <D.17903>:
      goto <D.17903>;
      <D.19210>:
      <D.19206>:
      _objptr = _objptr + 8;
      goto <D.17906>;
      <D.17905>:
      D.19204 = *_objptr;
      if (D.19204 != 0B) goto <D.19215>; else goto <D.19216>;
      <D.19215>:
      D.19204 = *_objptr;
      D.19207 = MEM[(mword *)D.19204];
      D.19208 = D.19207 & 18446744073709551612;
      if (D.19208 == 0) goto <D.19217>; else goto <D.19218>;
      <D.19217>:
      D.19219 = sgen_safe_object_get_size (start);
      _objptr.65 = (long int) _objptr;
      start.66 = (long int) start;
      D.19214 = _objptr.65 - start.66;
      monoeg_g_log (0B, 4, "Could not load vtable for obj %p slot %d (size %d)", start, D.19214, D.19219);
      <D.17904>:
      goto <D.17904>;
      <D.19218>:
      <D.19216>:
      _objptr = _objptr + 8;
      <D.17906>:
      if (_objptr < _objptr_end) goto <D.17905>; else goto <D.17907>;
      <D.17907>:
    }
    <D.19197>:
    goto <D.17908>;
    <D.17909>:
    {
      void * * _objptr;
      gsize _bmap;

      _objptr = start;
      _bmap = desc >> 16;
      _objptr = _objptr + 16;
      {
        int _index;

        _index = __builtin_ctzl (_bmap);
        D.19220 = (long unsigned int) _index;
        D.19221 = D.19220 * 8;
        _objptr = _objptr + D.19221;
        D.19222 = _index + 1;
        _bmap = _bmap >> D.19222;
        D.19223 = *_objptr;
        if (D.19223 != 0B) goto <D.19224>; else goto <D.19225>;
        <D.19224>:
        D.19223 = *_objptr;
        D.19226 = MEM[(mword *)D.19223];
        D.19227 = D.19226 & 18446744073709551612;
        if (D.19227 == 0) goto <D.19228>; else goto <D.19229>;
        <D.19228>:
        D.19230 = sgen_safe_object_get_size (start);
        _objptr.67 = (long int) _objptr;
        start.66 = (long int) start;
        D.19232 = _objptr.67 - start.66;
        monoeg_g_log (0B, 4, "Could not load vtable for obj %p slot %d (size %d)", start, D.19232, D.19230);
        <D.17913>:
        goto <D.17913>;
        <D.19229>:
        <D.19225>:
        _objptr = _objptr + 8;
      }
      goto <D.17917>;
      <D.17916>:
      {
        int _index;

        _index = __builtin_ctzl (_bmap);
        D.19233 = (long unsigned int) _index;
        D.19234 = D.19233 * 8;
        _objptr = _objptr + D.19234;
        D.19235 = _index + 1;
        _bmap = _bmap >> D.19235;
        D.19223 = *_objptr;
        if (D.19223 != 0B) goto <D.19236>; else goto <D.19237>;
        <D.19236>:
        D.19223 = *_objptr;
        D.19226 = MEM[(mword *)D.19223];
        D.19227 = D.19226 & 18446744073709551612;
        if (D.19227 == 0) goto <D.19238>; else goto <D.19239>;
        <D.19238>:
        D.19240 = sgen_safe_object_get_size (start);
        _objptr.67 = (long int) _objptr;
        start.66 = (long int) start;
        D.19232 = _objptr.67 - start.66;
        monoeg_g_log (0B, 4, "Could not load vtable for obj %p slot %d (size %d)", start, D.19232, D.19240);
        <D.17915>:
        goto <D.17915>;
        <D.19239>:
        <D.19237>:
        _objptr = _objptr + 8;
      }
      <D.17917>:
      if (_bmap != 0) goto <D.17916>; else goto <D.17918>;
      <D.17918>:
    }
    goto <D.17908>;
    <D.17919>:
    D.19241 = desc & 4294950912;
    if (D.19241 != 0) goto <D.19242>; else goto <D.19243>;
    <D.19242>:
    {
      int el_size;
      int etype;

      D.19244 = desc >> 3;
      D.19245 = (int) D.19244;
      el_size = D.19245 & 1023;
      D.19246 = (int) desc;
      etype = D.19246 & 49152;
      if (etype == 16384) goto <D.19247>; else goto <D.19248>;
      <D.19247>:
      {
        void * * p;
        void * * end_refs;

        p = start + 32;
        D.19249 = MEM[(struct MonoArray *)start].max_length;
        el_size.68 = (unsigned int) el_size;
        D.19251 = D.19249 * el_size.68;
        D.19252 = (sizetype) D.19251;
        end_refs = p + D.19252;
        goto <D.17926>;
        <D.17925>:
        D.19253 = *p;
        if (D.19253 != 0B) goto <D.19254>; else goto <D.19255>;
        <D.19254>:
        D.19253 = *p;
        D.19256 = MEM[(mword *)D.19253];
        D.19257 = D.19256 & 18446744073709551612;
        if (D.19257 == 0) goto <D.19258>; else goto <D.19259>;
        <D.19258>:
        D.19260 = sgen_safe_object_get_size (start);
        p.69 = (long int) p;
        start.66 = (long int) start;
        D.19262 = p.69 - start.66;
        monoeg_g_log (0B, 4, "Could not load vtable for obj %p slot %d (size %d)", start, D.19262, D.19260);
        <D.17924>:
        goto <D.17924>;
        <D.19259>:
        <D.19255>:
        p = p + 8;
        <D.17926>:
        if (p < end_refs) goto <D.17925>; else goto <D.17927>;
        <D.17927>:
      }
      goto <D.19263>;
      <D.19248>:
      if (etype == 32768) goto <D.19264>; else goto <D.19265>;
      <D.19264>:
      {
        int offset;
        int num_refs;
        char * e_start;
        char * e_end;

        D.19198 = desc >> 16;
        D.19266 = (int) D.19198;
        offset = D.19266 & 255;
        D.19201 = desc >> 24;
        D.19267 = (int) D.19201;
        num_refs = D.19267 & 255;
        e_start = start + 32;
        D.19249 = MEM[(struct MonoArray *)start].max_length;
        el_size.68 = (unsigned int) el_size;
        D.19251 = D.19249 * el_size.68;
        D.19252 = (sizetype) D.19251;
        e_end = e_start + D.19252;
        goto <D.17939>;
        <D.17938>:
        {
          void * * p;
          int i;

          p = e_start;
          D.19268 = (long unsigned int) offset;
          D.19269 = D.19268 * 8;
          p = p + D.19269;
          i = 0;
          goto <D.17936>;
          <D.17935>:
          D.19270 = (long unsigned int) i;
          D.19271 = D.19270 * 8;
          D.19272 = p + D.19271;
          D.19273 = *D.19272;
          if (D.19273 != 0B) goto <D.19274>; else goto <D.19275>;
          <D.19274>:
          D.19270 = (long unsigned int) i;
          D.19271 = D.19270 * 8;
          D.19272 = p + D.19271;
          D.19273 = *D.19272;
          D.19276 = MEM[(mword *)D.19273];
          D.19277 = D.19276 & 18446744073709551612;
          if (D.19277 == 0) goto <D.19278>; else goto <D.19279>;
          <D.19278>:
          D.19280 = sgen_safe_object_get_size (start);
          D.19281 = (sizetype) i;
          D.19282 = p + D.19281;
          D.19283 = (long int) D.19282;
          start.66 = (long int) start;
          D.19284 = D.19283 - start.66;
          monoeg_g_log (0B, 4, "Could not load vtable for obj %p slot %d (size %d)", start, D.19284, D.19280);
          <D.17934>:
          goto <D.17934>;
          <D.19279>:
          <D.19275>:
          i = i + 1;
          <D.17936>:
          if (i < num_refs) goto <D.17935>; else goto <D.17937>;
          <D.17937>:
          D.19285 = (sizetype) el_size;
          e_start = e_start + D.19285;
        }
        <D.17939>:
        if (e_start < e_end) goto <D.17938>; else goto <D.17940>;
        <D.17940>:
      }
      goto <D.19286>;
      <D.19265>:
      if (etype == 49152) goto <D.19287>; else goto <D.19288>;
      <D.19287>:
      {
        char * e_start;
        char * e_end;

        e_start = start + 32;
        D.19249 = MEM[(struct MonoArray *)start].max_length;
        el_size.68 = (unsigned int) el_size;
        D.19251 = D.19249 * el_size.68;
        D.19252 = (sizetype) D.19251;
        e_end = e_start + D.19252;
        goto <D.17950>;
        <D.17949>:
        {
          void * * p;
          gsize _bmap;

          p = e_start;
          _bmap = desc >> 16;
          goto <D.17947>;
          <D.17946>:
          D.19289 = _bmap & 1;
          if (D.19289 != 0) goto <D.19290>; else goto <D.19291>;
          <D.19290>:
          D.19292 = *p;
          if (D.19292 != 0B) goto <D.19293>; else goto <D.19294>;
          <D.19293>:
          D.19292 = *p;
          D.19295 = MEM[(mword *)D.19292];
          D.19296 = D.19295 & 18446744073709551612;
          if (D.19296 == 0) goto <D.19297>; else goto <D.19298>;
          <D.19297>:
          D.19299 = sgen_safe_object_get_size (start);
          p.70 = (long int) p;
          start.66 = (long int) start;
          D.19301 = p.70 - start.66;
          monoeg_g_log (0B, 4, "Could not load vtable for obj %p slot %d (size %d)", start, D.19301, D.19299);
          <D.17945>:
          goto <D.17945>;
          <D.19298>:
          <D.19294>:
          <D.19291>:
          _bmap = _bmap >> 1;
          p = p + 8;
          <D.17947>:
          if (_bmap != 0) goto <D.17946>; else goto <D.17948>;
          <D.17948>:
          D.19285 = (sizetype) el_size;
          e_start = e_start + D.19285;
        }
        <D.17950>:
        if (e_start < e_end) goto <D.17949>; else goto <D.17951>;
        <D.17951>:
      }
      <D.19288>:
      <D.19286>:
      <D.19263>:
    }
    <D.19243>:
    goto <D.17908>;
    <D.17952>:
    {
      void * * _objptr;
      gsize _bmap;

      _objptr = start;
      _bmap = desc >> 3;
      _objptr = _objptr + 16;
      goto <D.17957>;
      <D.17956>:
      D.19302 = _bmap & 1;
      if (D.19302 != 0) goto <D.19303>; else goto <D.19304>;
      <D.19303>:
      D.19305 = *_objptr;
      if (D.19305 != 0B) goto <D.19306>; else goto <D.19307>;
      <D.19306>:
      D.19305 = *_objptr;
      D.19308 = MEM[(mword *)D.19305];
      D.19309 = D.19308 & 18446744073709551612;
      if (D.19309 == 0) goto <D.19310>; else goto <D.19311>;
      <D.19310>:
      D.19312 = sgen_safe_object_get_size (start);
      _objptr.71 = (long int) _objptr;
      start.66 = (long int) start;
      D.19314 = _objptr.71 - start.66;
      monoeg_g_log (0B, 4, "Could not load vtable for obj %p slot %d (size %d)", start, D.19314, D.19312);
      <D.17955>:
      goto <D.17955>;
      <D.19311>:
      <D.19307>:
      <D.19304>:
      _bmap = _bmap >> 1;
      _objptr = _objptr + 8;
      <D.17957>:
      if (_bmap != 0) goto <D.17956>; else goto <D.17958>;
      <D.17958>:
    }
    goto <D.17908>;
    <D.17959>:
    {
      void * * _objptr;
      gsize * bitmap_data;
      int bwords;
      void * * start_run;

      _objptr = start;
      bitmap_data = sgen_get_complex_descriptor (desc);
      D.19315 = *bitmap_data;
      D.19316 = (unsigned int) D.19315;
      D.19317 = D.19316 + 4294967295;
      bwords = (int) D.19317;
      start_run = _objptr;
      bitmap_data = bitmap_data + 8;
      if (0 != 0) goto <D.19318>; else goto <D.19319>;
      <D.19318>:
      {
        struct MonoObject * myobj;

        myobj = start;
        D.19320 = myobj->vtable;
        D.19321 = D.19320->klass;
        D.19322 = D.19321->name;
        D.19320 = myobj->vtable;
        D.19321 = D.19320->klass;
        D.19323 = D.19321->name_space;
        monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", bwords, start, desc, D.19323, D.19322);
      }
      <D.19319>:
      goto <D.17971>;
      <D.17970>:
      {
        gsize _bmap;

        bitmap_data.72 = bitmap_data;
        bitmap_data = bitmap_data.72 + 8;
        _bmap = *bitmap_data.72;
        _objptr = start_run;
        goto <D.17968>;
        <D.17967>:
        D.19325 = _bmap & 1;
        if (D.19325 != 0) goto <D.19326>; else goto <D.19327>;
        <D.19326>:
        D.19328 = *_objptr;
        if (D.19328 != 0B) goto <D.19329>; else goto <D.19330>;
        <D.19329>:
        D.19328 = *_objptr;
        D.19331 = MEM[(mword *)D.19328];
        D.19332 = D.19331 & 18446744073709551612;
        if (D.19332 == 0) goto <D.19333>; else goto <D.19334>;
        <D.19333>:
        D.19335 = sgen_safe_object_get_size (start);
        _objptr.73 = (long int) _objptr;
        start.66 = (long int) start;
        D.19337 = _objptr.73 - start.66;
        monoeg_g_log (0B, 4, "Could not load vtable for obj %p slot %d (size %d)", start, D.19337, D.19335);
        <D.17966>:
        goto <D.17966>;
        <D.19334>:
        <D.19330>:
        <D.19327>:
        _bmap = _bmap >> 1;
        _objptr = _objptr + 8;
        <D.17968>:
        if (_bmap != 0) goto <D.17967>; else goto <D.17969>;
        <D.17969>:
        start_run = start_run + 512;
      }
      <D.17971>:
      bwords.74 = bwords;
      bwords = bwords.74 + -1;
      if (bwords.74 > 0) goto <D.17970>; else goto <D.17972>;
      <D.17972>:
    }
    goto <D.17908>;
    <D.17973>:
    {
      gsize * mbitmap_data;
      int mbwords;
      int el_size;
      char * e_start;
      char * e_end;

      D.19339 = vt->desc;
      mbitmap_data = sgen_get_complex_descriptor (D.19339);
      mbitmap_data.75 = mbitmap_data;
      mbitmap_data = mbitmap_data.75 + 8;
      D.19341 = *mbitmap_data.75;
      D.19342 = (unsigned int) D.19341;
      D.19343 = D.19342 + 4294967295;
      mbwords = (int) D.19343;
      D.19344 = vt->klass;
      el_size = mono_array_element_size (D.19344);
      e_start = start + 32;
      D.19249 = MEM[(struct MonoArray *)start].max_length;
      el_size.76 = (unsigned int) el_size;
      D.19346 = D.19249 * el_size.76;
      D.19347 = (sizetype) D.19346;
      e_end = e_start + D.19347;
      if (0 != 0) goto <D.19348>; else goto <D.19349>;
      <D.19348>:
      D.19344 = vt->klass;
      D.19350 = D.19344->name;
      D.19344 = vt->klass;
      D.19351 = D.19344->name_space;
      D.19339 = vt->desc;
      monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", mbwords, start, D.19339, D.19351, D.19350);
      <D.19349>:
      goto <D.17992>;
      <D.17991>:
      {
        void * * _objptr;
        gsize * bitmap_data;
        unsigned int bwords;

        _objptr = e_start;
        bitmap_data = mbitmap_data;
        bwords = (unsigned int) mbwords;
        goto <D.17989>;
        <D.17988>:
        {
          gsize _bmap;
          void * * start_run;

          bitmap_data.77 = bitmap_data;
          bitmap_data = bitmap_data.77 + 8;
          _bmap = *bitmap_data.77;
          start_run = _objptr;
          goto <D.17986>;
          <D.17985>:
          D.19353 = _bmap & 1;
          if (D.19353 != 0) goto <D.19354>; else goto <D.19355>;
          <D.19354>:
          D.19356 = *_objptr;
          if (D.19356 != 0B) goto <D.19357>; else goto <D.19358>;
          <D.19357>:
          D.19356 = *_objptr;
          D.19359 = MEM[(mword *)D.19356];
          D.19360 = D.19359 & 18446744073709551612;
          if (D.19360 == 0) goto <D.19361>; else goto <D.19362>;
          <D.19361>:
          D.19363 = sgen_safe_object_get_size (start);
          _objptr.78 = (long int) _objptr;
          start.66 = (long int) start;
          D.19365 = _objptr.78 - start.66;
          monoeg_g_log (0B, 4, "Could not load vtable for obj %p slot %d (size %d)", start, D.19365, D.19363);
          <D.17984>:
          goto <D.17984>;
          <D.19362>:
          <D.19358>:
          <D.19355>:
          _bmap = _bmap >> 1;
          _objptr = _objptr + 8;
          <D.17986>:
          if (_bmap != 0) goto <D.17985>; else goto <D.17987>;
          <D.17987>:
          _objptr = start_run + 512;
        }
        <D.17989>:
        bwords.79 = bwords;
        bwords = bwords.79 + 4294967295;
        if (bwords.79 != 0) goto <D.17988>; else goto <D.17990>;
        <D.17990>:
        D.19367 = (sizetype) el_size;
        e_start = e_start + D.19367;
      }
      <D.17992>:
      if (e_start < e_end) goto <D.17991>; else goto <D.17993>;
      <D.17993>:
    }
    goto <D.17908>;
    <D.17994>:
    goto <D.17908>;
    <D.17995>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 111);
    <D.17908>:
  }
}


check_object (char * start)
{
  long unsigned int D.19371;
  long unsigned int D.19372;
  long unsigned int D.19373;
  long unsigned int D.19374;
  long unsigned int D.19377;
  long unsigned int D.19378;
  long unsigned int D.19379;
  long unsigned int D.19380;
  long unsigned int D.19381;
  long unsigned int D.19382;
  void * D.19383;
  const char * D.19386;
  _Bool D.19387;
  long int D.19388;
  long int D.19389;
  const char * D.19394;
  _Bool D.19395;
  long int D.19396;
  long int D.19397;
  long unsigned int D.19400;
  long unsigned int D.19401;
  int D.19402;
  void * D.19403;
  const char * D.19406;
  _Bool D.19407;
  long int D.19408;
  long int D.19409;
  long unsigned int D.19412;
  long unsigned int D.19413;
  int D.19414;
  const char * D.19417;
  _Bool D.19418;
  long int D.19419;
  long int D.19420;
  long unsigned int D.19423;
  long unsigned int D.19426;
  int D.19427;
  int D.19428;
  unsigned int D.19431;
  unsigned int el_size.80;
  unsigned int D.19433;
  sizetype D.19434;
  void * D.19435;
  const char * D.19438;
  _Bool D.19439;
  long int D.19440;
  long int D.19441;
  int D.19447;
  int D.19448;
  long unsigned int D.19449;
  long unsigned int D.19450;
  long unsigned int D.19451;
  long unsigned int D.19452;
  void * * D.19453;
  void * D.19454;
  const char * D.19457;
  _Bool D.19458;
  long int D.19459;
  long int D.19460;
  sizetype D.19463;
  long unsigned int D.19467;
  void * D.19470;
  const char * D.19473;
  _Bool D.19474;
  long int D.19475;
  long int D.19476;
  long unsigned int D.19479;
  void * D.19482;
  const char * D.19485;
  _Bool D.19486;
  long int D.19487;
  long int D.19488;
  long unsigned int D.19491;
  unsigned int D.19492;
  unsigned int D.19493;
  struct MonoVTable * D.19496;
  struct MonoClass * D.19497;
  const char * D.19498;
  const char * D.19499;
  gsize * bitmap_data.81;
  long unsigned int D.19501;
  void * D.19504;
  const char * D.19507;
  _Bool D.19508;
  long int D.19509;
  long int D.19510;
  int bwords.82;
  long unsigned int D.19514;
  gsize * mbitmap_data.83;
  long unsigned int D.19516;
  unsigned int D.19517;
  unsigned int D.19518;
  struct MonoClass * D.19519;
  unsigned int el_size.84;
  unsigned int D.19521;
  sizetype D.19522;
  const char * D.19525;
  const char * D.19526;
  gsize * bitmap_data.85;
  long unsigned int D.19528;
  void * D.19531;
  const char * D.19534;
  _Bool D.19535;
  long int D.19536;
  long int D.19537;
  unsigned int bwords.86;
  sizetype D.19541;

  if (start == 0B) goto <D.19369>; else goto <D.19370>;
  <D.19369>:
  return;
  <D.19370>:
  {
    struct GCVTable * vt;
    mword desc;

    D.19371 = MEM[(mword *)start];
    D.19372 = D.19371 & 18446744073709551612;
    vt = (struct GCVTable *) D.19372;
    desc = vt->desc;
    D.19373 = desc & 7;
    switch (D.19373) <default: <D.18089>, case 1: <D.18004>, case 2: <D.18011>, case 3: <D.18055>, case 4: <D.18019>, case 5: <D.18049>, case 6: <D.18068>, case 7: <D.18088>>
    <D.18004>:
    D.19374 = desc & 4294901760;
    if (D.19374 != 0) goto <D.19375>; else goto <D.19376>;
    <D.19375>:
    {
      void * * _objptr_end;
      void * * _objptr;

      _objptr = start;
      D.19377 = desc >> 16;
      D.19378 = D.19377 & 255;
      D.19379 = D.19378 * 8;
      _objptr = _objptr + D.19379;
      D.19380 = desc >> 24;
      D.19381 = D.19380 & 255;
      D.19382 = D.19381 * 8;
      _objptr_end = _objptr + D.19382;
      D.19383 = *_objptr;
      if (D.19383 != 0B) goto <D.19384>; else goto <D.19385>;
      <D.19384>:
      D.19383 = *_objptr;
      D.19386 = sgen_safe_name (D.19383);
      D.19387 = D.19386 == 0B;
      D.19388 = (long int) D.19387;
      D.19389 = __builtin_expect (D.19388, 0);
      if (D.19389 != 0) goto <D.19390>; else goto <D.19391>;
      <D.19390>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 64, "sgen_safe_name (*(_objptr)) != NULL");
      <D.19391>:
      <D.19385>:
      _objptr = _objptr + 8;
      goto <D.18008>;
      <D.18007>:
      D.19383 = *_objptr;
      if (D.19383 != 0B) goto <D.19392>; else goto <D.19393>;
      <D.19392>:
      D.19383 = *_objptr;
      D.19394 = sgen_safe_name (D.19383);
      D.19395 = D.19394 == 0B;
      D.19396 = (long int) D.19395;
      D.19397 = __builtin_expect (D.19396, 0);
      if (D.19397 != 0) goto <D.19398>; else goto <D.19399>;
      <D.19398>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 64, "sgen_safe_name (*(_objptr)) != NULL");
      <D.19399>:
      <D.19393>:
      _objptr = _objptr + 8;
      <D.18008>:
      if (_objptr < _objptr_end) goto <D.18007>; else goto <D.18009>;
      <D.18009>:
    }
    <D.19376>:
    goto <D.18010>;
    <D.18011>:
    {
      void * * _objptr;
      gsize _bmap;

      _objptr = start;
      _bmap = desc >> 16;
      _objptr = _objptr + 16;
      {
        int _index;

        _index = __builtin_ctzl (_bmap);
        D.19400 = (long unsigned int) _index;
        D.19401 = D.19400 * 8;
        _objptr = _objptr + D.19401;
        D.19402 = _index + 1;
        _bmap = _bmap >> D.19402;
        D.19403 = *_objptr;
        if (D.19403 != 0B) goto <D.19404>; else goto <D.19405>;
        <D.19404>:
        D.19403 = *_objptr;
        D.19406 = sgen_safe_name (D.19403);
        D.19407 = D.19406 == 0B;
        D.19408 = (long int) D.19407;
        D.19409 = __builtin_expect (D.19408, 0);
        if (D.19409 != 0) goto <D.19410>; else goto <D.19411>;
        <D.19410>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 71, "sgen_safe_name (*(_objptr)) != NULL");
        <D.19411>:
        <D.19405>:
        _objptr = _objptr + 8;
      }
      goto <D.18017>;
      <D.18016>:
      {
        int _index;

        _index = __builtin_ctzl (_bmap);
        D.19412 = (long unsigned int) _index;
        D.19413 = D.19412 * 8;
        _objptr = _objptr + D.19413;
        D.19414 = _index + 1;
        _bmap = _bmap >> D.19414;
        D.19403 = *_objptr;
        if (D.19403 != 0B) goto <D.19415>; else goto <D.19416>;
        <D.19415>:
        D.19403 = *_objptr;
        D.19417 = sgen_safe_name (D.19403);
        D.19418 = D.19417 == 0B;
        D.19419 = (long int) D.19418;
        D.19420 = __builtin_expect (D.19419, 0);
        if (D.19420 != 0) goto <D.19421>; else goto <D.19422>;
        <D.19421>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 71, "sgen_safe_name (*(_objptr)) != NULL");
        <D.19422>:
        <D.19416>:
        _objptr = _objptr + 8;
      }
      <D.18017>:
      if (_bmap != 0) goto <D.18016>; else goto <D.18018>;
      <D.18018>:
    }
    goto <D.18010>;
    <D.18019>:
    D.19423 = desc & 4294950912;
    if (D.19423 != 0) goto <D.19424>; else goto <D.19425>;
    <D.19424>:
    {
      int el_size;
      int etype;

      D.19426 = desc >> 3;
      D.19427 = (int) D.19426;
      el_size = D.19427 & 1023;
      D.19428 = (int) desc;
      etype = D.19428 & 49152;
      if (etype == 16384) goto <D.19429>; else goto <D.19430>;
      <D.19429>:
      {
        void * * p;
        void * * end_refs;

        p = start + 32;
        D.19431 = MEM[(struct MonoArray *)start].max_length;
        el_size.80 = (unsigned int) el_size;
        D.19433 = D.19431 * el_size.80;
        D.19434 = (sizetype) D.19433;
        end_refs = p + D.19434;
        goto <D.18025>;
        <D.18024>:
        D.19435 = *p;
        if (D.19435 != 0B) goto <D.19436>; else goto <D.19437>;
        <D.19436>:
        D.19435 = *p;
        D.19438 = sgen_safe_name (D.19435);
        D.19439 = D.19438 == 0B;
        D.19440 = (long int) D.19439;
        D.19441 = __builtin_expect (D.19440, 0);
        if (D.19441 != 0) goto <D.19442>; else goto <D.19443>;
        <D.19442>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "sgen_safe_name (*(p)) != NULL");
        <D.19443>:
        <D.19437>:
        p = p + 8;
        <D.18025>:
        if (p < end_refs) goto <D.18024>; else goto <D.18026>;
        <D.18026>:
      }
      goto <D.19444>;
      <D.19430>:
      if (etype == 32768) goto <D.19445>; else goto <D.19446>;
      <D.19445>:
      {
        int offset;
        int num_refs;
        char * e_start;
        char * e_end;

        D.19377 = desc >> 16;
        D.19447 = (int) D.19377;
        offset = D.19447 & 255;
        D.19380 = desc >> 24;
        D.19448 = (int) D.19380;
        num_refs = D.19448 & 255;
        e_start = start + 32;
        D.19431 = MEM[(struct MonoArray *)start].max_length;
        el_size.80 = (unsigned int) el_size;
        D.19433 = D.19431 * el_size.80;
        D.19434 = (sizetype) D.19433;
        e_end = e_start + D.19434;
        goto <D.18037>;
        <D.18036>:
        {
          void * * p;
          int i;

          p = e_start;
          D.19449 = (long unsigned int) offset;
          D.19450 = D.19449 * 8;
          p = p + D.19450;
          i = 0;
          goto <D.18034>;
          <D.18033>:
          D.19451 = (long unsigned int) i;
          D.19452 = D.19451 * 8;
          D.19453 = p + D.19452;
          D.19454 = *D.19453;
          if (D.19454 != 0B) goto <D.19455>; else goto <D.19456>;
          <D.19455>:
          D.19451 = (long unsigned int) i;
          D.19452 = D.19451 * 8;
          D.19453 = p + D.19452;
          D.19454 = *D.19453;
          D.19457 = sgen_safe_name (D.19454);
          D.19458 = D.19457 == 0B;
          D.19459 = (long int) D.19458;
          D.19460 = __builtin_expect (D.19459, 0);
          if (D.19460 != 0) goto <D.19461>; else goto <D.19462>;
          <D.19461>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "sgen_safe_name (*(p + i)) != NULL");
          <D.19462>:
          <D.19456>:
          i = i + 1;
          <D.18034>:
          if (i < num_refs) goto <D.18033>; else goto <D.18035>;
          <D.18035>:
          D.19463 = (sizetype) el_size;
          e_start = e_start + D.19463;
        }
        <D.18037>:
        if (e_start < e_end) goto <D.18036>; else goto <D.18038>;
        <D.18038>:
      }
      goto <D.19464>;
      <D.19446>:
      if (etype == 49152) goto <D.19465>; else goto <D.19466>;
      <D.19465>:
      {
        char * e_start;
        char * e_end;

        e_start = start + 32;
        D.19431 = MEM[(struct MonoArray *)start].max_length;
        el_size.80 = (unsigned int) el_size;
        D.19433 = D.19431 * el_size.80;
        D.19434 = (sizetype) D.19433;
        e_end = e_start + D.19434;
        goto <D.18047>;
        <D.18046>:
        {
          void * * p;
          gsize _bmap;

          p = e_start;
          _bmap = desc >> 16;
          goto <D.18044>;
          <D.18043>:
          D.19467 = _bmap & 1;
          if (D.19467 != 0) goto <D.19468>; else goto <D.19469>;
          <D.19468>:
          D.19470 = *p;
          if (D.19470 != 0B) goto <D.19471>; else goto <D.19472>;
          <D.19471>:
          D.19470 = *p;
          D.19473 = sgen_safe_name (D.19470);
          D.19474 = D.19473 == 0B;
          D.19475 = (long int) D.19474;
          D.19476 = __builtin_expect (D.19475, 0);
          if (D.19476 != 0) goto <D.19477>; else goto <D.19478>;
          <D.19477>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "sgen_safe_name (*(p)) != NULL");
          <D.19478>:
          <D.19472>:
          <D.19469>:
          _bmap = _bmap >> 1;
          p = p + 8;
          <D.18044>:
          if (_bmap != 0) goto <D.18043>; else goto <D.18045>;
          <D.18045>:
          D.19463 = (sizetype) el_size;
          e_start = e_start + D.19463;
        }
        <D.18047>:
        if (e_start < e_end) goto <D.18046>; else goto <D.18048>;
        <D.18048>:
      }
      <D.19466>:
      <D.19464>:
      <D.19444>:
    }
    <D.19425>:
    goto <D.18010>;
    <D.18049>:
    {
      void * * _objptr;
      gsize _bmap;

      _objptr = start;
      _bmap = desc >> 3;
      _objptr = _objptr + 16;
      goto <D.18053>;
      <D.18052>:
      D.19479 = _bmap & 1;
      if (D.19479 != 0) goto <D.19480>; else goto <D.19481>;
      <D.19480>:
      D.19482 = *_objptr;
      if (D.19482 != 0B) goto <D.19483>; else goto <D.19484>;
      <D.19483>:
      D.19482 = *_objptr;
      D.19485 = sgen_safe_name (D.19482);
      D.19486 = D.19485 == 0B;
      D.19487 = (long int) D.19486;
      D.19488 = __builtin_expect (D.19487, 0);
      if (D.19488 != 0) goto <D.19489>; else goto <D.19490>;
      <D.19489>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 85, "sgen_safe_name (*(_objptr)) != NULL");
      <D.19490>:
      <D.19484>:
      <D.19481>:
      _bmap = _bmap >> 1;
      _objptr = _objptr + 8;
      <D.18053>:
      if (_bmap != 0) goto <D.18052>; else goto <D.18054>;
      <D.18054>:
    }
    goto <D.18010>;
    <D.18055>:
    {
      void * * _objptr;
      gsize * bitmap_data;
      int bwords;
      void * * start_run;

      _objptr = start;
      bitmap_data = sgen_get_complex_descriptor (desc);
      D.19491 = *bitmap_data;
      D.19492 = (unsigned int) D.19491;
      D.19493 = D.19492 + 4294967295;
      bwords = (int) D.19493;
      start_run = _objptr;
      bitmap_data = bitmap_data + 8;
      if (0 != 0) goto <D.19494>; else goto <D.19495>;
      <D.19494>:
      {
        struct MonoObject * myobj;

        myobj = start;
        D.19496 = myobj->vtable;
        D.19497 = D.19496->klass;
        D.19498 = D.19497->name;
        D.19496 = myobj->vtable;
        D.19497 = D.19496->klass;
        D.19499 = D.19497->name_space;
        monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", bwords, start, desc, D.19499, D.19498);
      }
      <D.19495>:
      goto <D.18066>;
      <D.18065>:
      {
        gsize _bmap;

        bitmap_data.81 = bitmap_data;
        bitmap_data = bitmap_data.81 + 8;
        _bmap = *bitmap_data.81;
        _objptr = start_run;
        goto <D.18063>;
        <D.18062>:
        D.19501 = _bmap & 1;
        if (D.19501 != 0) goto <D.19502>; else goto <D.19503>;
        <D.19502>:
        D.19504 = *_objptr;
        if (D.19504 != 0B) goto <D.19505>; else goto <D.19506>;
        <D.19505>:
        D.19504 = *_objptr;
        D.19507 = sgen_safe_name (D.19504);
        D.19508 = D.19507 == 0B;
        D.19509 = (long int) D.19508;
        D.19510 = __builtin_expect (D.19509, 0);
        if (D.19510 != 0) goto <D.19511>; else goto <D.19512>;
        <D.19511>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 93, "sgen_safe_name (*(_objptr)) != NULL");
        <D.19512>:
        <D.19506>:
        <D.19503>:
        _bmap = _bmap >> 1;
        _objptr = _objptr + 8;
        <D.18063>:
        if (_bmap != 0) goto <D.18062>; else goto <D.18064>;
        <D.18064>:
        start_run = start_run + 512;
      }
      <D.18066>:
      bwords.82 = bwords;
      bwords = bwords.82 + -1;
      if (bwords.82 > 0) goto <D.18065>; else goto <D.18067>;
      <D.18067>:
    }
    goto <D.18010>;
    <D.18068>:
    {
      gsize * mbitmap_data;
      int mbwords;
      int el_size;
      char * e_start;
      char * e_end;

      D.19514 = vt->desc;
      mbitmap_data = sgen_get_complex_descriptor (D.19514);
      mbitmap_data.83 = mbitmap_data;
      mbitmap_data = mbitmap_data.83 + 8;
      D.19516 = *mbitmap_data.83;
      D.19517 = (unsigned int) D.19516;
      D.19518 = D.19517 + 4294967295;
      mbwords = (int) D.19518;
      D.19519 = vt->klass;
      el_size = mono_array_element_size (D.19519);
      e_start = start + 32;
      D.19431 = MEM[(struct MonoArray *)start].max_length;
      el_size.84 = (unsigned int) el_size;
      D.19521 = D.19431 * el_size.84;
      D.19522 = (sizetype) D.19521;
      e_end = e_start + D.19522;
      if (0 != 0) goto <D.19523>; else goto <D.19524>;
      <D.19523>:
      D.19519 = vt->klass;
      D.19525 = D.19519->name;
      D.19519 = vt->klass;
      D.19526 = D.19519->name_space;
      D.19514 = vt->desc;
      monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", mbwords, start, D.19514, D.19526, D.19525);
      <D.19524>:
      goto <D.18086>;
      <D.18085>:
      {
        void * * _objptr;
        gsize * bitmap_data;
        unsigned int bwords;

        _objptr = e_start;
        bitmap_data = mbitmap_data;
        bwords = (unsigned int) mbwords;
        goto <D.18083>;
        <D.18082>:
        {
          gsize _bmap;
          void * * start_run;

          bitmap_data.85 = bitmap_data;
          bitmap_data = bitmap_data.85 + 8;
          _bmap = *bitmap_data.85;
          start_run = _objptr;
          goto <D.18080>;
          <D.18079>:
          D.19528 = _bmap & 1;
          if (D.19528 != 0) goto <D.19529>; else goto <D.19530>;
          <D.19529>:
          D.19531 = *_objptr;
          if (D.19531 != 0B) goto <D.19532>; else goto <D.19533>;
          <D.19532>:
          D.19531 = *_objptr;
          D.19534 = sgen_safe_name (D.19531);
          D.19535 = D.19534 == 0B;
          D.19536 = (long int) D.19535;
          D.19537 = __builtin_expect (D.19536, 0);
          if (D.19537 != 0) goto <D.19538>; else goto <D.19539>;
          <D.19538>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 102, "sgen_safe_name (*(_objptr)) != NULL");
          <D.19539>:
          <D.19533>:
          <D.19530>:
          _bmap = _bmap >> 1;
          _objptr = _objptr + 8;
          <D.18080>:
          if (_bmap != 0) goto <D.18079>; else goto <D.18081>;
          <D.18081>:
          _objptr = start_run + 512;
        }
        <D.18083>:
        bwords.86 = bwords;
        bwords = bwords.86 + 4294967295;
        if (bwords.86 != 0) goto <D.18082>; else goto <D.18084>;
        <D.18084>:
        D.19541 = (sizetype) el_size;
        e_start = e_start + D.19541;
      }
      <D.18086>:
      if (e_start < e_end) goto <D.18085>; else goto <D.18087>;
      <D.18087>:
    }
    goto <D.18010>;
    <D.18088>:
    goto <D.18010>;
    <D.18089>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 111);
    <D.18010>:
  }
}


sgen_check_whole_heap (gboolean allow_missing_pinned)
{
  long unsigned int D.19544;
  void * D.19545;
  struct GCMemSection * nursery_section.87;
  char * D.19547;
  char * D.19548;
  void (*<T2cf0>) (gboolean, gboolean, void (*IterateObjectCallbackFunc) (char *, size_t, void *), void *) D.19549;
  int broken_heap.88;
  _Bool D.19551;
  long int D.19552;
  long int D.19553;

  setup_valid_nursery_objects ();
  broken_heap = 0;
  D.19544 = (long unsigned int) allow_missing_pinned;
  D.19545 = (void *) D.19544;
  nursery_section.87 = nursery_section;
  D.19547 = nursery_section.87->end_data;
  nursery_section.87 = nursery_section;
  D.19548 = nursery_section.87->data;
  sgen_scan_area_with_callback (D.19548, D.19547, verify_object_pointers_callback, D.19545, 0);
  D.19549 = major_collector.iterate_objects;
  D.19544 = (long unsigned int) allow_missing_pinned;
  D.19545 = (void *) D.19544;
  D.19549 (1, 1, verify_object_pointers_callback, D.19545);
  D.19544 = (long unsigned int) allow_missing_pinned;
  D.19545 = (void *) D.19544;
  sgen_los_iterate_objects (verify_object_pointers_callback, D.19545);
  broken_heap.88 = broken_heap;
  D.19551 = broken_heap.88 != 0;
  D.19552 = (long int) D.19551;
  D.19553 = __builtin_expect (D.19552, 0);
  if (D.19553 != 0) goto <D.19554>; else goto <D.19555>;
  <D.19554>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-debug.c", 445, "!broken_heap");
  <D.19555>:
}


verify_object_pointers_callback (char * start, size_t size, void * data)
{
  long int data.89;
  long unsigned int D.19557;
  long unsigned int D.19558;
  long unsigned int D.19559;
  long unsigned int D.19560;
  long unsigned int D.19563;
  long unsigned int D.19564;
  long unsigned int D.19565;
  long unsigned int D.19566;
  long unsigned int D.19567;
  long unsigned int D.19568;
  char * D.19569;
  int D.19572;
  int D.19576;
  void * D.19579;
  int D.19580;
  struct SgenRemeberedSet * D.19585;
  gboolean (*<T2c96>) (char *) D.19586;
  int D.19587;
  int D.19590;
  long unsigned int D.19594;
  long unsigned int D.19595;
  int D.19598;
  int D.19602;
  int D.19605;
  struct SgenRemeberedSet * D.19610;
  gboolean (*<T2c96>) (char *) D.19611;
  int D.19612;
  int D.19615;
  long unsigned int D.19619;
  long unsigned int D.19620;
  int D.19621;
  char * D.19622;
  int D.19625;
  int D.19629;
  void * D.19632;
  int D.19633;
  struct SgenRemeberedSet * D.19638;
  gboolean (*<T2c96>) (char *) D.19639;
  int D.19640;
  int D.19643;
  long unsigned int D.19647;
  long unsigned int D.19648;
  long unsigned int D.19649;
  long unsigned int D.19650;
  int D.19651;
  int D.19654;
  int D.19658;
  int D.19661;
  struct SgenRemeberedSet * D.19666;
  gboolean (*<T2c96>) (char *) D.19667;
  int D.19668;
  int D.19671;
  long unsigned int D.19675;
  long unsigned int D.19678;
  int D.19679;
  int D.19680;
  unsigned int D.19683;
  unsigned int el_size.90;
  unsigned int D.19685;
  sizetype D.19686;
  char * D.19687;
  int D.19690;
  int D.19694;
  void * D.19697;
  int D.19698;
  struct SgenRemeberedSet * D.19703;
  gboolean (*<T2c96>) (char *) D.19704;
  int D.19705;
  int D.19708;
  long unsigned int D.19712;
  long unsigned int D.19713;
  int D.19717;
  int D.19718;
  long unsigned int D.19719;
  long unsigned int D.19720;
  char * D.19721;
  sizetype D.19722;
  char * D.19723;
  int D.19726;
  long unsigned int D.19729;
  long unsigned int D.19730;
  char * * D.19731;
  int D.19733;
  void * D.19736;
  void * D.19737;
  int D.19738;
  struct SgenRemeberedSet * D.19743;
  gboolean (*<T2c96>) (char *) D.19744;
  char * D.19745;
  int D.19746;
  void * * D.19749;
  void * D.19750;
  int D.19751;
  long unsigned int D.19755;
  long unsigned int D.19756;
  sizetype D.19757;
  long unsigned int D.19761;
  char * D.19764;
  int D.19767;
  int D.19771;
  void * D.19774;
  int D.19775;
  struct SgenRemeberedSet * D.19780;
  gboolean (*<T2c96>) (char *) D.19781;
  int D.19782;
  int D.19785;
  long unsigned int D.19789;
  long unsigned int D.19790;
  long unsigned int D.19791;
  char * D.19794;
  int D.19797;
  int D.19801;
  void * D.19804;
  int D.19805;
  struct SgenRemeberedSet * D.19810;
  gboolean (*<T2c96>) (char *) D.19811;
  int D.19812;
  int D.19815;
  long unsigned int D.19819;
  long unsigned int D.19820;
  long unsigned int D.19821;
  unsigned int D.19822;
  unsigned int D.19823;
  struct MonoVTable * D.19826;
  struct MonoClass * D.19827;
  const char * D.19828;
  const char * D.19829;
  gsize * bitmap_data.91;
  long unsigned int D.19831;
  char * D.19834;
  int D.19837;
  int D.19841;
  void * D.19844;
  int D.19845;
  struct SgenRemeberedSet * D.19850;
  gboolean (*<T2c96>) (char *) D.19851;
  int D.19852;
  int D.19855;
  long unsigned int D.19859;
  long unsigned int D.19860;
  int bwords.92;
  long unsigned int D.19862;
  gsize * mbitmap_data.93;
  long unsigned int D.19864;
  unsigned int D.19865;
  unsigned int D.19866;
  struct MonoClass * D.19867;
  unsigned int el_size.94;
  unsigned int D.19869;
  sizetype D.19870;
  const char * D.19873;
  const char * D.19874;
  gsize * bitmap_data.95;
  long unsigned int D.19876;
  char * D.19879;
  int D.19882;
  int D.19886;
  void * D.19889;
  int D.19890;
  struct SgenRemeberedSet * D.19895;
  gboolean (*<T2c96>) (char *) D.19896;
  int D.19897;
  int D.19900;
  long unsigned int D.19904;
  long unsigned int D.19905;
  unsigned int bwords.96;
  sizetype D.19907;
  gboolean allow_missing_pinned;

  data.89 = (long int) data;
  allow_missing_pinned = (gboolean) data.89;
  {
    struct GCVTable * vt;
    mword desc;

    D.19557 = MEM[(mword *)start];
    D.19558 = D.19557 & 18446744073709551612;
    vt = (struct GCVTable *) D.19558;
    desc = vt->desc;
    D.19559 = desc & 7;
    switch (D.19559) <default: <D.18227>, case 1: <D.18142>, case 2: <D.18149>, case 3: <D.18193>, case 4: <D.18157>, case 5: <D.18187>, case 6: <D.18206>, case 7: <D.18226>>
    <D.18142>:
    D.19560 = desc & 4294901760;
    if (D.19560 != 0) goto <D.19561>; else goto <D.19562>;
    <D.19561>:
    {
      void * * _objptr_end;
      void * * _objptr;

      _objptr = start;
      D.19563 = desc >> 16;
      D.19564 = D.19563 & 255;
      D.19565 = D.19564 * 8;
      _objptr = _objptr + D.19565;
      D.19566 = desc >> 24;
      D.19567 = D.19566 & 255;
      D.19568 = D.19567 * 8;
      _objptr_end = _objptr + D.19568;
      D.19569 = MEM[(char * *)_objptr];
      if (D.19569 != 0B) goto <D.19570>; else goto <D.19571>;
      <D.19570>:
      D.19569 = MEM[(char * *)_objptr];
      D.19572 = is_valid_object_pointer (D.19569);
      if (D.19572 == 0) goto <D.19573>; else goto <D.19574>;
      <D.19573>:
      bad_pointer_spew (start, _objptr);
      goto <D.19575>;
      <D.19574>:
      D.19576 = sgen_ptr_in_nursery (start);
      if (D.19576 == 0) goto <D.19577>; else goto <D.19578>;
      <D.19577>:
      D.19579 = *_objptr;
      D.19580 = sgen_ptr_in_nursery (D.19579);
      if (D.19580 != 0) goto <D.19581>; else goto <D.19582>;
      <D.19581>:
      D.19585 = sgen_get_remset ();
      D.19586 = D.19585->find_address;
      D.19587 = D.19586 (_objptr);
      if (D.19587 == 0) goto <D.19588>; else goto <D.19589>;
      <D.19588>:
      D.19579 = *_objptr;
      D.19590 = sgen_cement_lookup (D.19579);
      if (D.19590 == 0) goto <D.19591>; else goto <D.19592>;
      <D.19591>:
      if (allow_missing_pinned == 0) goto <D.19583>; else goto <D.19593>;
      <D.19593>:
      D.19579 = *_objptr;
      D.19594 = MEM[(mword *)D.19579];
      D.19595 = D.19594 & 2;
      if (D.19595 == 0) goto <D.19583>; else goto <D.19584>;
      <D.19583>:
      missing_remset_spew (start, _objptr);
      <D.19584>:
      <D.19592>:
      <D.19589>:
      <D.19582>:
      <D.19578>:
      <D.19575>:
      <D.19571>:
      _objptr = _objptr + 8;
      goto <D.18146>;
      <D.18145>:
      D.19569 = MEM[(char * *)_objptr];
      if (D.19569 != 0B) goto <D.19596>; else goto <D.19597>;
      <D.19596>:
      D.19569 = MEM[(char * *)_objptr];
      D.19598 = is_valid_object_pointer (D.19569);
      if (D.19598 == 0) goto <D.19599>; else goto <D.19600>;
      <D.19599>:
      bad_pointer_spew (start, _objptr);
      goto <D.19601>;
      <D.19600>:
      D.19602 = sgen_ptr_in_nursery (start);
      if (D.19602 == 0) goto <D.19603>; else goto <D.19604>;
      <D.19603>:
      D.19579 = *_objptr;
      D.19605 = sgen_ptr_in_nursery (D.19579);
      if (D.19605 != 0) goto <D.19606>; else goto <D.19607>;
      <D.19606>:
      D.19610 = sgen_get_remset ();
      D.19611 = D.19610->find_address;
      D.19612 = D.19611 (_objptr);
      if (D.19612 == 0) goto <D.19613>; else goto <D.19614>;
      <D.19613>:
      D.19579 = *_objptr;
      D.19615 = sgen_cement_lookup (D.19579);
      if (D.19615 == 0) goto <D.19616>; else goto <D.19617>;
      <D.19616>:
      if (allow_missing_pinned == 0) goto <D.19608>; else goto <D.19618>;
      <D.19618>:
      D.19579 = *_objptr;
      D.19594 = MEM[(mword *)D.19579];
      D.19595 = D.19594 & 2;
      if (D.19595 == 0) goto <D.19608>; else goto <D.19609>;
      <D.19608>:
      missing_remset_spew (start, _objptr);
      <D.19609>:
      <D.19617>:
      <D.19614>:
      <D.19607>:
      <D.19604>:
      <D.19601>:
      <D.19597>:
      _objptr = _objptr + 8;
      <D.18146>:
      if (_objptr < _objptr_end) goto <D.18145>; else goto <D.18147>;
      <D.18147>:
    }
    <D.19562>:
    goto <D.18148>;
    <D.18149>:
    {
      void * * _objptr;
      gsize _bmap;

      _objptr = start;
      _bmap = desc >> 16;
      _objptr = _objptr + 16;
      {
        int _index;

        _index = __builtin_ctzl (_bmap);
        D.19619 = (long unsigned int) _index;
        D.19620 = D.19619 * 8;
        _objptr = _objptr + D.19620;
        D.19621 = _index + 1;
        _bmap = _bmap >> D.19621;
        D.19622 = MEM[(char * *)_objptr];
        if (D.19622 != 0B) goto <D.19623>; else goto <D.19624>;
        <D.19623>:
        D.19622 = MEM[(char * *)_objptr];
        D.19625 = is_valid_object_pointer (D.19622);
        if (D.19625 == 0) goto <D.19626>; else goto <D.19627>;
        <D.19626>:
        bad_pointer_spew (start, _objptr);
        goto <D.19628>;
        <D.19627>:
        D.19629 = sgen_ptr_in_nursery (start);
        if (D.19629 == 0) goto <D.19630>; else goto <D.19631>;
        <D.19630>:
        D.19632 = *_objptr;
        D.19633 = sgen_ptr_in_nursery (D.19632);
        if (D.19633 != 0) goto <D.19634>; else goto <D.19635>;
        <D.19634>:
        D.19638 = sgen_get_remset ();
        D.19639 = D.19638->find_address;
        D.19640 = D.19639 (_objptr);
        if (D.19640 == 0) goto <D.19641>; else goto <D.19642>;
        <D.19641>:
        D.19632 = *_objptr;
        D.19643 = sgen_cement_lookup (D.19632);
        if (D.19643 == 0) goto <D.19644>; else goto <D.19645>;
        <D.19644>:
        if (allow_missing_pinned == 0) goto <D.19636>; else goto <D.19646>;
        <D.19646>:
        D.19632 = *_objptr;
        D.19647 = MEM[(mword *)D.19632];
        D.19648 = D.19647 & 2;
        if (D.19648 == 0) goto <D.19636>; else goto <D.19637>;
        <D.19636>:
        missing_remset_spew (start, _objptr);
        <D.19637>:
        <D.19645>:
        <D.19642>:
        <D.19635>:
        <D.19631>:
        <D.19628>:
        <D.19624>:
        _objptr = _objptr + 8;
      }
      goto <D.18155>;
      <D.18154>:
      {
        int _index;

        _index = __builtin_ctzl (_bmap);
        D.19649 = (long unsigned int) _index;
        D.19650 = D.19649 * 8;
        _objptr = _objptr + D.19650;
        D.19651 = _index + 1;
        _bmap = _bmap >> D.19651;
        D.19622 = MEM[(char * *)_objptr];
        if (D.19622 != 0B) goto <D.19652>; else goto <D.19653>;
        <D.19652>:
        D.19622 = MEM[(char * *)_objptr];
        D.19654 = is_valid_object_pointer (D.19622);
        if (D.19654 == 0) goto <D.19655>; else goto <D.19656>;
        <D.19655>:
        bad_pointer_spew (start, _objptr);
        goto <D.19657>;
        <D.19656>:
        D.19658 = sgen_ptr_in_nursery (start);
        if (D.19658 == 0) goto <D.19659>; else goto <D.19660>;
        <D.19659>:
        D.19632 = *_objptr;
        D.19661 = sgen_ptr_in_nursery (D.19632);
        if (D.19661 != 0) goto <D.19662>; else goto <D.19663>;
        <D.19662>:
        D.19666 = sgen_get_remset ();
        D.19667 = D.19666->find_address;
        D.19668 = D.19667 (_objptr);
        if (D.19668 == 0) goto <D.19669>; else goto <D.19670>;
        <D.19669>:
        D.19632 = *_objptr;
        D.19671 = sgen_cement_lookup (D.19632);
        if (D.19671 == 0) goto <D.19672>; else goto <D.19673>;
        <D.19672>:
        if (allow_missing_pinned == 0) goto <D.19664>; else goto <D.19674>;
        <D.19674>:
        D.19632 = *_objptr;
        D.19647 = MEM[(mword *)D.19632];
        D.19648 = D.19647 & 2;
        if (D.19648 == 0) goto <D.19664>; else goto <D.19665>;
        <D.19664>:
        missing_remset_spew (start, _objptr);
        <D.19665>:
        <D.19673>:
        <D.19670>:
        <D.19663>:
        <D.19660>:
        <D.19657>:
        <D.19653>:
        _objptr = _objptr + 8;
      }
      <D.18155>:
      if (_bmap != 0) goto <D.18154>; else goto <D.18156>;
      <D.18156>:
    }
    goto <D.18148>;
    <D.18157>:
    D.19675 = desc & 4294950912;
    if (D.19675 != 0) goto <D.19676>; else goto <D.19677>;
    <D.19676>:
    {
      int el_size;
      int etype;

      D.19678 = desc >> 3;
      D.19679 = (int) D.19678;
      el_size = D.19679 & 1023;
      D.19680 = (int) desc;
      etype = D.19680 & 49152;
      if (etype == 16384) goto <D.19681>; else goto <D.19682>;
      <D.19681>:
      {
        void * * p;
        void * * end_refs;

        p = start + 32;
        D.19683 = MEM[(struct MonoArray *)start].max_length;
        el_size.90 = (unsigned int) el_size;
        D.19685 = D.19683 * el_size.90;
        D.19686 = (sizetype) D.19685;
        end_refs = p + D.19686;
        goto <D.18163>;
        <D.18162>:
        D.19687 = MEM[(char * *)p];
        if (D.19687 != 0B) goto <D.19688>; else goto <D.19689>;
        <D.19688>:
        D.19687 = MEM[(char * *)p];
        D.19690 = is_valid_object_pointer (D.19687);
        if (D.19690 == 0) goto <D.19691>; else goto <D.19692>;
        <D.19691>:
        bad_pointer_spew (start, p);
        goto <D.19693>;
        <D.19692>:
        D.19694 = sgen_ptr_in_nursery (start);
        if (D.19694 == 0) goto <D.19695>; else goto <D.19696>;
        <D.19695>:
        D.19697 = *p;
        D.19698 = sgen_ptr_in_nursery (D.19697);
        if (D.19698 != 0) goto <D.19699>; else goto <D.19700>;
        <D.19699>:
        D.19703 = sgen_get_remset ();
        D.19704 = D.19703->find_address;
        D.19705 = D.19704 (p);
        if (D.19705 == 0) goto <D.19706>; else goto <D.19707>;
        <D.19706>:
        D.19697 = *p;
        D.19708 = sgen_cement_lookup (D.19697);
        if (D.19708 == 0) goto <D.19709>; else goto <D.19710>;
        <D.19709>:
        if (allow_missing_pinned == 0) goto <D.19701>; else goto <D.19711>;
        <D.19711>:
        D.19697 = *p;
        D.19712 = MEM[(mword *)D.19697];
        D.19713 = D.19712 & 2;
        if (D.19713 == 0) goto <D.19701>; else goto <D.19702>;
        <D.19701>:
        missing_remset_spew (start, p);
        <D.19702>:
        <D.19710>:
        <D.19707>:
        <D.19700>:
        <D.19696>:
        <D.19693>:
        <D.19689>:
        p = p + 8;
        <D.18163>:
        if (p < end_refs) goto <D.18162>; else goto <D.18164>;
        <D.18164>:
      }
      goto <D.19714>;
      <D.19682>:
      if (etype == 32768) goto <D.19715>; else goto <D.19716>;
      <D.19715>:
      {
        int offset;
        int num_refs;
        char * e_start;
        char * e_end;

        D.19563 = desc >> 16;
        D.19717 = (int) D.19563;
        offset = D.19717 & 255;
        D.19566 = desc >> 24;
        D.19718 = (int) D.19566;
        num_refs = D.19718 & 255;
        e_start = start + 32;
        D.19683 = MEM[(struct MonoArray *)start].max_length;
        el_size.90 = (unsigned int) el_size;
        D.19685 = D.19683 * el_size.90;
        D.19686 = (sizetype) D.19685;
        e_end = e_start + D.19686;
        goto <D.18175>;
        <D.18174>:
        {
          void * * p;
          int i;

          p = e_start;
          D.19719 = (long unsigned int) offset;
          D.19720 = D.19719 * 8;
          p = p + D.19720;
          i = 0;
          goto <D.18172>;
          <D.18171>:
          D.19721 = MEM[(char * *)p];
          D.19722 = (sizetype) i;
          D.19723 = D.19721 + D.19722;
          if (D.19723 != 0B) goto <D.19724>; else goto <D.19725>;
          <D.19724>:
          D.19721 = MEM[(char * *)p];
          D.19722 = (sizetype) i;
          D.19723 = D.19721 + D.19722;
          D.19726 = is_valid_object_pointer (D.19723);
          if (D.19726 == 0) goto <D.19727>; else goto <D.19728>;
          <D.19727>:
          D.19729 = (long unsigned int) i;
          D.19730 = D.19729 * 8;
          D.19731 = p + D.19730;
          bad_pointer_spew (start, D.19731);
          goto <D.19732>;
          <D.19728>:
          D.19733 = sgen_ptr_in_nursery (start);
          if (D.19733 == 0) goto <D.19734>; else goto <D.19735>;
          <D.19734>:
          D.19736 = *p;
          D.19722 = (sizetype) i;
          D.19737 = D.19736 + D.19722;
          D.19738 = sgen_ptr_in_nursery (D.19737);
          if (D.19738 != 0) goto <D.19739>; else goto <D.19740>;
          <D.19739>:
          D.19743 = sgen_get_remset ();
          D.19744 = D.19743->find_address;
          D.19729 = (long unsigned int) i;
          D.19730 = D.19729 * 8;
          D.19745 = p + D.19730;
          D.19746 = D.19744 (D.19745);
          if (D.19746 == 0) goto <D.19747>; else goto <D.19748>;
          <D.19747>:
          D.19729 = (long unsigned int) i;
          D.19730 = D.19729 * 8;
          D.19749 = p + D.19730;
          D.19750 = *D.19749;
          D.19751 = sgen_cement_lookup (D.19750);
          if (D.19751 == 0) goto <D.19752>; else goto <D.19753>;
          <D.19752>:
          if (allow_missing_pinned == 0) goto <D.19741>; else goto <D.19754>;
          <D.19754>:
          D.19729 = (long unsigned int) i;
          D.19730 = D.19729 * 8;
          D.19749 = p + D.19730;
          D.19750 = *D.19749;
          D.19755 = MEM[(mword *)D.19750];
          D.19756 = D.19755 & 2;
          if (D.19756 == 0) goto <D.19741>; else goto <D.19742>;
          <D.19741>:
          D.19729 = (long unsigned int) i;
          D.19730 = D.19729 * 8;
          D.19731 = p + D.19730;
          missing_remset_spew (start, D.19731);
          <D.19742>:
          <D.19753>:
          <D.19748>:
          <D.19740>:
          <D.19735>:
          <D.19732>:
          <D.19725>:
          i = i + 1;
          <D.18172>:
          if (i < num_refs) goto <D.18171>; else goto <D.18173>;
          <D.18173>:
          D.19757 = (sizetype) el_size;
          e_start = e_start + D.19757;
        }
        <D.18175>:
        if (e_start < e_end) goto <D.18174>; else goto <D.18176>;
        <D.18176>:
      }
      goto <D.19758>;
      <D.19716>:
      if (etype == 49152) goto <D.19759>; else goto <D.19760>;
      <D.19759>:
      {
        char * e_start;
        char * e_end;

        e_start = start + 32;
        D.19683 = MEM[(struct MonoArray *)start].max_length;
        el_size.90 = (unsigned int) el_size;
        D.19685 = D.19683 * el_size.90;
        D.19686 = (sizetype) D.19685;
        e_end = e_start + D.19686;
        goto <D.18185>;
        <D.18184>:
        {
          void * * p;
          gsize _bmap;

          p = e_start;
          _bmap = desc >> 16;
          goto <D.18182>;
          <D.18181>:
          D.19761 = _bmap & 1;
          if (D.19761 != 0) goto <D.19762>; else goto <D.19763>;
          <D.19762>:
          D.19764 = MEM[(char * *)p];
          if (D.19764 != 0B) goto <D.19765>; else goto <D.19766>;
          <D.19765>:
          D.19764 = MEM[(char * *)p];
          D.19767 = is_valid_object_pointer (D.19764);
          if (D.19767 == 0) goto <D.19768>; else goto <D.19769>;
          <D.19768>:
          bad_pointer_spew (start, p);
          goto <D.19770>;
          <D.19769>:
          D.19771 = sgen_ptr_in_nursery (start);
          if (D.19771 == 0) goto <D.19772>; else goto <D.19773>;
          <D.19772>:
          D.19774 = *p;
          D.19775 = sgen_ptr_in_nursery (D.19774);
          if (D.19775 != 0) goto <D.19776>; else goto <D.19777>;
          <D.19776>:
          D.19780 = sgen_get_remset ();
          D.19781 = D.19780->find_address;
          D.19782 = D.19781 (p);
          if (D.19782 == 0) goto <D.19783>; else goto <D.19784>;
          <D.19783>:
          D.19774 = *p;
          D.19785 = sgen_cement_lookup (D.19774);
          if (D.19785 == 0) goto <D.19786>; else goto <D.19787>;
          <D.19786>:
          if (allow_missing_pinned == 0) goto <D.19778>; else goto <D.19788>;
          <D.19788>:
          D.19774 = *p;
          D.19789 = MEM[(mword *)D.19774];
          D.19790 = D.19789 & 2;
          if (D.19790 == 0) goto <D.19778>; else goto <D.19779>;
          <D.19778>:
          missing_remset_spew (start, p);
          <D.19779>:
          <D.19787>:
          <D.19784>:
          <D.19777>:
          <D.19773>:
          <D.19770>:
          <D.19766>:
          <D.19763>:
          _bmap = _bmap >> 1;
          p = p + 8;
          <D.18182>:
          if (_bmap != 0) goto <D.18181>; else goto <D.18183>;
          <D.18183>:
          D.19757 = (sizetype) el_size;
          e_start = e_start + D.19757;
        }
        <D.18185>:
        if (e_start < e_end) goto <D.18184>; else goto <D.18186>;
        <D.18186>:
      }
      <D.19760>:
      <D.19758>:
      <D.19714>:
    }
    <D.19677>:
    goto <D.18148>;
    <D.18187>:
    {
      void * * _objptr;
      gsize _bmap;

      _objptr = start;
      _bmap = desc >> 3;
      _objptr = _objptr + 16;
      goto <D.18191>;
      <D.18190>:
      D.19791 = _bmap & 1;
      if (D.19791 != 0) goto <D.19792>; else goto <D.19793>;
      <D.19792>:
      D.19794 = MEM[(char * *)_objptr];
      if (D.19794 != 0B) goto <D.19795>; else goto <D.19796>;
      <D.19795>:
      D.19794 = MEM[(char * *)_objptr];
      D.19797 = is_valid_object_pointer (D.19794);
      if (D.19797 == 0) goto <D.19798>; else goto <D.19799>;
      <D.19798>:
      bad_pointer_spew (start, _objptr);
      goto <D.19800>;
      <D.19799>:
      D.19801 = sgen_ptr_in_nursery (start);
      if (D.19801 == 0) goto <D.19802>; else goto <D.19803>;
      <D.19802>:
      D.19804 = *_objptr;
      D.19805 = sgen_ptr_in_nursery (D.19804);
      if (D.19805 != 0) goto <D.19806>; else goto <D.19807>;
      <D.19806>:
      D.19810 = sgen_get_remset ();
      D.19811 = D.19810->find_address;
      D.19812 = D.19811 (_objptr);
      if (D.19812 == 0) goto <D.19813>; else goto <D.19814>;
      <D.19813>:
      D.19804 = *_objptr;
      D.19815 = sgen_cement_lookup (D.19804);
      if (D.19815 == 0) goto <D.19816>; else goto <D.19817>;
      <D.19816>:
      if (allow_missing_pinned == 0) goto <D.19808>; else goto <D.19818>;
      <D.19818>:
      D.19804 = *_objptr;
      D.19819 = MEM[(mword *)D.19804];
      D.19820 = D.19819 & 2;
      if (D.19820 == 0) goto <D.19808>; else goto <D.19809>;
      <D.19808>:
      missing_remset_spew (start, _objptr);
      <D.19809>:
      <D.19817>:
      <D.19814>:
      <D.19807>:
      <D.19803>:
      <D.19800>:
      <D.19796>:
      <D.19793>:
      _bmap = _bmap >> 1;
      _objptr = _objptr + 8;
      <D.18191>:
      if (_bmap != 0) goto <D.18190>; else goto <D.18192>;
      <D.18192>:
    }
    goto <D.18148>;
    <D.18193>:
    {
      void * * _objptr;
      gsize * bitmap_data;
      int bwords;
      void * * start_run;

      _objptr = start;
      bitmap_data = sgen_get_complex_descriptor (desc);
      D.19821 = *bitmap_data;
      D.19822 = (unsigned int) D.19821;
      D.19823 = D.19822 + 4294967295;
      bwords = (int) D.19823;
      start_run = _objptr;
      bitmap_data = bitmap_data + 8;
      if (0 != 0) goto <D.19824>; else goto <D.19825>;
      <D.19824>:
      {
        struct MonoObject * myobj;

        myobj = start;
        D.19826 = myobj->vtable;
        D.19827 = D.19826->klass;
        D.19828 = D.19827->name;
        D.19826 = myobj->vtable;
        D.19827 = D.19826->klass;
        D.19829 = D.19827->name_space;
        monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", bwords, start, desc, D.19829, D.19828);
      }
      <D.19825>:
      goto <D.18204>;
      <D.18203>:
      {
        gsize _bmap;

        bitmap_data.91 = bitmap_data;
        bitmap_data = bitmap_data.91 + 8;
        _bmap = *bitmap_data.91;
        _objptr = start_run;
        goto <D.18201>;
        <D.18200>:
        D.19831 = _bmap & 1;
        if (D.19831 != 0) goto <D.19832>; else goto <D.19833>;
        <D.19832>:
        D.19834 = MEM[(char * *)_objptr];
        if (D.19834 != 0B) goto <D.19835>; else goto <D.19836>;
        <D.19835>:
        D.19834 = MEM[(char * *)_objptr];
        D.19837 = is_valid_object_pointer (D.19834);
        if (D.19837 == 0) goto <D.19838>; else goto <D.19839>;
        <D.19838>:
        bad_pointer_spew (start, _objptr);
        goto <D.19840>;
        <D.19839>:
        D.19841 = sgen_ptr_in_nursery (start);
        if (D.19841 == 0) goto <D.19842>; else goto <D.19843>;
        <D.19842>:
        D.19844 = *_objptr;
        D.19845 = sgen_ptr_in_nursery (D.19844);
        if (D.19845 != 0) goto <D.19846>; else goto <D.19847>;
        <D.19846>:
        D.19850 = sgen_get_remset ();
        D.19851 = D.19850->find_address;
        D.19852 = D.19851 (_objptr);
        if (D.19852 == 0) goto <D.19853>; else goto <D.19854>;
        <D.19853>:
        D.19844 = *_objptr;
        D.19855 = sgen_cement_lookup (D.19844);
        if (D.19855 == 0) goto <D.19856>; else goto <D.19857>;
        <D.19856>:
        if (allow_missing_pinned == 0) goto <D.19848>; else goto <D.19858>;
        <D.19858>:
        D.19844 = *_objptr;
        D.19859 = MEM[(mword *)D.19844];
        D.19860 = D.19859 & 2;
        if (D.19860 == 0) goto <D.19848>; else goto <D.19849>;
        <D.19848>:
        missing_remset_spew (start, _objptr);
        <D.19849>:
        <D.19857>:
        <D.19854>:
        <D.19847>:
        <D.19843>:
        <D.19840>:
        <D.19836>:
        <D.19833>:
        _bmap = _bmap >> 1;
        _objptr = _objptr + 8;
        <D.18201>:
        if (_bmap != 0) goto <D.18200>; else goto <D.18202>;
        <D.18202>:
        start_run = start_run + 512;
      }
      <D.18204>:
      bwords.92 = bwords;
      bwords = bwords.92 + -1;
      if (bwords.92 > 0) goto <D.18203>; else goto <D.18205>;
      <D.18205>:
    }
    goto <D.18148>;
    <D.18206>:
    {
      gsize * mbitmap_data;
      int mbwords;
      int el_size;
      char * e_start;
      char * e_end;

      D.19862 = vt->desc;
      mbitmap_data = sgen_get_complex_descriptor (D.19862);
      mbitmap_data.93 = mbitmap_data;
      mbitmap_data = mbitmap_data.93 + 8;
      D.19864 = *mbitmap_data.93;
      D.19865 = (unsigned int) D.19864;
      D.19866 = D.19865 + 4294967295;
      mbwords = (int) D.19866;
      D.19867 = vt->klass;
      el_size = mono_array_element_size (D.19867);
      e_start = start + 32;
      D.19683 = MEM[(struct MonoArray *)start].max_length;
      el_size.94 = (unsigned int) el_size;
      D.19869 = D.19683 * el_size.94;
      D.19870 = (sizetype) D.19869;
      e_end = e_start + D.19870;
      if (0 != 0) goto <D.19871>; else goto <D.19872>;
      <D.19871>:
      D.19867 = vt->klass;
      D.19873 = D.19867->name;
      D.19867 = vt->klass;
      D.19874 = D.19867->name_space;
      D.19862 = vt->desc;
      monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", mbwords, start, D.19862, D.19874, D.19873);
      <D.19872>:
      goto <D.18224>;
      <D.18223>:
      {
        void * * _objptr;
        gsize * bitmap_data;
        unsigned int bwords;

        _objptr = e_start;
        bitmap_data = mbitmap_data;
        bwords = (unsigned int) mbwords;
        goto <D.18221>;
        <D.18220>:
        {
          gsize _bmap;
          void * * start_run;

          bitmap_data.95 = bitmap_data;
          bitmap_data = bitmap_data.95 + 8;
          _bmap = *bitmap_data.95;
          start_run = _objptr;
          goto <D.18218>;
          <D.18217>:
          D.19876 = _bmap & 1;
          if (D.19876 != 0) goto <D.19877>; else goto <D.19878>;
          <D.19877>:
          D.19879 = MEM[(char * *)_objptr];
          if (D.19879 != 0B) goto <D.19880>; else goto <D.19881>;
          <D.19880>:
          D.19879 = MEM[(char * *)_objptr];
          D.19882 = is_valid_object_pointer (D.19879);
          if (D.19882 == 0) goto <D.19883>; else goto <D.19884>;
          <D.19883>:
          bad_pointer_spew (start, _objptr);
          goto <D.19885>;
          <D.19884>:
          D.19886 = sgen_ptr_in_nursery (start);
          if (D.19886 == 0) goto <D.19887>; else goto <D.19888>;
          <D.19887>:
          D.19889 = *_objptr;
          D.19890 = sgen_ptr_in_nursery (D.19889);
          if (D.19890 != 0) goto <D.19891>; else goto <D.19892>;
          <D.19891>:
          D.19895 = sgen_get_remset ();
          D.19896 = D.19895->find_address;
          D.19897 = D.19896 (_objptr);
          if (D.19897 == 0) goto <D.19898>; else goto <D.19899>;
          <D.19898>:
          D.19889 = *_objptr;
          D.19900 = sgen_cement_lookup (D.19889);
          if (D.19900 == 0) goto <D.19901>; else goto <D.19902>;
          <D.19901>:
          if (allow_missing_pinned == 0) goto <D.19893>; else goto <D.19903>;
          <D.19903>:
          D.19889 = *_objptr;
          D.19904 = MEM[(mword *)D.19889];
          D.19905 = D.19904 & 2;
          if (D.19905 == 0) goto <D.19893>; else goto <D.19894>;
          <D.19893>:
          missing_remset_spew (start, _objptr);
          <D.19894>:
          <D.19902>:
          <D.19899>:
          <D.19892>:
          <D.19888>:
          <D.19885>:
          <D.19881>:
          <D.19878>:
          _bmap = _bmap >> 1;
          _objptr = _objptr + 8;
          <D.18218>:
          if (_bmap != 0) goto <D.18217>; else goto <D.18219>;
          <D.18219>:
          _objptr = start_run + 512;
        }
        <D.18221>:
        bwords.96 = bwords;
        bwords = bwords.96 + 4294967295;
        if (bwords.96 != 0) goto <D.18220>; else goto <D.18222>;
        <D.18222>:
        D.19907 = (sizetype) el_size;
        e_start = e_start + D.19907;
      }
      <D.18224>:
      if (e_start < e_end) goto <D.18223>; else goto <D.18225>;
      <D.18225>:
    }
    goto <D.18148>;
    <D.18226>:
    goto <D.18148>;
    <D.18227>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 111);
    <D.18148>:
  }
}


is_valid_object_pointer (char * object)
{
  int D.19909;
  gboolean D.19912;
  int D.19913;
  gboolean (*<T2c96>) (char *) D.19916;
  int D.19917;

  D.19909 = sgen_ptr_in_nursery (object);
  if (D.19909 != 0) goto <D.19910>; else goto <D.19911>;
  <D.19910>:
  D.19912 = find_object_in_nursery_dump (object);
  return D.19912;
  <D.19911>:
  D.19913 = sgen_los_is_valid_object (object);
  if (D.19913 != 0) goto <D.19914>; else goto <D.19915>;
  <D.19914>:
  D.19912 = 1;
  return D.19912;
  <D.19915>:
  D.19916 = major_collector.is_valid_object;
  D.19917 = D.19916 (object);
  if (D.19917 != 0) goto <D.19918>; else goto <D.19919>;
  <D.19918>:
  D.19912 = 1;
  return D.19912;
  <D.19919>:
  D.19912 = 0;
  return D.19912;
}


find_object_in_nursery_dump (char * object)
{
  int D.19921;
  int D.19922;
  char * * valid_nursery_objects.97;
  long unsigned int D.19924;
  long unsigned int D.19925;
  char * * D.19926;
  char * D.19927;
  gboolean D.19930;
  _Bool D.19934;
  long int D.19935;
  long int D.19936;
  int first;
  int last;

  first = 0;
  last = valid_nursery_object_count;
  goto <D.18108>;
  <D.18107>:
  {
    int middle;

    D.19921 = last - first;
    D.19922 = D.19921 >> 1;
    middle = D.19922 + first;
    valid_nursery_objects.97 = valid_nursery_objects;
    D.19924 = (long unsigned int) middle;
    D.19925 = D.19924 * 8;
    D.19926 = valid_nursery_objects.97 + D.19925;
    D.19927 = *D.19926;
    if (D.19927 == object) goto <D.19928>; else goto <D.19929>;
    <D.19928>:
    D.19930 = 1;
    return D.19930;
    <D.19929>:
    valid_nursery_objects.97 = valid_nursery_objects;
    D.19924 = (long unsigned int) middle;
    D.19925 = D.19924 * 8;
    D.19926 = valid_nursery_objects.97 + D.19925;
    D.19927 = *D.19926;
    if (D.19927 > object) goto <D.19931>; else goto <D.19932>;
    <D.19931>:
    last = middle;
    goto <D.19933>;
    <D.19932>:
    first = middle + 1;
    <D.19933>:
  }
  <D.18108>:
  if (first < last) goto <D.18107>; else goto <D.18109>;
  <D.18109>:
  D.19934 = first != last;
  D.19935 = (long int) D.19934;
  D.19936 = __builtin_expect (D.19935, 0);
  if (D.19936 != 0) goto <D.19937>; else goto <D.19938>;
  <D.19937>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-debug.c", 337, "first == last");
  <D.19938>:
  D.19930 = 0;
  return D.19930;
}


bad_pointer_spew (char * obj, char * * slot)
{
  long unsigned int D.19940;
  long unsigned int D.19941;
  int gc_debug_level.98;
  _Bool D.19943;
  long int D.19944;
  long int D.19945;
  struct MonoClass * D.19948;
  const char * D.19949;
  const char * D.19950;
  long int slot.99;
  long int obj.100;
  long int D.19953;
  struct FILE * gc_debug_file.101;
  char * ptr;
  struct MonoVTable * vtable;

  ptr = *slot;
  D.19940 = MEM[(mword *)obj];
  D.19941 = D.19940 & 18446744073709551612;
  vtable = (struct MonoVTable *) D.19941;
  gc_debug_level.98 = gc_debug_level;
  D.19943 = gc_debug_level.98 >= 0;
  D.19944 = (long int) D.19943;
  D.19945 = __builtin_expect (D.19944, 0);
  if (D.19945 != 0) goto <D.19946>; else goto <D.19947>;
  <D.19946>:
  D.19948 = vtable->klass;
  D.19949 = D.19948->name;
  D.19948 = vtable->klass;
  D.19950 = D.19948->name_space;
  slot.99 = (long int) slot;
  obj.100 = (long int) obj;
  D.19953 = slot.99 - obj.100;
  gc_debug_file.101 = gc_debug_file;
  fprintf (gc_debug_file.101, "Invalid object pointer %p at offset %td in object %p (%s.%s):\n", ptr, D.19953, obj, D.19950, D.19949);
  gc_debug_file.101 = gc_debug_file;
  fflush (gc_debug_file.101);
  <D.19947>:
  describe_pointer (ptr, 0);
  broken_heap = 1;
}


missing_remset_spew (char * obj, char * * slot)
{
  long unsigned int D.19955;
  long unsigned int D.19956;
  int gc_debug_level.102;
  _Bool D.19958;
  long int D.19959;
  long int D.19960;
  struct MonoClass * D.19963;
  const char * D.19964;
  const char * D.19965;
  long int slot.103;
  long int obj.104;
  long int D.19968;
  struct FILE * gc_debug_file.105;
  char * ptr;
  struct MonoVTable * vtable;

  ptr = *slot;
  D.19955 = MEM[(mword *)obj];
  D.19956 = D.19955 & 18446744073709551612;
  vtable = (struct MonoVTable *) D.19956;
  gc_debug_level.102 = gc_debug_level;
  D.19958 = gc_debug_level.102 >= 0;
  D.19959 = (long int) D.19958;
  D.19960 = __builtin_expect (D.19959, 0);
  if (D.19960 != 0) goto <D.19961>; else goto <D.19962>;
  <D.19961>:
  D.19963 = vtable->klass;
  D.19964 = D.19963->name;
  D.19963 = vtable->klass;
  D.19965 = D.19963->name_space;
  slot.103 = (long int) slot;
  obj.104 = (long int) obj;
  D.19968 = slot.103 - obj.104;
  gc_debug_file.105 = gc_debug_file;
  fprintf (gc_debug_file.105, "Oldspace->newspace reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", ptr, D.19968, obj, D.19965, D.19964);
  gc_debug_file.105 = gc_debug_file;
  fflush (gc_debug_file.105);
  <D.19962>:
  broken_heap = 1;
}


sgen_check_objref (char * obj)
{
  int D.19970;
  _Bool D.19971;
  long int D.19972;
  long int D.19973;

  D.19970 = ptr_in_heap (obj);
  D.19971 = D.19970 == 0;
  D.19972 = (long int) D.19971;
  D.19973 = __builtin_expect (D.19972, 0);
  if (D.19973 != 0) goto <D.19974>; else goto <D.19975>;
  <D.19974>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-debug.c", 469, "ptr_in_heap (obj)");
  <D.19975>:
}


ptr_in_heap (char * object)
{
  int D.19976;
  gboolean D.19979;
  int D.19980;
  gboolean (*<T2c96>) (char *) D.19983;
  int D.19984;

  D.19976 = sgen_ptr_in_nursery (object);
  if (D.19976 != 0) goto <D.19977>; else goto <D.19978>;
  <D.19977>:
  D.19979 = 1;
  return D.19979;
  <D.19978>:
  D.19980 = sgen_los_is_valid_object (object);
  if (D.19980 != 0) goto <D.19981>; else goto <D.19982>;
  <D.19981>:
  D.19979 = 1;
  return D.19979;
  <D.19982>:
  D.19983 = major_collector.is_valid_object;
  D.19984 = D.19983 (object);
  if (D.19984 != 0) goto <D.19985>; else goto <D.19986>;
  <D.19985>:
  D.19979 = 1;
  return D.19979;
  <D.19986>:
  D.19979 = 0;
  return D.19979;
}


sgen_check_major_heap_marked ()
{
  void (*<T2cf0>) (gboolean, gboolean, void (*IterateObjectCallbackFunc) (char *, size_t, void *), void *) D.19988;

  setup_valid_nursery_objects ();
  D.19988 = major_collector.iterate_objects;
  D.19988 (1, 1, check_marked_callback, 0B);
  sgen_los_iterate_objects (check_marked_callback, 1B);
}


check_marked_callback (char * start, size_t size, void * dummy)
{
  long int dummy.106;
  int D.19992;
  gboolean (*<T2c96>) (char *) D.19996;
  int D.19997;
  long unsigned int D.20000;
  long unsigned int D.20001;
  long unsigned int D.20002;
  long unsigned int D.20003;
  long unsigned int D.20006;
  long unsigned int D.20007;
  long unsigned int D.20008;
  long unsigned int D.20009;
  long unsigned int D.20010;
  long unsigned int D.20011;
  int D.20014;
  _Bool D.20015;
  long int D.20016;
  long int D.20017;
  int D.20020;
  long unsigned int D.20023;
  long unsigned int D.20024;
  _Bool D.20025;
  long int D.20026;
  long int D.20027;
  int D.20031;
  int D.20034;
  _Bool D.20035;
  long int D.20036;
  long int D.20037;
  gboolean (*<T2c96>) (char *) D.20041;
  int D.20042;
  int D.20045;
  _Bool D.20046;
  long int D.20047;
  long int D.20048;
  int D.20054;
  _Bool D.20055;
  long int D.20056;
  long int D.20057;
  int D.20060;
  long unsigned int D.20063;
  long unsigned int D.20064;
  _Bool D.20065;
  long int D.20066;
  long int D.20067;
  int D.20071;
  int D.20074;
  _Bool D.20075;
  long int D.20076;
  long int D.20077;
  int D.20081;
  int D.20084;
  _Bool D.20085;
  long int D.20086;
  long int D.20087;
  long unsigned int D.20091;
  long unsigned int D.20092;
  int D.20093;
  int D.20096;
  _Bool D.20097;
  long int D.20098;
  long int D.20099;
  int D.20102;
  long unsigned int D.20105;
  long unsigned int D.20106;
  _Bool D.20107;
  long int D.20108;
  long int D.20109;
  int D.20113;
  int D.20116;
  _Bool D.20117;
  long int D.20118;
  long int D.20119;
  int D.20123;
  int D.20126;
  _Bool D.20127;
  long int D.20128;
  long int D.20129;
  long unsigned int D.20133;
  long unsigned int D.20134;
  int D.20135;
  int D.20138;
  _Bool D.20139;
  long int D.20140;
  long int D.20141;
  int D.20144;
  long unsigned int D.20147;
  long unsigned int D.20148;
  _Bool D.20149;
  long int D.20150;
  long int D.20151;
  int D.20155;
  int D.20158;
  _Bool D.20159;
  long int D.20160;
  long int D.20161;
  int D.20165;
  int D.20168;
  _Bool D.20169;
  long int D.20170;
  long int D.20171;
  long unsigned int D.20175;
  long unsigned int D.20178;
  int D.20179;
  int D.20180;
  unsigned int D.20183;
  unsigned int el_size.107;
  unsigned int D.20185;
  sizetype D.20186;
  int D.20189;
  _Bool D.20190;
  long int D.20191;
  long int D.20192;
  int D.20195;
  long unsigned int D.20198;
  long unsigned int D.20199;
  _Bool D.20200;
  long int D.20201;
  long int D.20202;
  int D.20206;
  int D.20209;
  _Bool D.20210;
  long int D.20211;
  long int D.20212;
  int D.20216;
  int D.20219;
  _Bool D.20220;
  long int D.20221;
  long int D.20222;
  int D.20229;
  int D.20230;
  long unsigned int D.20231;
  long unsigned int D.20232;
  char * D.20233;
  sizetype D.20234;
  int D.20237;
  _Bool D.20238;
  long int D.20239;
  long int D.20240;
  int D.20243;
  long unsigned int D.20246;
  long unsigned int D.20247;
  _Bool D.20248;
  long int D.20249;
  long int D.20250;
  int D.20254;
  int D.20257;
  _Bool D.20258;
  long int D.20259;
  long int D.20260;
  int D.20264;
  int D.20267;
  _Bool D.20268;
  long int D.20269;
  long int D.20270;
  sizetype D.20274;
  long unsigned int D.20278;
  int D.20283;
  _Bool D.20284;
  long int D.20285;
  long int D.20286;
  int D.20289;
  long unsigned int D.20292;
  long unsigned int D.20293;
  _Bool D.20294;
  long int D.20295;
  long int D.20296;
  int D.20300;
  int D.20303;
  _Bool D.20304;
  long int D.20305;
  long int D.20306;
  int D.20310;
  int D.20313;
  _Bool D.20314;
  long int D.20315;
  long int D.20316;
  long unsigned int D.20320;
  int D.20325;
  _Bool D.20326;
  long int D.20327;
  long int D.20328;
  int D.20331;
  long unsigned int D.20334;
  long unsigned int D.20335;
  _Bool D.20336;
  long int D.20337;
  long int D.20338;
  int D.20342;
  int D.20345;
  _Bool D.20346;
  long int D.20347;
  long int D.20348;
  int D.20352;
  int D.20355;
  _Bool D.20356;
  long int D.20357;
  long int D.20358;
  long unsigned int D.20362;
  unsigned int D.20363;
  unsigned int D.20364;
  struct MonoVTable * D.20367;
  struct MonoClass * D.20368;
  const char * D.20369;
  const char * D.20370;
  gsize * bitmap_data.108;
  long unsigned int D.20372;
  int D.20377;
  _Bool D.20378;
  long int D.20379;
  long int D.20380;
  int D.20383;
  long unsigned int D.20386;
  long unsigned int D.20387;
  _Bool D.20388;
  long int D.20389;
  long int D.20390;
  int D.20394;
  int D.20397;
  _Bool D.20398;
  long int D.20399;
  long int D.20400;
  int D.20404;
  int D.20407;
  _Bool D.20408;
  long int D.20409;
  long int D.20410;
  int bwords.109;
  long unsigned int D.20415;
  gsize * mbitmap_data.110;
  long unsigned int D.20417;
  unsigned int D.20418;
  unsigned int D.20419;
  struct MonoClass * D.20420;
  unsigned int el_size.111;
  unsigned int D.20422;
  sizetype D.20423;
  const char * D.20426;
  const char * D.20427;
  gsize * bitmap_data.112;
  long unsigned int D.20429;
  int D.20434;
  _Bool D.20435;
  long int D.20436;
  long int D.20437;
  int D.20440;
  long unsigned int D.20443;
  long unsigned int D.20444;
  _Bool D.20445;
  long int D.20446;
  long int D.20447;
  int D.20451;
  int D.20454;
  _Bool D.20455;
  long int D.20456;
  long int D.20457;
  int D.20461;
  int D.20464;
  _Bool D.20465;
  long int D.20466;
  long int D.20467;
  unsigned int bwords.113;
  sizetype D.20472;
  gboolean is_los;

  dummy.106 = (long int) dummy;
  is_los = (gboolean) dummy.106;
  if (is_los != 0) goto <D.19990>; else goto <D.19991>;
  <D.19990>:
  D.19992 = sgen_los_object_is_pinned (start);
  if (D.19992 == 0) goto <D.19993>; else goto <D.19994>;
  <D.19993>:
  return;
  <D.19994>:
  goto <D.19995>;
  <D.19991>:
  D.19996 = major_collector.is_object_live;
  D.19997 = D.19996 (start);
  if (D.19997 == 0) goto <D.19998>; else goto <D.19999>;
  <D.19998>:
  return;
  <D.19999>:
  <D.19995>:
  {
    struct GCVTable * vt;
    mword desc;

    D.20000 = MEM[(mword *)start];
    D.20001 = D.20000 & 18446744073709551612;
    vt = (struct GCVTable *) D.20001;
    desc = vt->desc;
    D.20002 = desc & 7;
    switch (D.20002) <default: <D.18382>, case 1: <D.18287>, case 2: <D.18296>, case 3: <D.18346>, case 4: <D.18306>, case 5: <D.18339>, case 6: <D.18360>, case 7: <D.18381>>
    <D.18287>:
    D.20003 = desc & 4294901760;
    if (D.20003 != 0) goto <D.20004>; else goto <D.20005>;
    <D.20004>:
    {
      void * * _objptr_end;
      void * * _objptr;

      _objptr = start;
      D.20006 = desc >> 16;
      D.20007 = D.20006 & 255;
      D.20008 = D.20007 * 8;
      _objptr = _objptr + D.20008;
      D.20009 = desc >> 24;
      D.20010 = D.20009 & 255;
      D.20011 = D.20010 * 8;
      _objptr_end = _objptr + D.20011;
      {
        char * __target;

        __target = MEM[(char * *)_objptr];
        if (__target != 0B) goto <D.20012>; else goto <D.20013>;
        <D.20012>:
        D.20014 = is_valid_object_pointer (__target);
        D.20015 = D.20014 == 0;
        D.20016 = (long int) D.20015;
        D.20017 = __builtin_expect (D.20016, 0);
        if (D.20017 != 0) goto <D.20018>; else goto <D.20019>;
        <D.20018>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 64, "is_valid_object_pointer (__target)");
        <D.20019>:
        D.20020 = sgen_ptr_in_nursery (__target);
        if (D.20020 != 0) goto <D.20021>; else goto <D.20022>;
        <D.20021>:
        D.20023 = MEM[(mword *)__target];
        D.20024 = D.20023 & 2;
        D.20025 = D.20024 == 0;
        D.20026 = (long int) D.20025;
        D.20027 = __builtin_expect (D.20026, 0);
        if (D.20027 != 0) goto <D.20028>; else goto <D.20029>;
        <D.20028>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 64, "SGEN_OBJECT_IS_PINNED (__target)");
        <D.20029>:
        goto <D.20030>;
        <D.20022>:
        D.20031 = sgen_los_is_valid_object (__target);
        if (D.20031 != 0) goto <D.20032>; else goto <D.20033>;
        <D.20032>:
        D.20034 = sgen_los_object_is_pinned (__target);
        D.20035 = D.20034 == 0;
        D.20036 = (long int) D.20035;
        D.20037 = __builtin_expect (D.20036, 0);
        if (D.20037 != 0) goto <D.20038>; else goto <D.20039>;
        <D.20038>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 64, "sgen_los_object_is_pinned (__target)");
        <D.20039>:
        goto <D.20040>;
        <D.20033>:
        D.20041 = major_collector.is_valid_object;
        D.20042 = D.20041 (__target);
        if (D.20042 != 0) goto <D.20043>; else goto <D.20044>;
        <D.20043>:
        D.19996 = major_collector.is_object_live;
        D.20045 = D.19996 (__target);
        D.20046 = D.20045 == 0;
        D.20047 = (long int) D.20046;
        D.20048 = __builtin_expect (D.20047, 0);
        if (D.20048 != 0) goto <D.20049>; else goto <D.20050>;
        <D.20049>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 64, "major_collector.is_object_live (__target)");
        <D.20050>:
        goto <D.20051>;
        <D.20044>:
        monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 64);
        <D.20051>:
        <D.20040>:
        <D.20030>:
        <D.20013>:
      }
      _objptr = _objptr + 8;
      goto <D.18293>;
      <D.18292>:
      {
        char * __target;

        __target = MEM[(char * *)_objptr];
        if (__target != 0B) goto <D.20052>; else goto <D.20053>;
        <D.20052>:
        D.20054 = is_valid_object_pointer (__target);
        D.20055 = D.20054 == 0;
        D.20056 = (long int) D.20055;
        D.20057 = __builtin_expect (D.20056, 0);
        if (D.20057 != 0) goto <D.20058>; else goto <D.20059>;
        <D.20058>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 64, "is_valid_object_pointer (__target)");
        <D.20059>:
        D.20060 = sgen_ptr_in_nursery (__target);
        if (D.20060 != 0) goto <D.20061>; else goto <D.20062>;
        <D.20061>:
        D.20063 = MEM[(mword *)__target];
        D.20064 = D.20063 & 2;
        D.20065 = D.20064 == 0;
        D.20066 = (long int) D.20065;
        D.20067 = __builtin_expect (D.20066, 0);
        if (D.20067 != 0) goto <D.20068>; else goto <D.20069>;
        <D.20068>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 64, "SGEN_OBJECT_IS_PINNED (__target)");
        <D.20069>:
        goto <D.20070>;
        <D.20062>:
        D.20071 = sgen_los_is_valid_object (__target);
        if (D.20071 != 0) goto <D.20072>; else goto <D.20073>;
        <D.20072>:
        D.20074 = sgen_los_object_is_pinned (__target);
        D.20075 = D.20074 == 0;
        D.20076 = (long int) D.20075;
        D.20077 = __builtin_expect (D.20076, 0);
        if (D.20077 != 0) goto <D.20078>; else goto <D.20079>;
        <D.20078>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 64, "sgen_los_object_is_pinned (__target)");
        <D.20079>:
        goto <D.20080>;
        <D.20073>:
        D.20041 = major_collector.is_valid_object;
        D.20081 = D.20041 (__target);
        if (D.20081 != 0) goto <D.20082>; else goto <D.20083>;
        <D.20082>:
        D.19996 = major_collector.is_object_live;
        D.20084 = D.19996 (__target);
        D.20085 = D.20084 == 0;
        D.20086 = (long int) D.20085;
        D.20087 = __builtin_expect (D.20086, 0);
        if (D.20087 != 0) goto <D.20088>; else goto <D.20089>;
        <D.20088>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 64, "major_collector.is_object_live (__target)");
        <D.20089>:
        goto <D.20090>;
        <D.20083>:
        monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 64);
        <D.20090>:
        <D.20080>:
        <D.20070>:
        <D.20053>:
      }
      _objptr = _objptr + 8;
      <D.18293>:
      if (_objptr < _objptr_end) goto <D.18292>; else goto <D.18294>;
      <D.18294>:
    }
    <D.20005>:
    goto <D.18295>;
    <D.18296>:
    {
      void * * _objptr;
      gsize _bmap;

      _objptr = start;
      _bmap = desc >> 16;
      _objptr = _objptr + 16;
      {
        int _index;

        _index = __builtin_ctzl (_bmap);
        D.20091 = (long unsigned int) _index;
        D.20092 = D.20091 * 8;
        _objptr = _objptr + D.20092;
        D.20093 = _index + 1;
        _bmap = _bmap >> D.20093;
        {
          char * __target;

          __target = MEM[(char * *)_objptr];
          if (__target != 0B) goto <D.20094>; else goto <D.20095>;
          <D.20094>:
          D.20096 = is_valid_object_pointer (__target);
          D.20097 = D.20096 == 0;
          D.20098 = (long int) D.20097;
          D.20099 = __builtin_expect (D.20098, 0);
          if (D.20099 != 0) goto <D.20100>; else goto <D.20101>;
          <D.20100>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 71, "is_valid_object_pointer (__target)");
          <D.20101>:
          D.20102 = sgen_ptr_in_nursery (__target);
          if (D.20102 != 0) goto <D.20103>; else goto <D.20104>;
          <D.20103>:
          D.20105 = MEM[(mword *)__target];
          D.20106 = D.20105 & 2;
          D.20107 = D.20106 == 0;
          D.20108 = (long int) D.20107;
          D.20109 = __builtin_expect (D.20108, 0);
          if (D.20109 != 0) goto <D.20110>; else goto <D.20111>;
          <D.20110>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 71, "SGEN_OBJECT_IS_PINNED (__target)");
          <D.20111>:
          goto <D.20112>;
          <D.20104>:
          D.20113 = sgen_los_is_valid_object (__target);
          if (D.20113 != 0) goto <D.20114>; else goto <D.20115>;
          <D.20114>:
          D.20116 = sgen_los_object_is_pinned (__target);
          D.20117 = D.20116 == 0;
          D.20118 = (long int) D.20117;
          D.20119 = __builtin_expect (D.20118, 0);
          if (D.20119 != 0) goto <D.20120>; else goto <D.20121>;
          <D.20120>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 71, "sgen_los_object_is_pinned (__target)");
          <D.20121>:
          goto <D.20122>;
          <D.20115>:
          D.20041 = major_collector.is_valid_object;
          D.20123 = D.20041 (__target);
          if (D.20123 != 0) goto <D.20124>; else goto <D.20125>;
          <D.20124>:
          D.19996 = major_collector.is_object_live;
          D.20126 = D.19996 (__target);
          D.20127 = D.20126 == 0;
          D.20128 = (long int) D.20127;
          D.20129 = __builtin_expect (D.20128, 0);
          if (D.20129 != 0) goto <D.20130>; else goto <D.20131>;
          <D.20130>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 71, "major_collector.is_object_live (__target)");
          <D.20131>:
          goto <D.20132>;
          <D.20125>:
          monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 71);
          <D.20132>:
          <D.20122>:
          <D.20112>:
          <D.20095>:
        }
        _objptr = _objptr + 8;
      }
      goto <D.18304>;
      <D.18303>:
      {
        int _index;

        _index = __builtin_ctzl (_bmap);
        D.20133 = (long unsigned int) _index;
        D.20134 = D.20133 * 8;
        _objptr = _objptr + D.20134;
        D.20135 = _index + 1;
        _bmap = _bmap >> D.20135;
        {
          char * __target;

          __target = MEM[(char * *)_objptr];
          if (__target != 0B) goto <D.20136>; else goto <D.20137>;
          <D.20136>:
          D.20138 = is_valid_object_pointer (__target);
          D.20139 = D.20138 == 0;
          D.20140 = (long int) D.20139;
          D.20141 = __builtin_expect (D.20140, 0);
          if (D.20141 != 0) goto <D.20142>; else goto <D.20143>;
          <D.20142>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 71, "is_valid_object_pointer (__target)");
          <D.20143>:
          D.20144 = sgen_ptr_in_nursery (__target);
          if (D.20144 != 0) goto <D.20145>; else goto <D.20146>;
          <D.20145>:
          D.20147 = MEM[(mword *)__target];
          D.20148 = D.20147 & 2;
          D.20149 = D.20148 == 0;
          D.20150 = (long int) D.20149;
          D.20151 = __builtin_expect (D.20150, 0);
          if (D.20151 != 0) goto <D.20152>; else goto <D.20153>;
          <D.20152>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 71, "SGEN_OBJECT_IS_PINNED (__target)");
          <D.20153>:
          goto <D.20154>;
          <D.20146>:
          D.20155 = sgen_los_is_valid_object (__target);
          if (D.20155 != 0) goto <D.20156>; else goto <D.20157>;
          <D.20156>:
          D.20158 = sgen_los_object_is_pinned (__target);
          D.20159 = D.20158 == 0;
          D.20160 = (long int) D.20159;
          D.20161 = __builtin_expect (D.20160, 0);
          if (D.20161 != 0) goto <D.20162>; else goto <D.20163>;
          <D.20162>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 71, "sgen_los_object_is_pinned (__target)");
          <D.20163>:
          goto <D.20164>;
          <D.20157>:
          D.20041 = major_collector.is_valid_object;
          D.20165 = D.20041 (__target);
          if (D.20165 != 0) goto <D.20166>; else goto <D.20167>;
          <D.20166>:
          D.19996 = major_collector.is_object_live;
          D.20168 = D.19996 (__target);
          D.20169 = D.20168 == 0;
          D.20170 = (long int) D.20169;
          D.20171 = __builtin_expect (D.20170, 0);
          if (D.20171 != 0) goto <D.20172>; else goto <D.20173>;
          <D.20172>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 71, "major_collector.is_object_live (__target)");
          <D.20173>:
          goto <D.20174>;
          <D.20167>:
          monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 71);
          <D.20174>:
          <D.20164>:
          <D.20154>:
          <D.20137>:
        }
        _objptr = _objptr + 8;
      }
      <D.18304>:
      if (_bmap != 0) goto <D.18303>; else goto <D.18305>;
      <D.18305>:
    }
    goto <D.18295>;
    <D.18306>:
    D.20175 = desc & 4294950912;
    if (D.20175 != 0) goto <D.20176>; else goto <D.20177>;
    <D.20176>:
    {
      int el_size;
      int etype;

      D.20178 = desc >> 3;
      D.20179 = (int) D.20178;
      el_size = D.20179 & 1023;
      D.20180 = (int) desc;
      etype = D.20180 & 49152;
      if (etype == 16384) goto <D.20181>; else goto <D.20182>;
      <D.20181>:
      {
        void * * p;
        void * * end_refs;

        p = start + 32;
        D.20183 = MEM[(struct MonoArray *)start].max_length;
        el_size.107 = (unsigned int) el_size;
        D.20185 = D.20183 * el_size.107;
        D.20186 = (sizetype) D.20185;
        end_refs = p + D.20186;
        goto <D.18313>;
        <D.18312>:
        {
          char * __target;

          __target = MEM[(char * *)p];
          if (__target != 0B) goto <D.20187>; else goto <D.20188>;
          <D.20187>:
          D.20189 = is_valid_object_pointer (__target);
          D.20190 = D.20189 == 0;
          D.20191 = (long int) D.20190;
          D.20192 = __builtin_expect (D.20191, 0);
          if (D.20192 != 0) goto <D.20193>; else goto <D.20194>;
          <D.20193>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "is_valid_object_pointer (__target)");
          <D.20194>:
          D.20195 = sgen_ptr_in_nursery (__target);
          if (D.20195 != 0) goto <D.20196>; else goto <D.20197>;
          <D.20196>:
          D.20198 = MEM[(mword *)__target];
          D.20199 = D.20198 & 2;
          D.20200 = D.20199 == 0;
          D.20201 = (long int) D.20200;
          D.20202 = __builtin_expect (D.20201, 0);
          if (D.20202 != 0) goto <D.20203>; else goto <D.20204>;
          <D.20203>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "SGEN_OBJECT_IS_PINNED (__target)");
          <D.20204>:
          goto <D.20205>;
          <D.20197>:
          D.20206 = sgen_los_is_valid_object (__target);
          if (D.20206 != 0) goto <D.20207>; else goto <D.20208>;
          <D.20207>:
          D.20209 = sgen_los_object_is_pinned (__target);
          D.20210 = D.20209 == 0;
          D.20211 = (long int) D.20210;
          D.20212 = __builtin_expect (D.20211, 0);
          if (D.20212 != 0) goto <D.20213>; else goto <D.20214>;
          <D.20213>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "sgen_los_object_is_pinned (__target)");
          <D.20214>:
          goto <D.20215>;
          <D.20208>:
          D.20041 = major_collector.is_valid_object;
          D.20216 = D.20041 (__target);
          if (D.20216 != 0) goto <D.20217>; else goto <D.20218>;
          <D.20217>:
          D.19996 = major_collector.is_object_live;
          D.20219 = D.19996 (__target);
          D.20220 = D.20219 == 0;
          D.20221 = (long int) D.20220;
          D.20222 = __builtin_expect (D.20221, 0);
          if (D.20222 != 0) goto <D.20223>; else goto <D.20224>;
          <D.20223>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "major_collector.is_object_live (__target)");
          <D.20224>:
          goto <D.20225>;
          <D.20218>:
          monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 78);
          <D.20225>:
          <D.20215>:
          <D.20205>:
          <D.20188>:
        }
        p = p + 8;
        <D.18313>:
        if (p < end_refs) goto <D.18312>; else goto <D.18314>;
        <D.18314>:
      }
      goto <D.20226>;
      <D.20182>:
      if (etype == 32768) goto <D.20227>; else goto <D.20228>;
      <D.20227>:
      {
        int offset;
        int num_refs;
        char * e_start;
        char * e_end;

        D.20006 = desc >> 16;
        D.20229 = (int) D.20006;
        offset = D.20229 & 255;
        D.20009 = desc >> 24;
        D.20230 = (int) D.20009;
        num_refs = D.20230 & 255;
        e_start = start + 32;
        D.20183 = MEM[(struct MonoArray *)start].max_length;
        el_size.107 = (unsigned int) el_size;
        D.20185 = D.20183 * el_size.107;
        D.20186 = (sizetype) D.20185;
        e_end = e_start + D.20186;
        goto <D.18326>;
        <D.18325>:
        {
          void * * p;
          int i;

          p = e_start;
          D.20231 = (long unsigned int) offset;
          D.20232 = D.20231 * 8;
          p = p + D.20232;
          i = 0;
          goto <D.18323>;
          <D.18322>:
          {
            char * __target;

            D.20233 = MEM[(char * *)p];
            D.20234 = (sizetype) i;
            __target = D.20233 + D.20234;
            if (__target != 0B) goto <D.20235>; else goto <D.20236>;
            <D.20235>:
            D.20237 = is_valid_object_pointer (__target);
            D.20238 = D.20237 == 0;
            D.20239 = (long int) D.20238;
            D.20240 = __builtin_expect (D.20239, 0);
            if (D.20240 != 0) goto <D.20241>; else goto <D.20242>;
            <D.20241>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "is_valid_object_pointer (__target)");
            <D.20242>:
            D.20243 = sgen_ptr_in_nursery (__target);
            if (D.20243 != 0) goto <D.20244>; else goto <D.20245>;
            <D.20244>:
            D.20246 = MEM[(mword *)__target];
            D.20247 = D.20246 & 2;
            D.20248 = D.20247 == 0;
            D.20249 = (long int) D.20248;
            D.20250 = __builtin_expect (D.20249, 0);
            if (D.20250 != 0) goto <D.20251>; else goto <D.20252>;
            <D.20251>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "SGEN_OBJECT_IS_PINNED (__target)");
            <D.20252>:
            goto <D.20253>;
            <D.20245>:
            D.20254 = sgen_los_is_valid_object (__target);
            if (D.20254 != 0) goto <D.20255>; else goto <D.20256>;
            <D.20255>:
            D.20257 = sgen_los_object_is_pinned (__target);
            D.20258 = D.20257 == 0;
            D.20259 = (long int) D.20258;
            D.20260 = __builtin_expect (D.20259, 0);
            if (D.20260 != 0) goto <D.20261>; else goto <D.20262>;
            <D.20261>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "sgen_los_object_is_pinned (__target)");
            <D.20262>:
            goto <D.20263>;
            <D.20256>:
            D.20041 = major_collector.is_valid_object;
            D.20264 = D.20041 (__target);
            if (D.20264 != 0) goto <D.20265>; else goto <D.20266>;
            <D.20265>:
            D.19996 = major_collector.is_object_live;
            D.20267 = D.19996 (__target);
            D.20268 = D.20267 == 0;
            D.20269 = (long int) D.20268;
            D.20270 = __builtin_expect (D.20269, 0);
            if (D.20270 != 0) goto <D.20271>; else goto <D.20272>;
            <D.20271>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "major_collector.is_object_live (__target)");
            <D.20272>:
            goto <D.20273>;
            <D.20266>:
            monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 78);
            <D.20273>:
            <D.20263>:
            <D.20253>:
            <D.20236>:
          }
          i = i + 1;
          <D.18323>:
          if (i < num_refs) goto <D.18322>; else goto <D.18324>;
          <D.18324>:
          D.20274 = (sizetype) el_size;
          e_start = e_start + D.20274;
        }
        <D.18326>:
        if (e_start < e_end) goto <D.18325>; else goto <D.18327>;
        <D.18327>:
      }
      goto <D.20275>;
      <D.20228>:
      if (etype == 49152) goto <D.20276>; else goto <D.20277>;
      <D.20276>:
      {
        char * e_start;
        char * e_end;

        e_start = start + 32;
        D.20183 = MEM[(struct MonoArray *)start].max_length;
        el_size.107 = (unsigned int) el_size;
        D.20185 = D.20183 * el_size.107;
        D.20186 = (sizetype) D.20185;
        e_end = e_start + D.20186;
        goto <D.18337>;
        <D.18336>:
        {
          void * * p;
          gsize _bmap;

          p = e_start;
          _bmap = desc >> 16;
          goto <D.18334>;
          <D.18333>:
          D.20278 = _bmap & 1;
          if (D.20278 != 0) goto <D.20279>; else goto <D.20280>;
          <D.20279>:
          {
            char * __target;

            __target = MEM[(char * *)p];
            if (__target != 0B) goto <D.20281>; else goto <D.20282>;
            <D.20281>:
            D.20283 = is_valid_object_pointer (__target);
            D.20284 = D.20283 == 0;
            D.20285 = (long int) D.20284;
            D.20286 = __builtin_expect (D.20285, 0);
            if (D.20286 != 0) goto <D.20287>; else goto <D.20288>;
            <D.20287>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "is_valid_object_pointer (__target)");
            <D.20288>:
            D.20289 = sgen_ptr_in_nursery (__target);
            if (D.20289 != 0) goto <D.20290>; else goto <D.20291>;
            <D.20290>:
            D.20292 = MEM[(mword *)__target];
            D.20293 = D.20292 & 2;
            D.20294 = D.20293 == 0;
            D.20295 = (long int) D.20294;
            D.20296 = __builtin_expect (D.20295, 0);
            if (D.20296 != 0) goto <D.20297>; else goto <D.20298>;
            <D.20297>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "SGEN_OBJECT_IS_PINNED (__target)");
            <D.20298>:
            goto <D.20299>;
            <D.20291>:
            D.20300 = sgen_los_is_valid_object (__target);
            if (D.20300 != 0) goto <D.20301>; else goto <D.20302>;
            <D.20301>:
            D.20303 = sgen_los_object_is_pinned (__target);
            D.20304 = D.20303 == 0;
            D.20305 = (long int) D.20304;
            D.20306 = __builtin_expect (D.20305, 0);
            if (D.20306 != 0) goto <D.20307>; else goto <D.20308>;
            <D.20307>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "sgen_los_object_is_pinned (__target)");
            <D.20308>:
            goto <D.20309>;
            <D.20302>:
            D.20041 = major_collector.is_valid_object;
            D.20310 = D.20041 (__target);
            if (D.20310 != 0) goto <D.20311>; else goto <D.20312>;
            <D.20311>:
            D.19996 = major_collector.is_object_live;
            D.20313 = D.19996 (__target);
            D.20314 = D.20313 == 0;
            D.20315 = (long int) D.20314;
            D.20316 = __builtin_expect (D.20315, 0);
            if (D.20316 != 0) goto <D.20317>; else goto <D.20318>;
            <D.20317>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "major_collector.is_object_live (__target)");
            <D.20318>:
            goto <D.20319>;
            <D.20312>:
            monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 78);
            <D.20319>:
            <D.20309>:
            <D.20299>:
            <D.20282>:
          }
          <D.20280>:
          _bmap = _bmap >> 1;
          p = p + 8;
          <D.18334>:
          if (_bmap != 0) goto <D.18333>; else goto <D.18335>;
          <D.18335>:
          D.20274 = (sizetype) el_size;
          e_start = e_start + D.20274;
        }
        <D.18337>:
        if (e_start < e_end) goto <D.18336>; else goto <D.18338>;
        <D.18338>:
      }
      <D.20277>:
      <D.20275>:
      <D.20226>:
    }
    <D.20177>:
    goto <D.18295>;
    <D.18339>:
    {
      void * * _objptr;
      gsize _bmap;

      _objptr = start;
      _bmap = desc >> 3;
      _objptr = _objptr + 16;
      goto <D.18344>;
      <D.18343>:
      D.20320 = _bmap & 1;
      if (D.20320 != 0) goto <D.20321>; else goto <D.20322>;
      <D.20321>:
      {
        char * __target;

        __target = MEM[(char * *)_objptr];
        if (__target != 0B) goto <D.20323>; else goto <D.20324>;
        <D.20323>:
        D.20325 = is_valid_object_pointer (__target);
        D.20326 = D.20325 == 0;
        D.20327 = (long int) D.20326;
        D.20328 = __builtin_expect (D.20327, 0);
        if (D.20328 != 0) goto <D.20329>; else goto <D.20330>;
        <D.20329>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 85, "is_valid_object_pointer (__target)");
        <D.20330>:
        D.20331 = sgen_ptr_in_nursery (__target);
        if (D.20331 != 0) goto <D.20332>; else goto <D.20333>;
        <D.20332>:
        D.20334 = MEM[(mword *)__target];
        D.20335 = D.20334 & 2;
        D.20336 = D.20335 == 0;
        D.20337 = (long int) D.20336;
        D.20338 = __builtin_expect (D.20337, 0);
        if (D.20338 != 0) goto <D.20339>; else goto <D.20340>;
        <D.20339>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 85, "SGEN_OBJECT_IS_PINNED (__target)");
        <D.20340>:
        goto <D.20341>;
        <D.20333>:
        D.20342 = sgen_los_is_valid_object (__target);
        if (D.20342 != 0) goto <D.20343>; else goto <D.20344>;
        <D.20343>:
        D.20345 = sgen_los_object_is_pinned (__target);
        D.20346 = D.20345 == 0;
        D.20347 = (long int) D.20346;
        D.20348 = __builtin_expect (D.20347, 0);
        if (D.20348 != 0) goto <D.20349>; else goto <D.20350>;
        <D.20349>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 85, "sgen_los_object_is_pinned (__target)");
        <D.20350>:
        goto <D.20351>;
        <D.20344>:
        D.20041 = major_collector.is_valid_object;
        D.20352 = D.20041 (__target);
        if (D.20352 != 0) goto <D.20353>; else goto <D.20354>;
        <D.20353>:
        D.19996 = major_collector.is_object_live;
        D.20355 = D.19996 (__target);
        D.20356 = D.20355 == 0;
        D.20357 = (long int) D.20356;
        D.20358 = __builtin_expect (D.20357, 0);
        if (D.20358 != 0) goto <D.20359>; else goto <D.20360>;
        <D.20359>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 85, "major_collector.is_object_live (__target)");
        <D.20360>:
        goto <D.20361>;
        <D.20354>:
        monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 85);
        <D.20361>:
        <D.20351>:
        <D.20341>:
        <D.20324>:
      }
      <D.20322>:
      _bmap = _bmap >> 1;
      _objptr = _objptr + 8;
      <D.18344>:
      if (_bmap != 0) goto <D.18343>; else goto <D.18345>;
      <D.18345>:
    }
    goto <D.18295>;
    <D.18346>:
    {
      void * * _objptr;
      gsize * bitmap_data;
      int bwords;
      void * * start_run;

      _objptr = start;
      bitmap_data = sgen_get_complex_descriptor (desc);
      D.20362 = *bitmap_data;
      D.20363 = (unsigned int) D.20362;
      D.20364 = D.20363 + 4294967295;
      bwords = (int) D.20364;
      start_run = _objptr;
      bitmap_data = bitmap_data + 8;
      if (0 != 0) goto <D.20365>; else goto <D.20366>;
      <D.20365>:
      {
        struct MonoObject * myobj;

        myobj = start;
        D.20367 = myobj->vtable;
        D.20368 = D.20367->klass;
        D.20369 = D.20368->name;
        D.20367 = myobj->vtable;
        D.20368 = D.20367->klass;
        D.20370 = D.20368->name_space;
        monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", bwords, start, desc, D.20370, D.20369);
      }
      <D.20366>:
      goto <D.18358>;
      <D.18357>:
      {
        gsize _bmap;

        bitmap_data.108 = bitmap_data;
        bitmap_data = bitmap_data.108 + 8;
        _bmap = *bitmap_data.108;
        _objptr = start_run;
        goto <D.18355>;
        <D.18354>:
        D.20372 = _bmap & 1;
        if (D.20372 != 0) goto <D.20373>; else goto <D.20374>;
        <D.20373>:
        {
          char * __target;

          __target = MEM[(char * *)_objptr];
          if (__target != 0B) goto <D.20375>; else goto <D.20376>;
          <D.20375>:
          D.20377 = is_valid_object_pointer (__target);
          D.20378 = D.20377 == 0;
          D.20379 = (long int) D.20378;
          D.20380 = __builtin_expect (D.20379, 0);
          if (D.20380 != 0) goto <D.20381>; else goto <D.20382>;
          <D.20381>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 93, "is_valid_object_pointer (__target)");
          <D.20382>:
          D.20383 = sgen_ptr_in_nursery (__target);
          if (D.20383 != 0) goto <D.20384>; else goto <D.20385>;
          <D.20384>:
          D.20386 = MEM[(mword *)__target];
          D.20387 = D.20386 & 2;
          D.20388 = D.20387 == 0;
          D.20389 = (long int) D.20388;
          D.20390 = __builtin_expect (D.20389, 0);
          if (D.20390 != 0) goto <D.20391>; else goto <D.20392>;
          <D.20391>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 93, "SGEN_OBJECT_IS_PINNED (__target)");
          <D.20392>:
          goto <D.20393>;
          <D.20385>:
          D.20394 = sgen_los_is_valid_object (__target);
          if (D.20394 != 0) goto <D.20395>; else goto <D.20396>;
          <D.20395>:
          D.20397 = sgen_los_object_is_pinned (__target);
          D.20398 = D.20397 == 0;
          D.20399 = (long int) D.20398;
          D.20400 = __builtin_expect (D.20399, 0);
          if (D.20400 != 0) goto <D.20401>; else goto <D.20402>;
          <D.20401>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 93, "sgen_los_object_is_pinned (__target)");
          <D.20402>:
          goto <D.20403>;
          <D.20396>:
          D.20041 = major_collector.is_valid_object;
          D.20404 = D.20041 (__target);
          if (D.20404 != 0) goto <D.20405>; else goto <D.20406>;
          <D.20405>:
          D.19996 = major_collector.is_object_live;
          D.20407 = D.19996 (__target);
          D.20408 = D.20407 == 0;
          D.20409 = (long int) D.20408;
          D.20410 = __builtin_expect (D.20409, 0);
          if (D.20410 != 0) goto <D.20411>; else goto <D.20412>;
          <D.20411>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 93, "major_collector.is_object_live (__target)");
          <D.20412>:
          goto <D.20413>;
          <D.20406>:
          monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 93);
          <D.20413>:
          <D.20403>:
          <D.20393>:
          <D.20376>:
        }
        <D.20374>:
        _bmap = _bmap >> 1;
        _objptr = _objptr + 8;
        <D.18355>:
        if (_bmap != 0) goto <D.18354>; else goto <D.18356>;
        <D.18356>:
        start_run = start_run + 512;
      }
      <D.18358>:
      bwords.109 = bwords;
      bwords = bwords.109 + -1;
      if (bwords.109 > 0) goto <D.18357>; else goto <D.18359>;
      <D.18359>:
    }
    goto <D.18295>;
    <D.18360>:
    {
      gsize * mbitmap_data;
      int mbwords;
      int el_size;
      char * e_start;
      char * e_end;

      D.20415 = vt->desc;
      mbitmap_data = sgen_get_complex_descriptor (D.20415);
      mbitmap_data.110 = mbitmap_data;
      mbitmap_data = mbitmap_data.110 + 8;
      D.20417 = *mbitmap_data.110;
      D.20418 = (unsigned int) D.20417;
      D.20419 = D.20418 + 4294967295;
      mbwords = (int) D.20419;
      D.20420 = vt->klass;
      el_size = mono_array_element_size (D.20420);
      e_start = start + 32;
      D.20183 = MEM[(struct MonoArray *)start].max_length;
      el_size.111 = (unsigned int) el_size;
      D.20422 = D.20183 * el_size.111;
      D.20423 = (sizetype) D.20422;
      e_end = e_start + D.20423;
      if (0 != 0) goto <D.20424>; else goto <D.20425>;
      <D.20424>:
      D.20420 = vt->klass;
      D.20426 = D.20420->name;
      D.20420 = vt->klass;
      D.20427 = D.20420->name_space;
      D.20415 = vt->desc;
      monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", mbwords, start, D.20415, D.20427, D.20426);
      <D.20425>:
      goto <D.18379>;
      <D.18378>:
      {
        void * * _objptr;
        gsize * bitmap_data;
        unsigned int bwords;

        _objptr = e_start;
        bitmap_data = mbitmap_data;
        bwords = (unsigned int) mbwords;
        goto <D.18376>;
        <D.18375>:
        {
          gsize _bmap;
          void * * start_run;

          bitmap_data.112 = bitmap_data;
          bitmap_data = bitmap_data.112 + 8;
          _bmap = *bitmap_data.112;
          start_run = _objptr;
          goto <D.18373>;
          <D.18372>:
          D.20429 = _bmap & 1;
          if (D.20429 != 0) goto <D.20430>; else goto <D.20431>;
          <D.20430>:
          {
            char * __target;

            __target = MEM[(char * *)_objptr];
            if (__target != 0B) goto <D.20432>; else goto <D.20433>;
            <D.20432>:
            D.20434 = is_valid_object_pointer (__target);
            D.20435 = D.20434 == 0;
            D.20436 = (long int) D.20435;
            D.20437 = __builtin_expect (D.20436, 0);
            if (D.20437 != 0) goto <D.20438>; else goto <D.20439>;
            <D.20438>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 102, "is_valid_object_pointer (__target)");
            <D.20439>:
            D.20440 = sgen_ptr_in_nursery (__target);
            if (D.20440 != 0) goto <D.20441>; else goto <D.20442>;
            <D.20441>:
            D.20443 = MEM[(mword *)__target];
            D.20444 = D.20443 & 2;
            D.20445 = D.20444 == 0;
            D.20446 = (long int) D.20445;
            D.20447 = __builtin_expect (D.20446, 0);
            if (D.20447 != 0) goto <D.20448>; else goto <D.20449>;
            <D.20448>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 102, "SGEN_OBJECT_IS_PINNED (__target)");
            <D.20449>:
            goto <D.20450>;
            <D.20442>:
            D.20451 = sgen_los_is_valid_object (__target);
            if (D.20451 != 0) goto <D.20452>; else goto <D.20453>;
            <D.20452>:
            D.20454 = sgen_los_object_is_pinned (__target);
            D.20455 = D.20454 == 0;
            D.20456 = (long int) D.20455;
            D.20457 = __builtin_expect (D.20456, 0);
            if (D.20457 != 0) goto <D.20458>; else goto <D.20459>;
            <D.20458>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 102, "sgen_los_object_is_pinned (__target)");
            <D.20459>:
            goto <D.20460>;
            <D.20453>:
            D.20041 = major_collector.is_valid_object;
            D.20461 = D.20041 (__target);
            if (D.20461 != 0) goto <D.20462>; else goto <D.20463>;
            <D.20462>:
            D.19996 = major_collector.is_object_live;
            D.20464 = D.19996 (__target);
            D.20465 = D.20464 == 0;
            D.20466 = (long int) D.20465;
            D.20467 = __builtin_expect (D.20466, 0);
            if (D.20467 != 0) goto <D.20468>; else goto <D.20469>;
            <D.20468>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 102, "major_collector.is_object_live (__target)");
            <D.20469>:
            goto <D.20470>;
            <D.20463>:
            monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 102);
            <D.20470>:
            <D.20460>:
            <D.20450>:
            <D.20433>:
          }
          <D.20431>:
          _bmap = _bmap >> 1;
          _objptr = _objptr + 8;
          <D.18373>:
          if (_bmap != 0) goto <D.18372>; else goto <D.18374>;
          <D.18374>:
          _objptr = start_run + 512;
        }
        <D.18376>:
        bwords.113 = bwords;
        bwords = bwords.113 + 4294967295;
        if (bwords.113 != 0) goto <D.18375>; else goto <D.18377>;
        <D.18377>:
        D.20472 = (sizetype) el_size;
        e_start = e_start + D.20472;
      }
      <D.18379>:
      if (e_start < e_end) goto <D.18378>; else goto <D.18380>;
      <D.18380>:
    }
    goto <D.18295>;
    <D.18381>:
    goto <D.18295>;
    <D.18382>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 111);
    <D.18295>:
  }
}


sgen_check_nursery_objects_pinned (gboolean pinned)
{
  long unsigned int D.20475;
  void * D.20476;
  struct GCMemSection * nursery_section.114;
  char * D.20478;
  char * D.20479;

  sgen_clear_nursery_fragments ();
  D.20475 = (long unsigned int) pinned;
  D.20476 = (void *) D.20475;
  nursery_section.114 = nursery_section;
  D.20478 = nursery_section.114->end_data;
  nursery_section.114 = nursery_section;
  D.20479 = nursery_section.114->data;
  sgen_scan_area_with_callback (D.20479, D.20478, check_nursery_objects_pinned_callback, D.20476, 0);
}


check_nursery_objects_pinned_callback (char * obj, size_t size, void * data)
{
  long int data.115;
  int iftmp.116;
  long unsigned int D.20484;
  long unsigned int D.20485;
  long unsigned int D.20487;
  _Bool D.20489;
  long int D.20490;
  long int D.20491;
  long unsigned int D.20496;
  _Bool D.20497;
  long int D.20498;
  long int D.20499;
  _Bool D.20503;
  long int D.20504;
  long int D.20505;
  gboolean pinned;

  data.115 = (long int) data;
  pinned = (gboolean) data.115;
  D.20484 = MEM[(mword *)obj];
  D.20485 = D.20484 & 1;
  if (D.20485 != 0) goto <D.20486>; else goto <D.20482>;
  <D.20486>:
  D.20484 = MEM[(mword *)obj];
  D.20487 = D.20484 & 18446744073709551612;
  if (D.20487 != 0) goto <D.20488>; else goto <D.20482>;
  <D.20488>:
  iftmp.116 = 1;
  goto <D.20483>;
  <D.20482>:
  iftmp.116 = 0;
  <D.20483>:
  D.20489 = iftmp.116 != 0;
  D.20490 = (long int) D.20489;
  D.20491 = __builtin_expect (D.20490, 0);
  if (D.20491 != 0) goto <D.20492>; else goto <D.20493>;
  <D.20492>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-debug.c", 575, "!SGEN_OBJECT_IS_FORWARDED (obj)");
  <D.20493>:
  if (pinned != 0) goto <D.20494>; else goto <D.20495>;
  <D.20494>:
  D.20484 = MEM[(mword *)obj];
  D.20496 = D.20484 & 2;
  D.20497 = D.20496 == 0;
  D.20498 = (long int) D.20497;
  D.20499 = __builtin_expect (D.20498, 0);
  if (D.20499 != 0) goto <D.20500>; else goto <D.20501>;
  <D.20500>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-debug.c", 577, "SGEN_OBJECT_IS_PINNED (obj)");
  <D.20501>:
  goto <D.20502>;
  <D.20495>:
  D.20484 = MEM[(mword *)obj];
  D.20496 = D.20484 & 2;
  D.20503 = D.20496 != 0;
  D.20504 = (long int) D.20503;
  D.20505 = __builtin_expect (D.20504, 0);
  if (D.20505 != 0) goto <D.20506>; else goto <D.20507>;
  <D.20506>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-debug.c", 579, "!SGEN_OBJECT_IS_PINNED (obj)");
  <D.20507>:
  <D.20502>:
}


