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


describe_pointer (char * ptr, gboolean need_setup)
{
  int D.18926;
  char * start.0;
  char * start.1;
  long unsigned int D.18933;
  long unsigned int D.18934;
  int D.18936;
  long int ptr.2;
  long int start.3;
  long int D.18944;
  int D.18945;
  gboolean (*<T2da0>) (char *, char * *) D.18947;
  int D.18948;
  struct MonoVTable * (*<T2dba>) (char *) D.18959;
  gboolean (*<T2d21>) (char *) D.18961;
  int D.18962;
  long unsigned int D.18966;
  char * iftmp.4;
  long unsigned int D.18970;
  int D.18978;
  struct MonoClass * D.18981;
  const char * D.18982;
  long int desc.5;
  int D.18984;
  const char * D.18985;
  unsigned int D.18986;
  int D.18987;
  struct MonoVTable * vtable;
  mword desc;
  int type;
  char * start;
  char * forwarded;
  mword size;
  void restart = <<< error >>>;
  void bridge = <<< error >>>;

  try
    {
      restart:
      D.18926 = sgen_ptr_in_nursery (ptr);
      if (D.18926 != 0) goto <D.18927>; else goto <D.18928>;
      <D.18927>:
      start.0 = describe_nursery_ptr (ptr, need_setup);
      start = start.0;
      start.1 = start;
      if (start.1 == 0B) goto <D.18931>; else goto <D.18932>;
      <D.18931>:
      return;
      <D.18932>:
      ptr = start;
      D.18933 = MEM[(mword *)ptr];
      D.18934 = D.18933 & 18446744073709551612;
      vtable = (struct MonoVTable *) D.18934;
      goto <D.18935>;
      <D.18928>:
      D.18936 = sgen_ptr_is_in_los (ptr, &start);
      if (D.18936 != 0) goto <D.18937>; else goto <D.18938>;
      <D.18937>:
      start.1 = start;
      if (ptr == start.1) goto <D.18939>; else goto <D.18940>;
      <D.18939>:
      start.1 = start;
      printf ("Pointer is the start of object %p in LOS space.\n", start.1);
      goto <D.18941>;
      <D.18940>:
      ptr.2 = (long int) ptr;
      start.1 = start;
      start.3 = (long int) start.1;
      D.18944 = ptr.2 - start.3;
      D.18945 = (int) D.18944;
      start.1 = start;
      printf ("Pointer is at offset 0x%x of object %p in LOS space.\n", D.18945, start.1);
      <D.18941>:
      ptr = start;
      mono_sgen_los_describe_pointer (ptr);
      D.18933 = MEM[(mword *)ptr];
      D.18934 = D.18933 & 18446744073709551612;
      vtable = (struct MonoVTable *) D.18934;
      goto <D.18946>;
      <D.18938>:
      D.18947 = major_collector.ptr_is_in_non_pinned_space;
      D.18948 = D.18947 (ptr, &start);
      if (D.18948 != 0) goto <D.18949>; else goto <D.18950>;
      <D.18949>:
      start.1 = start;
      if (ptr == start.1) goto <D.18951>; else goto <D.18952>;
      <D.18951>:
      start.1 = start;
      printf ("Pointer is the start of object %p in oldspace.\n", start.1);
      goto <D.18953>;
      <D.18952>:
      start.1 = start;
      if (start.1 != 0B) goto <D.18954>; else goto <D.18955>;
      <D.18954>:
      ptr.2 = (long int) ptr;
      start.1 = start;
      start.3 = (long int) start.1;
      D.18944 = ptr.2 - start.3;
      D.18945 = (int) D.18944;
      start.1 = start;
      printf ("Pointer is at offset 0x%x of object %p in oldspace.\n", D.18945, start.1);
      goto <D.18956>;
      <D.18955>:
      printf ("Pointer inside oldspace.\n");
      <D.18956>:
      <D.18953>:
      start.1 = start;
      if (start.1 != 0B) goto <D.18957>; else goto <D.18958>;
      <D.18957>:
      ptr = start;
      <D.18958>:
      D.18959 = major_collector.describe_pointer;
      vtable = D.18959 (ptr);
      goto <D.18960>;
      <D.18950>:
      D.18961 = major_collector.obj_is_from_pinned_alloc;
      D.18962 = D.18961 (ptr);
      if (D.18962 != 0) goto <D.18963>; else goto <D.18964>;
      <D.18963>:
      printf ("Pointer is inside a pinned chunk.\n");
      D.18933 = MEM[(mword *)ptr];
      D.18934 = D.18933 & 18446744073709551612;
      vtable = (struct MonoVTable *) D.18934;
      goto <D.18965>;
      <D.18964>:
      printf ("Pointer unknown.\n");
      return;
      <D.18965>:
      <D.18960>:
      <D.18946>:
      <D.18935>:
      D.18933 = MEM[(mword *)ptr];
      D.18966 = D.18933 & 2;
      if (D.18966 != 0) goto <D.18967>; else goto <D.18968>;
      <D.18967>:
      printf ("Object is pinned.\n");
      <D.18968>:
      D.18933 = MEM[(mword *)ptr];
      D.18970 = D.18933 & 1;
      if (D.18970 != 0) goto <D.18971>; else goto <D.18972>;
      <D.18971>:
      D.18933 = MEM[(mword *)ptr];
      D.18934 = D.18933 & 18446744073709551612;
      iftmp.4 = (char *) D.18934;
      goto <D.18973>;
      <D.18972>:
      iftmp.4 = 0B;
      <D.18973>:
      forwarded = iftmp.4;
      if (forwarded != 0B) goto <D.18974>; else goto <D.18975>;
      <D.18974>:
      printf ("Object is forwarded to %p:\n", forwarded);
      ptr = forwarded;
      goto restart;
      <D.18975>:
      printf ("VTable: %p\n", vtable);
      if (vtable == 0B) goto <D.18976>; else goto <D.18977>;
      <D.18976>:
      printf ("VTable is invalid (empty).\n");
      goto bridge;
      <D.18977>:
      D.18978 = sgen_ptr_in_nursery (vtable);
      if (D.18978 != 0) goto <D.18979>; else goto <D.18980>;
      <D.18979>:
      printf ("VTable is invalid (points inside nursery).\n");
      goto bridge;
      <D.18980>:
      D.18981 = vtable->klass;
      D.18982 = D.18981->name;
      printf ("Class: %s\n", D.18982);
      desc = MEM[(struct GCVTable *)vtable].desc;
      desc.5 = (long int) desc;
      printf ("Descriptor: %lx\n", desc.5);
      D.18984 = (int) desc;
      type = D.18984 & 7;
      D.18985 = descriptor_types[type];
      printf ("Descriptor type: %d (%s)\n", type, D.18985);
      D.18986 = sgen_safe_object_get_size (ptr);
      size = (mword) D.18986;
      D.18987 = (int) size;
      printf ("Size: %d\n", D.18987);
      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.18994;
  long unsigned int D.18995;
  char * * D.18996;
  char * D.18997;
  int valid_nursery_object_count.7;
  unsigned int D.19003;
  sizetype D.19004;
  char * D.19005;
  int gc_debug_level.8;
  _Bool D.19007;
  long int D.19008;
  long int D.19009;
  struct FILE * gc_debug_file.9;
  char * D.19013;
  long int ptr.10;
  long int obj.11;
  long int D.19023;
  int i;

  if (need_setup != 0) goto <D.18991>; else goto <D.18992>;
  <D.18991>:
  setup_valid_nursery_objects ();
  <D.18992>:
  i = 0;
  goto <D.18647>;
  <D.18646>:
  valid_nursery_objects.6 = valid_nursery_objects;
  D.18994 = (long unsigned int) i;
  D.18995 = D.18994 * 8;
  D.18996 = valid_nursery_objects.6 + D.18995;
  D.18997 = *D.18996;
  if (D.18997 >= ptr) goto <D.18645>; else goto <D.18998>;
  <D.18998>:
  i = i + 1;
  <D.18647>:
  valid_nursery_object_count.7 = valid_nursery_object_count;
  if (i < valid_nursery_object_count.7) goto <D.18646>; else goto <D.18645>;
  <D.18645>:
  valid_nursery_object_count.7 = valid_nursery_object_count;
  if (i >= valid_nursery_object_count.7) goto <D.19000>; else goto <D.19002>;
  <D.19002>:
  valid_nursery_objects.6 = valid_nursery_objects;
  D.18994 = (long unsigned int) i;
  D.18995 = D.18994 * 8;
  D.18996 = valid_nursery_objects.6 + D.18995;
  D.18997 = *D.18996;
  valid_nursery_objects.6 = valid_nursery_objects;
  D.18994 = (long unsigned int) i;
  D.18995 = D.18994 * 8;
  D.18996 = valid_nursery_objects.6 + D.18995;
  D.18997 = *D.18996;
  D.19003 = sgen_safe_object_get_size (D.18997);
  D.19004 = (sizetype) D.19003;
  D.19005 = D.18997 + D.19004;
  if (D.19005 < ptr) goto <D.19000>; else goto <D.19001>;
  <D.19000>:
  gc_debug_level.8 = gc_debug_level;
  D.19007 = gc_debug_level.8 >= 0;
  D.19008 = (long int) D.19007;
  D.19009 = __builtin_expect (D.19008, 0);
  if (D.19009 != 0) goto <D.19010>; else goto <D.19011>;
  <D.19010>:
  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.19011>:
  D.19013 = 0B;
  return D.19013;
  <D.19001>:
  {
    char * obj;

    valid_nursery_objects.6 = valid_nursery_objects;
    D.18994 = (long unsigned int) i;
    D.18995 = D.18994 * 8;
    D.18996 = valid_nursery_objects.6 + D.18995;
    obj = *D.18996;
    if (obj == ptr) goto <D.19014>; else goto <D.19015>;
    <D.19014>:
    gc_debug_level.8 = gc_debug_level;
    D.19007 = gc_debug_level.8 >= 0;
    D.19008 = (long int) D.19007;
    D.19009 = __builtin_expect (D.19008, 0);
    if (D.19009 != 0) goto <D.19016>; else goto <D.19017>;
    <D.19016>:
    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.19017>:
    goto <D.19018>;
    <D.19015>:
    gc_debug_level.8 = gc_debug_level;
    D.19007 = gc_debug_level.8 >= 0;
    D.19008 = (long int) D.19007;
    D.19009 = __builtin_expect (D.19008, 0);
    if (D.19009 != 0) goto <D.19019>; else goto <D.19020>;
    <D.19019>:
    gc_debug_file.9 = gc_debug_file;
    ptr.10 = (long int) ptr;
    obj.11 = (long int) obj;
    D.19023 = ptr.10 - obj.11;
    fprintf (gc_debug_file.9, "nursery-ptr (interior-ptr offset %td)\n\n", D.19023);
    gc_debug_file.9 = gc_debug_file;
    fflush (gc_debug_file.9);
    <D.19020>:
    <D.19018>:
    D.19013 = obj;
    return D.19013;
  }
}


setup_valid_nursery_objects ()
{
  char * * valid_nursery_objects.12;
  int sgen_nursery_size.13;
  long unsigned int D.19029;
  void * valid_nursery_objects.14;
  struct GCMemSection * nursery_section.15;
  char * D.19032;
  char * D.19033;

  valid_nursery_objects.12 = valid_nursery_objects;
  if (valid_nursery_objects.12 == 0B) goto <D.19026>; else goto <D.19027>;
  <D.19026>:
  sgen_nursery_size.13 = sgen_nursery_size;
  D.19029 = (long unsigned int) sgen_nursery_size.13;
  valid_nursery_objects.14 = sgen_alloc_os_memory (D.19029, 2, "debugging data");
  valid_nursery_objects = valid_nursery_objects.14;
  <D.19027>:
  valid_nursery_object_count = 0;
  nursery_section.15 = nursery_section;
  D.19032 = nursery_section.15->data;
  nursery_section.15 = nursery_section;
  D.19033 = nursery_section.15->end_data;
  sgen_scan_area_with_callback (D.19032, D.19033, 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.19038;
  long unsigned int D.19039;
  char * * D.19040;

  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.19038 = (long unsigned int) valid_nursery_object_count.18;
  D.19039 = D.19038 * 8;
  D.19040 = valid_nursery_objects.16 + D.19039;
  *D.19040 = object;
}


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

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


sgen_ptr_in_nursery (void * p)
{
  gboolean D.19043;
  int sgen_nursery_bits.20;
  int D.19045;
  int D.19046;
  long unsigned int D.19047;
  long unsigned int p.21;
  long unsigned int D.19049;
  char * sgen_nursery_start.22;
  long unsigned int sgen_nursery_start.23;
  _Bool D.19052;

  sgen_nursery_bits.20 = sgen_nursery_bits;
  D.19045 = 1 << sgen_nursery_bits.20;
  D.19046 = -D.19045;
  D.19047 = (long unsigned int) D.19046;
  p.21 = (long unsigned int) p;
  D.19049 = D.19047 & p.21;
  sgen_nursery_start.22 = sgen_nursery_start;
  sgen_nursery_start.23 = (long unsigned int) sgen_nursery_start.22;
  D.19052 = D.19049 == sgen_nursery_start.23;
  D.19043 = (gboolean) D.19052;
  return D.19043;
}


sgen_safe_object_get_size (struct MonoObject * obj)
{
  char * iftmp.24;
  long unsigned int D.19055;
  long unsigned int D.19056;
  long unsigned int D.19059;
  guint D.19063;
  struct MonoVTable * D.19064;
  char * forwarded;

  D.19055 = MEM[(mword *)obj];
  D.19056 = D.19055 & 1;
  if (D.19056 != 0) goto <D.19057>; else goto <D.19058>;
  <D.19057>:
  D.19055 = MEM[(mword *)obj];
  D.19059 = D.19055 & 18446744073709551612;
  iftmp.24 = (char *) D.19059;
  goto <D.19060>;
  <D.19058>:
  iftmp.24 = 0B;
  <D.19060>:
  forwarded = iftmp.24;
  if (forwarded != 0B) goto <D.19061>; else goto <D.19062>;
  <D.19061>:
  obj = forwarded;
  <D.19062>:
  D.19055 = MEM[(mword *)obj];
  D.19059 = D.19055 & 18446744073709551612;
  D.19064 = (struct MonoVTable *) D.19059;
  D.19063 = sgen_par_object_get_size (D.19064, obj);
  return D.19063;
}


sgen_par_object_get_size (struct MonoVTable * vtable, struct MonoObject * o)
{
  void * D.19066;
  long unsigned int D.19067;
  guint D.19072;
  int D.19073;
  int D.19074;
  unsigned int D.19075;
  long unsigned int D.19078;
  int D.19079;
  unsigned int D.19080;
  unsigned int element_size.25;
  unsigned int D.19082;
  long unsigned int D.19083;
  long unsigned int D.19084;
  struct MonoClass * D.19087;
  unsigned char D.19088;
  long unsigned int D.19089;
  long unsigned int D.19090;
  mword descr;
  mword type;

  D.19066 = vtable->gc_descr;
  descr = (mword) D.19066;
  type = descr & 7;
  D.19067 = type + 18446744073709551615;
  if (D.19067 <= 1) goto <D.19068>; else goto <D.19069>;
  <D.19068>:
  {
    mword size;

    size = descr & 65528;
    if (size == 0) goto <D.19070>; else goto <D.19071>;
    <D.19070>:
    D.19073 = MEM[(struct MonoString *)o].length;
    D.19074 = D.19073 * 2;
    D.19075 = (unsigned int) D.19074;
    D.19072 = D.19075 + 26;
    return D.19072;
    <D.19071>:
    D.19072 = (guint) size;
    return D.19072;
  }
  <D.19069>:
  if (type == 4) goto <D.19076>; else goto <D.19077>;
  <D.19076>:
  {
    int element_size;
    struct MonoArray * array;
    size_t size;

    D.19078 = descr >> 3;
    D.19079 = (int) D.19078;
    element_size = D.19079 & 1023;
    array = o;
    D.19080 = array->max_length;
    element_size.25 = (unsigned int) element_size;
    D.19082 = D.19080 * element_size.25;
    D.19083 = (long unsigned int) D.19082;
    size = D.19083 + 32;
    D.19084 = descr & 8192;
    if (D.19084 != 0) goto <D.19085>; else goto <D.19086>;
    <D.19085>:
    size = size + 3;
    size = size & 18446744073709551612;
    D.19087 = vtable->klass;
    D.19088 = D.19087->rank;
    D.19089 = (long unsigned int) D.19088;
    D.19090 = D.19089 * 8;
    size = D.19090 + size;
    <D.19086>:
    D.19072 = (guint) size;
    return D.19072;
  }
  <D.19077>:
  D.19072 = slow_object_get_size (vtable, o);
  return D.19072;
}


slow_object_get_size (struct MonoVTable * vtable, struct MonoObject * o)
{
  struct MonoClass * D.19092;
  guint D.19095;
  int D.19096;
  int D.19097;
  unsigned int D.19098;
  unsigned char D.19099;
  int D.19102;
  unsigned int D.19103;
  unsigned int D.19104;
  unsigned int D.19105;
  long unsigned int D.19106;
  struct MonoArrayBounds * D.19107;
  _Bool D.19108;
  long int D.19109;
  long int D.19110;
  long unsigned int D.19113;
  long unsigned int D.19114;
  int D.19115;
  struct MonoClass * klass;

  klass = vtable->klass;
  D.19092 = mono_defaults.string_class;
  if (D.19092 == klass) goto <D.19093>; else goto <D.19094>;
  <D.19093>:
  D.19096 = MEM[(struct MonoString *)o].length;
  D.19097 = D.19096 * 2;
  D.19098 = (unsigned int) D.19097;
  D.19095 = D.19098 + 26;
  return D.19095;
  <D.19094>:
  D.19099 = klass->rank;
  if (D.19099 != 0) goto <D.19100>; else goto <D.19101>;
  <D.19100>:
  {
    struct MonoArray * array;
    size_t size;

    array = o;
    D.19102 = klass->sizes.element_size;
    D.19103 = (unsigned int) D.19102;
    D.19104 = array->max_length;
    D.19105 = D.19103 * D.19104;
    D.19106 = (long unsigned int) D.19105;
    size = D.19106 + 32;
    D.19107 = array->bounds;
    D.19108 = D.19107 != 0B;
    D.19109 = (long int) D.19108;
    D.19110 = __builtin_expect (D.19109, 0);
    if (D.19110 != 0) goto <D.19111>; else goto <D.19112>;
    <D.19111>:
    size = size + 3;
    size = size & 18446744073709551612;
    D.19099 = klass->rank;
    D.19113 = (long unsigned int) D.19099;
    D.19114 = D.19113 * 8;
    size = D.19114 + size;
    <D.19112>:
    D.19095 = (guint) size;
    return D.19095;
  }
  <D.19101>:
  D.19115 = klass->instance_size;
  D.19095 = (guint) D.19115;
  return D.19095;
}


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

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


sgen_check_consistency ()
{
  int gc_debug_level.26;
  _Bool D.19120;
  long int D.19121;
  long int D.19122;
  struct FILE * gc_debug_file.27;
  void (*<T2d7b>) (gboolean, gboolean, void (*IterateObjectCallbackFunc) (char *, size_t, void *), void *) D.19126;
  int missing_remsets.28;
  _Bool D.19132;
  long int D.19133;
  long int D.19134;

  missing_remsets = 0;
  gc_debug_level.26 = gc_debug_level;
  D.19120 = gc_debug_level.26 > 0;
  D.19121 = (long int) D.19120;
  D.19122 = __builtin_expect (D.19121, 0);
  if (D.19122 != 0) goto <D.19123>; else goto <D.19124>;
  <D.19123>:
  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.19124>:
  D.19126 = major_collector.iterate_objects;
  D.19126 (1, 1, check_consistency_callback, 0B);
  sgen_los_iterate_objects (check_consistency_callback, 0B);
  gc_debug_level.26 = gc_debug_level;
  D.19120 = gc_debug_level.26 > 0;
  D.19121 = (long int) D.19120;
  D.19122 = __builtin_expect (D.19121, 0);
  if (D.19122 != 0) goto <D.19127>; else goto <D.19128>;
  <D.19127>:
  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.19128>:
  if (1 != 0) goto <D.19129>; else goto <D.19130>;
  <D.19129>:
  missing_remsets.28 = missing_remsets;
  D.19132 = missing_remsets.28 != 0;
  D.19133 = (long int) D.19132;
  D.19134 = __builtin_expect (D.19133, 0);
  if (D.19134 != 0) goto <D.19135>; else goto <D.19136>;
  <D.19135>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-debug.c", 204, "!missing_remsets");
  <D.19136>:
  <D.19130>:
}


check_consistency_callback (char * start, size_t size, void * dummy)
{
  long unsigned int D.19137;
  long unsigned int D.19138;
  struct FILE * gc_debug_file.29;
  struct MonoClass * D.19142;
  const char * D.19143;
  long unsigned int D.19144;
  long unsigned int D.19145;
  long unsigned int D.19148;
  long unsigned int D.19149;
  long unsigned int D.19150;
  long unsigned int D.19151;
  long unsigned int D.19152;
  long unsigned int D.19153;
  void * D.19154;
  int D.19157;
  struct SgenRemeberedSet * D.19160;
  gboolean (*<T2d21>) (char *) D.19161;
  int D.19162;
  int gc_debug_level.30;
  _Bool D.19166;
  long int D.19167;
  long int D.19168;
  long int _objptr.31;
  long int start.32;
  long int D.19173;
  struct MonoVTable * D.19174;
  struct MonoClass * D.19175;
  const char * D.19176;
  const char * D.19177;
  long unsigned int D.19178;
  long unsigned int D.19179;
  int D.19184;
  struct SgenRemeberedSet * D.19187;
  gboolean (*<T2d21>) (char *) D.19188;
  int D.19189;
  long unsigned int D.19196;
  long unsigned int D.19197;
  int D.19198;
  void * D.19199;
  int D.19202;
  struct SgenRemeberedSet * D.19205;
  gboolean (*<T2d21>) (char *) D.19206;
  int D.19207;
  long int _objptr.33;
  long int D.19213;
  long unsigned int D.19214;
  long unsigned int D.19215;
  long unsigned int D.19218;
  long unsigned int D.19219;
  int D.19220;
  int D.19223;
  struct SgenRemeberedSet * D.19226;
  gboolean (*<T2d21>) (char *) D.19227;
  int D.19228;
  long unsigned int D.19235;
  long unsigned int D.19238;
  int D.19239;
  int D.19240;
  unsigned int D.19243;
  unsigned int el_size.34;
  unsigned int D.19245;
  sizetype D.19246;
  void * D.19247;
  int D.19250;
  struct SgenRemeberedSet * D.19253;
  gboolean (*<T2d21>) (char *) D.19254;
  int D.19255;
  long int p.35;
  long int D.19261;
  long unsigned int D.19262;
  long unsigned int D.19263;
  int D.19269;
  int D.19270;
  long unsigned int D.19271;
  long unsigned int D.19272;
  long unsigned int D.19273;
  long unsigned int D.19274;
  void * * D.19275;
  void * D.19276;
  int D.19279;
  struct SgenRemeberedSet * D.19282;
  gboolean (*<T2d21>) (char *) D.19283;
  char * D.19284;
  int D.19285;
  long int D.19290;
  long int D.19291;
  long unsigned int D.19292;
  long unsigned int D.19293;
  sizetype D.19296;
  long unsigned int D.19300;
  void * D.19303;
  int D.19306;
  struct SgenRemeberedSet * D.19309;
  gboolean (*<T2d21>) (char *) D.19310;
  int D.19311;
  long int p.36;
  long int D.19317;
  long unsigned int D.19318;
  long unsigned int D.19319;
  long unsigned int D.19322;
  void * D.19325;
  int D.19328;
  struct SgenRemeberedSet * D.19331;
  gboolean (*<T2d21>) (char *) D.19332;
  int D.19333;
  long int _objptr.37;
  long int D.19339;
  long unsigned int D.19340;
  long unsigned int D.19341;
  long unsigned int D.19344;
  unsigned int D.19345;
  unsigned int D.19346;
  struct MonoVTable * D.19349;
  struct MonoClass * D.19350;
  const char * D.19351;
  const char * D.19352;
  gsize * bitmap_data.38;
  long unsigned int D.19354;
  void * D.19357;
  int D.19360;
  struct SgenRemeberedSet * D.19363;
  gboolean (*<T2d21>) (char *) D.19364;
  int D.19365;
  long int _objptr.39;
  long int D.19371;
  long unsigned int D.19372;
  long unsigned int D.19373;
  int bwords.40;
  long unsigned int D.19377;
  gsize * mbitmap_data.41;
  long unsigned int D.19379;
  unsigned int D.19380;
  unsigned int D.19381;
  struct MonoClass * D.19382;
  unsigned int el_size.42;
  unsigned int D.19384;
  sizetype D.19385;
  const char * D.19388;
  const char * D.19389;
  gsize * bitmap_data.43;
  long unsigned int D.19391;
  void * D.19394;
  int D.19397;
  struct SgenRemeberedSet * D.19400;
  gboolean (*<T2d21>) (char *) D.19401;
  int D.19402;
  long int _objptr.44;
  long int D.19408;
  long unsigned int D.19409;
  long unsigned int D.19410;
  unsigned int bwords.45;
  sizetype D.19414;
  struct GCVTable * vt;

  D.19137 = MEM[(mword *)start];
  D.19138 = D.19137 & 18446744073709551612;
  vt = (struct GCVTable *) D.19138;
  if (0 != 0) goto <D.19139>; else goto <D.19140>;
  <D.19139>:
  gc_debug_file.29 = gc_debug_file;
  D.19142 = vt->klass;
  D.19143 = D.19142->name;
  fprintf (gc_debug_file.29, "Scanning object %p, vtable: %p (%s)\n", start, vt, D.19143);
  gc_debug_file.29 = gc_debug_file;
  fflush (gc_debug_file.29);
  <D.19140>:
  {
    struct GCVTable * vt;
    mword desc;

    D.19137 = MEM[(mword *)start];
    D.19138 = D.19137 & 18446744073709551612;
    vt = (struct GCVTable *) D.19138;
    desc = vt->desc;
    D.19144 = desc & 7;
    switch (D.19144) <default: <D.18316>, case 1: <D.18231>, case 2: <D.18238>, case 3: <D.18282>, case 4: <D.18246>, case 5: <D.18276>, case 6: <D.18295>, case 7: <D.18315>>
    <D.18231>:
    D.19145 = desc & 4294901760;
    if (D.19145 != 0) goto <D.19146>; else goto <D.19147>;
    <D.19146>:
    {
      void * * _objptr_end;
      void * * _objptr;

      _objptr = start;
      D.19148 = desc >> 16;
      D.19149 = D.19148 & 255;
      D.19150 = D.19149 * 8;
      _objptr = _objptr + D.19150;
      D.19151 = desc >> 24;
      D.19152 = D.19151 & 255;
      D.19153 = D.19152 * 8;
      _objptr_end = _objptr + D.19153;
      D.19154 = *_objptr;
      if (D.19154 != 0B) goto <D.19155>; else goto <D.19156>;
      <D.19155>:
      D.19154 = *_objptr;
      D.19157 = sgen_ptr_in_nursery (D.19154);
      if (D.19157 != 0) goto <D.19158>; else goto <D.19159>;
      <D.19158>:
      D.19160 = sgen_get_remset ();
      D.19161 = D.19160->find_address;
      D.19162 = D.19161 (_objptr);
      if (D.19162 == 0) goto <D.19163>; else goto <D.19164>;
      <D.19163>:
      gc_debug_level.30 = gc_debug_level;
      D.19166 = gc_debug_level.30 >= 0;
      D.19167 = (long int) D.19166;
      D.19168 = __builtin_expect (D.19167, 0);
      if (D.19168 != 0) goto <D.19169>; else goto <D.19170>;
      <D.19169>:
      gc_debug_file.29 = gc_debug_file;
      D.19154 = *_objptr;
      _objptr.31 = (long int) _objptr;
      start.32 = (long int) start;
      D.19173 = _objptr.31 - start.32;
      D.19174 = MEM[(struct MonoObject *)start].vtable;
      D.19175 = D.19174->klass;
      D.19176 = D.19175->name_space;
      D.19174 = MEM[(struct MonoObject *)start].vtable;
      D.19175 = D.19174->klass;
      D.19177 = D.19175->name;
      fprintf (gc_debug_file.29, "Oldspace->newspace reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.19154, D.19173, start, D.19176, D.19177);
      gc_debug_file.29 = gc_debug_file;
      fflush (gc_debug_file.29);
      <D.19170>:
      D.19154 = *_objptr;
      D.19178 = MEM[(mword *)D.19154];
      D.19179 = D.19178 & 2;
      if (D.19179 == 0) goto <D.19180>; else goto <D.19181>;
      <D.19180>:
      missing_remsets = 1;
      <D.19181>:
      <D.19164>:
      <D.19159>:
      <D.19156>:
      _objptr = _objptr + 8;
      goto <D.18235>;
      <D.18234>:
      D.19154 = *_objptr;
      if (D.19154 != 0B) goto <D.19182>; else goto <D.19183>;
      <D.19182>:
      D.19154 = *_objptr;
      D.19184 = sgen_ptr_in_nursery (D.19154);
      if (D.19184 != 0) goto <D.19185>; else goto <D.19186>;
      <D.19185>:
      D.19187 = sgen_get_remset ();
      D.19188 = D.19187->find_address;
      D.19189 = D.19188 (_objptr);
      if (D.19189 == 0) goto <D.19190>; else goto <D.19191>;
      <D.19190>:
      gc_debug_level.30 = gc_debug_level;
      D.19166 = gc_debug_level.30 >= 0;
      D.19167 = (long int) D.19166;
      D.19168 = __builtin_expect (D.19167, 0);
      if (D.19168 != 0) goto <D.19192>; else goto <D.19193>;
      <D.19192>:
      gc_debug_file.29 = gc_debug_file;
      D.19154 = *_objptr;
      _objptr.31 = (long int) _objptr;
      start.32 = (long int) start;
      D.19173 = _objptr.31 - start.32;
      D.19174 = MEM[(struct MonoObject *)start].vtable;
      D.19175 = D.19174->klass;
      D.19176 = D.19175->name_space;
      D.19174 = MEM[(struct MonoObject *)start].vtable;
      D.19175 = D.19174->klass;
      D.19177 = D.19175->name;
      fprintf (gc_debug_file.29, "Oldspace->newspace reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.19154, D.19173, start, D.19176, D.19177);
      gc_debug_file.29 = gc_debug_file;
      fflush (gc_debug_file.29);
      <D.19193>:
      D.19154 = *_objptr;
      D.19178 = MEM[(mword *)D.19154];
      D.19179 = D.19178 & 2;
      if (D.19179 == 0) goto <D.19194>; else goto <D.19195>;
      <D.19194>:
      missing_remsets = 1;
      <D.19195>:
      <D.19191>:
      <D.19186>:
      <D.19183>:
      _objptr = _objptr + 8;
      <D.18235>:
      if (_objptr < _objptr_end) goto <D.18234>; else goto <D.18236>;
      <D.18236>:
    }
    <D.19147>:
    goto <D.18237>;
    <D.18238>:
    {
      void * * _objptr;
      gsize _bmap;

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

        _index = __builtin_ctzl (_bmap);
        D.19196 = (long unsigned int) _index;
        D.19197 = D.19196 * 8;
        _objptr = _objptr + D.19197;
        D.19198 = _index + 1;
        _bmap = _bmap >> D.19198;
        D.19199 = *_objptr;
        if (D.19199 != 0B) goto <D.19200>; else goto <D.19201>;
        <D.19200>:
        D.19199 = *_objptr;
        D.19202 = sgen_ptr_in_nursery (D.19199);
        if (D.19202 != 0) goto <D.19203>; else goto <D.19204>;
        <D.19203>:
        D.19205 = sgen_get_remset ();
        D.19206 = D.19205->find_address;
        D.19207 = D.19206 (_objptr);
        if (D.19207 == 0) goto <D.19208>; else goto <D.19209>;
        <D.19208>:
        gc_debug_level.30 = gc_debug_level;
        D.19166 = gc_debug_level.30 >= 0;
        D.19167 = (long int) D.19166;
        D.19168 = __builtin_expect (D.19167, 0);
        if (D.19168 != 0) goto <D.19210>; else goto <D.19211>;
        <D.19210>:
        gc_debug_file.29 = gc_debug_file;
        D.19199 = *_objptr;
        _objptr.33 = (long int) _objptr;
        start.32 = (long int) start;
        D.19213 = _objptr.33 - start.32;
        D.19174 = MEM[(struct MonoObject *)start].vtable;
        D.19175 = D.19174->klass;
        D.19176 = D.19175->name_space;
        D.19174 = MEM[(struct MonoObject *)start].vtable;
        D.19175 = D.19174->klass;
        D.19177 = D.19175->name;
        fprintf (gc_debug_file.29, "Oldspace->newspace reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.19199, D.19213, start, D.19176, D.19177);
        gc_debug_file.29 = gc_debug_file;
        fflush (gc_debug_file.29);
        <D.19211>:
        D.19199 = *_objptr;
        D.19214 = MEM[(mword *)D.19199];
        D.19215 = D.19214 & 2;
        if (D.19215 == 0) goto <D.19216>; else goto <D.19217>;
        <D.19216>:
        missing_remsets = 1;
        <D.19217>:
        <D.19209>:
        <D.19204>:
        <D.19201>:
        _objptr = _objptr + 8;
      }
      goto <D.18244>;
      <D.18243>:
      {
        int _index;

        _index = __builtin_ctzl (_bmap);
        D.19218 = (long unsigned int) _index;
        D.19219 = D.19218 * 8;
        _objptr = _objptr + D.19219;
        D.19220 = _index + 1;
        _bmap = _bmap >> D.19220;
        D.19199 = *_objptr;
        if (D.19199 != 0B) goto <D.19221>; else goto <D.19222>;
        <D.19221>:
        D.19199 = *_objptr;
        D.19223 = sgen_ptr_in_nursery (D.19199);
        if (D.19223 != 0) goto <D.19224>; else goto <D.19225>;
        <D.19224>:
        D.19226 = sgen_get_remset ();
        D.19227 = D.19226->find_address;
        D.19228 = D.19227 (_objptr);
        if (D.19228 == 0) goto <D.19229>; else goto <D.19230>;
        <D.19229>:
        gc_debug_level.30 = gc_debug_level;
        D.19166 = gc_debug_level.30 >= 0;
        D.19167 = (long int) D.19166;
        D.19168 = __builtin_expect (D.19167, 0);
        if (D.19168 != 0) goto <D.19231>; else goto <D.19232>;
        <D.19231>:
        gc_debug_file.29 = gc_debug_file;
        D.19199 = *_objptr;
        _objptr.33 = (long int) _objptr;
        start.32 = (long int) start;
        D.19213 = _objptr.33 - start.32;
        D.19174 = MEM[(struct MonoObject *)start].vtable;
        D.19175 = D.19174->klass;
        D.19176 = D.19175->name_space;
        D.19174 = MEM[(struct MonoObject *)start].vtable;
        D.19175 = D.19174->klass;
        D.19177 = D.19175->name;
        fprintf (gc_debug_file.29, "Oldspace->newspace reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.19199, D.19213, start, D.19176, D.19177);
        gc_debug_file.29 = gc_debug_file;
        fflush (gc_debug_file.29);
        <D.19232>:
        D.19199 = *_objptr;
        D.19214 = MEM[(mword *)D.19199];
        D.19215 = D.19214 & 2;
        if (D.19215 == 0) goto <D.19233>; else goto <D.19234>;
        <D.19233>:
        missing_remsets = 1;
        <D.19234>:
        <D.19230>:
        <D.19225>:
        <D.19222>:
        _objptr = _objptr + 8;
      }
      <D.18244>:
      if (_bmap != 0) goto <D.18243>; else goto <D.18245>;
      <D.18245>:
    }
    goto <D.18237>;
    <D.18246>:
    D.19235 = desc & 4294950912;
    if (D.19235 != 0) goto <D.19236>; else goto <D.19237>;
    <D.19236>:
    {
      int el_size;
      int etype;

      D.19238 = desc >> 3;
      D.19239 = (int) D.19238;
      el_size = D.19239 & 1023;
      D.19240 = (int) desc;
      etype = D.19240 & 49152;
      if (etype == 16384) goto <D.19241>; else goto <D.19242>;
      <D.19241>:
      {
        void * * p;
        void * * end_refs;

        p = start + 32;
        D.19243 = MEM[(struct MonoArray *)start].max_length;
        el_size.34 = (unsigned int) el_size;
        D.19245 = D.19243 * el_size.34;
        D.19246 = (sizetype) D.19245;
        end_refs = p + D.19246;
        goto <D.18252>;
        <D.18251>:
        D.19247 = *p;
        if (D.19247 != 0B) goto <D.19248>; else goto <D.19249>;
        <D.19248>:
        D.19247 = *p;
        D.19250 = sgen_ptr_in_nursery (D.19247);
        if (D.19250 != 0) goto <D.19251>; else goto <D.19252>;
        <D.19251>:
        D.19253 = sgen_get_remset ();
        D.19254 = D.19253->find_address;
        D.19255 = D.19254 (p);
        if (D.19255 == 0) goto <D.19256>; else goto <D.19257>;
        <D.19256>:
        gc_debug_level.30 = gc_debug_level;
        D.19166 = gc_debug_level.30 >= 0;
        D.19167 = (long int) D.19166;
        D.19168 = __builtin_expect (D.19167, 0);
        if (D.19168 != 0) goto <D.19258>; else goto <D.19259>;
        <D.19258>:
        gc_debug_file.29 = gc_debug_file;
        D.19247 = *p;
        p.35 = (long int) p;
        start.32 = (long int) start;
        D.19261 = p.35 - start.32;
        D.19174 = MEM[(struct MonoObject *)start].vtable;
        D.19175 = D.19174->klass;
        D.19176 = D.19175->name_space;
        D.19174 = MEM[(struct MonoObject *)start].vtable;
        D.19175 = D.19174->klass;
        D.19177 = D.19175->name;
        fprintf (gc_debug_file.29, "Oldspace->newspace reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.19247, D.19261, start, D.19176, D.19177);
        gc_debug_file.29 = gc_debug_file;
        fflush (gc_debug_file.29);
        <D.19259>:
        D.19247 = *p;
        D.19262 = MEM[(mword *)D.19247];
        D.19263 = D.19262 & 2;
        if (D.19263 == 0) goto <D.19264>; else goto <D.19265>;
        <D.19264>:
        missing_remsets = 1;
        <D.19265>:
        <D.19257>:
        <D.19252>:
        <D.19249>:
        p = p + 8;
        <D.18252>:
        if (p < end_refs) goto <D.18251>; else goto <D.18253>;
        <D.18253>:
      }
      goto <D.19266>;
      <D.19242>:
      if (etype == 32768) goto <D.19267>; else goto <D.19268>;
      <D.19267>:
      {
        int offset;
        int num_refs;
        char * e_start;
        char * e_end;

        D.19148 = desc >> 16;
        D.19269 = (int) D.19148;
        offset = D.19269 & 255;
        D.19151 = desc >> 24;
        D.19270 = (int) D.19151;
        num_refs = D.19270 & 255;
        e_start = start + 32;
        D.19243 = MEM[(struct MonoArray *)start].max_length;
        el_size.34 = (unsigned int) el_size;
        D.19245 = D.19243 * el_size.34;
        D.19246 = (sizetype) D.19245;
        e_end = e_start + D.19246;
        goto <D.18264>;
        <D.18263>:
        {
          void * * p;
          int i;

          p = e_start;
          D.19271 = (long unsigned int) offset;
          D.19272 = D.19271 * 8;
          p = p + D.19272;
          i = 0;
          goto <D.18261>;
          <D.18260>:
          D.19273 = (long unsigned int) i;
          D.19274 = D.19273 * 8;
          D.19275 = p + D.19274;
          D.19276 = *D.19275;
          if (D.19276 != 0B) goto <D.19277>; else goto <D.19278>;
          <D.19277>:
          D.19273 = (long unsigned int) i;
          D.19274 = D.19273 * 8;
          D.19275 = p + D.19274;
          D.19276 = *D.19275;
          D.19279 = sgen_ptr_in_nursery (D.19276);
          if (D.19279 != 0) goto <D.19280>; else goto <D.19281>;
          <D.19280>:
          D.19282 = sgen_get_remset ();
          D.19283 = D.19282->find_address;
          D.19273 = (long unsigned int) i;
          D.19274 = D.19273 * 8;
          D.19284 = p + D.19274;
          D.19285 = D.19283 (D.19284);
          if (D.19285 == 0) goto <D.19286>; else goto <D.19287>;
          <D.19286>:
          gc_debug_level.30 = gc_debug_level;
          D.19166 = gc_debug_level.30 >= 0;
          D.19167 = (long int) D.19166;
          D.19168 = __builtin_expect (D.19167, 0);
          if (D.19168 != 0) goto <D.19288>; else goto <D.19289>;
          <D.19288>:
          gc_debug_file.29 = gc_debug_file;
          D.19273 = (long unsigned int) i;
          D.19274 = D.19273 * 8;
          D.19275 = p + D.19274;
          D.19276 = *D.19275;
          D.19273 = (long unsigned int) i;
          D.19274 = D.19273 * 8;
          D.19284 = p + D.19274;
          D.19290 = (long int) D.19284;
          start.32 = (long int) start;
          D.19291 = D.19290 - start.32;
          D.19174 = MEM[(struct MonoObject *)start].vtable;
          D.19175 = D.19174->klass;
          D.19176 = D.19175->name_space;
          D.19174 = MEM[(struct MonoObject *)start].vtable;
          D.19175 = D.19174->klass;
          D.19177 = D.19175->name;
          fprintf (gc_debug_file.29, "Oldspace->newspace reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.19276, D.19291, start, D.19176, D.19177);
          gc_debug_file.29 = gc_debug_file;
          fflush (gc_debug_file.29);
          <D.19289>:
          D.19273 = (long unsigned int) i;
          D.19274 = D.19273 * 8;
          D.19275 = p + D.19274;
          D.19276 = *D.19275;
          D.19292 = MEM[(mword *)D.19276];
          D.19293 = D.19292 & 2;
          if (D.19293 == 0) goto <D.19294>; else goto <D.19295>;
          <D.19294>:
          missing_remsets = 1;
          <D.19295>:
          <D.19287>:
          <D.19281>:
          <D.19278>:
          i = i + 1;
          <D.18261>:
          if (i < num_refs) goto <D.18260>; else goto <D.18262>;
          <D.18262>:
          D.19296 = (sizetype) el_size;
          e_start = e_start + D.19296;
        }
        <D.18264>:
        if (e_start < e_end) goto <D.18263>; else goto <D.18265>;
        <D.18265>:
      }
      goto <D.19297>;
      <D.19268>:
      if (etype == 49152) goto <D.19298>; else goto <D.19299>;
      <D.19298>:
      {
        char * e_start;
        char * e_end;

        e_start = start + 32;
        D.19243 = MEM[(struct MonoArray *)start].max_length;
        el_size.34 = (unsigned int) el_size;
        D.19245 = D.19243 * el_size.34;
        D.19246 = (sizetype) D.19245;
        e_end = e_start + D.19246;
        goto <D.18274>;
        <D.18273>:
        {
          void * * p;
          gsize _bmap;

          p = e_start;
          _bmap = desc >> 16;
          goto <D.18271>;
          <D.18270>:
          D.19300 = _bmap & 1;
          if (D.19300 != 0) goto <D.19301>; else goto <D.19302>;
          <D.19301>:
          D.19303 = *p;
          if (D.19303 != 0B) goto <D.19304>; else goto <D.19305>;
          <D.19304>:
          D.19303 = *p;
          D.19306 = sgen_ptr_in_nursery (D.19303);
          if (D.19306 != 0) goto <D.19307>; else goto <D.19308>;
          <D.19307>:
          D.19309 = sgen_get_remset ();
          D.19310 = D.19309->find_address;
          D.19311 = D.19310 (p);
          if (D.19311 == 0) goto <D.19312>; else goto <D.19313>;
          <D.19312>:
          gc_debug_level.30 = gc_debug_level;
          D.19166 = gc_debug_level.30 >= 0;
          D.19167 = (long int) D.19166;
          D.19168 = __builtin_expect (D.19167, 0);
          if (D.19168 != 0) goto <D.19314>; else goto <D.19315>;
          <D.19314>:
          gc_debug_file.29 = gc_debug_file;
          D.19303 = *p;
          p.36 = (long int) p;
          start.32 = (long int) start;
          D.19317 = p.36 - start.32;
          D.19174 = MEM[(struct MonoObject *)start].vtable;
          D.19175 = D.19174->klass;
          D.19176 = D.19175->name_space;
          D.19174 = MEM[(struct MonoObject *)start].vtable;
          D.19175 = D.19174->klass;
          D.19177 = D.19175->name;
          fprintf (gc_debug_file.29, "Oldspace->newspace reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.19303, D.19317, start, D.19176, D.19177);
          gc_debug_file.29 = gc_debug_file;
          fflush (gc_debug_file.29);
          <D.19315>:
          D.19303 = *p;
          D.19318 = MEM[(mword *)D.19303];
          D.19319 = D.19318 & 2;
          if (D.19319 == 0) goto <D.19320>; else goto <D.19321>;
          <D.19320>:
          missing_remsets = 1;
          <D.19321>:
          <D.19313>:
          <D.19308>:
          <D.19305>:
          <D.19302>:
          _bmap = _bmap >> 1;
          p = p + 8;
          <D.18271>:
          if (_bmap != 0) goto <D.18270>; else goto <D.18272>;
          <D.18272>:
          D.19296 = (sizetype) el_size;
          e_start = e_start + D.19296;
        }
        <D.18274>:
        if (e_start < e_end) goto <D.18273>; else goto <D.18275>;
        <D.18275>:
      }
      <D.19299>:
      <D.19297>:
      <D.19266>:
    }
    <D.19237>:
    goto <D.18237>;
    <D.18276>:
    {
      void * * _objptr;
      gsize _bmap;

      _objptr = start;
      _bmap = desc >> 3;
      _objptr = _objptr + 16;
      goto <D.18280>;
      <D.18279>:
      D.19322 = _bmap & 1;
      if (D.19322 != 0) goto <D.19323>; else goto <D.19324>;
      <D.19323>:
      D.19325 = *_objptr;
      if (D.19325 != 0B) goto <D.19326>; else goto <D.19327>;
      <D.19326>:
      D.19325 = *_objptr;
      D.19328 = sgen_ptr_in_nursery (D.19325);
      if (D.19328 != 0) goto <D.19329>; else goto <D.19330>;
      <D.19329>:
      D.19331 = sgen_get_remset ();
      D.19332 = D.19331->find_address;
      D.19333 = D.19332 (_objptr);
      if (D.19333 == 0) goto <D.19334>; else goto <D.19335>;
      <D.19334>:
      gc_debug_level.30 = gc_debug_level;
      D.19166 = gc_debug_level.30 >= 0;
      D.19167 = (long int) D.19166;
      D.19168 = __builtin_expect (D.19167, 0);
      if (D.19168 != 0) goto <D.19336>; else goto <D.19337>;
      <D.19336>:
      gc_debug_file.29 = gc_debug_file;
      D.19325 = *_objptr;
      _objptr.37 = (long int) _objptr;
      start.32 = (long int) start;
      D.19339 = _objptr.37 - start.32;
      D.19174 = MEM[(struct MonoObject *)start].vtable;
      D.19175 = D.19174->klass;
      D.19176 = D.19175->name_space;
      D.19174 = MEM[(struct MonoObject *)start].vtable;
      D.19175 = D.19174->klass;
      D.19177 = D.19175->name;
      fprintf (gc_debug_file.29, "Oldspace->newspace reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.19325, D.19339, start, D.19176, D.19177);
      gc_debug_file.29 = gc_debug_file;
      fflush (gc_debug_file.29);
      <D.19337>:
      D.19325 = *_objptr;
      D.19340 = MEM[(mword *)D.19325];
      D.19341 = D.19340 & 2;
      if (D.19341 == 0) goto <D.19342>; else goto <D.19343>;
      <D.19342>:
      missing_remsets = 1;
      <D.19343>:
      <D.19335>:
      <D.19330>:
      <D.19327>:
      <D.19324>:
      _bmap = _bmap >> 1;
      _objptr = _objptr + 8;
      <D.18280>:
      if (_bmap != 0) goto <D.18279>; else goto <D.18281>;
      <D.18281>:
    }
    goto <D.18237>;
    <D.18282>:
    {
      void * * _objptr;
      gsize * bitmap_data;
      int bwords;
      void * * start_run;

      _objptr = start;
      bitmap_data = sgen_get_complex_descriptor (desc);
      D.19344 = *bitmap_data;
      D.19345 = (unsigned int) D.19344;
      D.19346 = D.19345 + 4294967295;
      bwords = (int) D.19346;
      start_run = _objptr;
      bitmap_data = bitmap_data + 8;
      if (0 != 0) goto <D.19347>; else goto <D.19348>;
      <D.19347>:
      {
        struct MonoObject * myobj;

        myobj = start;
        D.19349 = myobj->vtable;
        D.19350 = D.19349->klass;
        D.19351 = D.19350->name_space;
        D.19349 = myobj->vtable;
        D.19350 = D.19349->klass;
        D.19352 = D.19350->name;
        monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", bwords, start, desc, D.19351, D.19352);
      }
      <D.19348>:
      goto <D.18293>;
      <D.18292>:
      {
        gsize _bmap;

        bitmap_data.38 = bitmap_data;
        bitmap_data = bitmap_data.38 + 8;
        _bmap = *bitmap_data.38;
        _objptr = start_run;
        goto <D.18290>;
        <D.18289>:
        D.19354 = _bmap & 1;
        if (D.19354 != 0) goto <D.19355>; else goto <D.19356>;
        <D.19355>:
        D.19357 = *_objptr;
        if (D.19357 != 0B) goto <D.19358>; else goto <D.19359>;
        <D.19358>:
        D.19357 = *_objptr;
        D.19360 = sgen_ptr_in_nursery (D.19357);
        if (D.19360 != 0) goto <D.19361>; else goto <D.19362>;
        <D.19361>:
        D.19363 = sgen_get_remset ();
        D.19364 = D.19363->find_address;
        D.19365 = D.19364 (_objptr);
        if (D.19365 == 0) goto <D.19366>; else goto <D.19367>;
        <D.19366>:
        gc_debug_level.30 = gc_debug_level;
        D.19166 = gc_debug_level.30 >= 0;
        D.19167 = (long int) D.19166;
        D.19168 = __builtin_expect (D.19167, 0);
        if (D.19168 != 0) goto <D.19368>; else goto <D.19369>;
        <D.19368>:
        gc_debug_file.29 = gc_debug_file;
        D.19357 = *_objptr;
        _objptr.39 = (long int) _objptr;
        start.32 = (long int) start;
        D.19371 = _objptr.39 - start.32;
        D.19174 = MEM[(struct MonoObject *)start].vtable;
        D.19175 = D.19174->klass;
        D.19176 = D.19175->name_space;
        D.19174 = MEM[(struct MonoObject *)start].vtable;
        D.19175 = D.19174->klass;
        D.19177 = D.19175->name;
        fprintf (gc_debug_file.29, "Oldspace->newspace reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.19357, D.19371, start, D.19176, D.19177);
        gc_debug_file.29 = gc_debug_file;
        fflush (gc_debug_file.29);
        <D.19369>:
        D.19357 = *_objptr;
        D.19372 = MEM[(mword *)D.19357];
        D.19373 = D.19372 & 2;
        if (D.19373 == 0) goto <D.19374>; else goto <D.19375>;
        <D.19374>:
        missing_remsets = 1;
        <D.19375>:
        <D.19367>:
        <D.19362>:
        <D.19359>:
        <D.19356>:
        _bmap = _bmap >> 1;
        _objptr = _objptr + 8;
        <D.18290>:
        if (_bmap != 0) goto <D.18289>; else goto <D.18291>;
        <D.18291>:
        start_run = start_run + 512;
      }
      <D.18293>:
      bwords.40 = bwords;
      bwords = bwords.40 + -1;
      if (bwords.40 > 0) goto <D.18292>; else goto <D.18294>;
      <D.18294>:
    }
    goto <D.18237>;
    <D.18295>:
    {
      gsize * mbitmap_data;
      int mbwords;
      int el_size;
      char * e_start;
      char * e_end;

      D.19377 = vt->desc;
      mbitmap_data = sgen_get_complex_descriptor (D.19377);
      mbitmap_data.41 = mbitmap_data;
      mbitmap_data = mbitmap_data.41 + 8;
      D.19379 = *mbitmap_data.41;
      D.19380 = (unsigned int) D.19379;
      D.19381 = D.19380 + 4294967295;
      mbwords = (int) D.19381;
      D.19382 = vt->klass;
      el_size = mono_array_element_size (D.19382);
      e_start = start + 32;
      D.19243 = MEM[(struct MonoArray *)start].max_length;
      el_size.42 = (unsigned int) el_size;
      D.19384 = D.19243 * el_size.42;
      D.19385 = (sizetype) D.19384;
      e_end = e_start + D.19385;
      if (0 != 0) goto <D.19386>; else goto <D.19387>;
      <D.19386>:
      D.19377 = vt->desc;
      D.19382 = vt->klass;
      D.19388 = D.19382->name_space;
      D.19382 = vt->klass;
      D.19389 = D.19382->name;
      monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", mbwords, start, D.19377, D.19388, D.19389);
      <D.19387>:
      goto <D.18313>;
      <D.18312>:
      {
        void * * _objptr;
        gsize * bitmap_data;
        unsigned int bwords;

        _objptr = e_start;
        bitmap_data = mbitmap_data;
        bwords = (unsigned int) mbwords;
        goto <D.18310>;
        <D.18309>:
        {
          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.18307>;
          <D.18306>:
          D.19391 = _bmap & 1;
          if (D.19391 != 0) goto <D.19392>; else goto <D.19393>;
          <D.19392>:
          D.19394 = *_objptr;
          if (D.19394 != 0B) goto <D.19395>; else goto <D.19396>;
          <D.19395>:
          D.19394 = *_objptr;
          D.19397 = sgen_ptr_in_nursery (D.19394);
          if (D.19397 != 0) goto <D.19398>; else goto <D.19399>;
          <D.19398>:
          D.19400 = sgen_get_remset ();
          D.19401 = D.19400->find_address;
          D.19402 = D.19401 (_objptr);
          if (D.19402 == 0) goto <D.19403>; else goto <D.19404>;
          <D.19403>:
          gc_debug_level.30 = gc_debug_level;
          D.19166 = gc_debug_level.30 >= 0;
          D.19167 = (long int) D.19166;
          D.19168 = __builtin_expect (D.19167, 0);
          if (D.19168 != 0) goto <D.19405>; else goto <D.19406>;
          <D.19405>:
          gc_debug_file.29 = gc_debug_file;
          D.19394 = *_objptr;
          _objptr.44 = (long int) _objptr;
          start.32 = (long int) start;
          D.19408 = _objptr.44 - start.32;
          D.19174 = MEM[(struct MonoObject *)start].vtable;
          D.19175 = D.19174->klass;
          D.19176 = D.19175->name_space;
          D.19174 = MEM[(struct MonoObject *)start].vtable;
          D.19175 = D.19174->klass;
          D.19177 = D.19175->name;
          fprintf (gc_debug_file.29, "Oldspace->newspace reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.19394, D.19408, start, D.19176, D.19177);
          gc_debug_file.29 = gc_debug_file;
          fflush (gc_debug_file.29);
          <D.19406>:
          D.19394 = *_objptr;
          D.19409 = MEM[(mword *)D.19394];
          D.19410 = D.19409 & 2;
          if (D.19410 == 0) goto <D.19411>; else goto <D.19412>;
          <D.19411>:
          missing_remsets = 1;
          <D.19412>:
          <D.19404>:
          <D.19399>:
          <D.19396>:
          <D.19393>:
          _bmap = _bmap >> 1;
          _objptr = _objptr + 8;
          <D.18307>:
          if (_bmap != 0) goto <D.18306>; else goto <D.18308>;
          <D.18308>:
          _objptr = start_run + 512;
        }
        <D.18310>:
        bwords.45 = bwords;
        bwords = bwords.45 + 4294967295;
        if (bwords.45 != 0) goto <D.18309>; else goto <D.18311>;
        <D.18311>:
        D.19414 = (sizetype) el_size;
        e_start = e_start + D.19414;
      }
      <D.18313>:
      if (e_start < e_end) goto <D.18312>; else goto <D.18314>;
      <D.18314>:
    }
    goto <D.18237>;
    <D.18315>:
    goto <D.18237>;
    <D.18316>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 111);
    <D.18237>:
  }
}


sgen_check_mod_union_consistency ()
{
  void (*<T2d7b>) (gboolean, gboolean, void (*IterateObjectCallbackFunc) (char *, size_t, void *), void *) D.19416;
  int missing_remsets.46;
  _Bool D.19420;
  long int D.19421;
  long int D.19422;

  missing_remsets = 0;
  D.19416 = major_collector.iterate_objects;
  D.19416 (1, 1, check_mod_union_callback, 0B);
  sgen_los_iterate_objects (check_mod_union_callback, 1B);
  if (1 != 0) goto <D.19417>; else goto <D.19418>;
  <D.19417>:
  missing_remsets.46 = missing_remsets;
  D.19420 = missing_remsets.46 != 0;
  D.19421 = (long int) D.19420;
  D.19422 = __builtin_expect (D.19421, 0);
  if (D.19422 != 0) goto <D.19423>; else goto <D.19424>;
  <D.19423>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-debug.c", 258, "!missing_remsets");
  <D.19424>:
  <D.19418>:
}


check_mod_union_callback (char * start, size_t size, void * dummy)
{
  long int dummy.47;
  long unsigned int D.19426;
  long unsigned int D.19427;
  struct FILE * gc_debug_file.48;
  struct MonoClass * D.19431;
  const char * D.19432;
  int D.19433;
  struct LOSObject * D.19438;
  struct SgenMajorCollector * D.19440;
  guint8 * (*<T2dbe>) (char *) D.19441;
  _Bool D.19442;
  long int D.19443;
  long int D.19444;
  long unsigned int D.19447;
  long unsigned int D.19448;
  long unsigned int D.19451;
  long unsigned int D.19452;
  long unsigned int D.19453;
  long unsigned int D.19454;
  long unsigned int D.19455;
  long unsigned int D.19456;
  void * D.19457;
  int D.19460;
  int D.19463;
  struct SgenRemeberedSet * D.19466;
  gboolean (*<T2dfd>) (char *, guint8 *, char *) D.19467;
  int D.19468;
  int gc_debug_level.49;
  _Bool D.19472;
  long int D.19473;
  long int D.19474;
  long int _objptr.50;
  long int start.51;
  long int D.19479;
  struct MonoVTable * D.19480;
  struct MonoClass * D.19481;
  const char * D.19482;
  const char * D.19483;
  int D.19486;
  int D.19489;
  struct SgenRemeberedSet * D.19492;
  gboolean (*<T2dfd>) (char *, guint8 *, char *) D.19493;
  int D.19494;
  long unsigned int D.19499;
  long unsigned int D.19500;
  int D.19501;
  void * D.19502;
  int D.19505;
  int D.19508;
  struct SgenRemeberedSet * D.19511;
  gboolean (*<T2dfd>) (char *, guint8 *, char *) D.19512;
  int D.19513;
  long int _objptr.52;
  long int D.19519;
  long unsigned int D.19520;
  long unsigned int D.19521;
  int D.19522;
  int D.19525;
  int D.19528;
  struct SgenRemeberedSet * D.19531;
  gboolean (*<T2dfd>) (char *, guint8 *, char *) D.19532;
  int D.19533;
  long unsigned int D.19538;
  long unsigned int D.19541;
  int D.19542;
  int D.19543;
  unsigned int D.19546;
  unsigned int el_size.53;
  unsigned int D.19548;
  sizetype D.19549;
  void * D.19550;
  int D.19553;
  int D.19556;
  struct SgenRemeberedSet * D.19559;
  gboolean (*<T2dfd>) (char *, guint8 *, char *) D.19560;
  int D.19561;
  long int p.54;
  long int D.19567;
  int D.19571;
  int D.19572;
  long unsigned int D.19573;
  long unsigned int D.19574;
  long unsigned int D.19575;
  long unsigned int D.19576;
  void * * D.19577;
  void * D.19578;
  int D.19581;
  int D.19584;
  struct SgenRemeberedSet * D.19587;
  gboolean (*<T2dfd>) (char *, guint8 *, char *) D.19588;
  char * D.19589;
  int D.19590;
  long int D.19595;
  long int D.19596;
  sizetype D.19597;
  long unsigned int D.19601;
  void * D.19604;
  int D.19607;
  int D.19610;
  struct SgenRemeberedSet * D.19613;
  gboolean (*<T2dfd>) (char *, guint8 *, char *) D.19614;
  int D.19615;
  long int p.55;
  long int D.19621;
  long unsigned int D.19622;
  void * D.19625;
  int D.19628;
  int D.19631;
  struct SgenRemeberedSet * D.19634;
  gboolean (*<T2dfd>) (char *, guint8 *, char *) D.19635;
  int D.19636;
  long int _objptr.56;
  long int D.19642;
  long unsigned int D.19643;
  unsigned int D.19644;
  unsigned int D.19645;
  struct MonoVTable * D.19648;
  struct MonoClass * D.19649;
  const char * D.19650;
  const char * D.19651;
  gsize * bitmap_data.57;
  long unsigned int D.19653;
  void * D.19656;
  int D.19659;
  int D.19662;
  struct SgenRemeberedSet * D.19665;
  gboolean (*<T2dfd>) (char *, guint8 *, char *) D.19666;
  int D.19667;
  long int _objptr.58;
  long int D.19673;
  int bwords.59;
  long unsigned int D.19675;
  gsize * mbitmap_data.60;
  long unsigned int D.19677;
  unsigned int D.19678;
  unsigned int D.19679;
  struct MonoClass * D.19680;
  unsigned int el_size.61;
  unsigned int D.19682;
  sizetype D.19683;
  const char * D.19686;
  const char * D.19687;
  gsize * bitmap_data.62;
  long unsigned int D.19689;
  void * D.19692;
  int D.19695;
  int D.19698;
  struct SgenRemeberedSet * D.19701;
  gboolean (*<T2dfd>) (char *, guint8 *, char *) D.19702;
  int D.19703;
  long int _objptr.63;
  long int D.19709;
  unsigned int bwords.64;
  sizetype D.19711;
  gboolean in_los;
  struct GCVTable * vt;
  guint8 * cards;

  dummy.47 = (long int) dummy;
  in_los = (gboolean) dummy.47;
  D.19426 = MEM[(mword *)start];
  D.19427 = D.19426 & 18446744073709551612;
  vt = (struct GCVTable *) D.19427;
  if (0 != 0) goto <D.19428>; else goto <D.19429>;
  <D.19428>:
  gc_debug_file.48 = gc_debug_file;
  D.19431 = vt->klass;
  D.19432 = D.19431->name;
  fprintf (gc_debug_file.48, "Scanning object %p, vtable: %p (%s)\n", start, vt, D.19432);
  gc_debug_file.48 = gc_debug_file;
  fflush (gc_debug_file.48);
  <D.19429>:
  D.19433 = is_major_or_los_object_marked (start);
  if (D.19433 == 0) goto <D.19434>; else goto <D.19435>;
  <D.19434>:
  return;
  <D.19435>:
  if (in_los != 0) goto <D.19436>; else goto <D.19437>;
  <D.19436>:
  D.19438 = sgen_los_header_for_object (start);
  cards = D.19438->cardtable_mod_union;
  goto <D.19439>;
  <D.19437>:
  D.19440 = sgen_get_major_collector ();
  D.19441 = D.19440->get_cardtable_mod_union_for_object;
  cards = D.19441 (start);
  <D.19439>:
  D.19442 = cards == 0B;
  D.19443 = (long int) D.19442;
  D.19444 = __builtin_expect (D.19443, 0);
  if (D.19444 != 0) goto <D.19445>; else goto <D.19446>;
  <D.19445>:
  monoeg_g_log (0B, 4, "we must have mod union for marked major objects");
  <D.18331>:
  goto <D.18331>;
  <D.19446>:
  {
    struct GCVTable * vt;
    mword desc;

    D.19426 = MEM[(mword *)start];
    D.19427 = D.19426 & 18446744073709551612;
    vt = (struct GCVTable *) D.19427;
    desc = vt->desc;
    D.19447 = desc & 7;
    switch (D.19447) <default: <D.18419>, case 1: <D.18334>, case 2: <D.18341>, case 3: <D.18385>, case 4: <D.18349>, case 5: <D.18379>, case 6: <D.18398>, case 7: <D.18418>>
    <D.18334>:
    D.19448 = desc & 4294901760;
    if (D.19448 != 0) goto <D.19449>; else goto <D.19450>;
    <D.19449>:
    {
      void * * _objptr_end;
      void * * _objptr;

      _objptr = start;
      D.19451 = desc >> 16;
      D.19452 = D.19451 & 255;
      D.19453 = D.19452 * 8;
      _objptr = _objptr + D.19453;
      D.19454 = desc >> 24;
      D.19455 = D.19454 & 255;
      D.19456 = D.19455 * 8;
      _objptr_end = _objptr + D.19456;
      D.19457 = *_objptr;
      if (D.19457 != 0B) goto <D.19458>; else goto <D.19459>;
      <D.19458>:
      D.19457 = *_objptr;
      D.19460 = sgen_ptr_in_nursery (D.19457);
      if (D.19460 == 0) goto <D.19461>; else goto <D.19462>;
      <D.19461>:
      D.19457 = *_objptr;
      D.19463 = is_major_or_los_object_marked (D.19457);
      if (D.19463 == 0) goto <D.19464>; else goto <D.19465>;
      <D.19464>:
      D.19466 = sgen_get_remset ();
      D.19467 = D.19466->find_address_with_cards;
      D.19468 = D.19467 (start, cards, _objptr);
      if (D.19468 == 0) goto <D.19469>; else goto <D.19470>;
      <D.19469>:
      gc_debug_level.49 = gc_debug_level;
      D.19472 = gc_debug_level.49 >= 0;
      D.19473 = (long int) D.19472;
      D.19474 = __builtin_expect (D.19473, 0);
      if (D.19474 != 0) goto <D.19475>; else goto <D.19476>;
      <D.19475>:
      gc_debug_file.48 = gc_debug_file;
      D.19457 = *_objptr;
      _objptr.50 = (long int) _objptr;
      start.51 = (long int) start;
      D.19479 = _objptr.50 - start.51;
      D.19480 = MEM[(struct MonoObject *)start].vtable;
      D.19481 = D.19480->klass;
      D.19482 = D.19481->name_space;
      D.19480 = MEM[(struct MonoObject *)start].vtable;
      D.19481 = D.19480->klass;
      D.19483 = D.19481->name;
      fprintf (gc_debug_file.48, "major->major reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.19457, D.19479, start, D.19482, D.19483);
      gc_debug_file.48 = gc_debug_file;
      fflush (gc_debug_file.48);
      <D.19476>:
      <D.19470>:
      <D.19465>:
      <D.19462>:
      <D.19459>:
      _objptr = _objptr + 8;
      goto <D.18338>;
      <D.18337>:
      D.19457 = *_objptr;
      if (D.19457 != 0B) goto <D.19484>; else goto <D.19485>;
      <D.19484>:
      D.19457 = *_objptr;
      D.19486 = sgen_ptr_in_nursery (D.19457);
      if (D.19486 == 0) goto <D.19487>; else goto <D.19488>;
      <D.19487>:
      D.19457 = *_objptr;
      D.19489 = is_major_or_los_object_marked (D.19457);
      if (D.19489 == 0) goto <D.19490>; else goto <D.19491>;
      <D.19490>:
      D.19492 = sgen_get_remset ();
      D.19493 = D.19492->find_address_with_cards;
      D.19494 = D.19493 (start, cards, _objptr);
      if (D.19494 == 0) goto <D.19495>; else goto <D.19496>;
      <D.19495>:
      gc_debug_level.49 = gc_debug_level;
      D.19472 = gc_debug_level.49 >= 0;
      D.19473 = (long int) D.19472;
      D.19474 = __builtin_expect (D.19473, 0);
      if (D.19474 != 0) goto <D.19497>; else goto <D.19498>;
      <D.19497>:
      gc_debug_file.48 = gc_debug_file;
      D.19457 = *_objptr;
      _objptr.50 = (long int) _objptr;
      start.51 = (long int) start;
      D.19479 = _objptr.50 - start.51;
      D.19480 = MEM[(struct MonoObject *)start].vtable;
      D.19481 = D.19480->klass;
      D.19482 = D.19481->name_space;
      D.19480 = MEM[(struct MonoObject *)start].vtable;
      D.19481 = D.19480->klass;
      D.19483 = D.19481->name;
      fprintf (gc_debug_file.48, "major->major reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.19457, D.19479, start, D.19482, D.19483);
      gc_debug_file.48 = gc_debug_file;
      fflush (gc_debug_file.48);
      <D.19498>:
      <D.19496>:
      <D.19491>:
      <D.19488>:
      <D.19485>:
      _objptr = _objptr + 8;
      <D.18338>:
      if (_objptr < _objptr_end) goto <D.18337>; else goto <D.18339>;
      <D.18339>:
    }
    <D.19450>:
    goto <D.18340>;
    <D.18341>:
    {
      void * * _objptr;
      gsize _bmap;

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

        _index = __builtin_ctzl (_bmap);
        D.19499 = (long unsigned int) _index;
        D.19500 = D.19499 * 8;
        _objptr = _objptr + D.19500;
        D.19501 = _index + 1;
        _bmap = _bmap >> D.19501;
        D.19502 = *_objptr;
        if (D.19502 != 0B) goto <D.19503>; else goto <D.19504>;
        <D.19503>:
        D.19502 = *_objptr;
        D.19505 = sgen_ptr_in_nursery (D.19502);
        if (D.19505 == 0) goto <D.19506>; else goto <D.19507>;
        <D.19506>:
        D.19502 = *_objptr;
        D.19508 = is_major_or_los_object_marked (D.19502);
        if (D.19508 == 0) goto <D.19509>; else goto <D.19510>;
        <D.19509>:
        D.19511 = sgen_get_remset ();
        D.19512 = D.19511->find_address_with_cards;
        D.19513 = D.19512 (start, cards, _objptr);
        if (D.19513 == 0) goto <D.19514>; else goto <D.19515>;
        <D.19514>:
        gc_debug_level.49 = gc_debug_level;
        D.19472 = gc_debug_level.49 >= 0;
        D.19473 = (long int) D.19472;
        D.19474 = __builtin_expect (D.19473, 0);
        if (D.19474 != 0) goto <D.19516>; else goto <D.19517>;
        <D.19516>:
        gc_debug_file.48 = gc_debug_file;
        D.19502 = *_objptr;
        _objptr.52 = (long int) _objptr;
        start.51 = (long int) start;
        D.19519 = _objptr.52 - start.51;
        D.19480 = MEM[(struct MonoObject *)start].vtable;
        D.19481 = D.19480->klass;
        D.19482 = D.19481->name_space;
        D.19480 = MEM[(struct MonoObject *)start].vtable;
        D.19481 = D.19480->klass;
        D.19483 = D.19481->name;
        fprintf (gc_debug_file.48, "major->major reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.19502, D.19519, start, D.19482, D.19483);
        gc_debug_file.48 = gc_debug_file;
        fflush (gc_debug_file.48);
        <D.19517>:
        <D.19515>:
        <D.19510>:
        <D.19507>:
        <D.19504>:
        _objptr = _objptr + 8;
      }
      goto <D.18347>;
      <D.18346>:
      {
        int _index;

        _index = __builtin_ctzl (_bmap);
        D.19520 = (long unsigned int) _index;
        D.19521 = D.19520 * 8;
        _objptr = _objptr + D.19521;
        D.19522 = _index + 1;
        _bmap = _bmap >> D.19522;
        D.19502 = *_objptr;
        if (D.19502 != 0B) goto <D.19523>; else goto <D.19524>;
        <D.19523>:
        D.19502 = *_objptr;
        D.19525 = sgen_ptr_in_nursery (D.19502);
        if (D.19525 == 0) goto <D.19526>; else goto <D.19527>;
        <D.19526>:
        D.19502 = *_objptr;
        D.19528 = is_major_or_los_object_marked (D.19502);
        if (D.19528 == 0) goto <D.19529>; else goto <D.19530>;
        <D.19529>:
        D.19531 = sgen_get_remset ();
        D.19532 = D.19531->find_address_with_cards;
        D.19533 = D.19532 (start, cards, _objptr);
        if (D.19533 == 0) goto <D.19534>; else goto <D.19535>;
        <D.19534>:
        gc_debug_level.49 = gc_debug_level;
        D.19472 = gc_debug_level.49 >= 0;
        D.19473 = (long int) D.19472;
        D.19474 = __builtin_expect (D.19473, 0);
        if (D.19474 != 0) goto <D.19536>; else goto <D.19537>;
        <D.19536>:
        gc_debug_file.48 = gc_debug_file;
        D.19502 = *_objptr;
        _objptr.52 = (long int) _objptr;
        start.51 = (long int) start;
        D.19519 = _objptr.52 - start.51;
        D.19480 = MEM[(struct MonoObject *)start].vtable;
        D.19481 = D.19480->klass;
        D.19482 = D.19481->name_space;
        D.19480 = MEM[(struct MonoObject *)start].vtable;
        D.19481 = D.19480->klass;
        D.19483 = D.19481->name;
        fprintf (gc_debug_file.48, "major->major reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.19502, D.19519, start, D.19482, D.19483);
        gc_debug_file.48 = gc_debug_file;
        fflush (gc_debug_file.48);
        <D.19537>:
        <D.19535>:
        <D.19530>:
        <D.19527>:
        <D.19524>:
        _objptr = _objptr + 8;
      }
      <D.18347>:
      if (_bmap != 0) goto <D.18346>; else goto <D.18348>;
      <D.18348>:
    }
    goto <D.18340>;
    <D.18349>:
    D.19538 = desc & 4294950912;
    if (D.19538 != 0) goto <D.19539>; else goto <D.19540>;
    <D.19539>:
    {
      int el_size;
      int etype;

      D.19541 = desc >> 3;
      D.19542 = (int) D.19541;
      el_size = D.19542 & 1023;
      D.19543 = (int) desc;
      etype = D.19543 & 49152;
      if (etype == 16384) goto <D.19544>; else goto <D.19545>;
      <D.19544>:
      {
        void * * p;
        void * * end_refs;

        p = start + 32;
        D.19546 = MEM[(struct MonoArray *)start].max_length;
        el_size.53 = (unsigned int) el_size;
        D.19548 = D.19546 * el_size.53;
        D.19549 = (sizetype) D.19548;
        end_refs = p + D.19549;
        goto <D.18355>;
        <D.18354>:
        D.19550 = *p;
        if (D.19550 != 0B) goto <D.19551>; else goto <D.19552>;
        <D.19551>:
        D.19550 = *p;
        D.19553 = sgen_ptr_in_nursery (D.19550);
        if (D.19553 == 0) goto <D.19554>; else goto <D.19555>;
        <D.19554>:
        D.19550 = *p;
        D.19556 = is_major_or_los_object_marked (D.19550);
        if (D.19556 == 0) goto <D.19557>; else goto <D.19558>;
        <D.19557>:
        D.19559 = sgen_get_remset ();
        D.19560 = D.19559->find_address_with_cards;
        D.19561 = D.19560 (start, cards, p);
        if (D.19561 == 0) goto <D.19562>; else goto <D.19563>;
        <D.19562>:
        gc_debug_level.49 = gc_debug_level;
        D.19472 = gc_debug_level.49 >= 0;
        D.19473 = (long int) D.19472;
        D.19474 = __builtin_expect (D.19473, 0);
        if (D.19474 != 0) goto <D.19564>; else goto <D.19565>;
        <D.19564>:
        gc_debug_file.48 = gc_debug_file;
        D.19550 = *p;
        p.54 = (long int) p;
        start.51 = (long int) start;
        D.19567 = p.54 - start.51;
        D.19480 = MEM[(struct MonoObject *)start].vtable;
        D.19481 = D.19480->klass;
        D.19482 = D.19481->name_space;
        D.19480 = MEM[(struct MonoObject *)start].vtable;
        D.19481 = D.19480->klass;
        D.19483 = D.19481->name;
        fprintf (gc_debug_file.48, "major->major reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.19550, D.19567, start, D.19482, D.19483);
        gc_debug_file.48 = gc_debug_file;
        fflush (gc_debug_file.48);
        <D.19565>:
        <D.19563>:
        <D.19558>:
        <D.19555>:
        <D.19552>:
        p = p + 8;
        <D.18355>:
        if (p < end_refs) goto <D.18354>; else goto <D.18356>;
        <D.18356>:
      }
      goto <D.19568>;
      <D.19545>:
      if (etype == 32768) goto <D.19569>; else goto <D.19570>;
      <D.19569>:
      {
        int offset;
        int num_refs;
        char * e_start;
        char * e_end;

        D.19451 = desc >> 16;
        D.19571 = (int) D.19451;
        offset = D.19571 & 255;
        D.19454 = desc >> 24;
        D.19572 = (int) D.19454;
        num_refs = D.19572 & 255;
        e_start = start + 32;
        D.19546 = MEM[(struct MonoArray *)start].max_length;
        el_size.53 = (unsigned int) el_size;
        D.19548 = D.19546 * el_size.53;
        D.19549 = (sizetype) D.19548;
        e_end = e_start + D.19549;
        goto <D.18367>;
        <D.18366>:
        {
          void * * p;
          int i;

          p = e_start;
          D.19573 = (long unsigned int) offset;
          D.19574 = D.19573 * 8;
          p = p + D.19574;
          i = 0;
          goto <D.18364>;
          <D.18363>:
          D.19575 = (long unsigned int) i;
          D.19576 = D.19575 * 8;
          D.19577 = p + D.19576;
          D.19578 = *D.19577;
          if (D.19578 != 0B) goto <D.19579>; else goto <D.19580>;
          <D.19579>:
          D.19575 = (long unsigned int) i;
          D.19576 = D.19575 * 8;
          D.19577 = p + D.19576;
          D.19578 = *D.19577;
          D.19581 = sgen_ptr_in_nursery (D.19578);
          if (D.19581 == 0) goto <D.19582>; else goto <D.19583>;
          <D.19582>:
          D.19575 = (long unsigned int) i;
          D.19576 = D.19575 * 8;
          D.19577 = p + D.19576;
          D.19578 = *D.19577;
          D.19584 = is_major_or_los_object_marked (D.19578);
          if (D.19584 == 0) goto <D.19585>; else goto <D.19586>;
          <D.19585>:
          D.19587 = sgen_get_remset ();
          D.19588 = D.19587->find_address_with_cards;
          D.19575 = (long unsigned int) i;
          D.19576 = D.19575 * 8;
          D.19589 = p + D.19576;
          D.19590 = D.19588 (start, cards, D.19589);
          if (D.19590 == 0) goto <D.19591>; else goto <D.19592>;
          <D.19591>:
          gc_debug_level.49 = gc_debug_level;
          D.19472 = gc_debug_level.49 >= 0;
          D.19473 = (long int) D.19472;
          D.19474 = __builtin_expect (D.19473, 0);
          if (D.19474 != 0) goto <D.19593>; else goto <D.19594>;
          <D.19593>:
          gc_debug_file.48 = gc_debug_file;
          D.19575 = (long unsigned int) i;
          D.19576 = D.19575 * 8;
          D.19577 = p + D.19576;
          D.19578 = *D.19577;
          D.19575 = (long unsigned int) i;
          D.19576 = D.19575 * 8;
          D.19589 = p + D.19576;
          D.19595 = (long int) D.19589;
          start.51 = (long int) start;
          D.19596 = D.19595 - start.51;
          D.19480 = MEM[(struct MonoObject *)start].vtable;
          D.19481 = D.19480->klass;
          D.19482 = D.19481->name_space;
          D.19480 = MEM[(struct MonoObject *)start].vtable;
          D.19481 = D.19480->klass;
          D.19483 = D.19481->name;
          fprintf (gc_debug_file.48, "major->major reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.19578, D.19596, start, D.19482, D.19483);
          gc_debug_file.48 = gc_debug_file;
          fflush (gc_debug_file.48);
          <D.19594>:
          <D.19592>:
          <D.19586>:
          <D.19583>:
          <D.19580>:
          i = i + 1;
          <D.18364>:
          if (i < num_refs) goto <D.18363>; else goto <D.18365>;
          <D.18365>:
          D.19597 = (sizetype) el_size;
          e_start = e_start + D.19597;
        }
        <D.18367>:
        if (e_start < e_end) goto <D.18366>; else goto <D.18368>;
        <D.18368>:
      }
      goto <D.19598>;
      <D.19570>:
      if (etype == 49152) goto <D.19599>; else goto <D.19600>;
      <D.19599>:
      {
        char * e_start;
        char * e_end;

        e_start = start + 32;
        D.19546 = MEM[(struct MonoArray *)start].max_length;
        el_size.53 = (unsigned int) el_size;
        D.19548 = D.19546 * el_size.53;
        D.19549 = (sizetype) D.19548;
        e_end = e_start + D.19549;
        goto <D.18377>;
        <D.18376>:
        {
          void * * p;
          gsize _bmap;

          p = e_start;
          _bmap = desc >> 16;
          goto <D.18374>;
          <D.18373>:
          D.19601 = _bmap & 1;
          if (D.19601 != 0) goto <D.19602>; else goto <D.19603>;
          <D.19602>:
          D.19604 = *p;
          if (D.19604 != 0B) goto <D.19605>; else goto <D.19606>;
          <D.19605>:
          D.19604 = *p;
          D.19607 = sgen_ptr_in_nursery (D.19604);
          if (D.19607 == 0) goto <D.19608>; else goto <D.19609>;
          <D.19608>:
          D.19604 = *p;
          D.19610 = is_major_or_los_object_marked (D.19604);
          if (D.19610 == 0) goto <D.19611>; else goto <D.19612>;
          <D.19611>:
          D.19613 = sgen_get_remset ();
          D.19614 = D.19613->find_address_with_cards;
          D.19615 = D.19614 (start, cards, p);
          if (D.19615 == 0) goto <D.19616>; else goto <D.19617>;
          <D.19616>:
          gc_debug_level.49 = gc_debug_level;
          D.19472 = gc_debug_level.49 >= 0;
          D.19473 = (long int) D.19472;
          D.19474 = __builtin_expect (D.19473, 0);
          if (D.19474 != 0) goto <D.19618>; else goto <D.19619>;
          <D.19618>:
          gc_debug_file.48 = gc_debug_file;
          D.19604 = *p;
          p.55 = (long int) p;
          start.51 = (long int) start;
          D.19621 = p.55 - start.51;
          D.19480 = MEM[(struct MonoObject *)start].vtable;
          D.19481 = D.19480->klass;
          D.19482 = D.19481->name_space;
          D.19480 = MEM[(struct MonoObject *)start].vtable;
          D.19481 = D.19480->klass;
          D.19483 = D.19481->name;
          fprintf (gc_debug_file.48, "major->major reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.19604, D.19621, start, D.19482, D.19483);
          gc_debug_file.48 = gc_debug_file;
          fflush (gc_debug_file.48);
          <D.19619>:
          <D.19617>:
          <D.19612>:
          <D.19609>:
          <D.19606>:
          <D.19603>:
          _bmap = _bmap >> 1;
          p = p + 8;
          <D.18374>:
          if (_bmap != 0) goto <D.18373>; else goto <D.18375>;
          <D.18375>:
          D.19597 = (sizetype) el_size;
          e_start = e_start + D.19597;
        }
        <D.18377>:
        if (e_start < e_end) goto <D.18376>; else goto <D.18378>;
        <D.18378>:
      }
      <D.19600>:
      <D.19598>:
      <D.19568>:
    }
    <D.19540>:
    goto <D.18340>;
    <D.18379>:
    {
      void * * _objptr;
      gsize _bmap;

      _objptr = start;
      _bmap = desc >> 3;
      _objptr = _objptr + 16;
      goto <D.18383>;
      <D.18382>:
      D.19622 = _bmap & 1;
      if (D.19622 != 0) goto <D.19623>; else goto <D.19624>;
      <D.19623>:
      D.19625 = *_objptr;
      if (D.19625 != 0B) goto <D.19626>; else goto <D.19627>;
      <D.19626>:
      D.19625 = *_objptr;
      D.19628 = sgen_ptr_in_nursery (D.19625);
      if (D.19628 == 0) goto <D.19629>; else goto <D.19630>;
      <D.19629>:
      D.19625 = *_objptr;
      D.19631 = is_major_or_los_object_marked (D.19625);
      if (D.19631 == 0) goto <D.19632>; else goto <D.19633>;
      <D.19632>:
      D.19634 = sgen_get_remset ();
      D.19635 = D.19634->find_address_with_cards;
      D.19636 = D.19635 (start, cards, _objptr);
      if (D.19636 == 0) goto <D.19637>; else goto <D.19638>;
      <D.19637>:
      gc_debug_level.49 = gc_debug_level;
      D.19472 = gc_debug_level.49 >= 0;
      D.19473 = (long int) D.19472;
      D.19474 = __builtin_expect (D.19473, 0);
      if (D.19474 != 0) goto <D.19639>; else goto <D.19640>;
      <D.19639>:
      gc_debug_file.48 = gc_debug_file;
      D.19625 = *_objptr;
      _objptr.56 = (long int) _objptr;
      start.51 = (long int) start;
      D.19642 = _objptr.56 - start.51;
      D.19480 = MEM[(struct MonoObject *)start].vtable;
      D.19481 = D.19480->klass;
      D.19482 = D.19481->name_space;
      D.19480 = MEM[(struct MonoObject *)start].vtable;
      D.19481 = D.19480->klass;
      D.19483 = D.19481->name;
      fprintf (gc_debug_file.48, "major->major reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.19625, D.19642, start, D.19482, D.19483);
      gc_debug_file.48 = gc_debug_file;
      fflush (gc_debug_file.48);
      <D.19640>:
      <D.19638>:
      <D.19633>:
      <D.19630>:
      <D.19627>:
      <D.19624>:
      _bmap = _bmap >> 1;
      _objptr = _objptr + 8;
      <D.18383>:
      if (_bmap != 0) goto <D.18382>; else goto <D.18384>;
      <D.18384>:
    }
    goto <D.18340>;
    <D.18385>:
    {
      void * * _objptr;
      gsize * bitmap_data;
      int bwords;
      void * * start_run;

      _objptr = start;
      bitmap_data = sgen_get_complex_descriptor (desc);
      D.19643 = *bitmap_data;
      D.19644 = (unsigned int) D.19643;
      D.19645 = D.19644 + 4294967295;
      bwords = (int) D.19645;
      start_run = _objptr;
      bitmap_data = bitmap_data + 8;
      if (0 != 0) goto <D.19646>; else goto <D.19647>;
      <D.19646>:
      {
        struct MonoObject * myobj;

        myobj = start;
        D.19648 = myobj->vtable;
        D.19649 = D.19648->klass;
        D.19650 = D.19649->name_space;
        D.19648 = myobj->vtable;
        D.19649 = D.19648->klass;
        D.19651 = D.19649->name;
        monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", bwords, start, desc, D.19650, D.19651);
      }
      <D.19647>:
      goto <D.18396>;
      <D.18395>:
      {
        gsize _bmap;

        bitmap_data.57 = bitmap_data;
        bitmap_data = bitmap_data.57 + 8;
        _bmap = *bitmap_data.57;
        _objptr = start_run;
        goto <D.18393>;
        <D.18392>:
        D.19653 = _bmap & 1;
        if (D.19653 != 0) goto <D.19654>; else goto <D.19655>;
        <D.19654>:
        D.19656 = *_objptr;
        if (D.19656 != 0B) goto <D.19657>; else goto <D.19658>;
        <D.19657>:
        D.19656 = *_objptr;
        D.19659 = sgen_ptr_in_nursery (D.19656);
        if (D.19659 == 0) goto <D.19660>; else goto <D.19661>;
        <D.19660>:
        D.19656 = *_objptr;
        D.19662 = is_major_or_los_object_marked (D.19656);
        if (D.19662 == 0) goto <D.19663>; else goto <D.19664>;
        <D.19663>:
        D.19665 = sgen_get_remset ();
        D.19666 = D.19665->find_address_with_cards;
        D.19667 = D.19666 (start, cards, _objptr);
        if (D.19667 == 0) goto <D.19668>; else goto <D.19669>;
        <D.19668>:
        gc_debug_level.49 = gc_debug_level;
        D.19472 = gc_debug_level.49 >= 0;
        D.19473 = (long int) D.19472;
        D.19474 = __builtin_expect (D.19473, 0);
        if (D.19474 != 0) goto <D.19670>; else goto <D.19671>;
        <D.19670>:
        gc_debug_file.48 = gc_debug_file;
        D.19656 = *_objptr;
        _objptr.58 = (long int) _objptr;
        start.51 = (long int) start;
        D.19673 = _objptr.58 - start.51;
        D.19480 = MEM[(struct MonoObject *)start].vtable;
        D.19481 = D.19480->klass;
        D.19482 = D.19481->name_space;
        D.19480 = MEM[(struct MonoObject *)start].vtable;
        D.19481 = D.19480->klass;
        D.19483 = D.19481->name;
        fprintf (gc_debug_file.48, "major->major reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.19656, D.19673, start, D.19482, D.19483);
        gc_debug_file.48 = gc_debug_file;
        fflush (gc_debug_file.48);
        <D.19671>:
        <D.19669>:
        <D.19664>:
        <D.19661>:
        <D.19658>:
        <D.19655>:
        _bmap = _bmap >> 1;
        _objptr = _objptr + 8;
        <D.18393>:
        if (_bmap != 0) goto <D.18392>; else goto <D.18394>;
        <D.18394>:
        start_run = start_run + 512;
      }
      <D.18396>:
      bwords.59 = bwords;
      bwords = bwords.59 + -1;
      if (bwords.59 > 0) goto <D.18395>; else goto <D.18397>;
      <D.18397>:
    }
    goto <D.18340>;
    <D.18398>:
    {
      gsize * mbitmap_data;
      int mbwords;
      int el_size;
      char * e_start;
      char * e_end;

      D.19675 = vt->desc;
      mbitmap_data = sgen_get_complex_descriptor (D.19675);
      mbitmap_data.60 = mbitmap_data;
      mbitmap_data = mbitmap_data.60 + 8;
      D.19677 = *mbitmap_data.60;
      D.19678 = (unsigned int) D.19677;
      D.19679 = D.19678 + 4294967295;
      mbwords = (int) D.19679;
      D.19680 = vt->klass;
      el_size = mono_array_element_size (D.19680);
      e_start = start + 32;
      D.19546 = MEM[(struct MonoArray *)start].max_length;
      el_size.61 = (unsigned int) el_size;
      D.19682 = D.19546 * el_size.61;
      D.19683 = (sizetype) D.19682;
      e_end = e_start + D.19683;
      if (0 != 0) goto <D.19684>; else goto <D.19685>;
      <D.19684>:
      D.19675 = vt->desc;
      D.19680 = vt->klass;
      D.19686 = D.19680->name_space;
      D.19680 = vt->klass;
      D.19687 = D.19680->name;
      monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", mbwords, start, D.19675, D.19686, D.19687);
      <D.19685>:
      goto <D.18416>;
      <D.18415>:
      {
        void * * _objptr;
        gsize * bitmap_data;
        unsigned int bwords;

        _objptr = e_start;
        bitmap_data = mbitmap_data;
        bwords = (unsigned int) mbwords;
        goto <D.18413>;
        <D.18412>:
        {
          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.18410>;
          <D.18409>:
          D.19689 = _bmap & 1;
          if (D.19689 != 0) goto <D.19690>; else goto <D.19691>;
          <D.19690>:
          D.19692 = *_objptr;
          if (D.19692 != 0B) goto <D.19693>; else goto <D.19694>;
          <D.19693>:
          D.19692 = *_objptr;
          D.19695 = sgen_ptr_in_nursery (D.19692);
          if (D.19695 == 0) goto <D.19696>; else goto <D.19697>;
          <D.19696>:
          D.19692 = *_objptr;
          D.19698 = is_major_or_los_object_marked (D.19692);
          if (D.19698 == 0) goto <D.19699>; else goto <D.19700>;
          <D.19699>:
          D.19701 = sgen_get_remset ();
          D.19702 = D.19701->find_address_with_cards;
          D.19703 = D.19702 (start, cards, _objptr);
          if (D.19703 == 0) goto <D.19704>; else goto <D.19705>;
          <D.19704>:
          gc_debug_level.49 = gc_debug_level;
          D.19472 = gc_debug_level.49 >= 0;
          D.19473 = (long int) D.19472;
          D.19474 = __builtin_expect (D.19473, 0);
          if (D.19474 != 0) goto <D.19706>; else goto <D.19707>;
          <D.19706>:
          gc_debug_file.48 = gc_debug_file;
          D.19692 = *_objptr;
          _objptr.63 = (long int) _objptr;
          start.51 = (long int) start;
          D.19709 = _objptr.63 - start.51;
          D.19480 = MEM[(struct MonoObject *)start].vtable;
          D.19481 = D.19480->klass;
          D.19482 = D.19481->name_space;
          D.19480 = MEM[(struct MonoObject *)start].vtable;
          D.19481 = D.19480->klass;
          D.19483 = D.19481->name;
          fprintf (gc_debug_file.48, "major->major reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", D.19692, D.19709, start, D.19482, D.19483);
          gc_debug_file.48 = gc_debug_file;
          fflush (gc_debug_file.48);
          <D.19707>:
          <D.19705>:
          <D.19700>:
          <D.19697>:
          <D.19694>:
          <D.19691>:
          _bmap = _bmap >> 1;
          _objptr = _objptr + 8;
          <D.18410>:
          if (_bmap != 0) goto <D.18409>; else goto <D.18411>;
          <D.18411>:
          _objptr = start_run + 512;
        }
        <D.18413>:
        bwords.64 = bwords;
        bwords = bwords.64 + 4294967295;
        if (bwords.64 != 0) goto <D.18412>; else goto <D.18414>;
        <D.18414>:
        D.19711 = (sizetype) el_size;
        e_start = e_start + D.19711;
      }
      <D.18416>:
      if (e_start < e_end) goto <D.18415>; else goto <D.18417>;
      <D.18417>:
    }
    goto <D.18340>;
    <D.18418>:
    goto <D.18340>;
    <D.18419>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 111);
    <D.18340>:
  }
}


is_major_or_los_object_marked (char * obj)
{
  unsigned int D.19714;
  gboolean D.19717;
  struct SgenMajorCollector * D.19718;
  gboolean (*<T2d21>) (char *) D.19719;

  D.19714 = sgen_safe_object_get_size (obj);
  if (D.19714 > 8000) goto <D.19715>; else goto <D.19716>;
  <D.19715>:
  D.19717 = sgen_los_object_is_pinned (obj);
  return D.19717;
  <D.19716>:
  D.19718 = sgen_get_major_collector ();
  D.19719 = D.19718->is_object_live;
  D.19717 = D.19719 (obj);
  return D.19717;
}


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

  D.19721 = major_collector.iterate_objects;
  D.19721 (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.19722;
  long unsigned int D.19723;
  long unsigned int D.19724;
  long unsigned int D.19725;
  long unsigned int D.19728;
  long unsigned int D.19729;
  long unsigned int D.19730;
  long unsigned int D.19731;
  long unsigned int D.19732;
  long unsigned int D.19733;
  void * D.19734;
  long unsigned int D.19737;
  long unsigned int D.19738;
  long int _objptr.65;
  long int start.66;
  long int D.19743;
  unsigned int D.19744;
  unsigned int D.19749;
  long unsigned int D.19750;
  long unsigned int D.19751;
  int D.19752;
  void * D.19753;
  long unsigned int D.19756;
  long unsigned int D.19757;
  long int _objptr.67;
  long int D.19761;
  unsigned int D.19762;
  long unsigned int D.19763;
  long unsigned int D.19764;
  int D.19765;
  unsigned int D.19770;
  long unsigned int D.19771;
  long unsigned int D.19774;
  int D.19775;
  int D.19776;
  unsigned int D.19779;
  unsigned int el_size.68;
  unsigned int D.19781;
  sizetype D.19782;
  void * D.19783;
  long unsigned int D.19786;
  long unsigned int D.19787;
  long int p.69;
  long int D.19791;
  unsigned int D.19792;
  int D.19796;
  int D.19797;
  long unsigned int D.19798;
  long unsigned int D.19799;
  long unsigned int D.19800;
  long unsigned int D.19801;
  void * * D.19802;
  void * D.19803;
  long unsigned int D.19806;
  long unsigned int D.19807;
  sizetype D.19810;
  char * D.19811;
  long int D.19812;
  long int D.19813;
  unsigned int D.19814;
  sizetype D.19815;
  long unsigned int D.19819;
  void * D.19822;
  long unsigned int D.19825;
  long unsigned int D.19826;
  long int p.70;
  long int D.19830;
  unsigned int D.19831;
  long unsigned int D.19832;
  void * D.19835;
  long unsigned int D.19838;
  long unsigned int D.19839;
  long int _objptr.71;
  long int D.19843;
  unsigned int D.19844;
  long unsigned int D.19845;
  unsigned int D.19846;
  unsigned int D.19847;
  struct MonoVTable * D.19850;
  struct MonoClass * D.19851;
  const char * D.19852;
  const char * D.19853;
  gsize * bitmap_data.72;
  long unsigned int D.19855;
  void * D.19858;
  long unsigned int D.19861;
  long unsigned int D.19862;
  long int _objptr.73;
  long int D.19866;
  unsigned int D.19867;
  int bwords.74;
  long unsigned int D.19869;
  gsize * mbitmap_data.75;
  long unsigned int D.19871;
  unsigned int D.19872;
  unsigned int D.19873;
  struct MonoClass * D.19874;
  unsigned int el_size.76;
  unsigned int D.19876;
  sizetype D.19877;
  const char * D.19880;
  const char * D.19881;
  gsize * bitmap_data.77;
  long unsigned int D.19883;
  void * D.19886;
  long unsigned int D.19889;
  long unsigned int D.19890;
  long int _objptr.78;
  long int D.19894;
  unsigned int D.19895;
  unsigned int bwords.79;
  sizetype D.19897;

  {
    struct GCVTable * vt;
    mword desc;

    D.19722 = MEM[(mword *)start];
    D.19723 = D.19722 & 18446744073709551612;
    vt = (struct GCVTable *) D.19723;
    desc = vt->desc;
    D.19724 = desc & 7;
    switch (D.19724) <default: <D.18525>, case 1: <D.18430>, case 2: <D.18439>, case 3: <D.18489>, case 4: <D.18449>, case 5: <D.18482>, case 6: <D.18503>, case 7: <D.18524>>
    <D.18430>:
    D.19725 = desc & 4294901760;
    if (D.19725 != 0) goto <D.19726>; else goto <D.19727>;
    <D.19726>:
    {
      void * * _objptr_end;
      void * * _objptr;

      _objptr = start;
      D.19728 = desc >> 16;
      D.19729 = D.19728 & 255;
      D.19730 = D.19729 * 8;
      _objptr = _objptr + D.19730;
      D.19731 = desc >> 24;
      D.19732 = D.19731 & 255;
      D.19733 = D.19732 * 8;
      _objptr_end = _objptr + D.19733;
      D.19734 = *_objptr;
      if (D.19734 != 0B) goto <D.19735>; else goto <D.19736>;
      <D.19735>:
      D.19734 = *_objptr;
      D.19737 = MEM[(mword *)D.19734];
      D.19738 = D.19737 & 18446744073709551612;
      if (D.19738 == 0) goto <D.19739>; else goto <D.19740>;
      <D.19739>:
      _objptr.65 = (long int) _objptr;
      start.66 = (long int) start;
      D.19743 = _objptr.65 - start.66;
      D.19744 = sgen_safe_object_get_size (start);
      monoeg_g_log (0B, 4, "Could not load vtable for obj %p slot %d (size %d)", start, D.19743, D.19744);
      <D.18433>:
      goto <D.18433>;
      <D.19740>:
      <D.19736>:
      _objptr = _objptr + 8;
      goto <D.18436>;
      <D.18435>:
      D.19734 = *_objptr;
      if (D.19734 != 0B) goto <D.19745>; else goto <D.19746>;
      <D.19745>:
      D.19734 = *_objptr;
      D.19737 = MEM[(mword *)D.19734];
      D.19738 = D.19737 & 18446744073709551612;
      if (D.19738 == 0) goto <D.19747>; else goto <D.19748>;
      <D.19747>:
      _objptr.65 = (long int) _objptr;
      start.66 = (long int) start;
      D.19743 = _objptr.65 - start.66;
      D.19749 = sgen_safe_object_get_size (start);
      monoeg_g_log (0B, 4, "Could not load vtable for obj %p slot %d (size %d)", start, D.19743, D.19749);
      <D.18434>:
      goto <D.18434>;
      <D.19748>:
      <D.19746>:
      _objptr = _objptr + 8;
      <D.18436>:
      if (_objptr < _objptr_end) goto <D.18435>; else goto <D.18437>;
      <D.18437>:
    }
    <D.19727>:
    goto <D.18438>;
    <D.18439>:
    {
      void * * _objptr;
      gsize _bmap;

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

        _index = __builtin_ctzl (_bmap);
        D.19750 = (long unsigned int) _index;
        D.19751 = D.19750 * 8;
        _objptr = _objptr + D.19751;
        D.19752 = _index + 1;
        _bmap = _bmap >> D.19752;
        D.19753 = *_objptr;
        if (D.19753 != 0B) goto <D.19754>; else goto <D.19755>;
        <D.19754>:
        D.19753 = *_objptr;
        D.19756 = MEM[(mword *)D.19753];
        D.19757 = D.19756 & 18446744073709551612;
        if (D.19757 == 0) goto <D.19758>; else goto <D.19759>;
        <D.19758>:
        _objptr.67 = (long int) _objptr;
        start.66 = (long int) start;
        D.19761 = _objptr.67 - start.66;
        D.19762 = sgen_safe_object_get_size (start);
        monoeg_g_log (0B, 4, "Could not load vtable for obj %p slot %d (size %d)", start, D.19761, D.19762);
        <D.18443>:
        goto <D.18443>;
        <D.19759>:
        <D.19755>:
        _objptr = _objptr + 8;
      }
      goto <D.18447>;
      <D.18446>:
      {
        int _index;

        _index = __builtin_ctzl (_bmap);
        D.19763 = (long unsigned int) _index;
        D.19764 = D.19763 * 8;
        _objptr = _objptr + D.19764;
        D.19765 = _index + 1;
        _bmap = _bmap >> D.19765;
        D.19753 = *_objptr;
        if (D.19753 != 0B) goto <D.19766>; else goto <D.19767>;
        <D.19766>:
        D.19753 = *_objptr;
        D.19756 = MEM[(mword *)D.19753];
        D.19757 = D.19756 & 18446744073709551612;
        if (D.19757 == 0) goto <D.19768>; else goto <D.19769>;
        <D.19768>:
        _objptr.67 = (long int) _objptr;
        start.66 = (long int) start;
        D.19761 = _objptr.67 - start.66;
        D.19770 = sgen_safe_object_get_size (start);
        monoeg_g_log (0B, 4, "Could not load vtable for obj %p slot %d (size %d)", start, D.19761, D.19770);
        <D.18445>:
        goto <D.18445>;
        <D.19769>:
        <D.19767>:
        _objptr = _objptr + 8;
      }
      <D.18447>:
      if (_bmap != 0) goto <D.18446>; else goto <D.18448>;
      <D.18448>:
    }
    goto <D.18438>;
    <D.18449>:
    D.19771 = desc & 4294950912;
    if (D.19771 != 0) goto <D.19772>; else goto <D.19773>;
    <D.19772>:
    {
      int el_size;
      int etype;

      D.19774 = desc >> 3;
      D.19775 = (int) D.19774;
      el_size = D.19775 & 1023;
      D.19776 = (int) desc;
      etype = D.19776 & 49152;
      if (etype == 16384) goto <D.19777>; else goto <D.19778>;
      <D.19777>:
      {
        void * * p;
        void * * end_refs;

        p = start + 32;
        D.19779 = MEM[(struct MonoArray *)start].max_length;
        el_size.68 = (unsigned int) el_size;
        D.19781 = D.19779 * el_size.68;
        D.19782 = (sizetype) D.19781;
        end_refs = p + D.19782;
        goto <D.18456>;
        <D.18455>:
        D.19783 = *p;
        if (D.19783 != 0B) goto <D.19784>; else goto <D.19785>;
        <D.19784>:
        D.19783 = *p;
        D.19786 = MEM[(mword *)D.19783];
        D.19787 = D.19786 & 18446744073709551612;
        if (D.19787 == 0) goto <D.19788>; else goto <D.19789>;
        <D.19788>:
        p.69 = (long int) p;
        start.66 = (long int) start;
        D.19791 = p.69 - start.66;
        D.19792 = sgen_safe_object_get_size (start);
        monoeg_g_log (0B, 4, "Could not load vtable for obj %p slot %d (size %d)", start, D.19791, D.19792);
        <D.18454>:
        goto <D.18454>;
        <D.19789>:
        <D.19785>:
        p = p + 8;
        <D.18456>:
        if (p < end_refs) goto <D.18455>; else goto <D.18457>;
        <D.18457>:
      }
      goto <D.19793>;
      <D.19778>:
      if (etype == 32768) goto <D.19794>; else goto <D.19795>;
      <D.19794>:
      {
        int offset;
        int num_refs;
        char * e_start;
        char * e_end;

        D.19728 = desc >> 16;
        D.19796 = (int) D.19728;
        offset = D.19796 & 255;
        D.19731 = desc >> 24;
        D.19797 = (int) D.19731;
        num_refs = D.19797 & 255;
        e_start = start + 32;
        D.19779 = MEM[(struct MonoArray *)start].max_length;
        el_size.68 = (unsigned int) el_size;
        D.19781 = D.19779 * el_size.68;
        D.19782 = (sizetype) D.19781;
        e_end = e_start + D.19782;
        goto <D.18469>;
        <D.18468>:
        {
          void * * p;
          int i;

          p = e_start;
          D.19798 = (long unsigned int) offset;
          D.19799 = D.19798 * 8;
          p = p + D.19799;
          i = 0;
          goto <D.18466>;
          <D.18465>:
          D.19800 = (long unsigned int) i;
          D.19801 = D.19800 * 8;
          D.19802 = p + D.19801;
          D.19803 = *D.19802;
          if (D.19803 != 0B) goto <D.19804>; else goto <D.19805>;
          <D.19804>:
          D.19800 = (long unsigned int) i;
          D.19801 = D.19800 * 8;
          D.19802 = p + D.19801;
          D.19803 = *D.19802;
          D.19806 = MEM[(mword *)D.19803];
          D.19807 = D.19806 & 18446744073709551612;
          if (D.19807 == 0) goto <D.19808>; else goto <D.19809>;
          <D.19808>:
          D.19810 = (sizetype) i;
          D.19811 = p + D.19810;
          D.19812 = (long int) D.19811;
          start.66 = (long int) start;
          D.19813 = D.19812 - start.66;
          D.19814 = sgen_safe_object_get_size (start);
          monoeg_g_log (0B, 4, "Could not load vtable for obj %p slot %d (size %d)", start, D.19813, D.19814);
          <D.18464>:
          goto <D.18464>;
          <D.19809>:
          <D.19805>:
          i = i + 1;
          <D.18466>:
          if (i < num_refs) goto <D.18465>; else goto <D.18467>;
          <D.18467>:
          D.19815 = (sizetype) el_size;
          e_start = e_start + D.19815;
        }
        <D.18469>:
        if (e_start < e_end) goto <D.18468>; else goto <D.18470>;
        <D.18470>:
      }
      goto <D.19816>;
      <D.19795>:
      if (etype == 49152) goto <D.19817>; else goto <D.19818>;
      <D.19817>:
      {
        char * e_start;
        char * e_end;

        e_start = start + 32;
        D.19779 = MEM[(struct MonoArray *)start].max_length;
        el_size.68 = (unsigned int) el_size;
        D.19781 = D.19779 * el_size.68;
        D.19782 = (sizetype) D.19781;
        e_end = e_start + D.19782;
        goto <D.18480>;
        <D.18479>:
        {
          void * * p;
          gsize _bmap;

          p = e_start;
          _bmap = desc >> 16;
          goto <D.18477>;
          <D.18476>:
          D.19819 = _bmap & 1;
          if (D.19819 != 0) goto <D.19820>; else goto <D.19821>;
          <D.19820>:
          D.19822 = *p;
          if (D.19822 != 0B) goto <D.19823>; else goto <D.19824>;
          <D.19823>:
          D.19822 = *p;
          D.19825 = MEM[(mword *)D.19822];
          D.19826 = D.19825 & 18446744073709551612;
          if (D.19826 == 0) goto <D.19827>; else goto <D.19828>;
          <D.19827>:
          p.70 = (long int) p;
          start.66 = (long int) start;
          D.19830 = p.70 - start.66;
          D.19831 = sgen_safe_object_get_size (start);
          monoeg_g_log (0B, 4, "Could not load vtable for obj %p slot %d (size %d)", start, D.19830, D.19831);
          <D.18475>:
          goto <D.18475>;
          <D.19828>:
          <D.19824>:
          <D.19821>:
          _bmap = _bmap >> 1;
          p = p + 8;
          <D.18477>:
          if (_bmap != 0) goto <D.18476>; else goto <D.18478>;
          <D.18478>:
          D.19815 = (sizetype) el_size;
          e_start = e_start + D.19815;
        }
        <D.18480>:
        if (e_start < e_end) goto <D.18479>; else goto <D.18481>;
        <D.18481>:
      }
      <D.19818>:
      <D.19816>:
      <D.19793>:
    }
    <D.19773>:
    goto <D.18438>;
    <D.18482>:
    {
      void * * _objptr;
      gsize _bmap;

      _objptr = start;
      _bmap = desc >> 3;
      _objptr = _objptr + 16;
      goto <D.18487>;
      <D.18486>:
      D.19832 = _bmap & 1;
      if (D.19832 != 0) goto <D.19833>; else goto <D.19834>;
      <D.19833>:
      D.19835 = *_objptr;
      if (D.19835 != 0B) goto <D.19836>; else goto <D.19837>;
      <D.19836>:
      D.19835 = *_objptr;
      D.19838 = MEM[(mword *)D.19835];
      D.19839 = D.19838 & 18446744073709551612;
      if (D.19839 == 0) goto <D.19840>; else goto <D.19841>;
      <D.19840>:
      _objptr.71 = (long int) _objptr;
      start.66 = (long int) start;
      D.19843 = _objptr.71 - start.66;
      D.19844 = sgen_safe_object_get_size (start);
      monoeg_g_log (0B, 4, "Could not load vtable for obj %p slot %d (size %d)", start, D.19843, D.19844);
      <D.18485>:
      goto <D.18485>;
      <D.19841>:
      <D.19837>:
      <D.19834>:
      _bmap = _bmap >> 1;
      _objptr = _objptr + 8;
      <D.18487>:
      if (_bmap != 0) goto <D.18486>; else goto <D.18488>;
      <D.18488>:
    }
    goto <D.18438>;
    <D.18489>:
    {
      void * * _objptr;
      gsize * bitmap_data;
      int bwords;
      void * * start_run;

      _objptr = start;
      bitmap_data = sgen_get_complex_descriptor (desc);
      D.19845 = *bitmap_data;
      D.19846 = (unsigned int) D.19845;
      D.19847 = D.19846 + 4294967295;
      bwords = (int) D.19847;
      start_run = _objptr;
      bitmap_data = bitmap_data + 8;
      if (0 != 0) goto <D.19848>; else goto <D.19849>;
      <D.19848>:
      {
        struct MonoObject * myobj;

        myobj = start;
        D.19850 = myobj->vtable;
        D.19851 = D.19850->klass;
        D.19852 = D.19851->name_space;
        D.19850 = myobj->vtable;
        D.19851 = D.19850->klass;
        D.19853 = D.19851->name;
        monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", bwords, start, desc, D.19852, D.19853);
      }
      <D.19849>:
      goto <D.18501>;
      <D.18500>:
      {
        gsize _bmap;

        bitmap_data.72 = bitmap_data;
        bitmap_data = bitmap_data.72 + 8;
        _bmap = *bitmap_data.72;
        _objptr = start_run;
        goto <D.18498>;
        <D.18497>:
        D.19855 = _bmap & 1;
        if (D.19855 != 0) goto <D.19856>; else goto <D.19857>;
        <D.19856>:
        D.19858 = *_objptr;
        if (D.19858 != 0B) goto <D.19859>; else goto <D.19860>;
        <D.19859>:
        D.19858 = *_objptr;
        D.19861 = MEM[(mword *)D.19858];
        D.19862 = D.19861 & 18446744073709551612;
        if (D.19862 == 0) goto <D.19863>; else goto <D.19864>;
        <D.19863>:
        _objptr.73 = (long int) _objptr;
        start.66 = (long int) start;
        D.19866 = _objptr.73 - start.66;
        D.19867 = sgen_safe_object_get_size (start);
        monoeg_g_log (0B, 4, "Could not load vtable for obj %p slot %d (size %d)", start, D.19866, D.19867);
        <D.18496>:
        goto <D.18496>;
        <D.19864>:
        <D.19860>:
        <D.19857>:
        _bmap = _bmap >> 1;
        _objptr = _objptr + 8;
        <D.18498>:
        if (_bmap != 0) goto <D.18497>; else goto <D.18499>;
        <D.18499>:
        start_run = start_run + 512;
      }
      <D.18501>:
      bwords.74 = bwords;
      bwords = bwords.74 + -1;
      if (bwords.74 > 0) goto <D.18500>; else goto <D.18502>;
      <D.18502>:
    }
    goto <D.18438>;
    <D.18503>:
    {
      gsize * mbitmap_data;
      int mbwords;
      int el_size;
      char * e_start;
      char * e_end;

      D.19869 = vt->desc;
      mbitmap_data = sgen_get_complex_descriptor (D.19869);
      mbitmap_data.75 = mbitmap_data;
      mbitmap_data = mbitmap_data.75 + 8;
      D.19871 = *mbitmap_data.75;
      D.19872 = (unsigned int) D.19871;
      D.19873 = D.19872 + 4294967295;
      mbwords = (int) D.19873;
      D.19874 = vt->klass;
      el_size = mono_array_element_size (D.19874);
      e_start = start + 32;
      D.19779 = MEM[(struct MonoArray *)start].max_length;
      el_size.76 = (unsigned int) el_size;
      D.19876 = D.19779 * el_size.76;
      D.19877 = (sizetype) D.19876;
      e_end = e_start + D.19877;
      if (0 != 0) goto <D.19878>; else goto <D.19879>;
      <D.19878>:
      D.19869 = vt->desc;
      D.19874 = vt->klass;
      D.19880 = D.19874->name_space;
      D.19874 = vt->klass;
      D.19881 = D.19874->name;
      monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", mbwords, start, D.19869, D.19880, D.19881);
      <D.19879>:
      goto <D.18522>;
      <D.18521>:
      {
        void * * _objptr;
        gsize * bitmap_data;
        unsigned int bwords;

        _objptr = e_start;
        bitmap_data = mbitmap_data;
        bwords = (unsigned int) mbwords;
        goto <D.18519>;
        <D.18518>:
        {
          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.18516>;
          <D.18515>:
          D.19883 = _bmap & 1;
          if (D.19883 != 0) goto <D.19884>; else goto <D.19885>;
          <D.19884>:
          D.19886 = *_objptr;
          if (D.19886 != 0B) goto <D.19887>; else goto <D.19888>;
          <D.19887>:
          D.19886 = *_objptr;
          D.19889 = MEM[(mword *)D.19886];
          D.19890 = D.19889 & 18446744073709551612;
          if (D.19890 == 0) goto <D.19891>; else goto <D.19892>;
          <D.19891>:
          _objptr.78 = (long int) _objptr;
          start.66 = (long int) start;
          D.19894 = _objptr.78 - start.66;
          D.19895 = sgen_safe_object_get_size (start);
          monoeg_g_log (0B, 4, "Could not load vtable for obj %p slot %d (size %d)", start, D.19894, D.19895);
          <D.18514>:
          goto <D.18514>;
          <D.19892>:
          <D.19888>:
          <D.19885>:
          _bmap = _bmap >> 1;
          _objptr = _objptr + 8;
          <D.18516>:
          if (_bmap != 0) goto <D.18515>; else goto <D.18517>;
          <D.18517>:
          _objptr = start_run + 512;
        }
        <D.18519>:
        bwords.79 = bwords;
        bwords = bwords.79 + 4294967295;
        if (bwords.79 != 0) goto <D.18518>; else goto <D.18520>;
        <D.18520>:
        D.19897 = (sizetype) el_size;
        e_start = e_start + D.19897;
      }
      <D.18522>:
      if (e_start < e_end) goto <D.18521>; else goto <D.18523>;
      <D.18523>:
    }
    goto <D.18438>;
    <D.18524>:
    goto <D.18438>;
    <D.18525>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 111);
    <D.18438>:
  }
}


check_object (char * start)
{
  long unsigned int D.19901;
  long unsigned int D.19902;
  long unsigned int D.19903;
  long unsigned int D.19904;
  long unsigned int D.19907;
  long unsigned int D.19908;
  long unsigned int D.19909;
  long unsigned int D.19910;
  long unsigned int D.19911;
  long unsigned int D.19912;
  void * D.19913;
  const char * D.19916;
  _Bool D.19917;
  long int D.19918;
  long int D.19919;
  const char * D.19924;
  _Bool D.19925;
  long int D.19926;
  long int D.19927;
  long unsigned int D.19930;
  long unsigned int D.19931;
  int D.19932;
  void * D.19933;
  const char * D.19936;
  _Bool D.19937;
  long int D.19938;
  long int D.19939;
  long unsigned int D.19942;
  long unsigned int D.19943;
  int D.19944;
  const char * D.19947;
  _Bool D.19948;
  long int D.19949;
  long int D.19950;
  long unsigned int D.19953;
  long unsigned int D.19956;
  int D.19957;
  int D.19958;
  unsigned int D.19961;
  unsigned int el_size.80;
  unsigned int D.19963;
  sizetype D.19964;
  void * D.19965;
  const char * D.19968;
  _Bool D.19969;
  long int D.19970;
  long int D.19971;
  int D.19977;
  int D.19978;
  long unsigned int D.19979;
  long unsigned int D.19980;
  long unsigned int D.19981;
  long unsigned int D.19982;
  void * * D.19983;
  void * D.19984;
  const char * D.19987;
  _Bool D.19988;
  long int D.19989;
  long int D.19990;
  sizetype D.19993;
  long unsigned int D.19997;
  void * D.20000;
  const char * D.20003;
  _Bool D.20004;
  long int D.20005;
  long int D.20006;
  long unsigned int D.20009;
  void * D.20012;
  const char * D.20015;
  _Bool D.20016;
  long int D.20017;
  long int D.20018;
  long unsigned int D.20021;
  unsigned int D.20022;
  unsigned int D.20023;
  struct MonoVTable * D.20026;
  struct MonoClass * D.20027;
  const char * D.20028;
  const char * D.20029;
  gsize * bitmap_data.81;
  long unsigned int D.20031;
  void * D.20034;
  const char * D.20037;
  _Bool D.20038;
  long int D.20039;
  long int D.20040;
  int bwords.82;
  long unsigned int D.20044;
  gsize * mbitmap_data.83;
  long unsigned int D.20046;
  unsigned int D.20047;
  unsigned int D.20048;
  struct MonoClass * D.20049;
  unsigned int el_size.84;
  unsigned int D.20051;
  sizetype D.20052;
  const char * D.20055;
  const char * D.20056;
  gsize * bitmap_data.85;
  long unsigned int D.20058;
  void * D.20061;
  const char * D.20064;
  _Bool D.20065;
  long int D.20066;
  long int D.20067;
  unsigned int bwords.86;
  sizetype D.20071;

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

    D.19901 = MEM[(mword *)start];
    D.19902 = D.19901 & 18446744073709551612;
    vt = (struct GCVTable *) D.19902;
    desc = vt->desc;
    D.19903 = desc & 7;
    switch (D.19903) <default: <D.18619>, case 1: <D.18534>, case 2: <D.18541>, case 3: <D.18585>, case 4: <D.18549>, case 5: <D.18579>, case 6: <D.18598>, case 7: <D.18618>>
    <D.18534>:
    D.19904 = desc & 4294901760;
    if (D.19904 != 0) goto <D.19905>; else goto <D.19906>;
    <D.19905>:
    {
      void * * _objptr_end;
      void * * _objptr;

      _objptr = start;
      D.19907 = desc >> 16;
      D.19908 = D.19907 & 255;
      D.19909 = D.19908 * 8;
      _objptr = _objptr + D.19909;
      D.19910 = desc >> 24;
      D.19911 = D.19910 & 255;
      D.19912 = D.19911 * 8;
      _objptr_end = _objptr + D.19912;
      D.19913 = *_objptr;
      if (D.19913 != 0B) goto <D.19914>; else goto <D.19915>;
      <D.19914>:
      D.19913 = *_objptr;
      D.19916 = sgen_safe_name (D.19913);
      D.19917 = D.19916 == 0B;
      D.19918 = (long int) D.19917;
      D.19919 = __builtin_expect (D.19918, 0);
      if (D.19919 != 0) goto <D.19920>; else goto <D.19921>;
      <D.19920>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 64, "sgen_safe_name (*(_objptr)) != NULL");
      <D.19921>:
      <D.19915>:
      _objptr = _objptr + 8;
      goto <D.18538>;
      <D.18537>:
      D.19913 = *_objptr;
      if (D.19913 != 0B) goto <D.19922>; else goto <D.19923>;
      <D.19922>:
      D.19913 = *_objptr;
      D.19924 = sgen_safe_name (D.19913);
      D.19925 = D.19924 == 0B;
      D.19926 = (long int) D.19925;
      D.19927 = __builtin_expect (D.19926, 0);
      if (D.19927 != 0) goto <D.19928>; else goto <D.19929>;
      <D.19928>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 64, "sgen_safe_name (*(_objptr)) != NULL");
      <D.19929>:
      <D.19923>:
      _objptr = _objptr + 8;
      <D.18538>:
      if (_objptr < _objptr_end) goto <D.18537>; else goto <D.18539>;
      <D.18539>:
    }
    <D.19906>:
    goto <D.18540>;
    <D.18541>:
    {
      void * * _objptr;
      gsize _bmap;

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

        _index = __builtin_ctzl (_bmap);
        D.19930 = (long unsigned int) _index;
        D.19931 = D.19930 * 8;
        _objptr = _objptr + D.19931;
        D.19932 = _index + 1;
        _bmap = _bmap >> D.19932;
        D.19933 = *_objptr;
        if (D.19933 != 0B) goto <D.19934>; else goto <D.19935>;
        <D.19934>:
        D.19933 = *_objptr;
        D.19936 = sgen_safe_name (D.19933);
        D.19937 = D.19936 == 0B;
        D.19938 = (long int) D.19937;
        D.19939 = __builtin_expect (D.19938, 0);
        if (D.19939 != 0) goto <D.19940>; else goto <D.19941>;
        <D.19940>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 71, "sgen_safe_name (*(_objptr)) != NULL");
        <D.19941>:
        <D.19935>:
        _objptr = _objptr + 8;
      }
      goto <D.18547>;
      <D.18546>:
      {
        int _index;

        _index = __builtin_ctzl (_bmap);
        D.19942 = (long unsigned int) _index;
        D.19943 = D.19942 * 8;
        _objptr = _objptr + D.19943;
        D.19944 = _index + 1;
        _bmap = _bmap >> D.19944;
        D.19933 = *_objptr;
        if (D.19933 != 0B) goto <D.19945>; else goto <D.19946>;
        <D.19945>:
        D.19933 = *_objptr;
        D.19947 = sgen_safe_name (D.19933);
        D.19948 = D.19947 == 0B;
        D.19949 = (long int) D.19948;
        D.19950 = __builtin_expect (D.19949, 0);
        if (D.19950 != 0) goto <D.19951>; else goto <D.19952>;
        <D.19951>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 71, "sgen_safe_name (*(_objptr)) != NULL");
        <D.19952>:
        <D.19946>:
        _objptr = _objptr + 8;
      }
      <D.18547>:
      if (_bmap != 0) goto <D.18546>; else goto <D.18548>;
      <D.18548>:
    }
    goto <D.18540>;
    <D.18549>:
    D.19953 = desc & 4294950912;
    if (D.19953 != 0) goto <D.19954>; else goto <D.19955>;
    <D.19954>:
    {
      int el_size;
      int etype;

      D.19956 = desc >> 3;
      D.19957 = (int) D.19956;
      el_size = D.19957 & 1023;
      D.19958 = (int) desc;
      etype = D.19958 & 49152;
      if (etype == 16384) goto <D.19959>; else goto <D.19960>;
      <D.19959>:
      {
        void * * p;
        void * * end_refs;

        p = start + 32;
        D.19961 = MEM[(struct MonoArray *)start].max_length;
        el_size.80 = (unsigned int) el_size;
        D.19963 = D.19961 * el_size.80;
        D.19964 = (sizetype) D.19963;
        end_refs = p + D.19964;
        goto <D.18555>;
        <D.18554>:
        D.19965 = *p;
        if (D.19965 != 0B) goto <D.19966>; else goto <D.19967>;
        <D.19966>:
        D.19965 = *p;
        D.19968 = sgen_safe_name (D.19965);
        D.19969 = D.19968 == 0B;
        D.19970 = (long int) D.19969;
        D.19971 = __builtin_expect (D.19970, 0);
        if (D.19971 != 0) goto <D.19972>; else goto <D.19973>;
        <D.19972>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "sgen_safe_name (*(p)) != NULL");
        <D.19973>:
        <D.19967>:
        p = p + 8;
        <D.18555>:
        if (p < end_refs) goto <D.18554>; else goto <D.18556>;
        <D.18556>:
      }
      goto <D.19974>;
      <D.19960>:
      if (etype == 32768) goto <D.19975>; else goto <D.19976>;
      <D.19975>:
      {
        int offset;
        int num_refs;
        char * e_start;
        char * e_end;

        D.19907 = desc >> 16;
        D.19977 = (int) D.19907;
        offset = D.19977 & 255;
        D.19910 = desc >> 24;
        D.19978 = (int) D.19910;
        num_refs = D.19978 & 255;
        e_start = start + 32;
        D.19961 = MEM[(struct MonoArray *)start].max_length;
        el_size.80 = (unsigned int) el_size;
        D.19963 = D.19961 * el_size.80;
        D.19964 = (sizetype) D.19963;
        e_end = e_start + D.19964;
        goto <D.18567>;
        <D.18566>:
        {
          void * * p;
          int i;

          p = e_start;
          D.19979 = (long unsigned int) offset;
          D.19980 = D.19979 * 8;
          p = p + D.19980;
          i = 0;
          goto <D.18564>;
          <D.18563>:
          D.19981 = (long unsigned int) i;
          D.19982 = D.19981 * 8;
          D.19983 = p + D.19982;
          D.19984 = *D.19983;
          if (D.19984 != 0B) goto <D.19985>; else goto <D.19986>;
          <D.19985>:
          D.19981 = (long unsigned int) i;
          D.19982 = D.19981 * 8;
          D.19983 = p + D.19982;
          D.19984 = *D.19983;
          D.19987 = sgen_safe_name (D.19984);
          D.19988 = D.19987 == 0B;
          D.19989 = (long int) D.19988;
          D.19990 = __builtin_expect (D.19989, 0);
          if (D.19990 != 0) goto <D.19991>; else goto <D.19992>;
          <D.19991>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "sgen_safe_name (*(p + i)) != NULL");
          <D.19992>:
          <D.19986>:
          i = i + 1;
          <D.18564>:
          if (i < num_refs) goto <D.18563>; else goto <D.18565>;
          <D.18565>:
          D.19993 = (sizetype) el_size;
          e_start = e_start + D.19993;
        }
        <D.18567>:
        if (e_start < e_end) goto <D.18566>; else goto <D.18568>;
        <D.18568>:
      }
      goto <D.19994>;
      <D.19976>:
      if (etype == 49152) goto <D.19995>; else goto <D.19996>;
      <D.19995>:
      {
        char * e_start;
        char * e_end;

        e_start = start + 32;
        D.19961 = MEM[(struct MonoArray *)start].max_length;
        el_size.80 = (unsigned int) el_size;
        D.19963 = D.19961 * el_size.80;
        D.19964 = (sizetype) D.19963;
        e_end = e_start + D.19964;
        goto <D.18577>;
        <D.18576>:
        {
          void * * p;
          gsize _bmap;

          p = e_start;
          _bmap = desc >> 16;
          goto <D.18574>;
          <D.18573>:
          D.19997 = _bmap & 1;
          if (D.19997 != 0) goto <D.19998>; else goto <D.19999>;
          <D.19998>:
          D.20000 = *p;
          if (D.20000 != 0B) goto <D.20001>; else goto <D.20002>;
          <D.20001>:
          D.20000 = *p;
          D.20003 = sgen_safe_name (D.20000);
          D.20004 = D.20003 == 0B;
          D.20005 = (long int) D.20004;
          D.20006 = __builtin_expect (D.20005, 0);
          if (D.20006 != 0) goto <D.20007>; else goto <D.20008>;
          <D.20007>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "sgen_safe_name (*(p)) != NULL");
          <D.20008>:
          <D.20002>:
          <D.19999>:
          _bmap = _bmap >> 1;
          p = p + 8;
          <D.18574>:
          if (_bmap != 0) goto <D.18573>; else goto <D.18575>;
          <D.18575>:
          D.19993 = (sizetype) el_size;
          e_start = e_start + D.19993;
        }
        <D.18577>:
        if (e_start < e_end) goto <D.18576>; else goto <D.18578>;
        <D.18578>:
      }
      <D.19996>:
      <D.19994>:
      <D.19974>:
    }
    <D.19955>:
    goto <D.18540>;
    <D.18579>:
    {
      void * * _objptr;
      gsize _bmap;

      _objptr = start;
      _bmap = desc >> 3;
      _objptr = _objptr + 16;
      goto <D.18583>;
      <D.18582>:
      D.20009 = _bmap & 1;
      if (D.20009 != 0) goto <D.20010>; else goto <D.20011>;
      <D.20010>:
      D.20012 = *_objptr;
      if (D.20012 != 0B) goto <D.20013>; else goto <D.20014>;
      <D.20013>:
      D.20012 = *_objptr;
      D.20015 = sgen_safe_name (D.20012);
      D.20016 = D.20015 == 0B;
      D.20017 = (long int) D.20016;
      D.20018 = __builtin_expect (D.20017, 0);
      if (D.20018 != 0) goto <D.20019>; else goto <D.20020>;
      <D.20019>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 85, "sgen_safe_name (*(_objptr)) != NULL");
      <D.20020>:
      <D.20014>:
      <D.20011>:
      _bmap = _bmap >> 1;
      _objptr = _objptr + 8;
      <D.18583>:
      if (_bmap != 0) goto <D.18582>; else goto <D.18584>;
      <D.18584>:
    }
    goto <D.18540>;
    <D.18585>:
    {
      void * * _objptr;
      gsize * bitmap_data;
      int bwords;
      void * * start_run;

      _objptr = start;
      bitmap_data = sgen_get_complex_descriptor (desc);
      D.20021 = *bitmap_data;
      D.20022 = (unsigned int) D.20021;
      D.20023 = D.20022 + 4294967295;
      bwords = (int) D.20023;
      start_run = _objptr;
      bitmap_data = bitmap_data + 8;
      if (0 != 0) goto <D.20024>; else goto <D.20025>;
      <D.20024>:
      {
        struct MonoObject * myobj;

        myobj = start;
        D.20026 = myobj->vtable;
        D.20027 = D.20026->klass;
        D.20028 = D.20027->name_space;
        D.20026 = myobj->vtable;
        D.20027 = D.20026->klass;
        D.20029 = D.20027->name;
        monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", bwords, start, desc, D.20028, D.20029);
      }
      <D.20025>:
      goto <D.18596>;
      <D.18595>:
      {
        gsize _bmap;

        bitmap_data.81 = bitmap_data;
        bitmap_data = bitmap_data.81 + 8;
        _bmap = *bitmap_data.81;
        _objptr = start_run;
        goto <D.18593>;
        <D.18592>:
        D.20031 = _bmap & 1;
        if (D.20031 != 0) goto <D.20032>; else goto <D.20033>;
        <D.20032>:
        D.20034 = *_objptr;
        if (D.20034 != 0B) goto <D.20035>; else goto <D.20036>;
        <D.20035>:
        D.20034 = *_objptr;
        D.20037 = sgen_safe_name (D.20034);
        D.20038 = D.20037 == 0B;
        D.20039 = (long int) D.20038;
        D.20040 = __builtin_expect (D.20039, 0);
        if (D.20040 != 0) goto <D.20041>; else goto <D.20042>;
        <D.20041>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 93, "sgen_safe_name (*(_objptr)) != NULL");
        <D.20042>:
        <D.20036>:
        <D.20033>:
        _bmap = _bmap >> 1;
        _objptr = _objptr + 8;
        <D.18593>:
        if (_bmap != 0) goto <D.18592>; else goto <D.18594>;
        <D.18594>:
        start_run = start_run + 512;
      }
      <D.18596>:
      bwords.82 = bwords;
      bwords = bwords.82 + -1;
      if (bwords.82 > 0) goto <D.18595>; else goto <D.18597>;
      <D.18597>:
    }
    goto <D.18540>;
    <D.18598>:
    {
      gsize * mbitmap_data;
      int mbwords;
      int el_size;
      char * e_start;
      char * e_end;

      D.20044 = vt->desc;
      mbitmap_data = sgen_get_complex_descriptor (D.20044);
      mbitmap_data.83 = mbitmap_data;
      mbitmap_data = mbitmap_data.83 + 8;
      D.20046 = *mbitmap_data.83;
      D.20047 = (unsigned int) D.20046;
      D.20048 = D.20047 + 4294967295;
      mbwords = (int) D.20048;
      D.20049 = vt->klass;
      el_size = mono_array_element_size (D.20049);
      e_start = start + 32;
      D.19961 = MEM[(struct MonoArray *)start].max_length;
      el_size.84 = (unsigned int) el_size;
      D.20051 = D.19961 * el_size.84;
      D.20052 = (sizetype) D.20051;
      e_end = e_start + D.20052;
      if (0 != 0) goto <D.20053>; else goto <D.20054>;
      <D.20053>:
      D.20044 = vt->desc;
      D.20049 = vt->klass;
      D.20055 = D.20049->name_space;
      D.20049 = vt->klass;
      D.20056 = D.20049->name;
      monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", mbwords, start, D.20044, D.20055, D.20056);
      <D.20054>:
      goto <D.18616>;
      <D.18615>:
      {
        void * * _objptr;
        gsize * bitmap_data;
        unsigned int bwords;

        _objptr = e_start;
        bitmap_data = mbitmap_data;
        bwords = (unsigned int) mbwords;
        goto <D.18613>;
        <D.18612>:
        {
          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.18610>;
          <D.18609>:
          D.20058 = _bmap & 1;
          if (D.20058 != 0) goto <D.20059>; else goto <D.20060>;
          <D.20059>:
          D.20061 = *_objptr;
          if (D.20061 != 0B) goto <D.20062>; else goto <D.20063>;
          <D.20062>:
          D.20061 = *_objptr;
          D.20064 = sgen_safe_name (D.20061);
          D.20065 = D.20064 == 0B;
          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", 102, "sgen_safe_name (*(_objptr)) != NULL");
          <D.20069>:
          <D.20063>:
          <D.20060>:
          _bmap = _bmap >> 1;
          _objptr = _objptr + 8;
          <D.18610>:
          if (_bmap != 0) goto <D.18609>; else goto <D.18611>;
          <D.18611>:
          _objptr = start_run + 512;
        }
        <D.18613>:
        bwords.86 = bwords;
        bwords = bwords.86 + 4294967295;
        if (bwords.86 != 0) goto <D.18612>; else goto <D.18614>;
        <D.18614>:
        D.20071 = (sizetype) el_size;
        e_start = e_start + D.20071;
      }
      <D.18616>:
      if (e_start < e_end) goto <D.18615>; else goto <D.18617>;
      <D.18617>:
    }
    goto <D.18540>;
    <D.18618>:
    goto <D.18540>;
    <D.18619>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 111);
    <D.18540>:
  }
}


sgen_check_whole_heap (gboolean allow_missing_pinned)
{
  struct GCMemSection * nursery_section.87;
  char * D.20075;
  char * D.20076;
  long unsigned int D.20077;
  void * D.20078;
  void (*<T2d7b>) (gboolean, gboolean, void (*IterateObjectCallbackFunc) (char *, size_t, void *), void *) D.20079;
  int broken_heap.88;
  _Bool D.20081;
  long int D.20082;
  long int D.20083;

  setup_valid_nursery_objects ();
  broken_heap = 0;
  nursery_section.87 = nursery_section;
  D.20075 = nursery_section.87->data;
  nursery_section.87 = nursery_section;
  D.20076 = nursery_section.87->end_data;
  D.20077 = (long unsigned int) allow_missing_pinned;
  D.20078 = (void *) D.20077;
  sgen_scan_area_with_callback (D.20075, D.20076, verify_object_pointers_callback, D.20078, 0);
  D.20079 = major_collector.iterate_objects;
  D.20077 = (long unsigned int) allow_missing_pinned;
  D.20078 = (void *) D.20077;
  D.20079 (1, 1, verify_object_pointers_callback, D.20078);
  D.20077 = (long unsigned int) allow_missing_pinned;
  D.20078 = (void *) D.20077;
  sgen_los_iterate_objects (verify_object_pointers_callback, D.20078);
  broken_heap.88 = broken_heap;
  D.20081 = broken_heap.88 != 0;
  D.20082 = (long int) D.20081;
  D.20083 = __builtin_expect (D.20082, 0);
  if (D.20083 != 0) goto <D.20084>; else goto <D.20085>;
  <D.20084>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-debug.c", 445, "!broken_heap");
  <D.20085>:
}


verify_object_pointers_callback (char * start, size_t size, void * data)
{
  long int data.89;
  long unsigned int D.20087;
  long unsigned int D.20088;
  long unsigned int D.20089;
  long unsigned int D.20090;
  long unsigned int D.20093;
  long unsigned int D.20094;
  long unsigned int D.20095;
  long unsigned int D.20096;
  long unsigned int D.20097;
  long unsigned int D.20098;
  char * D.20099;
  int D.20102;
  int D.20106;
  void * D.20109;
  int D.20110;
  struct SgenRemeberedSet * D.20115;
  gboolean (*<T2d21>) (char *) D.20116;
  int D.20117;
  int D.20120;
  long unsigned int D.20124;
  long unsigned int D.20125;
  int D.20128;
  int D.20132;
  int D.20135;
  struct SgenRemeberedSet * D.20140;
  gboolean (*<T2d21>) (char *) D.20141;
  int D.20142;
  int D.20145;
  long unsigned int D.20149;
  long unsigned int D.20150;
  int D.20151;
  char * D.20152;
  int D.20155;
  int D.20159;
  void * D.20162;
  int D.20163;
  struct SgenRemeberedSet * D.20168;
  gboolean (*<T2d21>) (char *) D.20169;
  int D.20170;
  int D.20173;
  long unsigned int D.20177;
  long unsigned int D.20178;
  long unsigned int D.20179;
  long unsigned int D.20180;
  int D.20181;
  int D.20184;
  int D.20188;
  int D.20191;
  struct SgenRemeberedSet * D.20196;
  gboolean (*<T2d21>) (char *) D.20197;
  int D.20198;
  int D.20201;
  long unsigned int D.20205;
  long unsigned int D.20208;
  int D.20209;
  int D.20210;
  unsigned int D.20213;
  unsigned int el_size.90;
  unsigned int D.20215;
  sizetype D.20216;
  char * D.20217;
  int D.20220;
  int D.20224;
  void * D.20227;
  int D.20228;
  struct SgenRemeberedSet * D.20233;
  gboolean (*<T2d21>) (char *) D.20234;
  int D.20235;
  int D.20238;
  long unsigned int D.20242;
  long unsigned int D.20243;
  int D.20247;
  int D.20248;
  long unsigned int D.20249;
  long unsigned int D.20250;
  char * D.20251;
  sizetype D.20252;
  char * D.20253;
  int D.20256;
  long unsigned int D.20259;
  long unsigned int D.20260;
  char * * D.20261;
  int D.20263;
  void * D.20266;
  void * D.20267;
  int D.20268;
  struct SgenRemeberedSet * D.20273;
  gboolean (*<T2d21>) (char *) D.20274;
  char * D.20275;
  int D.20276;
  void * * D.20279;
  void * D.20280;
  int D.20281;
  long unsigned int D.20285;
  long unsigned int D.20286;
  sizetype D.20287;
  long unsigned int D.20291;
  char * D.20294;
  int D.20297;
  int D.20301;
  void * D.20304;
  int D.20305;
  struct SgenRemeberedSet * D.20310;
  gboolean (*<T2d21>) (char *) D.20311;
  int D.20312;
  int D.20315;
  long unsigned int D.20319;
  long unsigned int D.20320;
  long unsigned int D.20321;
  char * D.20324;
  int D.20327;
  int D.20331;
  void * D.20334;
  int D.20335;
  struct SgenRemeberedSet * D.20340;
  gboolean (*<T2d21>) (char *) D.20341;
  int D.20342;
  int D.20345;
  long unsigned int D.20349;
  long unsigned int D.20350;
  long unsigned int D.20351;
  unsigned int D.20352;
  unsigned int D.20353;
  struct MonoVTable * D.20356;
  struct MonoClass * D.20357;
  const char * D.20358;
  const char * D.20359;
  gsize * bitmap_data.91;
  long unsigned int D.20361;
  char * D.20364;
  int D.20367;
  int D.20371;
  void * D.20374;
  int D.20375;
  struct SgenRemeberedSet * D.20380;
  gboolean (*<T2d21>) (char *) D.20381;
  int D.20382;
  int D.20385;
  long unsigned int D.20389;
  long unsigned int D.20390;
  int bwords.92;
  long unsigned int D.20392;
  gsize * mbitmap_data.93;
  long unsigned int D.20394;
  unsigned int D.20395;
  unsigned int D.20396;
  struct MonoClass * D.20397;
  unsigned int el_size.94;
  unsigned int D.20399;
  sizetype D.20400;
  const char * D.20403;
  const char * D.20404;
  gsize * bitmap_data.95;
  long unsigned int D.20406;
  char * D.20409;
  int D.20412;
  int D.20416;
  void * D.20419;
  int D.20420;
  struct SgenRemeberedSet * D.20425;
  gboolean (*<T2d21>) (char *) D.20426;
  int D.20427;
  int D.20430;
  long unsigned int D.20434;
  long unsigned int D.20435;
  unsigned int bwords.96;
  sizetype D.20437;
  gboolean allow_missing_pinned;

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

    D.20087 = MEM[(mword *)start];
    D.20088 = D.20087 & 18446744073709551612;
    vt = (struct GCVTable *) D.20088;
    desc = vt->desc;
    D.20089 = desc & 7;
    switch (D.20089) <default: <D.18757>, case 1: <D.18672>, case 2: <D.18679>, case 3: <D.18723>, case 4: <D.18687>, case 5: <D.18717>, case 6: <D.18736>, case 7: <D.18756>>
    <D.18672>:
    D.20090 = desc & 4294901760;
    if (D.20090 != 0) goto <D.20091>; else goto <D.20092>;
    <D.20091>:
    {
      void * * _objptr_end;
      void * * _objptr;

      _objptr = start;
      D.20093 = desc >> 16;
      D.20094 = D.20093 & 255;
      D.20095 = D.20094 * 8;
      _objptr = _objptr + D.20095;
      D.20096 = desc >> 24;
      D.20097 = D.20096 & 255;
      D.20098 = D.20097 * 8;
      _objptr_end = _objptr + D.20098;
      D.20099 = MEM[(char * *)_objptr];
      if (D.20099 != 0B) goto <D.20100>; else goto <D.20101>;
      <D.20100>:
      D.20099 = MEM[(char * *)_objptr];
      D.20102 = is_valid_object_pointer (D.20099);
      if (D.20102 == 0) goto <D.20103>; else goto <D.20104>;
      <D.20103>:
      bad_pointer_spew (start, _objptr);
      goto <D.20105>;
      <D.20104>:
      D.20106 = sgen_ptr_in_nursery (start);
      if (D.20106 == 0) goto <D.20107>; else goto <D.20108>;
      <D.20107>:
      D.20109 = *_objptr;
      D.20110 = sgen_ptr_in_nursery (D.20109);
      if (D.20110 != 0) goto <D.20111>; else goto <D.20112>;
      <D.20111>:
      D.20115 = sgen_get_remset ();
      D.20116 = D.20115->find_address;
      D.20117 = D.20116 (_objptr);
      if (D.20117 == 0) goto <D.20118>; else goto <D.20119>;
      <D.20118>:
      D.20109 = *_objptr;
      D.20120 = sgen_cement_lookup (D.20109);
      if (D.20120 == 0) goto <D.20121>; else goto <D.20122>;
      <D.20121>:
      if (allow_missing_pinned == 0) goto <D.20113>; else goto <D.20123>;
      <D.20123>:
      D.20109 = *_objptr;
      D.20124 = MEM[(mword *)D.20109];
      D.20125 = D.20124 & 2;
      if (D.20125 == 0) goto <D.20113>; else goto <D.20114>;
      <D.20113>:
      missing_remset_spew (start, _objptr);
      <D.20114>:
      <D.20122>:
      <D.20119>:
      <D.20112>:
      <D.20108>:
      <D.20105>:
      <D.20101>:
      _objptr = _objptr + 8;
      goto <D.18676>;
      <D.18675>:
      D.20099 = MEM[(char * *)_objptr];
      if (D.20099 != 0B) goto <D.20126>; else goto <D.20127>;
      <D.20126>:
      D.20099 = MEM[(char * *)_objptr];
      D.20128 = is_valid_object_pointer (D.20099);
      if (D.20128 == 0) goto <D.20129>; else goto <D.20130>;
      <D.20129>:
      bad_pointer_spew (start, _objptr);
      goto <D.20131>;
      <D.20130>:
      D.20132 = sgen_ptr_in_nursery (start);
      if (D.20132 == 0) goto <D.20133>; else goto <D.20134>;
      <D.20133>:
      D.20109 = *_objptr;
      D.20135 = sgen_ptr_in_nursery (D.20109);
      if (D.20135 != 0) goto <D.20136>; else goto <D.20137>;
      <D.20136>:
      D.20140 = sgen_get_remset ();
      D.20141 = D.20140->find_address;
      D.20142 = D.20141 (_objptr);
      if (D.20142 == 0) goto <D.20143>; else goto <D.20144>;
      <D.20143>:
      D.20109 = *_objptr;
      D.20145 = sgen_cement_lookup (D.20109);
      if (D.20145 == 0) goto <D.20146>; else goto <D.20147>;
      <D.20146>:
      if (allow_missing_pinned == 0) goto <D.20138>; else goto <D.20148>;
      <D.20148>:
      D.20109 = *_objptr;
      D.20124 = MEM[(mword *)D.20109];
      D.20125 = D.20124 & 2;
      if (D.20125 == 0) goto <D.20138>; else goto <D.20139>;
      <D.20138>:
      missing_remset_spew (start, _objptr);
      <D.20139>:
      <D.20147>:
      <D.20144>:
      <D.20137>:
      <D.20134>:
      <D.20131>:
      <D.20127>:
      _objptr = _objptr + 8;
      <D.18676>:
      if (_objptr < _objptr_end) goto <D.18675>; else goto <D.18677>;
      <D.18677>:
    }
    <D.20092>:
    goto <D.18678>;
    <D.18679>:
    {
      void * * _objptr;
      gsize _bmap;

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

        _index = __builtin_ctzl (_bmap);
        D.20149 = (long unsigned int) _index;
        D.20150 = D.20149 * 8;
        _objptr = _objptr + D.20150;
        D.20151 = _index + 1;
        _bmap = _bmap >> D.20151;
        D.20152 = MEM[(char * *)_objptr];
        if (D.20152 != 0B) goto <D.20153>; else goto <D.20154>;
        <D.20153>:
        D.20152 = MEM[(char * *)_objptr];
        D.20155 = is_valid_object_pointer (D.20152);
        if (D.20155 == 0) goto <D.20156>; else goto <D.20157>;
        <D.20156>:
        bad_pointer_spew (start, _objptr);
        goto <D.20158>;
        <D.20157>:
        D.20159 = sgen_ptr_in_nursery (start);
        if (D.20159 == 0) goto <D.20160>; else goto <D.20161>;
        <D.20160>:
        D.20162 = *_objptr;
        D.20163 = sgen_ptr_in_nursery (D.20162);
        if (D.20163 != 0) goto <D.20164>; else goto <D.20165>;
        <D.20164>:
        D.20168 = sgen_get_remset ();
        D.20169 = D.20168->find_address;
        D.20170 = D.20169 (_objptr);
        if (D.20170 == 0) goto <D.20171>; else goto <D.20172>;
        <D.20171>:
        D.20162 = *_objptr;
        D.20173 = sgen_cement_lookup (D.20162);
        if (D.20173 == 0) goto <D.20174>; else goto <D.20175>;
        <D.20174>:
        if (allow_missing_pinned == 0) goto <D.20166>; else goto <D.20176>;
        <D.20176>:
        D.20162 = *_objptr;
        D.20177 = MEM[(mword *)D.20162];
        D.20178 = D.20177 & 2;
        if (D.20178 == 0) goto <D.20166>; else goto <D.20167>;
        <D.20166>:
        missing_remset_spew (start, _objptr);
        <D.20167>:
        <D.20175>:
        <D.20172>:
        <D.20165>:
        <D.20161>:
        <D.20158>:
        <D.20154>:
        _objptr = _objptr + 8;
      }
      goto <D.18685>;
      <D.18684>:
      {
        int _index;

        _index = __builtin_ctzl (_bmap);
        D.20179 = (long unsigned int) _index;
        D.20180 = D.20179 * 8;
        _objptr = _objptr + D.20180;
        D.20181 = _index + 1;
        _bmap = _bmap >> D.20181;
        D.20152 = MEM[(char * *)_objptr];
        if (D.20152 != 0B) goto <D.20182>; else goto <D.20183>;
        <D.20182>:
        D.20152 = MEM[(char * *)_objptr];
        D.20184 = is_valid_object_pointer (D.20152);
        if (D.20184 == 0) goto <D.20185>; else goto <D.20186>;
        <D.20185>:
        bad_pointer_spew (start, _objptr);
        goto <D.20187>;
        <D.20186>:
        D.20188 = sgen_ptr_in_nursery (start);
        if (D.20188 == 0) goto <D.20189>; else goto <D.20190>;
        <D.20189>:
        D.20162 = *_objptr;
        D.20191 = sgen_ptr_in_nursery (D.20162);
        if (D.20191 != 0) goto <D.20192>; else goto <D.20193>;
        <D.20192>:
        D.20196 = sgen_get_remset ();
        D.20197 = D.20196->find_address;
        D.20198 = D.20197 (_objptr);
        if (D.20198 == 0) goto <D.20199>; else goto <D.20200>;
        <D.20199>:
        D.20162 = *_objptr;
        D.20201 = sgen_cement_lookup (D.20162);
        if (D.20201 == 0) goto <D.20202>; else goto <D.20203>;
        <D.20202>:
        if (allow_missing_pinned == 0) goto <D.20194>; else goto <D.20204>;
        <D.20204>:
        D.20162 = *_objptr;
        D.20177 = MEM[(mword *)D.20162];
        D.20178 = D.20177 & 2;
        if (D.20178 == 0) goto <D.20194>; else goto <D.20195>;
        <D.20194>:
        missing_remset_spew (start, _objptr);
        <D.20195>:
        <D.20203>:
        <D.20200>:
        <D.20193>:
        <D.20190>:
        <D.20187>:
        <D.20183>:
        _objptr = _objptr + 8;
      }
      <D.18685>:
      if (_bmap != 0) goto <D.18684>; else goto <D.18686>;
      <D.18686>:
    }
    goto <D.18678>;
    <D.18687>:
    D.20205 = desc & 4294950912;
    if (D.20205 != 0) goto <D.20206>; else goto <D.20207>;
    <D.20206>:
    {
      int el_size;
      int etype;

      D.20208 = desc >> 3;
      D.20209 = (int) D.20208;
      el_size = D.20209 & 1023;
      D.20210 = (int) desc;
      etype = D.20210 & 49152;
      if (etype == 16384) goto <D.20211>; else goto <D.20212>;
      <D.20211>:
      {
        void * * p;
        void * * end_refs;

        p = start + 32;
        D.20213 = MEM[(struct MonoArray *)start].max_length;
        el_size.90 = (unsigned int) el_size;
        D.20215 = D.20213 * el_size.90;
        D.20216 = (sizetype) D.20215;
        end_refs = p + D.20216;
        goto <D.18693>;
        <D.18692>:
        D.20217 = MEM[(char * *)p];
        if (D.20217 != 0B) goto <D.20218>; else goto <D.20219>;
        <D.20218>:
        D.20217 = MEM[(char * *)p];
        D.20220 = is_valid_object_pointer (D.20217);
        if (D.20220 == 0) goto <D.20221>; else goto <D.20222>;
        <D.20221>:
        bad_pointer_spew (start, p);
        goto <D.20223>;
        <D.20222>:
        D.20224 = sgen_ptr_in_nursery (start);
        if (D.20224 == 0) goto <D.20225>; else goto <D.20226>;
        <D.20225>:
        D.20227 = *p;
        D.20228 = sgen_ptr_in_nursery (D.20227);
        if (D.20228 != 0) goto <D.20229>; else goto <D.20230>;
        <D.20229>:
        D.20233 = sgen_get_remset ();
        D.20234 = D.20233->find_address;
        D.20235 = D.20234 (p);
        if (D.20235 == 0) goto <D.20236>; else goto <D.20237>;
        <D.20236>:
        D.20227 = *p;
        D.20238 = sgen_cement_lookup (D.20227);
        if (D.20238 == 0) goto <D.20239>; else goto <D.20240>;
        <D.20239>:
        if (allow_missing_pinned == 0) goto <D.20231>; else goto <D.20241>;
        <D.20241>:
        D.20227 = *p;
        D.20242 = MEM[(mword *)D.20227];
        D.20243 = D.20242 & 2;
        if (D.20243 == 0) goto <D.20231>; else goto <D.20232>;
        <D.20231>:
        missing_remset_spew (start, p);
        <D.20232>:
        <D.20240>:
        <D.20237>:
        <D.20230>:
        <D.20226>:
        <D.20223>:
        <D.20219>:
        p = p + 8;
        <D.18693>:
        if (p < end_refs) goto <D.18692>; else goto <D.18694>;
        <D.18694>:
      }
      goto <D.20244>;
      <D.20212>:
      if (etype == 32768) goto <D.20245>; else goto <D.20246>;
      <D.20245>:
      {
        int offset;
        int num_refs;
        char * e_start;
        char * e_end;

        D.20093 = desc >> 16;
        D.20247 = (int) D.20093;
        offset = D.20247 & 255;
        D.20096 = desc >> 24;
        D.20248 = (int) D.20096;
        num_refs = D.20248 & 255;
        e_start = start + 32;
        D.20213 = MEM[(struct MonoArray *)start].max_length;
        el_size.90 = (unsigned int) el_size;
        D.20215 = D.20213 * el_size.90;
        D.20216 = (sizetype) D.20215;
        e_end = e_start + D.20216;
        goto <D.18705>;
        <D.18704>:
        {
          void * * p;
          int i;

          p = e_start;
          D.20249 = (long unsigned int) offset;
          D.20250 = D.20249 * 8;
          p = p + D.20250;
          i = 0;
          goto <D.18702>;
          <D.18701>:
          D.20251 = MEM[(char * *)p];
          D.20252 = (sizetype) i;
          D.20253 = D.20251 + D.20252;
          if (D.20253 != 0B) goto <D.20254>; else goto <D.20255>;
          <D.20254>:
          D.20251 = MEM[(char * *)p];
          D.20252 = (sizetype) i;
          D.20253 = D.20251 + D.20252;
          D.20256 = is_valid_object_pointer (D.20253);
          if (D.20256 == 0) goto <D.20257>; else goto <D.20258>;
          <D.20257>:
          D.20259 = (long unsigned int) i;
          D.20260 = D.20259 * 8;
          D.20261 = p + D.20260;
          bad_pointer_spew (start, D.20261);
          goto <D.20262>;
          <D.20258>:
          D.20263 = sgen_ptr_in_nursery (start);
          if (D.20263 == 0) goto <D.20264>; else goto <D.20265>;
          <D.20264>:
          D.20266 = *p;
          D.20252 = (sizetype) i;
          D.20267 = D.20266 + D.20252;
          D.20268 = sgen_ptr_in_nursery (D.20267);
          if (D.20268 != 0) goto <D.20269>; else goto <D.20270>;
          <D.20269>:
          D.20273 = sgen_get_remset ();
          D.20274 = D.20273->find_address;
          D.20259 = (long unsigned int) i;
          D.20260 = D.20259 * 8;
          D.20275 = p + D.20260;
          D.20276 = D.20274 (D.20275);
          if (D.20276 == 0) goto <D.20277>; else goto <D.20278>;
          <D.20277>:
          D.20259 = (long unsigned int) i;
          D.20260 = D.20259 * 8;
          D.20279 = p + D.20260;
          D.20280 = *D.20279;
          D.20281 = sgen_cement_lookup (D.20280);
          if (D.20281 == 0) goto <D.20282>; else goto <D.20283>;
          <D.20282>:
          if (allow_missing_pinned == 0) goto <D.20271>; else goto <D.20284>;
          <D.20284>:
          D.20259 = (long unsigned int) i;
          D.20260 = D.20259 * 8;
          D.20279 = p + D.20260;
          D.20280 = *D.20279;
          D.20285 = MEM[(mword *)D.20280];
          D.20286 = D.20285 & 2;
          if (D.20286 == 0) goto <D.20271>; else goto <D.20272>;
          <D.20271>:
          D.20259 = (long unsigned int) i;
          D.20260 = D.20259 * 8;
          D.20261 = p + D.20260;
          missing_remset_spew (start, D.20261);
          <D.20272>:
          <D.20283>:
          <D.20278>:
          <D.20270>:
          <D.20265>:
          <D.20262>:
          <D.20255>:
          i = i + 1;
          <D.18702>:
          if (i < num_refs) goto <D.18701>; else goto <D.18703>;
          <D.18703>:
          D.20287 = (sizetype) el_size;
          e_start = e_start + D.20287;
        }
        <D.18705>:
        if (e_start < e_end) goto <D.18704>; else goto <D.18706>;
        <D.18706>:
      }
      goto <D.20288>;
      <D.20246>:
      if (etype == 49152) goto <D.20289>; else goto <D.20290>;
      <D.20289>:
      {
        char * e_start;
        char * e_end;

        e_start = start + 32;
        D.20213 = MEM[(struct MonoArray *)start].max_length;
        el_size.90 = (unsigned int) el_size;
        D.20215 = D.20213 * el_size.90;
        D.20216 = (sizetype) D.20215;
        e_end = e_start + D.20216;
        goto <D.18715>;
        <D.18714>:
        {
          void * * p;
          gsize _bmap;

          p = e_start;
          _bmap = desc >> 16;
          goto <D.18712>;
          <D.18711>:
          D.20291 = _bmap & 1;
          if (D.20291 != 0) goto <D.20292>; else goto <D.20293>;
          <D.20292>:
          D.20294 = MEM[(char * *)p];
          if (D.20294 != 0B) goto <D.20295>; else goto <D.20296>;
          <D.20295>:
          D.20294 = MEM[(char * *)p];
          D.20297 = is_valid_object_pointer (D.20294);
          if (D.20297 == 0) goto <D.20298>; else goto <D.20299>;
          <D.20298>:
          bad_pointer_spew (start, p);
          goto <D.20300>;
          <D.20299>:
          D.20301 = sgen_ptr_in_nursery (start);
          if (D.20301 == 0) goto <D.20302>; else goto <D.20303>;
          <D.20302>:
          D.20304 = *p;
          D.20305 = sgen_ptr_in_nursery (D.20304);
          if (D.20305 != 0) goto <D.20306>; else goto <D.20307>;
          <D.20306>:
          D.20310 = sgen_get_remset ();
          D.20311 = D.20310->find_address;
          D.20312 = D.20311 (p);
          if (D.20312 == 0) goto <D.20313>; else goto <D.20314>;
          <D.20313>:
          D.20304 = *p;
          D.20315 = sgen_cement_lookup (D.20304);
          if (D.20315 == 0) goto <D.20316>; else goto <D.20317>;
          <D.20316>:
          if (allow_missing_pinned == 0) goto <D.20308>; else goto <D.20318>;
          <D.20318>:
          D.20304 = *p;
          D.20319 = MEM[(mword *)D.20304];
          D.20320 = D.20319 & 2;
          if (D.20320 == 0) goto <D.20308>; else goto <D.20309>;
          <D.20308>:
          missing_remset_spew (start, p);
          <D.20309>:
          <D.20317>:
          <D.20314>:
          <D.20307>:
          <D.20303>:
          <D.20300>:
          <D.20296>:
          <D.20293>:
          _bmap = _bmap >> 1;
          p = p + 8;
          <D.18712>:
          if (_bmap != 0) goto <D.18711>; else goto <D.18713>;
          <D.18713>:
          D.20287 = (sizetype) el_size;
          e_start = e_start + D.20287;
        }
        <D.18715>:
        if (e_start < e_end) goto <D.18714>; else goto <D.18716>;
        <D.18716>:
      }
      <D.20290>:
      <D.20288>:
      <D.20244>:
    }
    <D.20207>:
    goto <D.18678>;
    <D.18717>:
    {
      void * * _objptr;
      gsize _bmap;

      _objptr = start;
      _bmap = desc >> 3;
      _objptr = _objptr + 16;
      goto <D.18721>;
      <D.18720>:
      D.20321 = _bmap & 1;
      if (D.20321 != 0) goto <D.20322>; else goto <D.20323>;
      <D.20322>:
      D.20324 = MEM[(char * *)_objptr];
      if (D.20324 != 0B) goto <D.20325>; else goto <D.20326>;
      <D.20325>:
      D.20324 = MEM[(char * *)_objptr];
      D.20327 = is_valid_object_pointer (D.20324);
      if (D.20327 == 0) goto <D.20328>; else goto <D.20329>;
      <D.20328>:
      bad_pointer_spew (start, _objptr);
      goto <D.20330>;
      <D.20329>:
      D.20331 = sgen_ptr_in_nursery (start);
      if (D.20331 == 0) goto <D.20332>; else goto <D.20333>;
      <D.20332>:
      D.20334 = *_objptr;
      D.20335 = sgen_ptr_in_nursery (D.20334);
      if (D.20335 != 0) goto <D.20336>; else goto <D.20337>;
      <D.20336>:
      D.20340 = sgen_get_remset ();
      D.20341 = D.20340->find_address;
      D.20342 = D.20341 (_objptr);
      if (D.20342 == 0) goto <D.20343>; else goto <D.20344>;
      <D.20343>:
      D.20334 = *_objptr;
      D.20345 = sgen_cement_lookup (D.20334);
      if (D.20345 == 0) goto <D.20346>; else goto <D.20347>;
      <D.20346>:
      if (allow_missing_pinned == 0) goto <D.20338>; else goto <D.20348>;
      <D.20348>:
      D.20334 = *_objptr;
      D.20349 = MEM[(mword *)D.20334];
      D.20350 = D.20349 & 2;
      if (D.20350 == 0) goto <D.20338>; else goto <D.20339>;
      <D.20338>:
      missing_remset_spew (start, _objptr);
      <D.20339>:
      <D.20347>:
      <D.20344>:
      <D.20337>:
      <D.20333>:
      <D.20330>:
      <D.20326>:
      <D.20323>:
      _bmap = _bmap >> 1;
      _objptr = _objptr + 8;
      <D.18721>:
      if (_bmap != 0) goto <D.18720>; else goto <D.18722>;
      <D.18722>:
    }
    goto <D.18678>;
    <D.18723>:
    {
      void * * _objptr;
      gsize * bitmap_data;
      int bwords;
      void * * start_run;

      _objptr = start;
      bitmap_data = sgen_get_complex_descriptor (desc);
      D.20351 = *bitmap_data;
      D.20352 = (unsigned int) D.20351;
      D.20353 = D.20352 + 4294967295;
      bwords = (int) D.20353;
      start_run = _objptr;
      bitmap_data = bitmap_data + 8;
      if (0 != 0) goto <D.20354>; else goto <D.20355>;
      <D.20354>:
      {
        struct MonoObject * myobj;

        myobj = start;
        D.20356 = myobj->vtable;
        D.20357 = D.20356->klass;
        D.20358 = D.20357->name_space;
        D.20356 = myobj->vtable;
        D.20357 = D.20356->klass;
        D.20359 = D.20357->name;
        monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", bwords, start, desc, D.20358, D.20359);
      }
      <D.20355>:
      goto <D.18734>;
      <D.18733>:
      {
        gsize _bmap;

        bitmap_data.91 = bitmap_data;
        bitmap_data = bitmap_data.91 + 8;
        _bmap = *bitmap_data.91;
        _objptr = start_run;
        goto <D.18731>;
        <D.18730>:
        D.20361 = _bmap & 1;
        if (D.20361 != 0) goto <D.20362>; else goto <D.20363>;
        <D.20362>:
        D.20364 = MEM[(char * *)_objptr];
        if (D.20364 != 0B) goto <D.20365>; else goto <D.20366>;
        <D.20365>:
        D.20364 = MEM[(char * *)_objptr];
        D.20367 = is_valid_object_pointer (D.20364);
        if (D.20367 == 0) goto <D.20368>; else goto <D.20369>;
        <D.20368>:
        bad_pointer_spew (start, _objptr);
        goto <D.20370>;
        <D.20369>:
        D.20371 = sgen_ptr_in_nursery (start);
        if (D.20371 == 0) goto <D.20372>; else goto <D.20373>;
        <D.20372>:
        D.20374 = *_objptr;
        D.20375 = sgen_ptr_in_nursery (D.20374);
        if (D.20375 != 0) goto <D.20376>; else goto <D.20377>;
        <D.20376>:
        D.20380 = sgen_get_remset ();
        D.20381 = D.20380->find_address;
        D.20382 = D.20381 (_objptr);
        if (D.20382 == 0) goto <D.20383>; else goto <D.20384>;
        <D.20383>:
        D.20374 = *_objptr;
        D.20385 = sgen_cement_lookup (D.20374);
        if (D.20385 == 0) goto <D.20386>; else goto <D.20387>;
        <D.20386>:
        if (allow_missing_pinned == 0) goto <D.20378>; else goto <D.20388>;
        <D.20388>:
        D.20374 = *_objptr;
        D.20389 = MEM[(mword *)D.20374];
        D.20390 = D.20389 & 2;
        if (D.20390 == 0) goto <D.20378>; else goto <D.20379>;
        <D.20378>:
        missing_remset_spew (start, _objptr);
        <D.20379>:
        <D.20387>:
        <D.20384>:
        <D.20377>:
        <D.20373>:
        <D.20370>:
        <D.20366>:
        <D.20363>:
        _bmap = _bmap >> 1;
        _objptr = _objptr + 8;
        <D.18731>:
        if (_bmap != 0) goto <D.18730>; else goto <D.18732>;
        <D.18732>:
        start_run = start_run + 512;
      }
      <D.18734>:
      bwords.92 = bwords;
      bwords = bwords.92 + -1;
      if (bwords.92 > 0) goto <D.18733>; else goto <D.18735>;
      <D.18735>:
    }
    goto <D.18678>;
    <D.18736>:
    {
      gsize * mbitmap_data;
      int mbwords;
      int el_size;
      char * e_start;
      char * e_end;

      D.20392 = vt->desc;
      mbitmap_data = sgen_get_complex_descriptor (D.20392);
      mbitmap_data.93 = mbitmap_data;
      mbitmap_data = mbitmap_data.93 + 8;
      D.20394 = *mbitmap_data.93;
      D.20395 = (unsigned int) D.20394;
      D.20396 = D.20395 + 4294967295;
      mbwords = (int) D.20396;
      D.20397 = vt->klass;
      el_size = mono_array_element_size (D.20397);
      e_start = start + 32;
      D.20213 = MEM[(struct MonoArray *)start].max_length;
      el_size.94 = (unsigned int) el_size;
      D.20399 = D.20213 * el_size.94;
      D.20400 = (sizetype) D.20399;
      e_end = e_start + D.20400;
      if (0 != 0) goto <D.20401>; else goto <D.20402>;
      <D.20401>:
      D.20392 = vt->desc;
      D.20397 = vt->klass;
      D.20403 = D.20397->name_space;
      D.20397 = vt->klass;
      D.20404 = D.20397->name;
      monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", mbwords, start, D.20392, D.20403, D.20404);
      <D.20402>:
      goto <D.18754>;
      <D.18753>:
      {
        void * * _objptr;
        gsize * bitmap_data;
        unsigned int bwords;

        _objptr = e_start;
        bitmap_data = mbitmap_data;
        bwords = (unsigned int) mbwords;
        goto <D.18751>;
        <D.18750>:
        {
          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.18748>;
          <D.18747>:
          D.20406 = _bmap & 1;
          if (D.20406 != 0) goto <D.20407>; else goto <D.20408>;
          <D.20407>:
          D.20409 = MEM[(char * *)_objptr];
          if (D.20409 != 0B) goto <D.20410>; else goto <D.20411>;
          <D.20410>:
          D.20409 = MEM[(char * *)_objptr];
          D.20412 = is_valid_object_pointer (D.20409);
          if (D.20412 == 0) goto <D.20413>; else goto <D.20414>;
          <D.20413>:
          bad_pointer_spew (start, _objptr);
          goto <D.20415>;
          <D.20414>:
          D.20416 = sgen_ptr_in_nursery (start);
          if (D.20416 == 0) goto <D.20417>; else goto <D.20418>;
          <D.20417>:
          D.20419 = *_objptr;
          D.20420 = sgen_ptr_in_nursery (D.20419);
          if (D.20420 != 0) goto <D.20421>; else goto <D.20422>;
          <D.20421>:
          D.20425 = sgen_get_remset ();
          D.20426 = D.20425->find_address;
          D.20427 = D.20426 (_objptr);
          if (D.20427 == 0) goto <D.20428>; else goto <D.20429>;
          <D.20428>:
          D.20419 = *_objptr;
          D.20430 = sgen_cement_lookup (D.20419);
          if (D.20430 == 0) goto <D.20431>; else goto <D.20432>;
          <D.20431>:
          if (allow_missing_pinned == 0) goto <D.20423>; else goto <D.20433>;
          <D.20433>:
          D.20419 = *_objptr;
          D.20434 = MEM[(mword *)D.20419];
          D.20435 = D.20434 & 2;
          if (D.20435 == 0) goto <D.20423>; else goto <D.20424>;
          <D.20423>:
          missing_remset_spew (start, _objptr);
          <D.20424>:
          <D.20432>:
          <D.20429>:
          <D.20422>:
          <D.20418>:
          <D.20415>:
          <D.20411>:
          <D.20408>:
          _bmap = _bmap >> 1;
          _objptr = _objptr + 8;
          <D.18748>:
          if (_bmap != 0) goto <D.18747>; else goto <D.18749>;
          <D.18749>:
          _objptr = start_run + 512;
        }
        <D.18751>:
        bwords.96 = bwords;
        bwords = bwords.96 + 4294967295;
        if (bwords.96 != 0) goto <D.18750>; else goto <D.18752>;
        <D.18752>:
        D.20437 = (sizetype) el_size;
        e_start = e_start + D.20437;
      }
      <D.18754>:
      if (e_start < e_end) goto <D.18753>; else goto <D.18755>;
      <D.18755>:
    }
    goto <D.18678>;
    <D.18756>:
    goto <D.18678>;
    <D.18757>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 111);
    <D.18678>:
  }
}


is_valid_object_pointer (char * object)
{
  int D.20439;
  gboolean D.20442;
  int D.20443;
  gboolean (*<T2d21>) (char *) D.20446;
  int D.20447;

  D.20439 = sgen_ptr_in_nursery (object);
  if (D.20439 != 0) goto <D.20440>; else goto <D.20441>;
  <D.20440>:
  D.20442 = find_object_in_nursery_dump (object);
  return D.20442;
  <D.20441>:
  D.20443 = sgen_los_is_valid_object (object);
  if (D.20443 != 0) goto <D.20444>; else goto <D.20445>;
  <D.20444>:
  D.20442 = 1;
  return D.20442;
  <D.20445>:
  D.20446 = major_collector.is_valid_object;
  D.20447 = D.20446 (object);
  if (D.20447 != 0) goto <D.20448>; else goto <D.20449>;
  <D.20448>:
  D.20442 = 1;
  return D.20442;
  <D.20449>:
  D.20442 = 0;
  return D.20442;
}


find_object_in_nursery_dump (char * object)
{
  int D.20451;
  int D.20452;
  char * * valid_nursery_objects.97;
  long unsigned int D.20454;
  long unsigned int D.20455;
  char * * D.20456;
  char * D.20457;
  gboolean D.20460;
  _Bool D.20464;
  long int D.20465;
  long int D.20466;
  int first;
  int last;

  first = 0;
  last = valid_nursery_object_count;
  goto <D.18638>;
  <D.18637>:
  {
    int middle;

    D.20451 = last - first;
    D.20452 = D.20451 >> 1;
    middle = D.20452 + first;
    valid_nursery_objects.97 = valid_nursery_objects;
    D.20454 = (long unsigned int) middle;
    D.20455 = D.20454 * 8;
    D.20456 = valid_nursery_objects.97 + D.20455;
    D.20457 = *D.20456;
    if (D.20457 == object) goto <D.20458>; else goto <D.20459>;
    <D.20458>:
    D.20460 = 1;
    return D.20460;
    <D.20459>:
    valid_nursery_objects.97 = valid_nursery_objects;
    D.20454 = (long unsigned int) middle;
    D.20455 = D.20454 * 8;
    D.20456 = valid_nursery_objects.97 + D.20455;
    D.20457 = *D.20456;
    if (D.20457 > object) goto <D.20461>; else goto <D.20462>;
    <D.20461>:
    last = middle;
    goto <D.20463>;
    <D.20462>:
    first = middle + 1;
    <D.20463>:
  }
  <D.18638>:
  if (first < last) goto <D.18637>; else goto <D.18639>;
  <D.18639>:
  D.20464 = first != last;
  D.20465 = (long int) D.20464;
  D.20466 = __builtin_expect (D.20465, 0);
  if (D.20466 != 0) goto <D.20467>; else goto <D.20468>;
  <D.20467>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-debug.c", 337, "first == last");
  <D.20468>:
  D.20460 = 0;
  return D.20460;
}


bad_pointer_spew (char * obj, char * * slot)
{
  long unsigned int D.20470;
  long unsigned int D.20471;
  int gc_debug_level.98;
  _Bool D.20473;
  long int D.20474;
  long int D.20475;
  struct FILE * gc_debug_file.99;
  long int slot.100;
  long int obj.101;
  long int D.20481;
  struct MonoClass * D.20482;
  const char * D.20483;
  const char * D.20484;
  char * ptr;
  struct MonoVTable * vtable;

  ptr = *slot;
  D.20470 = MEM[(mword *)obj];
  D.20471 = D.20470 & 18446744073709551612;
  vtable = (struct MonoVTable *) D.20471;
  gc_debug_level.98 = gc_debug_level;
  D.20473 = gc_debug_level.98 >= 0;
  D.20474 = (long int) D.20473;
  D.20475 = __builtin_expect (D.20474, 0);
  if (D.20475 != 0) goto <D.20476>; else goto <D.20477>;
  <D.20476>:
  gc_debug_file.99 = gc_debug_file;
  slot.100 = (long int) slot;
  obj.101 = (long int) obj;
  D.20481 = slot.100 - obj.101;
  D.20482 = vtable->klass;
  D.20483 = D.20482->name_space;
  D.20482 = vtable->klass;
  D.20484 = D.20482->name;
  fprintf (gc_debug_file.99, "Invalid object pointer %p at offset %td in object %p (%s.%s):\n", ptr, D.20481, obj, D.20483, D.20484);
  gc_debug_file.99 = gc_debug_file;
  fflush (gc_debug_file.99);
  <D.20477>:
  describe_pointer (ptr, 0);
  broken_heap = 1;
}


missing_remset_spew (char * obj, char * * slot)
{
  long unsigned int D.20485;
  long unsigned int D.20486;
  int gc_debug_level.102;
  _Bool D.20488;
  long int D.20489;
  long int D.20490;
  struct FILE * gc_debug_file.103;
  long int slot.104;
  long int obj.105;
  long int D.20496;
  struct MonoClass * D.20497;
  const char * D.20498;
  const char * D.20499;
  char * ptr;
  struct MonoVTable * vtable;

  ptr = *slot;
  D.20485 = MEM[(mword *)obj];
  D.20486 = D.20485 & 18446744073709551612;
  vtable = (struct MonoVTable *) D.20486;
  gc_debug_level.102 = gc_debug_level;
  D.20488 = gc_debug_level.102 >= 0;
  D.20489 = (long int) D.20488;
  D.20490 = __builtin_expect (D.20489, 0);
  if (D.20490 != 0) goto <D.20491>; else goto <D.20492>;
  <D.20491>:
  gc_debug_file.103 = gc_debug_file;
  slot.104 = (long int) slot;
  obj.105 = (long int) obj;
  D.20496 = slot.104 - obj.105;
  D.20497 = vtable->klass;
  D.20498 = D.20497->name_space;
  D.20497 = vtable->klass;
  D.20499 = D.20497->name;
  fprintf (gc_debug_file.103, "Oldspace->newspace reference %p at offset %td in object %p (%s.%s) not found in remsets.\n", ptr, D.20496, obj, D.20498, D.20499);
  gc_debug_file.103 = gc_debug_file;
  fflush (gc_debug_file.103);
  <D.20492>:
  broken_heap = 1;
}


sgen_check_objref (char * obj)
{
  int D.20500;
  _Bool D.20501;
  long int D.20502;
  long int D.20503;

  D.20500 = ptr_in_heap (obj);
  D.20501 = D.20500 == 0;
  D.20502 = (long int) D.20501;
  D.20503 = __builtin_expect (D.20502, 0);
  if (D.20503 != 0) goto <D.20504>; else goto <D.20505>;
  <D.20504>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-debug.c", 469, "ptr_in_heap (obj)");
  <D.20505>:
}


ptr_in_heap (char * object)
{
  int D.20506;
  gboolean D.20509;
  int D.20510;
  gboolean (*<T2d21>) (char *) D.20513;
  int D.20514;

  D.20506 = sgen_ptr_in_nursery (object);
  if (D.20506 != 0) goto <D.20507>; else goto <D.20508>;
  <D.20507>:
  D.20509 = 1;
  return D.20509;
  <D.20508>:
  D.20510 = sgen_los_is_valid_object (object);
  if (D.20510 != 0) goto <D.20511>; else goto <D.20512>;
  <D.20511>:
  D.20509 = 1;
  return D.20509;
  <D.20512>:
  D.20513 = major_collector.is_valid_object;
  D.20514 = D.20513 (object);
  if (D.20514 != 0) goto <D.20515>; else goto <D.20516>;
  <D.20515>:
  D.20509 = 1;
  return D.20509;
  <D.20516>:
  D.20509 = 0;
  return D.20509;
}


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

  setup_valid_nursery_objects ();
  D.20518 = major_collector.iterate_objects;
  D.20518 (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.20522;
  gboolean (*<T2d21>) (char *) D.20526;
  int D.20527;
  long unsigned int D.20530;
  long unsigned int D.20531;
  long unsigned int D.20532;
  long unsigned int D.20533;
  long unsigned int D.20536;
  long unsigned int D.20537;
  long unsigned int D.20538;
  long unsigned int D.20539;
  long unsigned int D.20540;
  long unsigned int D.20541;
  int D.20544;
  _Bool D.20545;
  long int D.20546;
  long int D.20547;
  int D.20550;
  long unsigned int D.20553;
  long unsigned int D.20554;
  _Bool D.20555;
  long int D.20556;
  long int D.20557;
  int D.20561;
  int D.20564;
  _Bool D.20565;
  long int D.20566;
  long int D.20567;
  gboolean (*<T2d21>) (char *) D.20571;
  int D.20572;
  int D.20575;
  _Bool D.20576;
  long int D.20577;
  long int D.20578;
  int D.20584;
  _Bool D.20585;
  long int D.20586;
  long int D.20587;
  int D.20590;
  long unsigned int D.20593;
  long unsigned int D.20594;
  _Bool D.20595;
  long int D.20596;
  long int D.20597;
  int D.20601;
  int D.20604;
  _Bool D.20605;
  long int D.20606;
  long int D.20607;
  int D.20611;
  int D.20614;
  _Bool D.20615;
  long int D.20616;
  long int D.20617;
  long unsigned int D.20621;
  long unsigned int D.20622;
  int D.20623;
  int D.20626;
  _Bool D.20627;
  long int D.20628;
  long int D.20629;
  int D.20632;
  long unsigned int D.20635;
  long unsigned int D.20636;
  _Bool D.20637;
  long int D.20638;
  long int D.20639;
  int D.20643;
  int D.20646;
  _Bool D.20647;
  long int D.20648;
  long int D.20649;
  int D.20653;
  int D.20656;
  _Bool D.20657;
  long int D.20658;
  long int D.20659;
  long unsigned int D.20663;
  long unsigned int D.20664;
  int D.20665;
  int D.20668;
  _Bool D.20669;
  long int D.20670;
  long int D.20671;
  int D.20674;
  long unsigned int D.20677;
  long unsigned int D.20678;
  _Bool D.20679;
  long int D.20680;
  long int D.20681;
  int D.20685;
  int D.20688;
  _Bool D.20689;
  long int D.20690;
  long int D.20691;
  int D.20695;
  int D.20698;
  _Bool D.20699;
  long int D.20700;
  long int D.20701;
  long unsigned int D.20705;
  long unsigned int D.20708;
  int D.20709;
  int D.20710;
  unsigned int D.20713;
  unsigned int el_size.107;
  unsigned int D.20715;
  sizetype D.20716;
  int D.20719;
  _Bool D.20720;
  long int D.20721;
  long int D.20722;
  int D.20725;
  long unsigned int D.20728;
  long unsigned int D.20729;
  _Bool D.20730;
  long int D.20731;
  long int D.20732;
  int D.20736;
  int D.20739;
  _Bool D.20740;
  long int D.20741;
  long int D.20742;
  int D.20746;
  int D.20749;
  _Bool D.20750;
  long int D.20751;
  long int D.20752;
  int D.20759;
  int D.20760;
  long unsigned int D.20761;
  long unsigned int D.20762;
  char * D.20763;
  sizetype D.20764;
  int D.20767;
  _Bool D.20768;
  long int D.20769;
  long int D.20770;
  int D.20773;
  long unsigned int D.20776;
  long unsigned int D.20777;
  _Bool D.20778;
  long int D.20779;
  long int D.20780;
  int D.20784;
  int D.20787;
  _Bool D.20788;
  long int D.20789;
  long int D.20790;
  int D.20794;
  int D.20797;
  _Bool D.20798;
  long int D.20799;
  long int D.20800;
  sizetype D.20804;
  long unsigned int D.20808;
  int D.20813;
  _Bool D.20814;
  long int D.20815;
  long int D.20816;
  int D.20819;
  long unsigned int D.20822;
  long unsigned int D.20823;
  _Bool D.20824;
  long int D.20825;
  long int D.20826;
  int D.20830;
  int D.20833;
  _Bool D.20834;
  long int D.20835;
  long int D.20836;
  int D.20840;
  int D.20843;
  _Bool D.20844;
  long int D.20845;
  long int D.20846;
  long unsigned int D.20850;
  int D.20855;
  _Bool D.20856;
  long int D.20857;
  long int D.20858;
  int D.20861;
  long unsigned int D.20864;
  long unsigned int D.20865;
  _Bool D.20866;
  long int D.20867;
  long int D.20868;
  int D.20872;
  int D.20875;
  _Bool D.20876;
  long int D.20877;
  long int D.20878;
  int D.20882;
  int D.20885;
  _Bool D.20886;
  long int D.20887;
  long int D.20888;
  long unsigned int D.20892;
  unsigned int D.20893;
  unsigned int D.20894;
  struct MonoVTable * D.20897;
  struct MonoClass * D.20898;
  const char * D.20899;
  const char * D.20900;
  gsize * bitmap_data.108;
  long unsigned int D.20902;
  int D.20907;
  _Bool D.20908;
  long int D.20909;
  long int D.20910;
  int D.20913;
  long unsigned int D.20916;
  long unsigned int D.20917;
  _Bool D.20918;
  long int D.20919;
  long int D.20920;
  int D.20924;
  int D.20927;
  _Bool D.20928;
  long int D.20929;
  long int D.20930;
  int D.20934;
  int D.20937;
  _Bool D.20938;
  long int D.20939;
  long int D.20940;
  int bwords.109;
  long unsigned int D.20945;
  gsize * mbitmap_data.110;
  long unsigned int D.20947;
  unsigned int D.20948;
  unsigned int D.20949;
  struct MonoClass * D.20950;
  unsigned int el_size.111;
  unsigned int D.20952;
  sizetype D.20953;
  const char * D.20956;
  const char * D.20957;
  gsize * bitmap_data.112;
  long unsigned int D.20959;
  int D.20964;
  _Bool D.20965;
  long int D.20966;
  long int D.20967;
  int D.20970;
  long unsigned int D.20973;
  long unsigned int D.20974;
  _Bool D.20975;
  long int D.20976;
  long int D.20977;
  int D.20981;
  int D.20984;
  _Bool D.20985;
  long int D.20986;
  long int D.20987;
  int D.20991;
  int D.20994;
  _Bool D.20995;
  long int D.20996;
  long int D.20997;
  unsigned int bwords.113;
  sizetype D.21002;
  gboolean is_los;

  dummy.106 = (long int) dummy;
  is_los = (gboolean) dummy.106;
  if (is_los != 0) goto <D.20520>; else goto <D.20521>;
  <D.20520>:
  D.20522 = sgen_los_object_is_pinned (start);
  if (D.20522 == 0) goto <D.20523>; else goto <D.20524>;
  <D.20523>:
  return;
  <D.20524>:
  goto <D.20525>;
  <D.20521>:
  D.20526 = major_collector.is_object_live;
  D.20527 = D.20526 (start);
  if (D.20527 == 0) goto <D.20528>; else goto <D.20529>;
  <D.20528>:
  return;
  <D.20529>:
  <D.20525>:
  {
    struct GCVTable * vt;
    mword desc;

    D.20530 = MEM[(mword *)start];
    D.20531 = D.20530 & 18446744073709551612;
    vt = (struct GCVTable *) D.20531;
    desc = vt->desc;
    D.20532 = desc & 7;
    switch (D.20532) <default: <D.18912>, case 1: <D.18817>, case 2: <D.18826>, case 3: <D.18876>, case 4: <D.18836>, case 5: <D.18869>, case 6: <D.18890>, case 7: <D.18911>>
    <D.18817>:
    D.20533 = desc & 4294901760;
    if (D.20533 != 0) goto <D.20534>; else goto <D.20535>;
    <D.20534>:
    {
      void * * _objptr_end;
      void * * _objptr;

      _objptr = start;
      D.20536 = desc >> 16;
      D.20537 = D.20536 & 255;
      D.20538 = D.20537 * 8;
      _objptr = _objptr + D.20538;
      D.20539 = desc >> 24;
      D.20540 = D.20539 & 255;
      D.20541 = D.20540 * 8;
      _objptr_end = _objptr + D.20541;
      {
        char * __target;

        __target = MEM[(char * *)_objptr];
        if (__target != 0B) goto <D.20542>; else goto <D.20543>;
        <D.20542>:
        D.20544 = is_valid_object_pointer (__target);
        D.20545 = D.20544 == 0;
        D.20546 = (long int) D.20545;
        D.20547 = __builtin_expect (D.20546, 0);
        if (D.20547 != 0) goto <D.20548>; else goto <D.20549>;
        <D.20548>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 64, "is_valid_object_pointer (__target)");
        <D.20549>:
        D.20550 = sgen_ptr_in_nursery (__target);
        if (D.20550 != 0) goto <D.20551>; else goto <D.20552>;
        <D.20551>:
        D.20553 = MEM[(mword *)__target];
        D.20554 = D.20553 & 2;
        D.20555 = D.20554 == 0;
        D.20556 = (long int) D.20555;
        D.20557 = __builtin_expect (D.20556, 0);
        if (D.20557 != 0) goto <D.20558>; else goto <D.20559>;
        <D.20558>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 64, "SGEN_OBJECT_IS_PINNED (__target)");
        <D.20559>:
        goto <D.20560>;
        <D.20552>:
        D.20561 = sgen_los_is_valid_object (__target);
        if (D.20561 != 0) goto <D.20562>; else goto <D.20563>;
        <D.20562>:
        D.20564 = sgen_los_object_is_pinned (__target);
        D.20565 = D.20564 == 0;
        D.20566 = (long int) D.20565;
        D.20567 = __builtin_expect (D.20566, 0);
        if (D.20567 != 0) goto <D.20568>; else goto <D.20569>;
        <D.20568>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 64, "sgen_los_object_is_pinned (__target)");
        <D.20569>:
        goto <D.20570>;
        <D.20563>:
        D.20571 = major_collector.is_valid_object;
        D.20572 = D.20571 (__target);
        if (D.20572 != 0) goto <D.20573>; else goto <D.20574>;
        <D.20573>:
        D.20526 = major_collector.is_object_live;
        D.20575 = D.20526 (__target);
        D.20576 = D.20575 == 0;
        D.20577 = (long int) D.20576;
        D.20578 = __builtin_expect (D.20577, 0);
        if (D.20578 != 0) goto <D.20579>; else goto <D.20580>;
        <D.20579>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 64, "major_collector.is_object_live (__target)");
        <D.20580>:
        goto <D.20581>;
        <D.20574>:
        monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 64);
        <D.20581>:
        <D.20570>:
        <D.20560>:
        <D.20543>:
      }
      _objptr = _objptr + 8;
      goto <D.18823>;
      <D.18822>:
      {
        char * __target;

        __target = MEM[(char * *)_objptr];
        if (__target != 0B) goto <D.20582>; else goto <D.20583>;
        <D.20582>:
        D.20584 = is_valid_object_pointer (__target);
        D.20585 = D.20584 == 0;
        D.20586 = (long int) D.20585;
        D.20587 = __builtin_expect (D.20586, 0);
        if (D.20587 != 0) goto <D.20588>; else goto <D.20589>;
        <D.20588>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 64, "is_valid_object_pointer (__target)");
        <D.20589>:
        D.20590 = sgen_ptr_in_nursery (__target);
        if (D.20590 != 0) goto <D.20591>; else goto <D.20592>;
        <D.20591>:
        D.20593 = MEM[(mword *)__target];
        D.20594 = D.20593 & 2;
        D.20595 = D.20594 == 0;
        D.20596 = (long int) D.20595;
        D.20597 = __builtin_expect (D.20596, 0);
        if (D.20597 != 0) goto <D.20598>; else goto <D.20599>;
        <D.20598>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 64, "SGEN_OBJECT_IS_PINNED (__target)");
        <D.20599>:
        goto <D.20600>;
        <D.20592>:
        D.20601 = sgen_los_is_valid_object (__target);
        if (D.20601 != 0) goto <D.20602>; else goto <D.20603>;
        <D.20602>:
        D.20604 = sgen_los_object_is_pinned (__target);
        D.20605 = D.20604 == 0;
        D.20606 = (long int) D.20605;
        D.20607 = __builtin_expect (D.20606, 0);
        if (D.20607 != 0) goto <D.20608>; else goto <D.20609>;
        <D.20608>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 64, "sgen_los_object_is_pinned (__target)");
        <D.20609>:
        goto <D.20610>;
        <D.20603>:
        D.20571 = major_collector.is_valid_object;
        D.20611 = D.20571 (__target);
        if (D.20611 != 0) goto <D.20612>; else goto <D.20613>;
        <D.20612>:
        D.20526 = major_collector.is_object_live;
        D.20614 = D.20526 (__target);
        D.20615 = D.20614 == 0;
        D.20616 = (long int) D.20615;
        D.20617 = __builtin_expect (D.20616, 0);
        if (D.20617 != 0) goto <D.20618>; else goto <D.20619>;
        <D.20618>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 64, "major_collector.is_object_live (__target)");
        <D.20619>:
        goto <D.20620>;
        <D.20613>:
        monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 64);
        <D.20620>:
        <D.20610>:
        <D.20600>:
        <D.20583>:
      }
      _objptr = _objptr + 8;
      <D.18823>:
      if (_objptr < _objptr_end) goto <D.18822>; else goto <D.18824>;
      <D.18824>:
    }
    <D.20535>:
    goto <D.18825>;
    <D.18826>:
    {
      void * * _objptr;
      gsize _bmap;

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

        _index = __builtin_ctzl (_bmap);
        D.20621 = (long unsigned int) _index;
        D.20622 = D.20621 * 8;
        _objptr = _objptr + D.20622;
        D.20623 = _index + 1;
        _bmap = _bmap >> D.20623;
        {
          char * __target;

          __target = MEM[(char * *)_objptr];
          if (__target != 0B) goto <D.20624>; else goto <D.20625>;
          <D.20624>:
          D.20626 = is_valid_object_pointer (__target);
          D.20627 = D.20626 == 0;
          D.20628 = (long int) D.20627;
          D.20629 = __builtin_expect (D.20628, 0);
          if (D.20629 != 0) goto <D.20630>; else goto <D.20631>;
          <D.20630>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 71, "is_valid_object_pointer (__target)");
          <D.20631>:
          D.20632 = sgen_ptr_in_nursery (__target);
          if (D.20632 != 0) goto <D.20633>; else goto <D.20634>;
          <D.20633>:
          D.20635 = MEM[(mword *)__target];
          D.20636 = D.20635 & 2;
          D.20637 = D.20636 == 0;
          D.20638 = (long int) D.20637;
          D.20639 = __builtin_expect (D.20638, 0);
          if (D.20639 != 0) goto <D.20640>; else goto <D.20641>;
          <D.20640>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 71, "SGEN_OBJECT_IS_PINNED (__target)");
          <D.20641>:
          goto <D.20642>;
          <D.20634>:
          D.20643 = sgen_los_is_valid_object (__target);
          if (D.20643 != 0) goto <D.20644>; else goto <D.20645>;
          <D.20644>:
          D.20646 = sgen_los_object_is_pinned (__target);
          D.20647 = D.20646 == 0;
          D.20648 = (long int) D.20647;
          D.20649 = __builtin_expect (D.20648, 0);
          if (D.20649 != 0) goto <D.20650>; else goto <D.20651>;
          <D.20650>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 71, "sgen_los_object_is_pinned (__target)");
          <D.20651>:
          goto <D.20652>;
          <D.20645>:
          D.20571 = major_collector.is_valid_object;
          D.20653 = D.20571 (__target);
          if (D.20653 != 0) goto <D.20654>; else goto <D.20655>;
          <D.20654>:
          D.20526 = major_collector.is_object_live;
          D.20656 = D.20526 (__target);
          D.20657 = D.20656 == 0;
          D.20658 = (long int) D.20657;
          D.20659 = __builtin_expect (D.20658, 0);
          if (D.20659 != 0) goto <D.20660>; else goto <D.20661>;
          <D.20660>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 71, "major_collector.is_object_live (__target)");
          <D.20661>:
          goto <D.20662>;
          <D.20655>:
          monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 71);
          <D.20662>:
          <D.20652>:
          <D.20642>:
          <D.20625>:
        }
        _objptr = _objptr + 8;
      }
      goto <D.18834>;
      <D.18833>:
      {
        int _index;

        _index = __builtin_ctzl (_bmap);
        D.20663 = (long unsigned int) _index;
        D.20664 = D.20663 * 8;
        _objptr = _objptr + D.20664;
        D.20665 = _index + 1;
        _bmap = _bmap >> D.20665;
        {
          char * __target;

          __target = MEM[(char * *)_objptr];
          if (__target != 0B) goto <D.20666>; else goto <D.20667>;
          <D.20666>:
          D.20668 = is_valid_object_pointer (__target);
          D.20669 = D.20668 == 0;
          D.20670 = (long int) D.20669;
          D.20671 = __builtin_expect (D.20670, 0);
          if (D.20671 != 0) goto <D.20672>; else goto <D.20673>;
          <D.20672>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 71, "is_valid_object_pointer (__target)");
          <D.20673>:
          D.20674 = sgen_ptr_in_nursery (__target);
          if (D.20674 != 0) goto <D.20675>; else goto <D.20676>;
          <D.20675>:
          D.20677 = MEM[(mword *)__target];
          D.20678 = D.20677 & 2;
          D.20679 = D.20678 == 0;
          D.20680 = (long int) D.20679;
          D.20681 = __builtin_expect (D.20680, 0);
          if (D.20681 != 0) goto <D.20682>; else goto <D.20683>;
          <D.20682>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 71, "SGEN_OBJECT_IS_PINNED (__target)");
          <D.20683>:
          goto <D.20684>;
          <D.20676>:
          D.20685 = sgen_los_is_valid_object (__target);
          if (D.20685 != 0) goto <D.20686>; else goto <D.20687>;
          <D.20686>:
          D.20688 = sgen_los_object_is_pinned (__target);
          D.20689 = D.20688 == 0;
          D.20690 = (long int) D.20689;
          D.20691 = __builtin_expect (D.20690, 0);
          if (D.20691 != 0) goto <D.20692>; else goto <D.20693>;
          <D.20692>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 71, "sgen_los_object_is_pinned (__target)");
          <D.20693>:
          goto <D.20694>;
          <D.20687>:
          D.20571 = major_collector.is_valid_object;
          D.20695 = D.20571 (__target);
          if (D.20695 != 0) goto <D.20696>; else goto <D.20697>;
          <D.20696>:
          D.20526 = major_collector.is_object_live;
          D.20698 = D.20526 (__target);
          D.20699 = D.20698 == 0;
          D.20700 = (long int) D.20699;
          D.20701 = __builtin_expect (D.20700, 0);
          if (D.20701 != 0) goto <D.20702>; else goto <D.20703>;
          <D.20702>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 71, "major_collector.is_object_live (__target)");
          <D.20703>:
          goto <D.20704>;
          <D.20697>:
          monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 71);
          <D.20704>:
          <D.20694>:
          <D.20684>:
          <D.20667>:
        }
        _objptr = _objptr + 8;
      }
      <D.18834>:
      if (_bmap != 0) goto <D.18833>; else goto <D.18835>;
      <D.18835>:
    }
    goto <D.18825>;
    <D.18836>:
    D.20705 = desc & 4294950912;
    if (D.20705 != 0) goto <D.20706>; else goto <D.20707>;
    <D.20706>:
    {
      int el_size;
      int etype;

      D.20708 = desc >> 3;
      D.20709 = (int) D.20708;
      el_size = D.20709 & 1023;
      D.20710 = (int) desc;
      etype = D.20710 & 49152;
      if (etype == 16384) goto <D.20711>; else goto <D.20712>;
      <D.20711>:
      {
        void * * p;
        void * * end_refs;

        p = start + 32;
        D.20713 = MEM[(struct MonoArray *)start].max_length;
        el_size.107 = (unsigned int) el_size;
        D.20715 = D.20713 * el_size.107;
        D.20716 = (sizetype) D.20715;
        end_refs = p + D.20716;
        goto <D.18843>;
        <D.18842>:
        {
          char * __target;

          __target = MEM[(char * *)p];
          if (__target != 0B) goto <D.20717>; else goto <D.20718>;
          <D.20717>:
          D.20719 = is_valid_object_pointer (__target);
          D.20720 = D.20719 == 0;
          D.20721 = (long int) D.20720;
          D.20722 = __builtin_expect (D.20721, 0);
          if (D.20722 != 0) goto <D.20723>; else goto <D.20724>;
          <D.20723>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "is_valid_object_pointer (__target)");
          <D.20724>:
          D.20725 = sgen_ptr_in_nursery (__target);
          if (D.20725 != 0) goto <D.20726>; else goto <D.20727>;
          <D.20726>:
          D.20728 = MEM[(mword *)__target];
          D.20729 = D.20728 & 2;
          D.20730 = D.20729 == 0;
          D.20731 = (long int) D.20730;
          D.20732 = __builtin_expect (D.20731, 0);
          if (D.20732 != 0) goto <D.20733>; else goto <D.20734>;
          <D.20733>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "SGEN_OBJECT_IS_PINNED (__target)");
          <D.20734>:
          goto <D.20735>;
          <D.20727>:
          D.20736 = sgen_los_is_valid_object (__target);
          if (D.20736 != 0) goto <D.20737>; else goto <D.20738>;
          <D.20737>:
          D.20739 = sgen_los_object_is_pinned (__target);
          D.20740 = D.20739 == 0;
          D.20741 = (long int) D.20740;
          D.20742 = __builtin_expect (D.20741, 0);
          if (D.20742 != 0) goto <D.20743>; else goto <D.20744>;
          <D.20743>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "sgen_los_object_is_pinned (__target)");
          <D.20744>:
          goto <D.20745>;
          <D.20738>:
          D.20571 = major_collector.is_valid_object;
          D.20746 = D.20571 (__target);
          if (D.20746 != 0) goto <D.20747>; else goto <D.20748>;
          <D.20747>:
          D.20526 = major_collector.is_object_live;
          D.20749 = D.20526 (__target);
          D.20750 = D.20749 == 0;
          D.20751 = (long int) D.20750;
          D.20752 = __builtin_expect (D.20751, 0);
          if (D.20752 != 0) goto <D.20753>; else goto <D.20754>;
          <D.20753>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "major_collector.is_object_live (__target)");
          <D.20754>:
          goto <D.20755>;
          <D.20748>:
          monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 78);
          <D.20755>:
          <D.20745>:
          <D.20735>:
          <D.20718>:
        }
        p = p + 8;
        <D.18843>:
        if (p < end_refs) goto <D.18842>; else goto <D.18844>;
        <D.18844>:
      }
      goto <D.20756>;
      <D.20712>:
      if (etype == 32768) goto <D.20757>; else goto <D.20758>;
      <D.20757>:
      {
        int offset;
        int num_refs;
        char * e_start;
        char * e_end;

        D.20536 = desc >> 16;
        D.20759 = (int) D.20536;
        offset = D.20759 & 255;
        D.20539 = desc >> 24;
        D.20760 = (int) D.20539;
        num_refs = D.20760 & 255;
        e_start = start + 32;
        D.20713 = MEM[(struct MonoArray *)start].max_length;
        el_size.107 = (unsigned int) el_size;
        D.20715 = D.20713 * el_size.107;
        D.20716 = (sizetype) D.20715;
        e_end = e_start + D.20716;
        goto <D.18856>;
        <D.18855>:
        {
          void * * p;
          int i;

          p = e_start;
          D.20761 = (long unsigned int) offset;
          D.20762 = D.20761 * 8;
          p = p + D.20762;
          i = 0;
          goto <D.18853>;
          <D.18852>:
          {
            char * __target;

            D.20763 = MEM[(char * *)p];
            D.20764 = (sizetype) i;
            __target = D.20763 + D.20764;
            if (__target != 0B) goto <D.20765>; else goto <D.20766>;
            <D.20765>:
            D.20767 = is_valid_object_pointer (__target);
            D.20768 = D.20767 == 0;
            D.20769 = (long int) D.20768;
            D.20770 = __builtin_expect (D.20769, 0);
            if (D.20770 != 0) goto <D.20771>; else goto <D.20772>;
            <D.20771>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "is_valid_object_pointer (__target)");
            <D.20772>:
            D.20773 = sgen_ptr_in_nursery (__target);
            if (D.20773 != 0) goto <D.20774>; else goto <D.20775>;
            <D.20774>:
            D.20776 = MEM[(mword *)__target];
            D.20777 = D.20776 & 2;
            D.20778 = D.20777 == 0;
            D.20779 = (long int) D.20778;
            D.20780 = __builtin_expect (D.20779, 0);
            if (D.20780 != 0) goto <D.20781>; else goto <D.20782>;
            <D.20781>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "SGEN_OBJECT_IS_PINNED (__target)");
            <D.20782>:
            goto <D.20783>;
            <D.20775>:
            D.20784 = sgen_los_is_valid_object (__target);
            if (D.20784 != 0) goto <D.20785>; else goto <D.20786>;
            <D.20785>:
            D.20787 = sgen_los_object_is_pinned (__target);
            D.20788 = D.20787 == 0;
            D.20789 = (long int) D.20788;
            D.20790 = __builtin_expect (D.20789, 0);
            if (D.20790 != 0) goto <D.20791>; else goto <D.20792>;
            <D.20791>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "sgen_los_object_is_pinned (__target)");
            <D.20792>:
            goto <D.20793>;
            <D.20786>:
            D.20571 = major_collector.is_valid_object;
            D.20794 = D.20571 (__target);
            if (D.20794 != 0) goto <D.20795>; else goto <D.20796>;
            <D.20795>:
            D.20526 = major_collector.is_object_live;
            D.20797 = D.20526 (__target);
            D.20798 = D.20797 == 0;
            D.20799 = (long int) D.20798;
            D.20800 = __builtin_expect (D.20799, 0);
            if (D.20800 != 0) goto <D.20801>; else goto <D.20802>;
            <D.20801>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "major_collector.is_object_live (__target)");
            <D.20802>:
            goto <D.20803>;
            <D.20796>:
            monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 78);
            <D.20803>:
            <D.20793>:
            <D.20783>:
            <D.20766>:
          }
          i = i + 1;
          <D.18853>:
          if (i < num_refs) goto <D.18852>; else goto <D.18854>;
          <D.18854>:
          D.20804 = (sizetype) el_size;
          e_start = e_start + D.20804;
        }
        <D.18856>:
        if (e_start < e_end) goto <D.18855>; else goto <D.18857>;
        <D.18857>:
      }
      goto <D.20805>;
      <D.20758>:
      if (etype == 49152) goto <D.20806>; else goto <D.20807>;
      <D.20806>:
      {
        char * e_start;
        char * e_end;

        e_start = start + 32;
        D.20713 = MEM[(struct MonoArray *)start].max_length;
        el_size.107 = (unsigned int) el_size;
        D.20715 = D.20713 * el_size.107;
        D.20716 = (sizetype) D.20715;
        e_end = e_start + D.20716;
        goto <D.18867>;
        <D.18866>:
        {
          void * * p;
          gsize _bmap;

          p = e_start;
          _bmap = desc >> 16;
          goto <D.18864>;
          <D.18863>:
          D.20808 = _bmap & 1;
          if (D.20808 != 0) goto <D.20809>; else goto <D.20810>;
          <D.20809>:
          {
            char * __target;

            __target = MEM[(char * *)p];
            if (__target != 0B) goto <D.20811>; else goto <D.20812>;
            <D.20811>:
            D.20813 = is_valid_object_pointer (__target);
            D.20814 = D.20813 == 0;
            D.20815 = (long int) D.20814;
            D.20816 = __builtin_expect (D.20815, 0);
            if (D.20816 != 0) goto <D.20817>; else goto <D.20818>;
            <D.20817>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "is_valid_object_pointer (__target)");
            <D.20818>:
            D.20819 = sgen_ptr_in_nursery (__target);
            if (D.20819 != 0) goto <D.20820>; else goto <D.20821>;
            <D.20820>:
            D.20822 = MEM[(mword *)__target];
            D.20823 = D.20822 & 2;
            D.20824 = D.20823 == 0;
            D.20825 = (long int) D.20824;
            D.20826 = __builtin_expect (D.20825, 0);
            if (D.20826 != 0) goto <D.20827>; else goto <D.20828>;
            <D.20827>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "SGEN_OBJECT_IS_PINNED (__target)");
            <D.20828>:
            goto <D.20829>;
            <D.20821>:
            D.20830 = sgen_los_is_valid_object (__target);
            if (D.20830 != 0) goto <D.20831>; else goto <D.20832>;
            <D.20831>:
            D.20833 = sgen_los_object_is_pinned (__target);
            D.20834 = D.20833 == 0;
            D.20835 = (long int) D.20834;
            D.20836 = __builtin_expect (D.20835, 0);
            if (D.20836 != 0) goto <D.20837>; else goto <D.20838>;
            <D.20837>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "sgen_los_object_is_pinned (__target)");
            <D.20838>:
            goto <D.20839>;
            <D.20832>:
            D.20571 = major_collector.is_valid_object;
            D.20840 = D.20571 (__target);
            if (D.20840 != 0) goto <D.20841>; else goto <D.20842>;
            <D.20841>:
            D.20526 = major_collector.is_object_live;
            D.20843 = D.20526 (__target);
            D.20844 = D.20843 == 0;
            D.20845 = (long int) D.20844;
            D.20846 = __builtin_expect (D.20845, 0);
            if (D.20846 != 0) goto <D.20847>; else goto <D.20848>;
            <D.20847>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 78, "major_collector.is_object_live (__target)");
            <D.20848>:
            goto <D.20849>;
            <D.20842>:
            monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 78);
            <D.20849>:
            <D.20839>:
            <D.20829>:
            <D.20812>:
          }
          <D.20810>:
          _bmap = _bmap >> 1;
          p = p + 8;
          <D.18864>:
          if (_bmap != 0) goto <D.18863>; else goto <D.18865>;
          <D.18865>:
          D.20804 = (sizetype) el_size;
          e_start = e_start + D.20804;
        }
        <D.18867>:
        if (e_start < e_end) goto <D.18866>; else goto <D.18868>;
        <D.18868>:
      }
      <D.20807>:
      <D.20805>:
      <D.20756>:
    }
    <D.20707>:
    goto <D.18825>;
    <D.18869>:
    {
      void * * _objptr;
      gsize _bmap;

      _objptr = start;
      _bmap = desc >> 3;
      _objptr = _objptr + 16;
      goto <D.18874>;
      <D.18873>:
      D.20850 = _bmap & 1;
      if (D.20850 != 0) goto <D.20851>; else goto <D.20852>;
      <D.20851>:
      {
        char * __target;

        __target = MEM[(char * *)_objptr];
        if (__target != 0B) goto <D.20853>; else goto <D.20854>;
        <D.20853>:
        D.20855 = is_valid_object_pointer (__target);
        D.20856 = D.20855 == 0;
        D.20857 = (long int) D.20856;
        D.20858 = __builtin_expect (D.20857, 0);
        if (D.20858 != 0) goto <D.20859>; else goto <D.20860>;
        <D.20859>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 85, "is_valid_object_pointer (__target)");
        <D.20860>:
        D.20861 = sgen_ptr_in_nursery (__target);
        if (D.20861 != 0) goto <D.20862>; else goto <D.20863>;
        <D.20862>:
        D.20864 = MEM[(mword *)__target];
        D.20865 = D.20864 & 2;
        D.20866 = D.20865 == 0;
        D.20867 = (long int) D.20866;
        D.20868 = __builtin_expect (D.20867, 0);
        if (D.20868 != 0) goto <D.20869>; else goto <D.20870>;
        <D.20869>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 85, "SGEN_OBJECT_IS_PINNED (__target)");
        <D.20870>:
        goto <D.20871>;
        <D.20863>:
        D.20872 = sgen_los_is_valid_object (__target);
        if (D.20872 != 0) goto <D.20873>; else goto <D.20874>;
        <D.20873>:
        D.20875 = sgen_los_object_is_pinned (__target);
        D.20876 = D.20875 == 0;
        D.20877 = (long int) D.20876;
        D.20878 = __builtin_expect (D.20877, 0);
        if (D.20878 != 0) goto <D.20879>; else goto <D.20880>;
        <D.20879>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 85, "sgen_los_object_is_pinned (__target)");
        <D.20880>:
        goto <D.20881>;
        <D.20874>:
        D.20571 = major_collector.is_valid_object;
        D.20882 = D.20571 (__target);
        if (D.20882 != 0) goto <D.20883>; else goto <D.20884>;
        <D.20883>:
        D.20526 = major_collector.is_object_live;
        D.20885 = D.20526 (__target);
        D.20886 = D.20885 == 0;
        D.20887 = (long int) D.20886;
        D.20888 = __builtin_expect (D.20887, 0);
        if (D.20888 != 0) goto <D.20889>; else goto <D.20890>;
        <D.20889>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 85, "major_collector.is_object_live (__target)");
        <D.20890>:
        goto <D.20891>;
        <D.20884>:
        monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 85);
        <D.20891>:
        <D.20881>:
        <D.20871>:
        <D.20854>:
      }
      <D.20852>:
      _bmap = _bmap >> 1;
      _objptr = _objptr + 8;
      <D.18874>:
      if (_bmap != 0) goto <D.18873>; else goto <D.18875>;
      <D.18875>:
    }
    goto <D.18825>;
    <D.18876>:
    {
      void * * _objptr;
      gsize * bitmap_data;
      int bwords;
      void * * start_run;

      _objptr = start;
      bitmap_data = sgen_get_complex_descriptor (desc);
      D.20892 = *bitmap_data;
      D.20893 = (unsigned int) D.20892;
      D.20894 = D.20893 + 4294967295;
      bwords = (int) D.20894;
      start_run = _objptr;
      bitmap_data = bitmap_data + 8;
      if (0 != 0) goto <D.20895>; else goto <D.20896>;
      <D.20895>:
      {
        struct MonoObject * myobj;

        myobj = start;
        D.20897 = myobj->vtable;
        D.20898 = D.20897->klass;
        D.20899 = D.20898->name_space;
        D.20897 = myobj->vtable;
        D.20898 = D.20897->klass;
        D.20900 = D.20898->name;
        monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", bwords, start, desc, D.20899, D.20900);
      }
      <D.20896>:
      goto <D.18888>;
      <D.18887>:
      {
        gsize _bmap;

        bitmap_data.108 = bitmap_data;
        bitmap_data = bitmap_data.108 + 8;
        _bmap = *bitmap_data.108;
        _objptr = start_run;
        goto <D.18885>;
        <D.18884>:
        D.20902 = _bmap & 1;
        if (D.20902 != 0) goto <D.20903>; else goto <D.20904>;
        <D.20903>:
        {
          char * __target;

          __target = MEM[(char * *)_objptr];
          if (__target != 0B) goto <D.20905>; else goto <D.20906>;
          <D.20905>:
          D.20907 = is_valid_object_pointer (__target);
          D.20908 = D.20907 == 0;
          D.20909 = (long int) D.20908;
          D.20910 = __builtin_expect (D.20909, 0);
          if (D.20910 != 0) goto <D.20911>; else goto <D.20912>;
          <D.20911>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 93, "is_valid_object_pointer (__target)");
          <D.20912>:
          D.20913 = sgen_ptr_in_nursery (__target);
          if (D.20913 != 0) goto <D.20914>; else goto <D.20915>;
          <D.20914>:
          D.20916 = MEM[(mword *)__target];
          D.20917 = D.20916 & 2;
          D.20918 = D.20917 == 0;
          D.20919 = (long int) D.20918;
          D.20920 = __builtin_expect (D.20919, 0);
          if (D.20920 != 0) goto <D.20921>; else goto <D.20922>;
          <D.20921>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 93, "SGEN_OBJECT_IS_PINNED (__target)");
          <D.20922>:
          goto <D.20923>;
          <D.20915>:
          D.20924 = sgen_los_is_valid_object (__target);
          if (D.20924 != 0) goto <D.20925>; else goto <D.20926>;
          <D.20925>:
          D.20927 = sgen_los_object_is_pinned (__target);
          D.20928 = D.20927 == 0;
          D.20929 = (long int) D.20928;
          D.20930 = __builtin_expect (D.20929, 0);
          if (D.20930 != 0) goto <D.20931>; else goto <D.20932>;
          <D.20931>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 93, "sgen_los_object_is_pinned (__target)");
          <D.20932>:
          goto <D.20933>;
          <D.20926>:
          D.20571 = major_collector.is_valid_object;
          D.20934 = D.20571 (__target);
          if (D.20934 != 0) goto <D.20935>; else goto <D.20936>;
          <D.20935>:
          D.20526 = major_collector.is_object_live;
          D.20937 = D.20526 (__target);
          D.20938 = D.20937 == 0;
          D.20939 = (long int) D.20938;
          D.20940 = __builtin_expect (D.20939, 0);
          if (D.20940 != 0) goto <D.20941>; else goto <D.20942>;
          <D.20941>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 93, "major_collector.is_object_live (__target)");
          <D.20942>:
          goto <D.20943>;
          <D.20936>:
          monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 93);
          <D.20943>:
          <D.20933>:
          <D.20923>:
          <D.20906>:
        }
        <D.20904>:
        _bmap = _bmap >> 1;
        _objptr = _objptr + 8;
        <D.18885>:
        if (_bmap != 0) goto <D.18884>; else goto <D.18886>;
        <D.18886>:
        start_run = start_run + 512;
      }
      <D.18888>:
      bwords.109 = bwords;
      bwords = bwords.109 + -1;
      if (bwords.109 > 0) goto <D.18887>; else goto <D.18889>;
      <D.18889>:
    }
    goto <D.18825>;
    <D.18890>:
    {
      gsize * mbitmap_data;
      int mbwords;
      int el_size;
      char * e_start;
      char * e_end;

      D.20945 = vt->desc;
      mbitmap_data = sgen_get_complex_descriptor (D.20945);
      mbitmap_data.110 = mbitmap_data;
      mbitmap_data = mbitmap_data.110 + 8;
      D.20947 = *mbitmap_data.110;
      D.20948 = (unsigned int) D.20947;
      D.20949 = D.20948 + 4294967295;
      mbwords = (int) D.20949;
      D.20950 = vt->klass;
      el_size = mono_array_element_size (D.20950);
      e_start = start + 32;
      D.20713 = MEM[(struct MonoArray *)start].max_length;
      el_size.111 = (unsigned int) el_size;
      D.20952 = D.20713 * el_size.111;
      D.20953 = (sizetype) D.20952;
      e_end = e_start + D.20953;
      if (0 != 0) goto <D.20954>; else goto <D.20955>;
      <D.20954>:
      D.20945 = vt->desc;
      D.20950 = vt->klass;
      D.20956 = D.20950->name_space;
      D.20950 = vt->klass;
      D.20957 = D.20950->name;
      monoeg_g_print ("found %d at %p (0x%zx): %s.%s\n", mbwords, start, D.20945, D.20956, D.20957);
      <D.20955>:
      goto <D.18909>;
      <D.18908>:
      {
        void * * _objptr;
        gsize * bitmap_data;
        unsigned int bwords;

        _objptr = e_start;
        bitmap_data = mbitmap_data;
        bwords = (unsigned int) mbwords;
        goto <D.18906>;
        <D.18905>:
        {
          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.18903>;
          <D.18902>:
          D.20959 = _bmap & 1;
          if (D.20959 != 0) goto <D.20960>; else goto <D.20961>;
          <D.20960>:
          {
            char * __target;

            __target = MEM[(char * *)_objptr];
            if (__target != 0B) goto <D.20962>; else goto <D.20963>;
            <D.20962>:
            D.20964 = is_valid_object_pointer (__target);
            D.20965 = D.20964 == 0;
            D.20966 = (long int) D.20965;
            D.20967 = __builtin_expect (D.20966, 0);
            if (D.20967 != 0) goto <D.20968>; else goto <D.20969>;
            <D.20968>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 102, "is_valid_object_pointer (__target)");
            <D.20969>:
            D.20970 = sgen_ptr_in_nursery (__target);
            if (D.20970 != 0) goto <D.20971>; else goto <D.20972>;
            <D.20971>:
            D.20973 = MEM[(mword *)__target];
            D.20974 = D.20973 & 2;
            D.20975 = D.20974 == 0;
            D.20976 = (long int) D.20975;
            D.20977 = __builtin_expect (D.20976, 0);
            if (D.20977 != 0) goto <D.20978>; else goto <D.20979>;
            <D.20978>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 102, "SGEN_OBJECT_IS_PINNED (__target)");
            <D.20979>:
            goto <D.20980>;
            <D.20972>:
            D.20981 = sgen_los_is_valid_object (__target);
            if (D.20981 != 0) goto <D.20982>; else goto <D.20983>;
            <D.20982>:
            D.20984 = sgen_los_object_is_pinned (__target);
            D.20985 = D.20984 == 0;
            D.20986 = (long int) D.20985;
            D.20987 = __builtin_expect (D.20986, 0);
            if (D.20987 != 0) goto <D.20988>; else goto <D.20989>;
            <D.20988>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 102, "sgen_los_object_is_pinned (__target)");
            <D.20989>:
            goto <D.20990>;
            <D.20983>:
            D.20571 = major_collector.is_valid_object;
            D.20991 = D.20571 (__target);
            if (D.20991 != 0) goto <D.20992>; else goto <D.20993>;
            <D.20992>:
            D.20526 = major_collector.is_object_live;
            D.20994 = D.20526 (__target);
            D.20995 = D.20994 == 0;
            D.20996 = (long int) D.20995;
            D.20997 = __builtin_expect (D.20996, 0);
            if (D.20997 != 0) goto <D.20998>; else goto <D.20999>;
            <D.20998>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-scan-object.h", 102, "major_collector.is_object_live (__target)");
            <D.20999>:
            goto <D.21000>;
            <D.20993>:
            monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 102);
            <D.21000>:
            <D.20990>:
            <D.20980>:
            <D.20963>:
          }
          <D.20961>:
          _bmap = _bmap >> 1;
          _objptr = _objptr + 8;
          <D.18903>:
          if (_bmap != 0) goto <D.18902>; else goto <D.18904>;
          <D.18904>:
          _objptr = start_run + 512;
        }
        <D.18906>:
        bwords.113 = bwords;
        bwords = bwords.113 + 4294967295;
        if (bwords.113 != 0) goto <D.18905>; else goto <D.18907>;
        <D.18907>:
        D.21002 = (sizetype) el_size;
        e_start = e_start + D.21002;
      }
      <D.18909>:
      if (e_start < e_end) goto <D.18908>; else goto <D.18910>;
      <D.18910>:
    }
    goto <D.18825>;
    <D.18911>:
    goto <D.18825>;
    <D.18912>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "sgen-scan-object.h", 111);
    <D.18825>:
  }
}


sgen_check_nursery_objects_pinned (gboolean pinned)
{
  struct GCMemSection * nursery_section.114;
  char * D.21006;
  char * D.21007;
  long unsigned int D.21008;
  void * D.21009;

  sgen_clear_nursery_fragments ();
  nursery_section.114 = nursery_section;
  D.21006 = nursery_section.114->data;
  nursery_section.114 = nursery_section;
  D.21007 = nursery_section.114->end_data;
  D.21008 = (long unsigned int) pinned;
  D.21009 = (void *) D.21008;
  sgen_scan_area_with_callback (D.21006, D.21007, check_nursery_objects_pinned_callback, D.21009, 0);
}


check_nursery_objects_pinned_callback (char * obj, size_t size, void * data)
{
  long int data.115;
  int iftmp.116;
  long unsigned int D.21014;
  long unsigned int D.21015;
  long unsigned int D.21017;
  _Bool D.21019;
  long int D.21020;
  long int D.21021;
  long unsigned int D.21026;
  _Bool D.21027;
  long int D.21028;
  long int D.21029;
  _Bool D.21033;
  long int D.21034;
  long int D.21035;
  gboolean pinned;

  data.115 = (long int) data;
  pinned = (gboolean) data.115;
  D.21014 = MEM[(mword *)obj];
  D.21015 = D.21014 & 1;
  if (D.21015 != 0) goto <D.21016>; else goto <D.21012>;
  <D.21016>:
  D.21014 = MEM[(mword *)obj];
  D.21017 = D.21014 & 18446744073709551612;
  if (D.21017 != 0) goto <D.21018>; else goto <D.21012>;
  <D.21018>:
  iftmp.116 = 1;
  goto <D.21013>;
  <D.21012>:
  iftmp.116 = 0;
  <D.21013>:
  D.21019 = iftmp.116 != 0;
  D.21020 = (long int) D.21019;
  D.21021 = __builtin_expect (D.21020, 0);
  if (D.21021 != 0) goto <D.21022>; else goto <D.21023>;
  <D.21022>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-debug.c", 575, "!SGEN_OBJECT_IS_FORWARDED (obj)");
  <D.21023>:
  if (pinned != 0) goto <D.21024>; else goto <D.21025>;
  <D.21024>:
  D.21014 = MEM[(mword *)obj];
  D.21026 = D.21014 & 2;
  D.21027 = D.21026 == 0;
  D.21028 = (long int) D.21027;
  D.21029 = __builtin_expect (D.21028, 0);
  if (D.21029 != 0) goto <D.21030>; else goto <D.21031>;
  <D.21030>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-debug.c", 577, "SGEN_OBJECT_IS_PINNED (obj)");
  <D.21031>:
  goto <D.21032>;
  <D.21025>:
  D.21014 = MEM[(mword *)obj];
  D.21026 = D.21014 & 2;
  D.21033 = D.21026 != 0;
  D.21034 = (long int) D.21033;
  D.21035 = __builtin_expect (D.21034, 0);
  if (D.21035 != 0) goto <D.21036>; else goto <D.21037>;
  <D.21036>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "sgen-debug.c", 579, "!SGEN_OBJECT_IS_PINNED (obj)");
  <D.21037>:
  <D.21032>:
}


