mono_verifier_set_mode (MiniVerifierMode mode)
{
  verifier_mode = mode;
}


mono_verifier_enable_verify_all ()
{
  verify_all = 1;
}


mono_free_verify_list (struct GSList * list)
{
  char * D.20509;
  struct MonoVerifyInfoExtended * info;
  struct GSList * tmp;

  tmp = list;
  goto <D.18704>;
  <D.18703>:
  info = tmp->data;
  D.20509 = info->info.message;
  monoeg_g_free (D.20509);
  monoeg_g_free (info);
  tmp = tmp->next;
  <D.18704>:
  if (tmp != 0B) goto <D.18703>; else goto <D.18705>;
  <D.18705>:
  monoeg_g_slist_free (list);
}


mono_verifier_is_signature_compatible (struct MonoMethodSignature * target, struct MonoMethodSignature * candidate)
{
  gboolean D.20510;

  D.20510 = mono_delegate_signature_equal (target, candidate, 0);
  return D.20510;
}


mono_delegate_signature_equal (struct MonoMethodSignature * delegate_sig, struct MonoMethodSignature * method_sig, gboolean is_static_ldftn)
{
  _Bool D.20512;
  short unsigned int D.20513;
  int D.20514;
  int D.20515;
  short unsigned int D.20516;
  int D.20517;
  gboolean D.20520;
  long unsigned int D.20521;
  long unsigned int D.20522;
  long unsigned int D.20523;
  long unsigned int D.20524;
  int D.20527;
  int D.20528;
  struct MonoType * D.20531;
  struct MonoType * D.20532;
  int D.20533;
  int i;
  int method_offset;

  D.20512 = is_static_ldftn != 0;
  method_offset = (int) D.20512;
  D.20513 = delegate_sig->param_count;
  D.20514 = (int) D.20513;
  D.20515 = D.20514 + method_offset;
  D.20516 = method_sig->param_count;
  D.20517 = (int) D.20516;
  if (D.20515 != D.20517) goto <D.20518>; else goto <D.20519>;
  <D.20518>:
  D.20520 = 0;
  return D.20520;
  <D.20519>:
  D.20521 = BIT_FIELD_REF <*delegate_sig, 64, 64>;
  D.20522 = BIT_FIELD_REF <*method_sig, 64, 64>;
  D.20523 = D.20521 ^ D.20522;
  D.20524 = D.20523 & 17732923532771328;
  if (D.20524 != 0) goto <D.20525>; else goto <D.20526>;
  <D.20525>:
  D.20520 = 0;
  return D.20520;
  <D.20526>:
  i = 0;
  goto <D.19186>;
  <D.19185>:
  {
    struct MonoType * p1;
    struct MonoType * p2;

    p1 = delegate_sig->params[i];
    D.20527 = i + method_offset;
    p2 = method_sig->params[D.20527];
    D.20528 = mono_delegate_param_equal (p1, p2);
    if (D.20528 == 0) goto <D.20529>; else goto <D.20530>;
    <D.20529>:
    D.20520 = 0;
    return D.20520;
    <D.20530>:
  }
  i = i + 1;
  <D.19186>:
  D.20513 = delegate_sig->param_count;
  D.20514 = (int) D.20513;
  if (D.20514 > i) goto <D.19185>; else goto <D.19187>;
  <D.19187>:
  D.20531 = delegate_sig->ret;
  D.20532 = method_sig->ret;
  D.20533 = mono_delegate_ret_equal (D.20531, D.20532);
  if (D.20533 == 0) goto <D.20534>; else goto <D.20535>;
  <D.20534>:
  D.20520 = 0;
  return D.20520;
  <D.20535>:
  D.20520 = 1;
  return D.20520;
}


mono_delegate_param_equal (struct MonoType * delegate, struct MonoType * method)
{
  int D.20537;
  gboolean D.20540;

  D.20537 = mono_metadata_type_equal_full (delegate, method, 1);
  if (D.20537 != 0) goto <D.20538>; else goto <D.20539>;
  <D.20538>:
  D.20540 = 1;
  return D.20540;
  <D.20539>:
  D.20540 = mono_delegate_type_equal (method, delegate);
  return D.20540;
}


mono_delegate_type_equal (struct MonoType * target, struct MonoType * candidate)
{
  long unsigned int D.20542;
  long unsigned int D.20543;
  long unsigned int D.20544;
  long unsigned int D.20545;
  gboolean D.20548;
  unsigned char D.20549;
  int D.20550;
  unsigned char D.20551;
  _Bool D.20552;
  struct MonoType * D.20555;
  struct MonoType * D.20556;
  struct MonoMethodSignature * D.20559;
  struct MonoMethodSignature * D.20560;
  struct MonoClass * D.20561;
  struct MonoClass * D.20562;
  struct MonoClass * D.20565;
  struct MonoClass * D.20566;
  struct MonoClass * D.20567;
  struct MonoClass * D.20568;
  struct MonoClass * D.20571;
  struct MonoClass * D.20572;
  _Bool D.20573;
  int iftmp.0;
  struct MonoGenericParam * D.20578;
  short unsigned int D.20579;
  struct MonoGenericParam * D.20580;
  short unsigned int D.20581;
  int iftmp.1;

  D.20542 = BIT_FIELD_REF <*candidate, 64, 64>;
  D.20543 = BIT_FIELD_REF <*target, 64, 64>;
  D.20544 = D.20542 ^ D.20543;
  D.20545 = D.20544 & 1073741824;
  if (D.20545 != 0) goto <D.20546>; else goto <D.20547>;
  <D.20546>:
  D.20548 = 0;
  return D.20548;
  <D.20547>:
  D.20549 = target->type;
  D.20550 = (int) D.20549;
  switch (D.20550) <default: <D.19167>, case 1: <D.19138>, case 2: <D.19141>, case 3: <D.19144>, case 4: <D.19139>, case 5: <D.19140>, case 6: <D.19142>, case 7: <D.19143>, case 8: <D.19145>, case 9: <D.19146>, case 10: <D.19147>, case 11: <D.19148>, case 12: <D.19149>, case 13: <D.19150>, case 14: <D.19153>, case 15: <D.19155>, case 17: <D.19164>, case 18: <D.19161>, case 19: <D.19165>, case 20: <D.19163>, case 21: <D.19157>, case 22: <D.19154>, case 24: <D.19151>, case 25: <D.19152>, case 27: <D.19156>, case 28: <D.19160>, case 29: <D.19162>, case 30: <D.19166>>
  <D.19138>:
  <D.19139>:
  <D.19140>:
  <D.19141>:
  <D.19142>:
  <D.19143>:
  <D.19144>:
  <D.19145>:
  <D.19146>:
  <D.19147>:
  <D.19148>:
  <D.19149>:
  <D.19150>:
  <D.19151>:
  <D.19152>:
  <D.19153>:
  <D.19154>:
  D.20551 = candidate->type;
  D.20549 = target->type;
  D.20552 = D.20551 == D.20549;
  D.20548 = (gboolean) D.20552;
  return D.20548;
  <D.19155>:
  D.20551 = candidate->type;
  if (D.20551 != 15) goto <D.20553>; else goto <D.20554>;
  <D.20553>:
  D.20548 = 0;
  return D.20548;
  <D.20554>:
  D.20555 = target->data.type;
  D.20556 = candidate->data.type;
  D.20548 = mono_delegate_type_equal (D.20555, D.20556);
  return D.20548;
  <D.19156>:
  D.20551 = candidate->type;
  if (D.20551 != 27) goto <D.20557>; else goto <D.20558>;
  <D.20557>:
  D.20548 = 0;
  return D.20548;
  <D.20558>:
  D.20559 = mono_type_get_signature (target);
  D.20560 = mono_type_get_signature (candidate);
  D.20548 = mono_delegate_signature_equal (D.20559, D.20560, 0);
  return D.20548;
  <D.19157>:
  {
    struct MonoClass * target_klass;
    struct MonoClass * candidate_klass;

    target_klass = mono_class_from_mono_type (target);
    candidate_klass = mono_class_from_mono_type (candidate);
    D.20548 = verifier_class_is_assignable_from (target_klass, candidate_klass);
    return D.20548;
  }
  <D.19160>:
  D.20548 = mono_type_is_reference (candidate);
  return D.20548;
  <D.19161>:
  D.20561 = target->data.klass;
  D.20562 = mono_class_from_mono_type (candidate);
  D.20548 = verifier_class_is_assignable_from (D.20561, D.20562);
  return D.20548;
  <D.19162>:
  D.20551 = candidate->type;
  if (D.20551 != 29) goto <D.20563>; else goto <D.20564>;
  <D.20563>:
  D.20548 = 0;
  return D.20548;
  <D.20564>:
  D.20565 = mono_class_from_mono_type (target);
  D.20566 = D.20565->element_class;
  D.20567 = mono_class_from_mono_type (candidate);
  D.20568 = D.20567->element_class;
  D.20548 = verifier_class_is_assignable_from (D.20566, D.20568);
  return D.20548;
  <D.19163>:
  D.20551 = candidate->type;
  if (D.20551 != 20) goto <D.20569>; else goto <D.20570>;
  <D.20569>:
  D.20548 = 0;
  return D.20548;
  <D.20570>:
  D.20548 = is_array_type_compatible (target, candidate);
  return D.20548;
  <D.19164>:
  D.20571 = mono_class_from_mono_type (candidate);
  D.20572 = mono_class_from_mono_type (target);
  D.20573 = D.20571 == D.20572;
  D.20548 = (gboolean) D.20573;
  return D.20548;
  <D.19165>:
  D.20551 = candidate->type;
  if (D.20551 == 19) goto <D.20577>; else goto <D.20575>;
  <D.20577>:
  D.20578 = target->data.generic_param;
  D.20579 = D.20578->num;
  D.20580 = candidate->data.generic_param;
  D.20581 = D.20580->num;
  if (D.20579 == D.20581) goto <D.20582>; else goto <D.20575>;
  <D.20582>:
  iftmp.0 = 1;
  goto <D.20576>;
  <D.20575>:
  iftmp.0 = 0;
  <D.20576>:
  D.20548 = iftmp.0;
  return D.20548;
  D.20548 = 0;
  return D.20548;
  <D.19166>:
  D.20551 = candidate->type;
  if (D.20551 == 30) goto <D.20586>; else goto <D.20584>;
  <D.20586>:
  D.20578 = target->data.generic_param;
  D.20579 = D.20578->num;
  D.20580 = candidate->data.generic_param;
  D.20581 = D.20580->num;
  if (D.20579 == D.20581) goto <D.20587>; else goto <D.20584>;
  <D.20587>:
  iftmp.1 = 1;
  goto <D.20585>;
  <D.20584>:
  iftmp.1 = 0;
  <D.20585>:
  D.20548 = iftmp.1;
  return D.20548;
  D.20548 = 0;
  return D.20548;
  <D.19167>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "verify.c", 2594);
  D.20548 = 0;
  return D.20548;
}


verifier_class_is_assignable_from (struct MonoClass * target, struct MonoClass * candidate)
{
  gboolean D.20591;
  int D.20592;
  unsigned int D.20598;
  unsigned int D.20599;
  unsigned char D.20601;
  unsigned int D.20605;
  unsigned int D.20606;
  unsigned char D.20608;
  int D.20610;
  unsigned char D.20613;
  struct MonoClass * D.20616;
  struct MonoClass * D.20617;
  int D.20618;
  struct MonoClass * D.20621;
  int D.20622;
  struct MonoClass * D.20625;
  int D.20626;
  struct MonoClass * D.20629;
  int D.20630;
  struct MonoClass * D.20633;
  int D.20634;
  int D.20638;
  struct MonoClass * * D.20641;
  long unsigned int D.20642;
  long unsigned int D.20643;
  struct MonoClass * * D.20644;
  int D.20645;
  short unsigned int D.20648;
  int D.20649;
  struct MonoClass * * D.20650;
  struct MonoClass * * D.20651;
  int D.20652;
  short unsigned int D.20655;
  int D.20656;
  struct MonoClass * D.20658;
  long unsigned int D.20659;
  long unsigned int D.20660;
  int D.20663;
  int D.20666;
  struct MonoGenericClass * D.20674;
  struct MonoClass * D.20678;
  struct MonoClass * D.20681;
  struct MonoGenericInst * D.20684;
  struct MonoType * D.20685;
  struct MonoClass * iface_gtd;

  if (target == candidate) goto <D.20589>; else goto <D.20590>;
  <D.20589>:
  D.20591 = 1;
  return D.20591;
  <D.20590>:
  D.20592 = mono_class_has_variant_generic_params (target);
  if (D.20592 != 0) goto <D.20593>; else goto <D.20594>;
  <D.20593>:
  D.20598 = target->flags;
  D.20599 = D.20598 & 32;
  if (D.20599 != 0) goto <D.20595>; else goto <D.20600>;
  <D.20600>:
  D.20601 = target->byval_arg.type;
  if (D.20601 == 19) goto <D.20595>; else goto <D.20602>;
  <D.20602>:
  D.20601 = target->byval_arg.type;
  if (D.20601 == 30) goto <D.20595>; else goto <D.20596>;
  <D.20595>:
  D.20605 = candidate->flags;
  D.20606 = D.20605 & 32;
  if (D.20606 != 0) goto <D.20603>; else goto <D.20607>;
  <D.20607>:
  D.20608 = candidate->byval_arg.type;
  if (D.20608 == 19) goto <D.20603>; else goto <D.20609>;
  <D.20609>:
  D.20608 = candidate->byval_arg.type;
  if (D.20608 == 30) goto <D.20603>; else goto <D.20604>;
  <D.20603>:
  D.20610 = mono_class_is_variant_compatible (target, candidate, 1);
  if (D.20610 != 0) goto <D.20611>; else goto <D.20612>;
  <D.20611>:
  D.20591 = 1;
  return D.20591;
  <D.20612>:
  <D.20604>:
  D.20613 = candidate->rank;
  if (D.20613 == 1) goto <D.20614>; else goto <D.20615>;
  <D.20614>:
  D.20616 = mono_defaults.generic_ilist_class;
  D.20617 = candidate->element_class;
  D.20618 = verifier_inflate_and_check_compat (target, D.20616, D.20617);
  if (D.20618 != 0) goto <D.20619>; else goto <D.20620>;
  <D.20619>:
  D.20591 = 1;
  return D.20591;
  <D.20620>:
  D.20621 = get_icollection_class ();
  D.20617 = candidate->element_class;
  D.20622 = verifier_inflate_and_check_compat (target, D.20621, D.20617);
  if (D.20622 != 0) goto <D.20623>; else goto <D.20624>;
  <D.20623>:
  D.20591 = 1;
  return D.20591;
  <D.20624>:
  D.20625 = get_ienumerable_class ();
  D.20617 = candidate->element_class;
  D.20626 = verifier_inflate_and_check_compat (target, D.20625, D.20617);
  if (D.20626 != 0) goto <D.20627>; else goto <D.20628>;
  <D.20627>:
  D.20591 = 1;
  return D.20591;
  <D.20628>:
  D.20629 = get_ireadonlylist_class ();
  D.20617 = candidate->element_class;
  D.20630 = verifier_inflate_and_check_compat (target, D.20629, D.20617);
  if (D.20630 != 0) goto <D.20631>; else goto <D.20632>;
  <D.20631>:
  D.20591 = 1;
  return D.20591;
  <D.20632>:
  D.20633 = get_ireadonlycollection_class ();
  D.20617 = candidate->element_class;
  D.20634 = verifier_inflate_and_check_compat (target, D.20633, D.20617);
  if (D.20634 != 0) goto <D.20635>; else goto <D.20636>;
  <D.20635>:
  D.20591 = 1;
  return D.20591;
  <D.20636>:
  goto <D.20637>;
  <D.20615>:
  {
    struct MonoError error;
    int i;

    try
      {
        goto <D.19034>;
        <D.19033>:
        mono_class_setup_interfaces (candidate, &error);
        D.20638 = mono_error_ok (&error);
        if (D.20638 == 0) goto <D.20639>; else goto <D.20640>;
        <D.20639>:
        mono_error_cleanup (&error);
        D.20591 = 0;
        return D.20591;
        <D.20640>:
        i = 0;
        goto <D.19027>;
        <D.19026>:
        {
          struct MonoClass * iface;

          D.20641 = candidate->interfaces_packed;
          D.20642 = (long unsigned int) i;
          D.20643 = D.20642 * 8;
          D.20644 = D.20641 + D.20643;
          iface = *D.20644;
          D.20645 = mono_class_is_variant_compatible (target, iface, 1);
          if (D.20645 != 0) goto <D.20646>; else goto <D.20647>;
          <D.20646>:
          D.20591 = 1;
          return D.20591;
          <D.20647>:
        }
        i = i + 1;
        <D.19027>:
        D.20648 = candidate->interface_offsets_count;
        D.20649 = (int) D.20648;
        if (D.20649 > i) goto <D.19026>; else goto <D.19028>;
        <D.19028>:
        i = 0;
        goto <D.19031>;
        <D.19030>:
        {
          struct MonoClass * iface;

          D.20650 = candidate->interfaces;
          D.20642 = (long unsigned int) i;
          D.20643 = D.20642 * 8;
          D.20651 = D.20650 + D.20643;
          iface = *D.20651;
          D.20652 = mono_class_is_variant_compatible (target, iface, 1);
          if (D.20652 != 0) goto <D.20653>; else goto <D.20654>;
          <D.20653>:
          D.20591 = 1;
          return D.20591;
          <D.20654>:
        }
        i = i + 1;
        <D.19031>:
        D.20655 = candidate->interface_count;
        D.20656 = (int) D.20655;
        if (D.20656 > i) goto <D.19030>; else goto <D.19032>;
        <D.19032>:
        candidate = candidate->parent;
        <D.19034>:
        if (candidate != 0B) goto <D.20657>; else goto <D.19035>;
        <D.20657>:
        D.20658 = mono_defaults.object_class;
        if (D.20658 != candidate) goto <D.19033>; else goto <D.19035>;
        <D.19035>:
      }
    finally
      {
        error = {CLOBBER};
      }
  }
  <D.20637>:
  goto <D.20597>;
  <D.20596>:
  D.20659 = BIT_FIELD_REF <*target, 64, 256>;
  D.20660 = D.20659 & 16777216;
  if (D.20660 != 0) goto <D.20661>; else goto <D.20662>;
  <D.20661>:
  D.20663 = mono_class_is_variant_compatible (target, candidate, 1);
  if (D.20663 != 0) goto <D.20664>; else goto <D.20665>;
  <D.20664>:
  D.20591 = 1;
  return D.20591;
  <D.20665>:
  <D.20662>:
  <D.20597>:
  D.20591 = 0;
  return D.20591;
  <D.20594>:
  D.20666 = mono_class_is_assignable_from (target, candidate);
  if (D.20666 != 0) goto <D.20667>; else goto <D.20668>;
  <D.20667>:
  D.20591 = 1;
  return D.20591;
  <D.20668>:
  D.20598 = target->flags;
  D.20599 = D.20598 & 32;
  if (D.20599 == 0) goto <D.20672>; else goto <D.20669>;
  <D.20672>:
  D.20601 = target->byval_arg.type;
  if (D.20601 != 19) goto <D.20673>; else goto <D.20669>;
  <D.20673>:
  D.20601 = target->byval_arg.type;
  if (D.20601 != 30) goto <D.20670>; else goto <D.20669>;
  <D.20669>:
  D.20674 = target->generic_class;
  if (D.20674 == 0B) goto <D.20670>; else goto <D.20675>;
  <D.20675>:
  D.20613 = candidate->rank;
  if (D.20613 != 1) goto <D.20670>; else goto <D.20671>;
  <D.20670>:
  D.20591 = 0;
  return D.20591;
  <D.20671>:
  D.20674 = target->generic_class;
  iface_gtd = D.20674->container_class;
  D.20616 = mono_defaults.generic_ilist_class;
  if (D.20616 != iface_gtd) goto <D.20676>; else goto <D.20677>;
  <D.20676>:
  D.20678 = get_icollection_class ();
  if (D.20678 != iface_gtd) goto <D.20679>; else goto <D.20680>;
  <D.20679>:
  D.20681 = get_ienumerable_class ();
  if (D.20681 != iface_gtd) goto <D.20682>; else goto <D.20683>;
  <D.20682>:
  D.20591 = 0;
  return D.20591;
  <D.20683>:
  <D.20680>:
  <D.20677>:
  D.20674 = target->generic_class;
  D.20684 = D.20674->context.class_inst;
  D.20685 = D.20684->type_argv[0];
  target = mono_class_from_mono_type (D.20685);
  candidate = candidate->element_class;
  D.20591 = 1;
  return D.20591;
}


get_ireadonlylist_class ()
{
  struct MonoClass * generic_ireadonlylist_class.2;
  struct MonoImage * D.20692;
  struct MonoClass * generic_ireadonlylist_class.3;
  struct MonoClass * D.20694;
  static struct MonoClass * generic_ireadonlylist_class = 0B;

  generic_ireadonlylist_class.2 = generic_ireadonlylist_class;
  if (generic_ireadonlylist_class.2 == 0B) goto <D.20690>; else goto <D.20691>;
  <D.20690>:
  D.20692 = mono_defaults.corlib;
  generic_ireadonlylist_class.3 = mono_class_from_name (D.20692, "System.Collections.Generic", "IReadOnlyList`1");
  generic_ireadonlylist_class = generic_ireadonlylist_class.3;
  <D.20691>:
  D.20694 = generic_ireadonlylist_class;
  return D.20694;
}


get_ireadonlycollection_class ()
{
  struct MonoClass * generic_ireadonlycollection_class.4;
  struct MonoImage * D.20699;
  struct MonoClass * generic_ireadonlycollection_class.5;
  struct MonoClass * D.20701;
  static struct MonoClass * generic_ireadonlycollection_class = 0B;

  generic_ireadonlycollection_class.4 = generic_ireadonlycollection_class;
  if (generic_ireadonlycollection_class.4 == 0B) goto <D.20697>; else goto <D.20698>;
  <D.20697>:
  D.20699 = mono_defaults.corlib;
  generic_ireadonlycollection_class.5 = mono_class_from_name (D.20699, "System.Collections.Generic", "IReadOnlyCollection`1");
  generic_ireadonlycollection_class = generic_ireadonlycollection_class.5;
  <D.20698>:
  D.20701 = generic_ireadonlycollection_class;
  return D.20701;
}


verifier_inflate_and_check_compat (struct MonoClass * target, struct MonoClass * gtd, struct MonoClass * arg)
{
  gboolean D.20705;
  int D.20706;
  struct MonoClass * tmp;

  tmp = inflate_class_one_arg (gtd, arg);
  if (tmp == 0B) goto <D.20703>; else goto <D.20704>;
  <D.20703>:
  D.20705 = 0;
  return D.20705;
  <D.20704>:
  D.20706 = mono_class_is_variant_compatible (target, tmp, 1);
  if (D.20706 != 0) goto <D.20707>; else goto <D.20708>;
  <D.20707>:
  D.20705 = 1;
  return D.20705;
  <D.20708>:
  D.20705 = 0;
  return D.20705;
}


inflate_class_one_arg (struct MonoClass * gtype, struct MonoClass * arg0)
{
  struct MonoType * D.20710;
  struct MonoClass * D.20711;
  struct MonoType * args[1];

  try
    {
      D.20710 = &arg0->byval_arg;
      args[0] = D.20710;
      D.20711 = mono_class_bind_generic_parameters (gtype, 1, &args, 0);
      return D.20711;
    }
  finally
    {
      args = {CLOBBER};
    }
}


get_icollection_class ()
{
  struct MonoClass * generic_icollection_class.6;
  struct MonoImage * D.20717;
  struct MonoClass * generic_icollection_class.7;
  struct MonoClass * D.20719;
  static struct MonoClass * generic_icollection_class = 0B;

  generic_icollection_class.6 = generic_icollection_class;
  if (generic_icollection_class.6 == 0B) goto <D.20715>; else goto <D.20716>;
  <D.20715>:
  D.20717 = mono_defaults.corlib;
  generic_icollection_class.7 = mono_class_from_name (D.20717, "System.Collections.Generic", "ICollection`1");
  generic_icollection_class = generic_icollection_class.7;
  <D.20716>:
  D.20719 = generic_icollection_class;
  return D.20719;
}


get_ienumerable_class ()
{
  struct MonoClass * generic_ienumerable_class.8;
  struct MonoImage * D.20724;
  struct MonoClass * generic_ienumerable_class.9;
  struct MonoClass * D.20726;
  static struct MonoClass * generic_ienumerable_class = 0B;

  generic_ienumerable_class.8 = generic_ienumerable_class;
  if (generic_ienumerable_class.8 == 0B) goto <D.20722>; else goto <D.20723>;
  <D.20722>:
  D.20724 = mono_defaults.corlib;
  generic_ienumerable_class.9 = mono_class_from_name (D.20724, "System.Collections.Generic", "IEnumerable`1");
  generic_ienumerable_class = generic_ienumerable_class.9;
  <D.20723>:
  D.20726 = generic_ienumerable_class;
  return D.20726;
}


is_array_type_compatible (struct MonoType * target, struct MonoType * candidate)
{
  unsigned char D.20728;
  _Bool D.20729;
  long int D.20730;
  long int D.20731;
  unsigned char D.20734;
  _Bool D.20735;
  long int D.20736;
  long int D.20737;
  unsigned char D.20740;
  unsigned char D.20741;
  gboolean D.20744;
  struct MonoClass * D.20745;
  struct MonoClass * D.20746;
  struct MonoArrayType * left;
  struct MonoArrayType * right;

  left = target->data.array;
  right = candidate->data.array;
  D.20728 = target->type;
  D.20729 = D.20728 != 20;
  D.20730 = (long int) D.20729;
  D.20731 = __builtin_expect (D.20730, 0);
  if (D.20731 != 0) goto <D.20732>; else goto <D.20733>;
  <D.20732>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1880, "target->type == MONO_TYPE_ARRAY");
  <D.20733>:
  D.20734 = candidate->type;
  D.20735 = D.20734 != 20;
  D.20736 = (long int) D.20735;
  D.20737 = __builtin_expect (D.20736, 0);
  if (D.20737 != 0) goto <D.20738>; else goto <D.20739>;
  <D.20738>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1881, "candidate->type == MONO_TYPE_ARRAY");
  <D.20739>:
  D.20740 = left->rank;
  D.20741 = right->rank;
  if (D.20740 != D.20741) goto <D.20742>; else goto <D.20743>;
  <D.20742>:
  D.20744 = 0;
  return D.20744;
  <D.20743>:
  D.20745 = left->eklass;
  D.20746 = right->eklass;
  D.20744 = verifier_class_is_assignable_from (D.20745, D.20746);
  return D.20744;
}


mono_delegate_ret_equal (struct MonoType * delegate, struct MonoType * method)
{
  int D.20748;
  gboolean D.20751;

  D.20748 = mono_metadata_type_equal_full (delegate, method, 1);
  if (D.20748 != 0) goto <D.20749>; else goto <D.20750>;
  <D.20749>:
  D.20751 = 1;
  return D.20751;
  <D.20750>:
  D.20751 = mono_delegate_type_equal (delegate, method);
  return D.20751;
}


mono_method_verify (struct MonoMethod * method, int level)
{
  short unsigned int D.20755;
  int D.20756;
  int D.20757;
  short unsigned int D.20759;
  int D.20760;
  int D.20761;
  struct GSList * D.20762;
  struct MonoMethodSignature * D.20763;
  struct MonoMethodSignature * D.20764;
  gchar * D.20767;
  struct GSList * D.20768;
  struct GSList * D.20769;
  long unsigned int D.20770;
  long unsigned int D.20771;
  struct MonoClass * D.20774;
  long unsigned int D.20775;
  long unsigned int D.20776;
  long unsigned int D.20779;
  long unsigned int D.20780;
  gchar * D.20783;
  struct GSList * D.20784;
  struct MonoMethodHeader * D.20785;
  struct MonoMethodHeader * D.20786;
  gchar * D.20789;
  struct GSList * D.20790;
  unsigned int D.20791;
  sizetype D.20792;
  short unsigned int D.20793;
  int D.20794;
  <unnamed-unsigned:1> D.20795;
  int D.20796;
  int D.20797;
  <unnamed-unsigned:15> D.20798;
  int D.20799;
  int D.20800;
  long unsigned int D.20801;
  long unsigned int D.20802;
  void * D.20803;
  int D.20804;
  struct ILCodeDesc * D.20805;
  short unsigned int D.20806;
  int D.20807;
  struct MonoType *[0:] * D.20808;
  unsigned int D.20809;
  unsigned int D.20810;
  void * D.20811;
  int D.20812;
  long unsigned int D.20815;
  long unsigned int D.20816;
  int D.20821;
  int D.20823;
  int D.20824;
  gchar * D.20825;
  struct GSList * D.20826;
  int D.20827;
  int D.20830;
  long unsigned int D.20831;
  long unsigned int D.20832;
  void * D.20833;
  long unsigned int D.20834;
  struct MonoType * * D.20837;
  struct MonoType * iftmp.10;
  long unsigned int D.20839;
  long unsigned int D.20843;
  long unsigned int D.20844;
  struct MonoType * * D.20845;
  struct MonoType *[0:] * D.20846;
  long unsigned int D.20847;
  long unsigned int D.20848;
  long unsigned int D.20849;
  struct MonoGenericContainer * D.20856;
  struct MonoGenericContainer * D.20860;
  struct MonoType * * D.20862;
  long unsigned int D.20863;
  long unsigned int D.20864;
  struct MonoType * * D.20865;
  struct MonoType * D.20866;
  struct MonoGenericContext * D.20867;
  struct MonoType * D.20868;
  int D.20869;
  struct MonoType * iftmp.11;
  gchar * D.20876;
  struct GSList * D.20877;
  struct MonoType * * D.20878;
  struct MonoType * D.20879;
  struct MonoType * D.20880;
  int D.20881;
  struct MonoType * iftmp.12;
  gchar * D.20888;
  struct GSList * D.20889;
  int D.20890;
  int D.20892;
  gchar * D.20895;
  struct GSList * D.20896;
  int D.20897;
  int D.20899;
  gchar * D.20902;
  struct GSList * D.20903;
  struct MonoExceptionClause * D.20905;
  long unsigned int D.20906;
  unsigned int D.20909;
  int D.20910;
  unsigned int D.20911;
  unsigned int D.20913;
  unsigned int D.20914;
  unsigned int D.20916;
  gchar * D.20917;
  struct GSList * D.20918;
  gchar * D.20921;
  struct GSList * D.20922;
  unsigned int D.20925;
  unsigned int D.20927;
  unsigned int D.20928;
  unsigned int D.20930;
  gchar * D.20931;
  struct GSList * D.20932;
  gchar * D.20935;
  struct GSList * D.20936;
  uint32_t iftmp.13;
  unsigned int D.20942;
  gchar * D.20947;
  struct GSList * D.20948;
  unsigned int D.20951;
  gchar * D.20954;
  struct GSList * D.20955;
  gchar * D.20958;
  struct GSList * D.20959;
  long unsigned int D.20960;
  long unsigned int D.20961;
  struct MonoExceptionClause * D.20962;
  <unnamed-unsigned:15> D.20963;
  int D.20964;
  long unsigned int D.20967;
  long unsigned int D.20968;
  struct ILCodeDesc * D.20969;
  short unsigned int D.20970;
  short unsigned int D.20971;
  long unsigned int D.20974;
  long unsigned int D.20975;
  struct ILCodeDesc * D.20976;
  short unsigned int D.20977;
  short unsigned int D.20978;
  long unsigned int D.20981;
  long unsigned int D.20982;
  struct ILCodeDesc * D.20983;
  short unsigned int D.20984;
  short unsigned int D.20985;
  struct MonoClass * D.20988;
  gchar * D.20991;
  struct GSList * D.20992;
  struct MonoType * D.20993;
  int D.20994;
  long unsigned int D.20996;
  long unsigned int D.20997;
  struct ILCodeDesc * D.20998;
  long unsigned int D.21002;
  long unsigned int D.21003;
  struct ILCodeDesc * D.21004;
  struct MonoClass * D.21005;
  int D.21008;
  const char * D.21011;
  gchar * D.21012;
  struct GSList * D.21013;
  _Bool D.21014;
  long int D.21015;
  long int D.21016;
  long int ip.14;
  long int code_start.15;
  long int D.21021;
  int D.21022;
  unsigned int D.21023;
  gchar * D.21026;
  struct GSList * D.21027;
  unsigned char D.21032;
  int D.21033;
  gchar * D.21034;
  struct GSList * D.21035;
  unsigned int op_size.16;
  unsigned int D.21039;
  unsigned int op_size.17;
  unsigned int D.21042;
  gchar * D.21043;
  struct GSList * D.21044;
  int op.18;
  int D.21048;
  const char * D.21051;
  gchar * D.21052;
  struct GSList * D.21053;
  unsigned int D.21054;
  unsigned int D.21055;
  unsigned int D.21056;
  gchar * D.21064;
  struct GSList * D.21065;
  unsigned int D.21068;
  unsigned int D.21069;
  unsigned int D.21070;
  unsigned int D.21075;
  gchar * D.21078;
  struct GSList * D.21079;
  gchar * D.21084;
  struct GSList * D.21085;
  gchar * D.21094;
  struct GSList * D.21095;
  gchar * D.21103;
  struct GSList * D.21104;
  short unsigned int D.21109;
  gchar * D.21114;
  struct GSList * D.21115;
  long unsigned int D.21117;
  long unsigned int D.21118;
  long unsigned int D.21121;
  long unsigned int D.21122;
  struct ILCodeDesc * D.21123;
  short unsigned int D.21124;
  short unsigned int D.21125;
  sizetype D.21126;
  int D.21130;
  long unsigned int D.21131;
  long unsigned int D.21132;
  struct ILCodeDesc * D.21133;
  int D.21134;
  unsigned int D.21135;
  const unsigned char * D.21138;
  long unsigned int ip.19;
  unsigned int D.21141;
  gchar * D.21142;
  struct GSList * D.21143;
  const unsigned char * D.21144;
  unsigned char D.21145;
  unsigned int D.21146;
  _Bool D.21147;
  int D.21148;
  unsigned int D.21149;
  int D.21150;
  int D.21152;
  unsigned int D.21153;
  int D.21154;
  unsigned int D.21155;
  gchar * D.21159;
  struct GSList * D.21160;
  unsigned int D.21161;
  gchar * D.21165;
  struct GSList * D.21166;
  int D.21167;
  struct MonoClass * D.21170;
  struct MonoType * D.21171;
  gchar * D.21175;
  struct GSList * D.21176;
  int D.21177;
  const unsigned char * D.21182;
  gchar * D.21184;
  struct GSList * D.21185;
  int D.21186;
  const unsigned char * D.21191;
  gchar * D.21193;
  struct GSList * D.21194;
  int D.21195;
  struct MonoClass * D.21198;
  struct MonoType * D.21199;
  gchar * D.21203;
  struct GSList * D.21204;
  int D.21205;
  struct MonoClass * D.21208;
  struct MonoType * D.21209;
  gchar * D.21213;
  struct GSList * D.21214;
  int D.21215;
  int D.21218;
  struct MonoClass * D.21221;
  struct MonoType * D.21222;
  gchar * D.21226;
  struct GSList * D.21227;
  signed char D.21228;
  int D.21229;
  int D.21230;
  gchar * D.21234;
  struct GSList * D.21235;
  gchar * D.21239;
  struct GSList * D.21240;
  const guint32 * D.21241;
  unsigned int D.21242;
  int D.21243;
  int D.21244;
  gchar * D.21248;
  struct GSList * D.21249;
  gchar * D.21253;
  struct GSList * D.21254;
  _Bool D.21255;
  int D.21256;
  gchar * D.21257;
  struct GSList * D.21258;
  int D.21259;
  int D.21261;
  struct ILStackDesc * D.21263;
  gchar * D.21267;
  struct GSList * D.21268;
  gchar * D.21271;
  struct GSList * D.21272;
  int D.21273;
  gchar * D.21276;
  struct GSList * D.21277;
  gchar * D.21281;
  struct GSList * D.21282;
  gchar * D.21288;
  struct GSList * D.21289;
  _Bool D.21290;
  int D.21291;
  gchar * D.21295;
  struct GSList * D.21296;
  gchar * D.21300;
  struct GSList * D.21301;
  gchar * D.21307;
  struct GSList * D.21308;
  gchar * D.21312;
  struct GSList * D.21313;
  gchar * D.21317;
  struct GSList * D.21318;
  gchar * D.21322;
  struct GSList * D.21323;
  gchar * D.21327;
  struct GSList * D.21328;
  gchar * D.21331;
  struct GSList * D.21332;
  long unsigned int D.21335;
  long unsigned int D.21336;
  const unsigned char * D.21337;
  long unsigned int D.21339;
  gchar * D.21340;
  struct GSList * D.21341;
  int entries.20;
  gchar * D.21346;
  struct GSList * D.21347;
  gchar * D.21351;
  struct GSList * D.21352;
  gchar * D.21356;
  struct GSList * D.21357;
  gchar * D.21361;
  struct GSList * D.21362;
  gchar * D.21366;
  struct GSList * D.21367;
  const char * iftmp.21;
  gchar * D.21372;
  struct GSList * D.21373;
  gchar * D.21377;
  struct GSList * D.21378;
  gchar * D.21382;
  struct GSList * D.21383;
  _Bool D.21384;
  int D.21385;
  gchar * D.21389;
  struct GSList * D.21390;
  _Bool D.21391;
  int D.21392;
  gchar * D.21396;
  struct GSList * D.21397;
  gchar * D.21401;
  struct GSList * D.21402;
  gchar * D.21406;
  struct GSList * D.21407;
  gchar * D.21411;
  struct GSList * D.21412;
  gchar * D.21416;
  struct GSList * D.21417;
  gchar * D.21421;
  struct GSList * D.21422;
  gchar * D.21426;
  struct GSList * D.21427;
  gchar * D.21431;
  struct GSList * D.21432;
  gchar * D.21436;
  struct GSList * D.21437;
  gchar * D.21441;
  struct GSList * D.21442;
  gchar * D.21446;
  struct GSList * D.21447;
  gchar * D.21451;
  struct GSList * D.21452;
  int D.21453;
  gchar * D.21456;
  struct GSList * D.21457;
  gchar * D.21461;
  struct GSList * D.21462;
  unsigned int D.21463;
  int D.21464;
  gchar * D.21468;
  struct GSList * D.21469;
  gchar * D.21473;
  struct GSList * D.21474;
  const unsigned char * D.21477;
  gchar * D.21479;
  struct GSList * D.21480;
  const guint16 * D.21481;
  short unsigned int D.21482;
  unsigned int D.21483;
  unsigned int D.21484;
  gchar * D.21488;
  struct GSList * D.21489;
  int D.21490;
  long unsigned int D.21492;
  gchar * D.21495;
  struct GSList * D.21496;
  struct ILStackDesc * D.21497;
  struct MonoClass * D.21498;
  struct MonoType * D.21499;
  gchar * D.21503;
  struct GSList * D.21504;
  gchar * D.21508;
  struct GSList * D.21509;
  gchar * D.21513;
  struct GSList * D.21514;
  unsigned int D.21515;
  _Bool D.21516;
  int D.21517;
  gchar * D.21521;
  struct GSList * D.21522;
  _Bool D.21523;
  int D.21524;
  gchar * D.21525;
  struct GSList * D.21526;
  gchar * D.21530;
  struct GSList * D.21531;
  unsigned char D.21534;
  gchar * D.21539;
  struct GSList * D.21540;
  gchar * D.21544;
  struct GSList * D.21545;
  gchar * D.21549;
  struct GSList * D.21550;
  struct MonoType * D.21551;
  unsigned int D.21552;
  unsigned int D.21553;
  int D.21554;
  gchar * D.21559;
  struct GSList * D.21560;
  int D.21563;
  gchar * D.21568;
  struct GSList * D.21569;
  int D.21572;
  gchar * D.21575;
  struct GSList * D.21576;
  gchar * D.21580;
  struct GSList * D.21581;
  gchar * D.21582;
  struct GSList * D.21583;
  gchar * D.21584;
  struct GSList * D.21585;
  long unsigned int D.21590;
  long unsigned int D.21591;
  struct ILCodeDesc * D.21592;
  short unsigned int D.21593;
  short unsigned int D.21594;
  unsigned int D.21595;
  int D.21597;
  unsigned int D.21600;
  gchar * D.21603;
  struct GSList * D.21604;
  unsigned int D.21605;
  gchar * D.21608;
  struct GSList * D.21609;
  unsigned int D.21610;
  gchar * D.21613;
  struct GSList * D.21614;
  unsigned int D.21615;
  gchar * D.21618;
  struct GSList * D.21619;
  gchar * D.21628;
  struct GSList * D.21629;
  long unsigned int D.21630;
  struct ILCodeDesc * D.21631;
  short unsigned int D.21632;
  int D.21633;
  int D.21634;
  int D.21637;
  gchar * D.21640;
  struct GSList * D.21641;
  int D.21642;
  gchar * D.21648;
  struct GSList * D.21649;
  int D.21652;
  int D.21655;
  gchar * D.21661;
  struct GSList * D.21662;
  int D.21665;
  gchar * D.21673;
  struct GSList * D.21674;
  unsigned int i.22;
  struct MonoMethod * D.21679;
  int D.21680;
  int D.21683;
  struct MonoClass * D.21686;
  long unsigned int D.21687;
  long unsigned int D.21688;
  struct MonoClass * D.21695;
  unsigned char D.21697;
  gchar * D.21702;
  struct GSList * D.21703;
  gchar * D.21709;
  struct GSList * D.21710;
  struct ILStackDesc * D.21715;
  unsigned int i.23;
  void * D.21719;
  struct GSList * D.21720;
  struct GSList * D.21721;
  struct ILStackDesc * D.21726;
  struct MonoError error;
  const unsigned char * ip;
  const unsigned char * code_start;
  const unsigned char * end;
  struct MonoSimpleBasicBlock * bb;
  struct MonoSimpleBasicBlock * original_bb;
  int i;
  int n;
  int need_merge;
  int start;
  guint token;
  guint ip_offset;
  guint prefix;
  struct MonoGenericContext * generic_context;
  struct MonoImage * image;
  struct VerifyContext ctx;
  struct GSList * tmp;
  void cleanup = <<< error >>>;

  try
    {
      bb = 0B;
      original_bb = 0B;
      need_merge = 0;
      start = 0;
      ip_offset = 0;
      prefix = 0;
      generic_context = 0B;
      D.20755 = method->iflags;
      D.20756 = (int) D.20755;
      D.20757 = D.20756 & 4099;
      if (D.20757 != 0) goto <D.20753>; else goto <D.20758>;
      <D.20758>:
      D.20759 = method->flags;
      D.20760 = (int) D.20759;
      D.20761 = D.20760 & 9216;
      if (D.20761 != 0) goto <D.20753>; else goto <D.20754>;
      <D.20753>:
      D.20762 = 0B;
      return D.20762;
      <D.20754>:
      memset (&ctx, 0, 168);
      D.20763 = mono_method_signature (method);
      ctx.signature = D.20763;
      D.20764 = ctx.signature;
      if (D.20764 == 0B) goto <D.20765>; else goto <D.20766>;
      <D.20765>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20767 = monoeg_g_strdup_printf ("Could not decode method signature");
        vinfo->info.message = D.20767;
        vinfo->exception_type = 3;
        D.20768 = ctx.list;
        D.20769 = monoeg_g_slist_prepend (D.20768, vinfo);
        ctx.list = D.20769;
      }
      ctx.valid = 0;
      D.20762 = ctx.list;
      return D.20762;
      <D.20766>:
      D.20770 = BIT_FIELD_REF <*method, 64, 256>;
      D.20771 = D.20770 & 2048;
      if (D.20771 == 0) goto <D.20772>; else goto <D.20773>;
      <D.20772>:
      D.20774 = method->klass;
      D.20775 = BIT_FIELD_REF <*D.20774, 64, 256>;
      D.20776 = D.20775 & 17179869184;
      if (D.20776 == 0) goto <D.20777>; else goto <D.20778>;
      <D.20777>:
      D.20764 = ctx.signature;
      D.20779 = BIT_FIELD_REF <*D.20764, 64, 64>;
      D.20780 = D.20779 & 288230376151711744;
      if (D.20780 != 0) goto <D.20781>; else goto <D.20782>;
      <D.20781>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20783 = monoeg_g_strdup_printf ("Method and signature don\'t match in terms of genericity");
        vinfo->info.message = D.20783;
        vinfo->exception_type = 3;
        D.20768 = ctx.list;
        D.20784 = monoeg_g_slist_prepend (D.20768, vinfo);
        ctx.list = D.20784;
      }
      ctx.valid = 0;
      D.20762 = ctx.list;
      return D.20762;
      <D.20782>:
      <D.20778>:
      <D.20773>:
      D.20785 = mono_method_get_header (method);
      ctx.header = D.20785;
      D.20786 = ctx.header;
      if (D.20786 == 0B) goto <D.20787>; else goto <D.20788>;
      <D.20787>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20789 = monoeg_g_strdup_printf ("Could not decode method header");
        vinfo->info.message = D.20789;
        vinfo->exception_type = 3;
        D.20768 = ctx.list;
        D.20790 = monoeg_g_slist_prepend (D.20768, vinfo);
        ctx.list = D.20790;
      }
      ctx.valid = 0;
      D.20762 = ctx.list;
      return D.20762;
      <D.20788>:
      ctx.method = method;
      D.20786 = ctx.header;
      ip = D.20786->code;
      code_start = ip;
      D.20786 = ctx.header;
      D.20791 = D.20786->code_size;
      D.20792 = (sizetype) D.20791;
      end = ip + D.20792;
      D.20774 = method->klass;
      image = D.20774->image;
      ctx.image = image;
      D.20764 = ctx.signature;
      D.20793 = D.20764->param_count;
      D.20794 = (int) D.20793;
      D.20764 = ctx.signature;
      D.20795 = D.20764->hasthis;
      D.20796 = (int) D.20795;
      D.20797 = D.20794 + D.20796;
      ctx.max_args = D.20797;
      D.20786 = ctx.header;
      D.20798 = D.20786->max_stack;
      D.20799 = (int) D.20798;
      ctx.max_stack = D.20799;
      ctx.valid = 1;
      D.20800 = ctx.valid;
      ctx.verifiable = D.20800;
      ctx.level = level;
      D.20786 = ctx.header;
      D.20791 = D.20786->code_size;
      D.20801 = (long unsigned int) D.20791;
      D.20802 = D.20801 * 16;
      D.20803 = monoeg_malloc (D.20802);
      ctx.code = D.20803;
      D.20786 = ctx.header;
      D.20791 = D.20786->code_size;
      D.20804 = (int) D.20791;
      ctx.code_size = D.20804;
      D.20805 = ctx.code;
      D.20786 = ctx.header;
      D.20791 = D.20786->code_size;
      D.20801 = (long unsigned int) D.20791;
      D.20802 = D.20801 * 16;
      memset (D.20805, 0, D.20802);
      D.20786 = ctx.header;
      D.20806 = D.20786->num_locals;
      D.20807 = (int) D.20806;
      ctx.num_locals = D.20807;
      D.20786 = ctx.header;
      D.20808 = &D.20786->locals;
      D.20786 = ctx.header;
      D.20806 = D.20786->num_locals;
      D.20809 = (unsigned int) D.20806;
      D.20810 = D.20809 * 8;
      D.20811 = monoeg_g_memdup (D.20808, D.20810);
      ctx.locals = D.20811;
      D.20812 = ctx.num_locals;
      if (D.20812 > 0) goto <D.20813>; else goto <D.20814>;
      <D.20813>:
      D.20786 = ctx.header;
      D.20815 = BIT_FIELD_REF <*D.20786, 64, 64>;
      D.20816 = D.20815 & 9223372036854775808;
      if (D.20816 == 0) goto <D.20817>; else goto <D.20818>;
      <D.20817>:
      D.20821 = ctx.verifiable;
      if (D.20821 != 0) goto <D.20819>; else goto <D.20822>;
      <D.20822>:
      D.20823 = ctx.level;
      D.20824 = D.20823 & 128;
      if (D.20824 != 0) goto <D.20819>; else goto <D.20820>;
      <D.20819>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.20825 = monoeg_g_strdup_printf ("Method with locals variable but without init locals set");
        vinfo->info.message = D.20825;
        vinfo->exception_type = 4;
        D.20768 = ctx.list;
        D.20826 = monoeg_g_slist_prepend (D.20768, vinfo);
        ctx.list = D.20826;
      }
      ctx.verifiable = 0;
      D.20823 = ctx.level;
      D.20827 = D.20823 & 16;
      if (D.20827 != 0) goto <D.20828>; else goto <D.20829>;
      <D.20828>:
      ctx.valid = 0;
      <D.20829>:
      <D.20820>:
      <D.20818>:
      <D.20814>:
      D.20830 = ctx.max_args;
      D.20831 = (long unsigned int) D.20830;
      D.20832 = D.20831 * 8;
      D.20833 = monoeg_malloc (D.20832);
      ctx.params = D.20833;
      D.20764 = ctx.signature;
      D.20779 = BIT_FIELD_REF <*D.20764, 64, 64>;
      D.20834 = D.20779 & 18014398509481984;
      if (D.20834 != 0) goto <D.20835>; else goto <D.20836>;
      <D.20835>:
      D.20837 = ctx.params;
      D.20774 = method->klass;
      D.20775 = BIT_FIELD_REF <*D.20774, 64, 256>;
      D.20839 = D.20775 & 8;
      if (D.20839 != 0) goto <D.20840>; else goto <D.20841>;
      <D.20840>:
      D.20774 = method->klass;
      iftmp.10 = &D.20774->this_arg;
      goto <D.20842>;
      <D.20841>:
      D.20774 = method->klass;
      iftmp.10 = &D.20774->byval_arg;
      <D.20842>:
      *D.20837 = iftmp.10;
      <D.20836>:
      D.20837 = ctx.params;
      D.20764 = ctx.signature;
      D.20795 = D.20764->hasthis;
      D.20843 = (long unsigned int) D.20795;
      D.20844 = D.20843 * 8;
      D.20845 = D.20837 + D.20844;
      D.20764 = ctx.signature;
      D.20846 = &D.20764->params;
      D.20764 = ctx.signature;
      D.20793 = D.20764->param_count;
      D.20847 = (long unsigned int) D.20793;
      D.20848 = D.20847 * 8;
      memcpy (D.20845, D.20846, D.20848);
      D.20764 = ctx.signature;
      D.20779 = BIT_FIELD_REF <*D.20764, 64, 64>;
      D.20849 = D.20779 & 144115188075855872;
      if (D.20849 != 0) goto <D.20850>; else goto <D.20851>;
      <D.20850>:
      generic_context = mono_method_get_context (method);
      ctx.generic_context = generic_context;
      <D.20851>:
      if (generic_context == 0B) goto <D.20854>; else goto <D.20855>;
      <D.20854>:
      D.20774 = method->klass;
      D.20856 = D.20774->generic_container;
      if (D.20856 != 0B) goto <D.20852>; else goto <D.20857>;
      <D.20857>:
      D.20770 = BIT_FIELD_REF <*method, 64, 256>;
      D.20771 = D.20770 & 2048;
      if (D.20771 != 0) goto <D.20852>; else goto <D.20853>;
      <D.20852>:
      D.20770 = BIT_FIELD_REF <*method, 64, 256>;
      D.20771 = D.20770 & 2048;
      if (D.20771 != 0) goto <D.20858>; else goto <D.20859>;
      <D.20858>:
      D.20860 = mono_method_get_generic_container (method);
      generic_context = &D.20860->context;
      ctx.generic_context = generic_context;
      goto <D.20861>;
      <D.20859>:
      D.20774 = method->klass;
      D.20856 = D.20774->generic_container;
      generic_context = &D.20856->context;
      ctx.generic_context = generic_context;
      <D.20861>:
      <D.20853>:
      <D.20855>:
      i = 0;
      goto <D.19961>;
      <D.19960>:
      {
        struct MonoType * uninflated;

        D.20862 = ctx.locals;
        D.20863 = (long unsigned int) i;
        D.20864 = D.20863 * 8;
        D.20865 = D.20862 + D.20864;
        uninflated = *D.20865;
        D.20862 = ctx.locals;
        D.20863 = (long unsigned int) i;
        D.20864 = D.20863 * 8;
        D.20865 = D.20862 + D.20864;
        D.20862 = ctx.locals;
        D.20863 = (long unsigned int) i;
        D.20864 = D.20863 * 8;
        D.20865 = D.20862 + D.20864;
        D.20866 = *D.20865;
        D.20867 = ctx.generic_context;
        D.20868 = mono_class_inflate_generic_type_checked (D.20866, D.20867, &error);
        *D.20865 = D.20868;
        D.20869 = mono_error_ok (&error);
        if (D.20869 == 0) goto <D.20870>; else goto <D.20871>;
        <D.20870>:
        {
          char * name;

          D.20862 = ctx.locals;
          D.20863 = (long unsigned int) i;
          D.20864 = D.20863 * 8;
          D.20865 = D.20862 + D.20864;
          D.20866 = *D.20865;
          if (D.20866 != 0B) goto <D.20873>; else goto <D.20874>;
          <D.20873>:
          D.20862 = ctx.locals;
          D.20863 = (long unsigned int) i;
          D.20864 = D.20863 * 8;
          D.20865 = D.20862 + D.20864;
          iftmp.11 = *D.20865;
          goto <D.20875>;
          <D.20874>:
          iftmp.11 = uninflated;
          <D.20875>:
          name = mono_type_full_name (iftmp.11);
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 1;
            D.20876 = monoeg_g_strdup_printf ("Invalid local %d of type %s", i, name);
            vinfo->info.message = D.20876;
            vinfo->exception_type = 3;
            D.20768 = ctx.list;
            D.20877 = monoeg_g_slist_prepend (D.20768, vinfo);
            ctx.list = D.20877;
          }
          ctx.valid = 0;
          monoeg_g_free (name);
          mono_error_cleanup (&error);
          ctx.num_locals = i;
          ctx.max_args = 0;
          goto cleanup;
        }
        <D.20871>:
      }
      i = i + 1;
      <D.19961>:
      D.20812 = ctx.num_locals;
      if (D.20812 > i) goto <D.19960>; else goto <D.19962>;
      <D.19962>:
      i = 0;
      goto <D.19967>;
      <D.19966>:
      {
        struct MonoType * uninflated;

        D.20837 = ctx.params;
        D.20863 = (long unsigned int) i;
        D.20864 = D.20863 * 8;
        D.20878 = D.20837 + D.20864;
        uninflated = *D.20878;
        D.20837 = ctx.params;
        D.20863 = (long unsigned int) i;
        D.20864 = D.20863 * 8;
        D.20878 = D.20837 + D.20864;
        D.20837 = ctx.params;
        D.20863 = (long unsigned int) i;
        D.20864 = D.20863 * 8;
        D.20878 = D.20837 + D.20864;
        D.20879 = *D.20878;
        D.20867 = ctx.generic_context;
        D.20880 = mono_class_inflate_generic_type_checked (D.20879, D.20867, &error);
        *D.20878 = D.20880;
        D.20881 = mono_error_ok (&error);
        if (D.20881 == 0) goto <D.20882>; else goto <D.20883>;
        <D.20882>:
        {
          char * name;

          D.20837 = ctx.params;
          D.20863 = (long unsigned int) i;
          D.20864 = D.20863 * 8;
          D.20878 = D.20837 + D.20864;
          D.20879 = *D.20878;
          if (D.20879 != 0B) goto <D.20885>; else goto <D.20886>;
          <D.20885>:
          D.20837 = ctx.params;
          D.20863 = (long unsigned int) i;
          D.20864 = D.20863 * 8;
          D.20878 = D.20837 + D.20864;
          iftmp.12 = *D.20878;
          goto <D.20887>;
          <D.20886>:
          iftmp.12 = uninflated;
          <D.20887>:
          name = mono_type_full_name (iftmp.12);
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 1;
            D.20888 = monoeg_g_strdup_printf ("Invalid parameter %d of type %s", i, name);
            vinfo->info.message = D.20888;
            vinfo->exception_type = 3;
            D.20768 = ctx.list;
            D.20889 = monoeg_g_slist_prepend (D.20768, vinfo);
            ctx.list = D.20889;
          }
          ctx.valid = 0;
          monoeg_g_free (name);
          mono_error_cleanup (&error);
          ctx.max_args = i;
          goto cleanup;
        }
        <D.20883>:
      }
      i = i + 1;
      <D.19967>:
      D.20830 = ctx.max_args;
      if (D.20830 > i) goto <D.19966>; else goto <D.19968>;
      <D.19968>:
      stack_init (&ctx, &ctx.eval);
      i = 0;
      goto <D.19973>;
      <D.19972>:
      D.20862 = ctx.locals;
      D.20863 = (long unsigned int) i;
      D.20864 = D.20863 * 8;
      D.20865 = D.20862 + D.20864;
      D.20866 = *D.20865;
      D.20890 = mono_type_is_valid_in_context (&ctx, D.20866);
      if (D.20890 == 0) goto <D.19969>; else goto <D.20891>;
      <D.20891>:
      D.20862 = ctx.locals;
      D.20863 = (long unsigned int) i;
      D.20864 = D.20863 * 8;
      D.20865 = D.20862 + D.20864;
      D.20866 = *D.20865;
      D.20892 = get_stack_type (D.20866);
      if (D.20892 == 0) goto <D.20893>; else goto <D.20894>;
      <D.20893>:
      {
        char * name;

        D.20862 = ctx.locals;
        D.20863 = (long unsigned int) i;
        D.20864 = D.20863 * 8;
        D.20865 = D.20862 + D.20864;
        D.20866 = *D.20865;
        name = mono_type_full_name (D.20866);
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20895 = monoeg_g_strdup_printf ("Invalid local %i of type %s", i, name);
          vinfo->info.message = D.20895;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.20896 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.20896;
        }
        ctx.valid = 0;
        monoeg_g_free (name);
        goto <D.19969>;
      }
      <D.20894>:
      i = i + 1;
      <D.19973>:
      D.20812 = ctx.num_locals;
      if (D.20812 > i) goto <D.19972>; else goto <D.19969>;
      <D.19969>:
      i = 0;
      goto <D.19978>;
      <D.19977>:
      D.20837 = ctx.params;
      D.20863 = (long unsigned int) i;
      D.20864 = D.20863 * 8;
      D.20878 = D.20837 + D.20864;
      D.20879 = *D.20878;
      D.20897 = mono_type_is_valid_in_context (&ctx, D.20879);
      if (D.20897 == 0) goto <D.19974>; else goto <D.20898>;
      <D.20898>:
      D.20837 = ctx.params;
      D.20863 = (long unsigned int) i;
      D.20864 = D.20863 * 8;
      D.20878 = D.20837 + D.20864;
      D.20879 = *D.20878;
      D.20899 = get_stack_type (D.20879);
      if (D.20899 == 0) goto <D.20900>; else goto <D.20901>;
      <D.20900>:
      {
        char * name;

        D.20837 = ctx.params;
        D.20863 = (long unsigned int) i;
        D.20864 = D.20863 * 8;
        D.20878 = D.20837 + D.20864;
        D.20879 = *D.20878;
        name = mono_type_full_name (D.20879);
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20902 = monoeg_g_strdup_printf ("Invalid parameter %i of type %s", i, name);
          vinfo->info.message = D.20902;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.20903 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.20903;
        }
        ctx.valid = 0;
        monoeg_g_free (name);
        goto <D.19974>;
      }
      <D.20901>:
      i = i + 1;
      <D.19978>:
      D.20830 = ctx.max_args;
      if (D.20830 > i) goto <D.19977>; else goto <D.19974>;
      <D.19974>:
      D.20800 = ctx.valid;
      if (D.20800 == 0) goto cleanup; else goto <D.20904>;
      <D.20904>:
      i = 0;
      goto <D.19993>;
      <D.19992>:
      {
        struct MonoExceptionClause * clause;

        D.20786 = ctx.header;
        D.20905 = D.20786->clauses;
        D.20863 = (long unsigned int) i;
        D.20906 = D.20863 * 32;
        clause = D.20905 + D.20906;
        D.20909 = clause->try_offset;
        D.20910 = ctx.code_size;
        D.20911 = (unsigned int) D.20910;
        if (D.20909 > D.20911) goto <D.20907>; else goto <D.20912>;
        <D.20912>:
        D.20909 = clause->try_offset;
        D.20913 = clause->try_len;
        D.20914 = D.20909 + D.20913;
        D.20910 = ctx.code_size;
        D.20911 = (unsigned int) D.20910;
        if (D.20914 > D.20911) goto <D.20907>; else goto <D.20915>;
        <D.20915>:
        D.20913 = clause->try_len;
        D.20916 = ~D.20913;
        D.20909 = clause->try_offset;
        if (D.20916 < D.20909) goto <D.20907>; else goto <D.20908>;
        <D.20907>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20909 = clause->try_offset;
          D.20917 = monoeg_g_strdup_printf ("try clause out of bounds at 0x%04x", D.20909);
          vinfo->info.message = D.20917;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.20918 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.20918;
        }
        ctx.valid = 0;
        <D.20908>:
        D.20913 = clause->try_len;
        if (D.20913 == 0) goto <D.20919>; else goto <D.20920>;
        <D.20919>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20909 = clause->try_offset;
          D.20921 = monoeg_g_strdup_printf ("try clause len <= 0 at 0x%04x", D.20909);
          vinfo->info.message = D.20921;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.20922 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.20922;
        }
        ctx.valid = 0;
        <D.20920>:
        D.20925 = clause->handler_offset;
        D.20910 = ctx.code_size;
        D.20911 = (unsigned int) D.20910;
        if (D.20925 > D.20911) goto <D.20923>; else goto <D.20926>;
        <D.20926>:
        D.20925 = clause->handler_offset;
        D.20927 = clause->handler_len;
        D.20928 = D.20925 + D.20927;
        D.20910 = ctx.code_size;
        D.20911 = (unsigned int) D.20910;
        if (D.20928 > D.20911) goto <D.20923>; else goto <D.20929>;
        <D.20929>:
        D.20927 = clause->handler_len;
        D.20930 = ~D.20927;
        D.20925 = clause->handler_offset;
        if (D.20930 < D.20925) goto <D.20923>; else goto <D.20924>;
        <D.20923>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20909 = clause->try_offset;
          D.20931 = monoeg_g_strdup_printf ("handler clause out of bounds at 0x%04x", D.20909);
          vinfo->info.message = D.20931;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.20932 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.20932;
        }
        ctx.valid = 0;
        <D.20924>:
        D.20927 = clause->handler_len;
        if (D.20927 == 0) goto <D.20933>; else goto <D.20934>;
        <D.20933>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20909 = clause->try_offset;
          D.20935 = monoeg_g_strdup_printf ("handler clause len <= 0 at 0x%04x", D.20909);
          vinfo->info.message = D.20935;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.20936 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.20936;
        }
        ctx.valid = 0;
        <D.20934>:
        D.20909 = clause->try_offset;
        D.20925 = clause->handler_offset;
        if (D.20909 < D.20925) goto <D.20939>; else goto <D.20940>;
        <D.20939>:
        D.20909 = clause->try_offset;
        D.20913 = clause->try_len;
        D.20914 = D.20909 + D.20913;
        D.20942 = clause->flags;
        if (D.20942 == 1) goto <D.20943>; else goto <D.20944>;
        <D.20943>:
        iftmp.13 = clause->data.filter_offset;
        goto <D.20945>;
        <D.20944>:
        iftmp.13 = clause->handler_offset;
        <D.20945>:
        if (D.20914 > iftmp.13) goto <D.20937>; else goto <D.20946>;
        <D.20946>:
        D.20913 = clause->try_len;
        D.20916 = ~D.20913;
        D.20909 = clause->try_offset;
        if (D.20916 < D.20909) goto <D.20937>; else goto <D.20938>;
        <D.20937>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20909 = clause->try_offset;
          D.20925 = clause->handler_offset;
          D.20947 = monoeg_g_strdup_printf ("try block (at 0x%04x) includes handler block (at 0x%04x)", D.20909, D.20925);
          vinfo->info.message = D.20947;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.20948 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.20948;
        }
        ctx.valid = 0;
        <D.20938>:
        <D.20940>:
        D.20942 = clause->flags;
        if (D.20942 == 1) goto <D.20949>; else goto <D.20950>;
        <D.20949>:
        D.20951 = clause->data.filter_offset;
        D.20910 = ctx.code_size;
        D.20911 = (unsigned int) D.20910;
        if (D.20951 > D.20911) goto <D.20952>; else goto <D.20953>;
        <D.20952>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20909 = clause->try_offset;
          D.20954 = monoeg_g_strdup_printf ("filter clause out of bounds at 0x%04x", D.20909);
          vinfo->info.message = D.20954;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.20955 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.20955;
        }
        ctx.valid = 0;
        <D.20953>:
        D.20951 = clause->data.filter_offset;
        D.20925 = clause->handler_offset;
        if (D.20951 >= D.20925) goto <D.20956>; else goto <D.20957>;
        <D.20956>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20951 = clause->data.filter_offset;
          D.20958 = monoeg_g_strdup_printf ("filter clause must come before the handler clause at 0x%04x", D.20951);
          vinfo->info.message = D.20958;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.20959 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.20959;
        }
        ctx.valid = 0;
        <D.20957>:
        <D.20950>:
        n = i + 1;
        goto <D.19988>;
        <D.19987>:
        D.20786 = ctx.header;
        D.20905 = D.20786->clauses;
        D.20960 = (long unsigned int) n;
        D.20961 = D.20960 * 32;
        D.20962 = D.20905 + D.20961;
        verify_clause_relationship (&ctx, clause, D.20962);
        n = n + 1;
        <D.19988>:
        D.20786 = ctx.header;
        D.20963 = D.20786->num_clauses;
        D.20964 = (int) D.20963;
        if (D.20964 > n) goto <D.20965>; else goto <D.19989>;
        <D.20965>:
        D.20800 = ctx.valid;
        if (D.20800 != 0) goto <D.19987>; else goto <D.19989>;
        <D.19989>:
        D.20800 = ctx.valid;
        if (D.20800 == 0) goto <D.19990>; else goto <D.20966>;
        <D.20966>:
        D.20805 = ctx.code;
        D.20909 = clause->try_offset;
        D.20967 = (long unsigned int) D.20909;
        D.20968 = D.20967 * 16;
        D.20969 = D.20805 + D.20968;
        D.20805 = ctx.code;
        D.20909 = clause->try_offset;
        D.20967 = (long unsigned int) D.20909;
        D.20968 = D.20967 * 16;
        D.20969 = D.20805 + D.20968;
        D.20970 = D.20969->flags;
        D.20971 = D.20970 | 2;
        D.20969->flags = D.20971;
        D.20909 = clause->try_offset;
        D.20913 = clause->try_len;
        D.20914 = D.20909 + D.20913;
        D.20910 = ctx.code_size;
        D.20911 = (unsigned int) D.20910;
        if (D.20914 < D.20911) goto <D.20972>; else goto <D.20973>;
        <D.20972>:
        D.20805 = ctx.code;
        D.20909 = clause->try_offset;
        D.20913 = clause->try_len;
        D.20914 = D.20909 + D.20913;
        D.20974 = (long unsigned int) D.20914;
        D.20975 = D.20974 * 16;
        D.20976 = D.20805 + D.20975;
        D.20805 = ctx.code;
        D.20909 = clause->try_offset;
        D.20913 = clause->try_len;
        D.20914 = D.20909 + D.20913;
        D.20974 = (long unsigned int) D.20914;
        D.20975 = D.20974 * 16;
        D.20976 = D.20805 + D.20975;
        D.20977 = D.20976->flags;
        D.20978 = D.20977 | 2;
        D.20976->flags = D.20978;
        <D.20973>:
        D.20925 = clause->handler_offset;
        D.20927 = clause->handler_len;
        D.20928 = D.20925 + D.20927;
        D.20910 = ctx.code_size;
        D.20911 = (unsigned int) D.20910;
        if (D.20928 < D.20911) goto <D.20979>; else goto <D.20980>;
        <D.20979>:
        D.20805 = ctx.code;
        D.20925 = clause->handler_offset;
        D.20927 = clause->handler_len;
        D.20928 = D.20925 + D.20927;
        D.20981 = (long unsigned int) D.20928;
        D.20982 = D.20981 * 16;
        D.20983 = D.20805 + D.20982;
        D.20805 = ctx.code;
        D.20925 = clause->handler_offset;
        D.20927 = clause->handler_len;
        D.20928 = D.20925 + D.20927;
        D.20981 = (long unsigned int) D.20928;
        D.20982 = D.20981 * 16;
        D.20983 = D.20805 + D.20982;
        D.20984 = D.20983->flags;
        D.20985 = D.20984 | 2;
        D.20983->flags = D.20985;
        <D.20980>:
        D.20942 = clause->flags;
        if (D.20942 == 0) goto <D.20986>; else goto <D.20987>;
        <D.20986>:
        D.20988 = clause->data.catch_class;
        if (D.20988 == 0B) goto <D.20989>; else goto <D.20990>;
        <D.20989>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20991 = monoeg_g_strdup_printf ("Catch clause %d with invalid type", i);
          vinfo->info.message = D.20991;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.20992 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.20992;
        }
        ctx.valid = 0;
        goto <D.19990>;
        <D.20990>:
        D.20988 = clause->data.catch_class;
        D.20993 = &D.20988->byval_arg;
        D.20994 = mono_type_is_valid_in_context (&ctx, D.20993);
        if (D.20994 == 0) goto <D.19990>; else goto <D.20995>;
        <D.20995>:
        D.20805 = ctx.code;
        D.20925 = clause->handler_offset;
        D.20996 = (long unsigned int) D.20925;
        D.20997 = D.20996 * 16;
        D.20998 = D.20805 + D.20997;
        D.20988 = clause->data.catch_class;
        init_stack_with_value_at_exception_boundary (&ctx, D.20998, D.20988);
        goto <D.20999>;
        <D.20987>:
        D.20942 = clause->flags;
        if (D.20942 == 1) goto <D.21000>; else goto <D.21001>;
        <D.21000>:
        D.20805 = ctx.code;
        D.20951 = clause->data.filter_offset;
        D.21002 = (long unsigned int) D.20951;
        D.21003 = D.21002 * 16;
        D.21004 = D.20805 + D.21003;
        D.21005 = mono_defaults.exception_class;
        init_stack_with_value_at_exception_boundary (&ctx, D.21004, D.21005);
        D.20805 = ctx.code;
        D.20925 = clause->handler_offset;
        D.20996 = (long unsigned int) D.20925;
        D.20997 = D.20996 * 16;
        D.20998 = D.20805 + D.20997;
        D.21005 = mono_defaults.exception_class;
        init_stack_with_value_at_exception_boundary (&ctx, D.20998, D.21005);
        <D.21001>:
        <D.20999>:
      }
      i = i + 1;
      <D.19993>:
      D.20786 = ctx.header;
      D.20963 = D.20786->num_clauses;
      D.20964 = (int) D.20963;
      if (D.20964 > i) goto <D.21006>; else goto <D.19990>;
      <D.21006>:
      D.20800 = ctx.valid;
      if (D.20800 != 0) goto <D.19992>; else goto <D.19990>;
      <D.19990>:
      D.20800 = ctx.valid;
      if (D.20800 == 0) goto cleanup; else goto <D.21007>;
      <D.21007>:
      bb = mono_basic_block_split (method, &error);
      original_bb = bb;
      D.21008 = mono_error_ok (&error);
      if (D.21008 == 0) goto <D.21009>; else goto <D.21010>;
      <D.21009>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21011 = mono_error_get_message (&error);
        D.21012 = monoeg_g_strdup_printf ("Invalid branch target: %s", D.21011);
        vinfo->info.message = D.21012;
        vinfo->exception_type = 3;
        D.20768 = ctx.list;
        D.21013 = monoeg_g_slist_prepend (D.20768, vinfo);
        ctx.list = D.21013;
      }
      ctx.valid = 0;
      mono_error_cleanup (&error);
      goto cleanup;
      <D.21010>:
      D.21014 = bb == 0B;
      D.21015 = (long int) D.21014;
      D.21016 = __builtin_expect (D.21015, 0);
      if (D.21016 != 0) goto <D.21017>; else goto <D.21018>;
      <D.21017>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 5001, "bb");
      <D.21018>:
      goto <D.20012>;
      <D.20322>:
      {
        int op_size;

        ip.14 = (long int) ip;
        code_start.15 = (long int) code_start;
        D.21021 = ip.14 - code_start.15;
        ip_offset = (guint) D.21021;
        {
          const unsigned char * ip_copy;
          int op;

          try
            {
              ip_copy = ip;
              D.21022 = bb->end;
              D.21023 = (unsigned int) D.21022;
              if (D.21023 < ip_offset) goto <D.21024>; else goto <D.21025>;
              <D.21024>:
              {
                struct MonoVerifyInfoExtended * vinfo;

                vinfo = monoeg_malloc (24);
                vinfo->info.status = 1;
                D.21022 = bb->end;
                D.21026 = monoeg_g_strdup_printf ("Branch or EH block at [0x%04x] targets middle instruction at 0x%04x", D.21022, ip_offset);
                vinfo->info.message = D.21026;
                vinfo->exception_type = 3;
                D.20768 = ctx.list;
                D.21027 = monoeg_g_slist_prepend (D.20768, vinfo);
                ctx.list = D.21027;
              }
              ctx.valid = 0;
              goto cleanup;
              <D.21025>:
              D.21022 = bb->end;
              D.21023 = (unsigned int) D.21022;
              if (D.21023 == ip_offset) goto <D.21028>; else goto <D.21029>;
              <D.21028>:
              bb = bb->next;
              <D.21029>:
              op_size = mono_opcode_value_and_size (&ip_copy, end, &op);
              if (op_size == -1) goto <D.21030>; else goto <D.21031>;
              <D.21030>:
              {
                struct MonoVerifyInfoExtended * vinfo;

                vinfo = monoeg_malloc (24);
                vinfo->info.status = 1;
                D.21032 = *ip;
                D.21033 = (int) D.21032;
                D.21034 = monoeg_g_strdup_printf ("Invalid instruction %x at 0x%04x", D.21033, ip_offset);
                vinfo->info.message = D.21034;
                vinfo->exception_type = 3;
                D.20768 = ctx.list;
                D.21035 = monoeg_g_slist_prepend (D.20768, vinfo);
                ctx.list = D.21035;
              }
              ctx.valid = 0;
              goto cleanup;
              <D.21031>:
              op_size.16 = (unsigned int) op_size;
              D.21039 = ip_offset + op_size.16;
              D.21022 = bb->end;
              D.21023 = (unsigned int) D.21022;
              if (D.21039 > D.21023) goto <D.21036>; else goto <D.21040>;
              <D.21040>:
              op_size.17 = (unsigned int) op_size;
              D.21042 = ~op_size.17;
              if (D.21042 < ip_offset) goto <D.21036>; else goto <D.21037>;
              <D.21036>:
              {
                struct MonoVerifyInfoExtended * vinfo;

                vinfo = monoeg_malloc (24);
                vinfo->info.status = 1;
                D.21043 = monoeg_g_strdup_printf ("Branch or EH block targets middle of instruction at 0x%04x", ip_offset);
                vinfo->info.message = D.21043;
                vinfo->exception_type = 3;
                D.20768 = ctx.list;
                D.21044 = monoeg_g_slist_prepend (D.20768, vinfo);
                ctx.list = D.21044;
              }
              ctx.valid = 0;
              goto cleanup;
              <D.21037>:
              op_size.16 = (unsigned int) op_size;
              D.21039 = ip_offset + op_size.16;
              D.21022 = bb->end;
              D.21023 = (unsigned int) D.21022;
              if (D.21039 == D.21023) goto <D.21045>; else goto <D.21046>;
              <D.21045>:
              op.18 = op;
              D.21048 = mono_opcode_is_prefix (op.18);
              if (D.21048 != 0) goto <D.21049>; else goto <D.21050>;
              <D.21049>:
              {
                struct MonoVerifyInfoExtended * vinfo;

                vinfo = monoeg_malloc (24);
                vinfo->info.status = 1;
                op.18 = op;
                D.21051 = mono_opcode_name (op.18);
                D.21052 = monoeg_g_strdup_printf ("Branch or EH block targets between prefix \'%s\' and instruction at 0x%04x", D.21051, ip_offset);
                vinfo->info.message = D.21052;
                vinfo->exception_type = 3;
                D.20768 = ctx.list;
                D.21053 = monoeg_g_slist_prepend (D.20768, vinfo);
                ctx.list = D.21053;
              }
              ctx.valid = 0;
              goto cleanup;
              <D.21050>:
              <D.21046>:
            }
          finally
            {
              ip_copy = {CLOBBER};
              op = {CLOBBER};
            }
        }
        ip.14 = (long int) ip;
        code_start.15 = (long int) code_start;
        D.21021 = ip.14 - code_start.15;
        ip_offset = (guint) D.21021;
        ctx.ip_offset = ip_offset;
        i = 0;
        goto <D.20010>;
        <D.20009>:
        {
          struct MonoExceptionClause * clause;

          D.20786 = ctx.header;
          D.20905 = D.20786->clauses;
          D.20863 = (long unsigned int) i;
          D.20906 = D.20863 * 32;
          clause = D.20905 + D.20906;
          D.21054 = clause->try_offset;
          D.21055 = clause->try_len;
          D.21056 = D.21054 + D.21055;
          if (D.21056 == ip_offset) goto <D.21057>; else goto <D.21058>;
          <D.21057>:
          if (start == 0) goto <D.21059>; else goto <D.21060>;
          <D.21059>:
          D.20821 = ctx.verifiable;
          if (D.20821 != 0) goto <D.21061>; else goto <D.21063>;
          <D.21063>:
          D.20823 = ctx.level;
          D.20824 = D.20823 & 128;
          if (D.20824 != 0) goto <D.21061>; else goto <D.21062>;
          <D.21061>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 8;
            D.21064 = monoeg_g_strdup_printf ("fallthru off try block at 0x%04x", ip_offset);
            vinfo->info.message = D.21064;
            vinfo->exception_type = 4;
            D.20768 = ctx.list;
            D.21065 = monoeg_g_slist_prepend (D.20768, vinfo);
            ctx.list = D.21065;
          }
          ctx.verifiable = 0;
          D.20823 = ctx.level;
          D.20827 = D.20823 & 16;
          if (D.20827 != 0) goto <D.21066>; else goto <D.21067>;
          <D.21066>:
          ctx.valid = 0;
          <D.21067>:
          <D.21062>:
          start = 1;
          <D.21060>:
          <D.21058>:
          D.21068 = clause->handler_offset;
          D.21069 = clause->handler_len;
          D.21070 = D.21068 + D.21069;
          if (D.21070 == ip_offset) goto <D.21071>; else goto <D.21072>;
          <D.21071>:
          if (start == 0) goto <D.21073>; else goto <D.21074>;
          <D.21073>:
          D.21075 = clause->flags;
          if (D.21075 == 1) goto <D.21076>; else goto <D.21077>;
          <D.21076>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 1;
            D.21078 = monoeg_g_strdup_printf ("fallout of handler block at 0x%04x", ip_offset);
            vinfo->info.message = D.21078;
            vinfo->exception_type = 3;
            D.20768 = ctx.list;
            D.21079 = monoeg_g_slist_prepend (D.20768, vinfo);
            ctx.list = D.21079;
          }
          ctx.valid = 0;
          goto <D.21080>;
          <D.21077>:
          D.20821 = ctx.verifiable;
          if (D.20821 != 0) goto <D.21081>; else goto <D.21083>;
          <D.21083>:
          D.20823 = ctx.level;
          D.20824 = D.20823 & 128;
          if (D.20824 != 0) goto <D.21081>; else goto <D.21082>;
          <D.21081>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 8;
            D.21084 = monoeg_g_strdup_printf ("fallout of handler block at 0x%04x", ip_offset);
            vinfo->info.message = D.21084;
            vinfo->exception_type = 4;
            D.20768 = ctx.list;
            D.21085 = monoeg_g_slist_prepend (D.20768, vinfo);
            ctx.list = D.21085;
          }
          ctx.verifiable = 0;
          D.20823 = ctx.level;
          D.20827 = D.20823 & 16;
          if (D.20827 != 0) goto <D.21086>; else goto <D.21087>;
          <D.21086>:
          ctx.valid = 0;
          <D.21087>:
          <D.21082>:
          <D.21080>:
          start = 1;
          <D.21074>:
          <D.21072>:
          D.21075 = clause->flags;
          if (D.21075 == 1) goto <D.21088>; else goto <D.21089>;
          <D.21088>:
          D.21068 = clause->handler_offset;
          if (D.21068 == ip_offset) goto <D.21090>; else goto <D.21091>;
          <D.21090>:
          if (start == 0) goto <D.21092>; else goto <D.21093>;
          <D.21092>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 1;
            D.21094 = monoeg_g_strdup_printf ("fallout of filter block at 0x%04x", ip_offset);
            vinfo->info.message = D.21094;
            vinfo->exception_type = 3;
            D.20768 = ctx.list;
            D.21095 = monoeg_g_slist_prepend (D.20768, vinfo);
            ctx.list = D.21095;
          }
          ctx.valid = 0;
          start = 1;
          <D.21093>:
          <D.21091>:
          <D.21089>:
          D.21068 = clause->handler_offset;
          if (D.21068 == ip_offset) goto <D.21096>; else goto <D.21097>;
          <D.21096>:
          if (start == 0) goto <D.21098>; else goto <D.21099>;
          <D.21098>:
          D.20821 = ctx.verifiable;
          if (D.20821 != 0) goto <D.21100>; else goto <D.21102>;
          <D.21102>:
          D.20823 = ctx.level;
          D.20824 = D.20823 & 128;
          if (D.20824 != 0) goto <D.21100>; else goto <D.21101>;
          <D.21100>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 8;
            D.21103 = monoeg_g_strdup_printf ("fallthru handler block at 0x%04x", ip_offset);
            vinfo->info.message = D.21103;
            vinfo->exception_type = 4;
            D.20768 = ctx.list;
            D.21104 = monoeg_g_slist_prepend (D.20768, vinfo);
            ctx.list = D.21104;
          }
          ctx.verifiable = 0;
          D.20823 = ctx.level;
          D.20827 = D.20823 & 16;
          if (D.20827 != 0) goto <D.21105>; else goto <D.21106>;
          <D.21105>:
          ctx.valid = 0;
          <D.21106>:
          <D.21101>:
          start = 1;
          <D.21099>:
          <D.21097>:
          D.21054 = clause->try_offset;
          if (D.21054 == ip_offset) goto <D.21107>; else goto <D.21108>;
          <D.21107>:
          D.21109 = ctx.eval.size;
          if (D.21109 != 0) goto <D.21110>; else goto <D.21111>;
          <D.21110>:
          if (start == 0) goto <D.21112>; else goto <D.21113>;
          <D.21112>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 1;
            D.21114 = monoeg_g_strdup_printf ("Try to enter try block with a non-empty stack at 0x%04x", ip_offset);
            vinfo->info.message = D.21114;
            vinfo->exception_type = 3;
            D.20768 = ctx.list;
            D.21115 = monoeg_g_slist_prepend (D.20768, vinfo);
            ctx.list = D.21115;
          }
          ctx.valid = 0;
          start = 1;
          <D.21113>:
          <D.21111>:
          <D.21108>:
        }
        i = i + 1;
        <D.20010>:
        D.20786 = ctx.header;
        D.20963 = D.20786->num_clauses;
        D.20964 = (int) D.20963;
        if (D.20964 > i) goto <D.21116>; else goto <D.20011>;
        <D.21116>:
        D.20800 = ctx.valid;
        if (D.20800 != 0) goto <D.20009>; else goto <D.20011>;
        <D.20011>:
        D.21117 = BIT_FIELD_REF <*bb, 64, 384>;
        D.21118 = D.21117 & 2;
        if (D.21118 != 0) goto <D.21119>; else goto <D.21120>;
        <D.21119>:
        D.20805 = ctx.code;
        D.21121 = (long unsigned int) ip_offset;
        D.21122 = D.21121 * 16;
        D.21123 = D.20805 + D.21122;
        D.20805 = ctx.code;
        D.21121 = (long unsigned int) ip_offset;
        D.21122 = D.21121 * 16;
        D.21123 = D.20805 + D.21122;
        D.21124 = D.21123->flags;
        D.21125 = D.21124 | 1;
        D.21123->flags = D.21125;
        D.21126 = (sizetype) op_size;
        ip = ip + D.21126;
        // predicted unlikely by continue predictor.
        goto <D.20012>;
        <D.21120>:
        D.20800 = ctx.valid;
        if (D.20800 == 0) goto <D.20013>; else goto <D.21127>;
        <D.21127>:
        if (need_merge != 0) goto <D.21128>; else goto <D.21129>;
        <D.21128>:
        D.20805 = ctx.code;
        D.21130 = ctx.target;
        D.21131 = (long unsigned int) D.21130;
        D.21132 = D.21131 * 16;
        D.21133 = D.20805 + D.21132;
        merge_stacks (&ctx, &ctx.eval, D.21133, 0, 1);
        need_merge = 0;
        <D.21129>:
        D.20805 = ctx.code;
        D.21121 = (long unsigned int) ip_offset;
        D.21122 = D.21121 * 16;
        D.21123 = D.20805 + D.21122;
        merge_stacks (&ctx, &ctx.eval, D.21123, start, 0);
        start = 0;
        D.21032 = *ip;
        D.21033 = (int) D.21032;
        switch (D.21033) <default: <D.20316>, case 0: <D.20014>, case 1: <D.20015>, case 2: <D.20017>, case 3: <D.20018>, case 4: <D.20019>, case 5: <D.20020>, case 6: <D.20045>, case 7: <D.20046>, case 8: <D.20047>, case 9: <D.20048>, case 10: <D.20049>, case 11: <D.20050>, case 12: <D.20051>, case 13: <D.20052>, case 14: <D.20021>, case 15: <D.20022>, case 16: <D.20055>, case 17: <D.20102>, case 18: <D.20103>, case 19: <D.20053>, case 20: <D.20077>, case 21: <D.20057>, case 22: <D.20058>, case 23: <D.20059>, case 24: <D.20060>, case 25: <D.20061>, case 26: <D.20062>, case 27: <D.20063>, case 28: <D.20064>, case 29: <D.20065>, case 30: <D.20066>, case 31: <D.20067>, case 32: <D.20069>, case 33: <D.20071>, case 34: <D.20073>, case 35: <D.20075>, case 36: <D.20105>, case 37: <D.20107>, case 38: <D.20043>, case 39: <D.20109>, case 40: <D.20114>, case 41: <D.20117>, case 42: <D.20044>, case 43: <D.20120>, case 44: <D.20122>, case 45: <D.20123>, case 46: <D.20078>, case 47: <D.20081>, case 48: <D.20082>, case 49: <D.20083>, case 50: <D.20084>, case 51: <D.20079>, case 52: <D.20085>, case 53: <D.20086>, case 54: <D.20087>, case 55: <D.20088>, case 56: <D.20125>, case 57: <D.20127>, case 58: <D.20128>, case 59: <D.20090>, case 60: <D.20093>, case 61: <D.20094>, case 62: <D.20095>, case 63: <D.20096>, case 64: <D.20091>, case 65: <D.20097>, case 66: <D.20098>, case 67: <D.20099>, case 68: <D.20100>, case 69: <D.20130>, case 70: <D.20135>, case 71: <D.20136>, case 72: <D.20137>, case 73: <D.20138>, case 74: <D.20139>, case 75: <D.20140>, case 76: <D.20141>, case 77: <D.20142>, case 78: <D.20143>, case 79: <D.20144>, case 80: <D.20145>, case 81: <D.20146>, case 82: <D.20147>, case 83: <D.20148>, case 84: <D.20149>, case 85: <D.20150>, case 86: <D.20151>, case 87: <D.20152>, case 88: <D.20030>, case 89: <D.20031>, case 90: <D.20032>, case 91: <D.20033>, case 92: <D.20036>, case 93: <D.20034>, case 94: <D.20038>, case 95: <D.20035>, case 96: <D.20037>, case 97: <D.20039>, case 98: <D.20040>, case 99: <D.20041>, case 100: <D.20042>, case 101: <D.20155>, case 102: <D.20154>, case 103: <D.20156>, case 104: <D.20157>, case 105: <D.20158>, case 106: <D.20162>, case 107: <D.20164>, case 108: <D.20165>, case 109: <D.20161>, case 110: <D.20163>, case 111: <D.20115>, case 112: <D.20169>, case 113: <D.20171>, case 114: <D.20173>, case 115: <D.20175>, case 116: <D.20177>, case 117: <D.20178>, case 118: <D.20166>, case 119: <D.20180>, case 120: <D.20181>, case 121: <D.20183>, case 122: <D.20185>, case 123: <D.20186>, case 124: <D.20187>, case 125: <D.20192>, case 126: <D.20189>, case 127: <D.20190>, case 128: <D.20194>, case 129: <D.20196>, case 130: <D.20198>, case 131: <D.20199>, case 132: <D.20200>, case 133: <D.20204>, case 134: <D.20201>, case 135: <D.20202>, case 136: <D.20203>, case 137: <D.20205>, case 138: <D.20206>, case 139: <D.20207>, case 140: <D.20208>, case 141: <D.20210>, case 142: <D.20212>, case 143: <D.20213>, case 144: <D.20215>, case 145: <D.20216>, case 146: <D.20217>, case 147: <D.20218>, case 148: <D.20219>, case 149: <D.20220>, case 150: <D.20221>, case 151: <D.20222>, case 152: <D.20223>, case 153: <D.20224>, case 154: <D.20225>, case 155: <D.20226>, case 156: <D.20227>, case 157: <D.20228>, case 158: <D.20229>, case 159: <D.20230>, case 160: <D.20231>, case 161: <D.20232>, case 162: <D.20233>, case 163: <D.20234>, case 164: <D.20236>, case 165: <D.20238>, case 179: <D.20240>, case 180: <D.20241>, case 181: <D.20242>, case 182: <D.20243>, case 183: <D.20244>, case 184: <D.20245>, case 185: <D.20246>, case 186: <D.20247>, case 194: <D.20250>, case 195: <D.20252>, case 198: <D.20253>, case 208: <D.20255>, case 209: <D.20160>, case 210: <D.20159>, case 211: <D.20167>, case 212: <D.20248>, case 213: <D.20249>, case 214: <D.20026>, case 215: <D.20024>, case 216: <D.20028>, case 217: <D.20029>, case 218: <D.20027>, case 219: <D.20025>, case 220: <D.20257>, case 221: <D.20259>, case 222: <D.20261>, case 223: <D.20153>, case 224: <D.20168>, case 254: <D.20263>>
        <D.20014>:
        <D.20015>:
        ip = ip + 1;
        goto <D.20016>;
        <D.20017>:
        <D.20018>:
        <D.20019>:
        <D.20020>:
        D.21032 = *ip;
        D.21033 = (int) D.21032;
        D.21134 = D.21033 + -2;
        D.21135 = (unsigned int) D.21134;
        push_arg (&ctx, D.21135, 0);
        ip = ip + 1;
        goto <D.20016>;
        <D.20021>:
        <D.20022>:
        D.21138 = ip + 2;
        if (D.21138 > end) goto <D.21136>; else goto <D.21139>;
        <D.21139>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.21136>; else goto <D.21137>;
        <D.21136>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21142 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21142;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21143 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21143;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21137>:
        D.21144 = ip + 1;
        D.21145 = *D.21144;
        D.21146 = (unsigned int) D.21145;
        D.21032 = *ip;
        D.21147 = D.21032 == 15;
        D.21148 = (int) D.21147;
        push_arg (&ctx, D.21146, D.21148);
        ip = ip + 2;
        goto <D.20016>;
        <D.20024>:
        D.21032 = *ip;
        D.21149 = (unsigned int) D.21032;
        do_binop (&ctx, D.21149, &add_ovf_un_table);
        ip = ip + 1;
        goto <D.20016>;
        <D.20025>:
        D.21032 = *ip;
        D.21149 = (unsigned int) D.21032;
        do_binop (&ctx, D.21149, &sub_ovf_un_table);
        ip = ip + 1;
        goto <D.20016>;
        <D.20026>:
        <D.20027>:
        <D.20028>:
        <D.20029>:
        D.21032 = *ip;
        D.21149 = (unsigned int) D.21032;
        do_binop (&ctx, D.21149, &bin_ovf_table);
        ip = ip + 1;
        goto <D.20016>;
        <D.20030>:
        D.21032 = *ip;
        D.21149 = (unsigned int) D.21032;
        do_binop (&ctx, D.21149, &add_table);
        ip = ip + 1;
        goto <D.20016>;
        <D.20031>:
        D.21032 = *ip;
        D.21149 = (unsigned int) D.21032;
        do_binop (&ctx, D.21149, &sub_table);
        ip = ip + 1;
        goto <D.20016>;
        <D.20032>:
        <D.20033>:
        <D.20034>:
        D.21032 = *ip;
        D.21149 = (unsigned int) D.21032;
        do_binop (&ctx, D.21149, &bin_op_table);
        ip = ip + 1;
        goto <D.20016>;
        <D.20035>:
        <D.20036>:
        <D.20037>:
        <D.20038>:
        <D.20039>:
        D.21032 = *ip;
        D.21149 = (unsigned int) D.21032;
        do_binop (&ctx, D.21149, &int_bin_op_table);
        ip = ip + 1;
        goto <D.20016>;
        <D.20040>:
        <D.20041>:
        <D.20042>:
        D.21032 = *ip;
        D.21149 = (unsigned int) D.21032;
        do_binop (&ctx, D.21149, &shift_op_table);
        ip = ip + 1;
        goto <D.20016>;
        <D.20043>:
        D.21150 = check_underflow (&ctx, 1);
        if (D.21150 == 0) goto <D.20016>; else goto <D.21151>;
        <D.21151>:
        stack_pop_safe (&ctx);
        ip = ip + 1;
        goto <D.20016>;
        <D.20044>:
        do_ret (&ctx);
        ip = ip + 1;
        start = 1;
        goto <D.20016>;
        <D.20045>:
        <D.20046>:
        <D.20047>:
        <D.20048>:
        D.21032 = *ip;
        D.21033 = (int) D.21032;
        D.21152 = D.21033 + -6;
        D.21153 = (unsigned int) D.21152;
        push_local (&ctx, D.21153, 0);
        ip = ip + 1;
        goto <D.20016>;
        <D.20049>:
        <D.20050>:
        <D.20051>:
        <D.20052>:
        D.21032 = *ip;
        D.21033 = (int) D.21032;
        D.21154 = D.21033 + -10;
        D.21155 = (unsigned int) D.21154;
        store_local (&ctx, D.21155);
        ip = ip + 1;
        goto <D.20016>;
        <D.20053>:
        D.21138 = ip + 2;
        if (D.21138 > end) goto <D.21156>; else goto <D.21158>;
        <D.21158>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.21156>; else goto <D.21157>;
        <D.21156>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21159 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21159;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21160 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21160;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21157>:
        D.21144 = ip + 1;
        D.21145 = *D.21144;
        D.21161 = (unsigned int) D.21145;
        store_local (&ctx, D.21161);
        ip = ip + 2;
        goto <D.20016>;
        <D.20055>:
        D.21138 = ip + 2;
        if (D.21138 > end) goto <D.21162>; else goto <D.21164>;
        <D.21164>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.21162>; else goto <D.21163>;
        <D.21162>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21165 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21165;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21166 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21166;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21163>:
        D.21144 = ip + 1;
        D.21145 = *D.21144;
        D.21161 = (unsigned int) D.21145;
        store_arg (&ctx, D.21161);
        ip = ip + 2;
        goto <D.20016>;
        <D.20057>:
        <D.20058>:
        <D.20059>:
        <D.20060>:
        <D.20061>:
        <D.20062>:
        <D.20063>:
        <D.20064>:
        <D.20065>:
        <D.20066>:
        D.21167 = check_overflow (&ctx);
        if (D.21167 != 0) goto <D.21168>; else goto <D.21169>;
        <D.21168>:
        D.21170 = mono_defaults.int32_class;
        D.21171 = &D.21170->byval_arg;
        stack_push_val (&ctx, 1, D.21171);
        <D.21169>:
        ip = ip + 1;
        goto <D.20016>;
        <D.20067>:
        D.21138 = ip + 2;
        if (D.21138 > end) goto <D.21172>; else goto <D.21174>;
        <D.21174>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.21172>; else goto <D.21173>;
        <D.21172>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21175 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21175;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21176 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21176;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21173>:
        D.21177 = check_overflow (&ctx);
        if (D.21177 != 0) goto <D.21178>; else goto <D.21179>;
        <D.21178>:
        D.21170 = mono_defaults.int32_class;
        D.21171 = &D.21170->byval_arg;
        stack_push_val (&ctx, 1, D.21171);
        <D.21179>:
        ip = ip + 2;
        goto <D.20016>;
        <D.20069>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21180>; else goto <D.21183>;
        <D.21183>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21180>; else goto <D.21181>;
        <D.21180>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21184 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21184;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21185 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21185;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21181>:
        D.21186 = check_overflow (&ctx);
        if (D.21186 != 0) goto <D.21187>; else goto <D.21188>;
        <D.21187>:
        D.21170 = mono_defaults.int32_class;
        D.21171 = &D.21170->byval_arg;
        stack_push_val (&ctx, 1, D.21171);
        <D.21188>:
        ip = ip + 5;
        goto <D.20016>;
        <D.20071>:
        D.21191 = ip + 9;
        if (D.21191 > end) goto <D.21189>; else goto <D.21192>;
        <D.21192>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551606) goto <D.21189>; else goto <D.21190>;
        <D.21189>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21193 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21193;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21194 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21194;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21190>:
        D.21195 = check_overflow (&ctx);
        if (D.21195 != 0) goto <D.21196>; else goto <D.21197>;
        <D.21196>:
        D.21198 = mono_defaults.int64_class;
        D.21199 = &D.21198->byval_arg;
        stack_push_val (&ctx, 2, D.21199);
        <D.21197>:
        ip = ip + 9;
        goto <D.20016>;
        <D.20073>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21200>; else goto <D.21202>;
        <D.21202>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21200>; else goto <D.21201>;
        <D.21200>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21203 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21203;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21204 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21204;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21201>:
        D.21205 = check_overflow (&ctx);
        if (D.21205 != 0) goto <D.21206>; else goto <D.21207>;
        <D.21206>:
        D.21208 = mono_defaults.double_class;
        D.21209 = &D.21208->byval_arg;
        stack_push_val (&ctx, 4, D.21209);
        <D.21207>:
        ip = ip + 5;
        goto <D.20016>;
        <D.20075>:
        D.21191 = ip + 9;
        if (D.21191 > end) goto <D.21210>; else goto <D.21212>;
        <D.21212>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551606) goto <D.21210>; else goto <D.21211>;
        <D.21210>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21213 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21213;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21214 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21214;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21211>:
        D.21215 = check_overflow (&ctx);
        if (D.21215 != 0) goto <D.21216>; else goto <D.21217>;
        <D.21216>:
        D.21208 = mono_defaults.double_class;
        D.21209 = &D.21208->byval_arg;
        stack_push_val (&ctx, 4, D.21209);
        <D.21217>:
        ip = ip + 9;
        goto <D.20016>;
        <D.20077>:
        D.21218 = check_overflow (&ctx);
        if (D.21218 != 0) goto <D.21219>; else goto <D.21220>;
        <D.21219>:
        D.21221 = mono_defaults.object_class;
        D.21222 = &D.21221->byval_arg;
        stack_push_val (&ctx, 1030, D.21222);
        <D.21220>:
        ip = ip + 1;
        goto <D.20016>;
        <D.20078>:
        <D.20079>:
        D.21138 = ip + 2;
        if (D.21138 > end) goto <D.21223>; else goto <D.21225>;
        <D.21225>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.21223>; else goto <D.21224>;
        <D.21223>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21226 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21226;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21227 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21227;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21224>:
        D.21144 = ip + 1;
        D.21145 = *D.21144;
        D.21228 = (signed char) D.21145;
        D.21229 = (int) D.21228;
        D.21230 = D.21229 + 2;
        do_branch_op (&ctx, D.21230, &cmp_br_eq_op);
        ip = ip + 2;
        need_merge = 1;
        goto <D.20016>;
        <D.20081>:
        <D.20082>:
        <D.20083>:
        <D.20084>:
        <D.20085>:
        <D.20086>:
        <D.20087>:
        <D.20088>:
        D.21138 = ip + 2;
        if (D.21138 > end) goto <D.21231>; else goto <D.21233>;
        <D.21233>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.21231>; else goto <D.21232>;
        <D.21231>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21234 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21234;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21235 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21235;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21232>:
        D.21144 = ip + 1;
        D.21145 = *D.21144;
        D.21228 = (signed char) D.21145;
        D.21229 = (int) D.21228;
        D.21230 = D.21229 + 2;
        do_branch_op (&ctx, D.21230, &cmp_br_op);
        ip = ip + 2;
        need_merge = 1;
        goto <D.20016>;
        <D.20090>:
        <D.20091>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21236>; else goto <D.21238>;
        <D.21238>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21236>; else goto <D.21237>;
        <D.21236>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21239 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21239;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21240 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21240;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21237>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        D.21243 = (int) D.21242;
        D.21244 = D.21243 + 5;
        do_branch_op (&ctx, D.21244, &cmp_br_eq_op);
        ip = ip + 5;
        need_merge = 1;
        goto <D.20016>;
        <D.20093>:
        <D.20094>:
        <D.20095>:
        <D.20096>:
        <D.20097>:
        <D.20098>:
        <D.20099>:
        <D.20100>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21245>; else goto <D.21247>;
        <D.21247>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21245>; else goto <D.21246>;
        <D.21245>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21248 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21248;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21249 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21249;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21246>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        D.21243 = (int) D.21242;
        D.21244 = D.21243 + 5;
        do_branch_op (&ctx, D.21244, &cmp_br_op);
        ip = ip + 5;
        need_merge = 1;
        goto <D.20016>;
        <D.20102>:
        <D.20103>:
        D.21138 = ip + 2;
        if (D.21138 > end) goto <D.21250>; else goto <D.21252>;
        <D.21252>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.21250>; else goto <D.21251>;
        <D.21250>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21253 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21253;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21254 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21254;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21251>:
        D.21144 = ip + 1;
        D.21145 = *D.21144;
        D.21161 = (unsigned int) D.21145;
        D.21032 = *ip;
        D.21255 = D.21032 == 18;
        D.21256 = (int) D.21255;
        push_local (&ctx, D.21161, D.21256);
        ip = ip + 2;
        goto <D.20016>;
        <D.20105>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21257 = monoeg_g_strdup_printf ("Use of the `unused\' opcode");
          vinfo->info.message = D.21257;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21258 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21258;
        }
        ctx.valid = 0;
        ip = ip + 1;
        goto <D.20016>;
        <D.20107>:
        {
          struct ILStackDesc * top;

          D.21259 = check_underflow (&ctx, 1);
          if (D.21259 == 0) goto <D.20016>; else goto <D.21260>;
          <D.21260>:
          D.21261 = check_overflow (&ctx);
          if (D.21261 == 0) goto <D.20016>; else goto <D.21262>;
          <D.21262>:
          top = stack_push (&ctx);
          D.21263 = stack_peek (&ctx, 1);
          copy_stack_value (top, D.21263);
          ip = ip + 1;
          goto <D.20016>;
        }
        <D.20109>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21264>; else goto <D.21266>;
        <D.21266>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21264>; else goto <D.21265>;
        <D.21264>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21267 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21267;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21268 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21268;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21265>:
        D.21109 = ctx.eval.size;
        if (D.21109 != 0) goto <D.21269>; else goto <D.21270>;
        <D.21269>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21271 = monoeg_g_strdup_printf ("Eval stack must be empty in jmp at 0x%04x", ip_offset);
          vinfo->info.message = D.21271;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21272 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21272;
        }
        ctx.valid = 0;
        <D.21270>:
        token = MEM[(const guint32 *)ip + 1B];
        D.20786 = ctx.header;
        D.21273 = in_any_block (D.20786, ip_offset);
        if (D.21273 != 0) goto <D.21274>; else goto <D.21275>;
        <D.21274>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21276 = monoeg_g_strdup_printf ("jmp cannot escape exception blocks at 0x%04x", ip_offset);
          vinfo->info.message = D.21276;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21277 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21277;
        }
        ctx.valid = 0;
        <D.21275>:
        D.20821 = ctx.verifiable;
        if (D.20821 != 0) goto <D.21278>; else goto <D.21280>;
        <D.21280>:
        D.20823 = ctx.level;
        D.20824 = D.20823 & 128;
        if (D.20824 != 0) goto <D.21278>; else goto <D.21279>;
        <D.21278>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.21141 = ctx.ip_offset;
          D.21281 = monoeg_g_strdup_printf ("Intruction jmp is not verifiable at 0x%04x", D.21141);
          vinfo->info.message = D.21281;
          vinfo->exception_type = 4;
          D.20768 = ctx.list;
          D.21282 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21282;
        }
        ctx.verifiable = 0;
        D.20823 = ctx.level;
        D.20827 = D.20823 & 16;
        if (D.20827 != 0) goto <D.21283>; else goto <D.21284>;
        <D.21283>:
        ctx.valid = 0;
        <D.21284>:
        <D.21279>:
        ip = ip + 5;
        goto <D.20016>;
        <D.20114>:
        <D.20115>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21285>; else goto <D.21287>;
        <D.21287>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21285>; else goto <D.21286>;
        <D.21285>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21288 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21288;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21289 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21289;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21286>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        D.21243 = (int) D.21242;
        D.21032 = *ip;
        D.21290 = D.21032 == 111;
        D.21291 = (int) D.21290;
        do_invoke_method (&ctx, D.21243, D.21291);
        ip = ip + 5;
        goto <D.20016>;
        <D.20117>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21292>; else goto <D.21294>;
        <D.21294>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21292>; else goto <D.21293>;
        <D.21292>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21295 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21295;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21296 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21296;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21293>:
        token = MEM[(const guint32 *)ip + 1B];
        D.20821 = ctx.verifiable;
        if (D.20821 != 0) goto <D.21297>; else goto <D.21299>;
        <D.21299>:
        D.20823 = ctx.level;
        D.20824 = D.20823 & 128;
        if (D.20824 != 0) goto <D.21297>; else goto <D.21298>;
        <D.21297>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.21141 = ctx.ip_offset;
          D.21300 = monoeg_g_strdup_printf ("Intruction calli is not verifiable at 0x%04x", D.21141);
          vinfo->info.message = D.21300;
          vinfo->exception_type = 4;
          D.20768 = ctx.list;
          D.21301 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21301;
        }
        ctx.verifiable = 0;
        D.20823 = ctx.level;
        D.20827 = D.20823 & 16;
        if (D.20827 != 0) goto <D.21302>; else goto <D.21303>;
        <D.21302>:
        ctx.valid = 0;
        <D.21303>:
        <D.21298>:
        ip = ip + 5;
        goto <D.20016>;
        <D.20120>:
        D.21138 = ip + 2;
        if (D.21138 > end) goto <D.21304>; else goto <D.21306>;
        <D.21306>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.21304>; else goto <D.21305>;
        <D.21304>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21307 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21307;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21308 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21308;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21305>:
        D.21144 = ip + 1;
        D.21145 = *D.21144;
        D.21228 = (signed char) D.21145;
        D.21229 = (int) D.21228;
        D.21230 = D.21229 + 2;
        do_static_branch (&ctx, D.21230);
        need_merge = 1;
        ip = ip + 2;
        start = 1;
        goto <D.20016>;
        <D.20122>:
        <D.20123>:
        D.21138 = ip + 2;
        if (D.21138 > end) goto <D.21309>; else goto <D.21311>;
        <D.21311>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.21309>; else goto <D.21310>;
        <D.21309>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21312 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21312;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21313 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21313;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21310>:
        D.21144 = ip + 1;
        D.21145 = *D.21144;
        D.21228 = (signed char) D.21145;
        D.21229 = (int) D.21228;
        D.21230 = D.21229 + 2;
        do_boolean_branch_op (&ctx, D.21230);
        ip = ip + 2;
        need_merge = 1;
        goto <D.20016>;
        <D.20125>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21314>; else goto <D.21316>;
        <D.21316>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21314>; else goto <D.21315>;
        <D.21314>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21317 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21317;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21318 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21318;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21315>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        D.21243 = (int) D.21242;
        D.21244 = D.21243 + 5;
        do_static_branch (&ctx, D.21244);
        need_merge = 1;
        ip = ip + 5;
        start = 1;
        goto <D.20016>;
        <D.20127>:
        <D.20128>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21319>; else goto <D.21321>;
        <D.21321>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21319>; else goto <D.21320>;
        <D.21319>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21322 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21322;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21323 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21323;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21320>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        D.21243 = (int) D.21242;
        D.21244 = D.21243 + 5;
        do_boolean_branch_op (&ctx, D.21244);
        ip = ip + 5;
        need_merge = 1;
        goto <D.20016>;
        <D.20130>:
        {
          guint32 entries;

          D.21182 = ip + 5;
          if (D.21182 > end) goto <D.21324>; else goto <D.21326>;
          <D.21326>:
          ip.19 = (long unsigned int) ip;
          if (ip.19 > 18446744073709551610) goto <D.21324>; else goto <D.21325>;
          <D.21324>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 1;
            D.21032 = *ip;
            D.21033 = (int) D.21032;
            D.21141 = ctx.ip_offset;
            D.21327 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
            vinfo->info.message = D.21327;
            vinfo->exception_type = 3;
            D.20768 = ctx.list;
            D.21328 = monoeg_g_slist_prepend (D.20768, vinfo);
            ctx.list = D.21328;
          }
          ctx.valid = 0;
          goto <D.20016>;
          <D.21325>:
          entries = MEM[(const guint32 *)ip + 1B];
          if (entries > 1073741823) goto <D.21329>; else goto <D.21330>;
          <D.21329>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 1;
            D.21141 = ctx.ip_offset;
            D.21331 = monoeg_g_strdup_printf ("Too many switch entries %x at 0x%04x", entries, D.21141);
            vinfo->info.message = D.21331;
            vinfo->exception_type = 3;
            D.20768 = ctx.list;
            D.21332 = monoeg_g_slist_prepend (D.20768, vinfo);
            ctx.list = D.21332;
          }
          ctx.valid = 0;
          <D.21330>:
          ip = ip + 5;
          D.21335 = (long unsigned int) entries;
          D.21336 = D.21335 * 4;
          D.21337 = ip + D.21336;
          if (D.21337 > end) goto <D.21333>; else goto <D.21338>;
          <D.21338>:
          D.21335 = (long unsigned int) entries;
          D.21336 = D.21335 * 4;
          D.21339 = ~D.21336;
          ip.19 = (long unsigned int) ip;
          if (D.21339 < ip.19) goto <D.21333>; else goto <D.21334>;
          <D.21333>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 1;
            D.21032 = *ip;
            D.21033 = (int) D.21032;
            D.21141 = ctx.ip_offset;
            D.21340 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
            vinfo->info.message = D.21340;
            vinfo->exception_type = 3;
            D.20768 = ctx.list;
            D.21341 = monoeg_g_slist_prepend (D.20768, vinfo);
            ctx.list = D.21341;
          }
          ctx.valid = 0;
          goto <D.20016>;
          <D.21334>:
          entries.20 = (int) entries;
          do_switch (&ctx, entries.20, ip);
          D.21335 = (long unsigned int) entries;
          D.21336 = D.21335 * 4;
          ip = ip + D.21336;
          goto <D.20016>;
        }
        <D.20135>:
        <D.20136>:
        <D.20137>:
        <D.20138>:
        <D.20139>:
        <D.20140>:
        <D.20141>:
        <D.20142>:
        <D.20143>:
        <D.20144>:
        <D.20145>:
        D.21032 = *ip;
        D.21033 = (int) D.21032;
        do_load_indirect (&ctx, D.21033);
        ip = ip + 1;
        goto <D.20016>;
        <D.20146>:
        <D.20147>:
        <D.20148>:
        <D.20149>:
        <D.20150>:
        <D.20151>:
        <D.20152>:
        <D.20153>:
        D.21032 = *ip;
        D.21033 = (int) D.21032;
        do_store_indirect (&ctx, D.21033);
        ip = ip + 1;
        goto <D.20016>;
        <D.20154>:
        <D.20155>:
        D.21032 = *ip;
        D.21033 = (int) D.21032;
        do_unary_math_op (&ctx, D.21033);
        ip = ip + 1;
        goto <D.20016>;
        <D.20156>:
        <D.20157>:
        <D.20158>:
        <D.20159>:
        <D.20160>:
        <D.20161>:
        do_conversion (&ctx, 1);
        ip = ip + 1;
        goto <D.20016>;
        <D.20162>:
        <D.20163>:
        do_conversion (&ctx, 2);
        ip = ip + 1;
        goto <D.20016>;
        <D.20164>:
        <D.20165>:
        <D.20166>:
        do_conversion (&ctx, 4);
        ip = ip + 1;
        goto <D.20016>;
        <D.20167>:
        <D.20168>:
        do_conversion (&ctx, 3);
        ip = ip + 1;
        goto <D.20016>;
        <D.20169>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21343>; else goto <D.21345>;
        <D.21345>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21343>; else goto <D.21344>;
        <D.21343>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21346 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21346;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21347 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21347;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21344>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        D.21243 = (int) D.21242;
        do_cpobj (&ctx, D.21243);
        ip = ip + 5;
        goto <D.20016>;
        <D.20171>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21348>; else goto <D.21350>;
        <D.21350>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21348>; else goto <D.21349>;
        <D.21348>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21351 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21351;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21352 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21352;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21349>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        D.21243 = (int) D.21242;
        do_ldobj_value (&ctx, D.21243);
        ip = ip + 5;
        goto <D.20016>;
        <D.20173>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21353>; else goto <D.21355>;
        <D.21355>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21353>; else goto <D.21354>;
        <D.21353>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21356 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21356;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21357 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21357;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21354>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        do_ldstr (&ctx, D.21242);
        ip = ip + 5;
        goto <D.20016>;
        <D.20175>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21358>; else goto <D.21360>;
        <D.21360>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21358>; else goto <D.21359>;
        <D.21358>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21361 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21361;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21362 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21362;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21359>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        D.21243 = (int) D.21242;
        do_newobj (&ctx, D.21243);
        ip = ip + 5;
        goto <D.20016>;
        <D.20177>:
        <D.20178>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21363>; else goto <D.21365>;
        <D.21365>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21363>; else goto <D.21364>;
        <D.21363>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21366 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21366;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21367 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21367;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21364>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        D.21243 = (int) D.21242;
        D.21032 = *ip;
        if (D.21032 == 116) goto <D.21369>; else goto <D.21370>;
        <D.21369>:
        iftmp.21 = "castclass";
        goto <D.21371>;
        <D.21370>:
        iftmp.21 = "isinst";
        <D.21371>:
        do_cast (&ctx, D.21243, iftmp.21);
        ip = ip + 5;
        goto <D.20016>;
        <D.20180>:
        <D.20181>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21372 = monoeg_g_strdup_printf ("Use of the `unused\' opcode");
          vinfo->info.message = D.21372;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21373 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21373;
        }
        ctx.valid = 0;
        ip = ip + 1;
        goto <D.20016>;
        <D.20183>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21374>; else goto <D.21376>;
        <D.21376>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21374>; else goto <D.21375>;
        <D.21374>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21377 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21377;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21378 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21378;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21375>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        D.21243 = (int) D.21242;
        do_unbox_value (&ctx, D.21243);
        ip = ip + 5;
        goto <D.20016>;
        <D.20185>:
        do_throw (&ctx);
        start = 1;
        ip = ip + 1;
        goto <D.20016>;
        <D.20186>:
        <D.20187>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21379>; else goto <D.21381>;
        <D.21381>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21379>; else goto <D.21380>;
        <D.21379>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21382 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21382;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21383 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21383;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21380>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        D.21243 = (int) D.21242;
        D.21032 = *ip;
        D.21384 = D.21032 == 124;
        D.21385 = (int) D.21384;
        do_push_field (&ctx, D.21243, D.21385);
        ip = ip + 5;
        goto <D.20016>;
        <D.20189>:
        <D.20190>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21386>; else goto <D.21388>;
        <D.21388>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21386>; else goto <D.21387>;
        <D.21386>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21389 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21389;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21390 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21390;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21387>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        D.21243 = (int) D.21242;
        D.21032 = *ip;
        D.21391 = D.21032 == 127;
        D.21392 = (int) D.21391;
        do_push_static_field (&ctx, D.21243, D.21392);
        ip = ip + 5;
        goto <D.20016>;
        <D.20192>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21393>; else goto <D.21395>;
        <D.21395>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21393>; else goto <D.21394>;
        <D.21393>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21396 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21396;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21397 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21397;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21394>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        D.21243 = (int) D.21242;
        do_store_field (&ctx, D.21243);
        ip = ip + 5;
        goto <D.20016>;
        <D.20194>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21398>; else goto <D.21400>;
        <D.21400>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21398>; else goto <D.21399>;
        <D.21398>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21401 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21401;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21402 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21402;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21399>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        D.21243 = (int) D.21242;
        do_store_static_field (&ctx, D.21243);
        ip = ip + 5;
        goto <D.20016>;
        <D.20196>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21403>; else goto <D.21405>;
        <D.21405>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21403>; else goto <D.21404>;
        <D.21403>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21406 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21406;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21407 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21407;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21404>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        D.21243 = (int) D.21242;
        do_stobj (&ctx, D.21243);
        ip = ip + 5;
        goto <D.20016>;
        <D.20198>:
        <D.20199>:
        <D.20200>:
        <D.20201>:
        <D.20202>:
        <D.20203>:
        do_conversion (&ctx, 1);
        ip = ip + 1;
        goto <D.20016>;
        <D.20204>:
        <D.20205>:
        do_conversion (&ctx, 2);
        ip = ip + 1;
        goto <D.20016>;
        <D.20206>:
        <D.20207>:
        do_conversion (&ctx, 3);
        ip = ip + 1;
        goto <D.20016>;
        <D.20208>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21408>; else goto <D.21410>;
        <D.21410>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21408>; else goto <D.21409>;
        <D.21408>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21411 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21411;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21412 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21412;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21409>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        D.21243 = (int) D.21242;
        do_box_value (&ctx, D.21243);
        ip = ip + 5;
        goto <D.20016>;
        <D.20210>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21413>; else goto <D.21415>;
        <D.21415>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21413>; else goto <D.21414>;
        <D.21413>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21416 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21416;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21417 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21417;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21414>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        D.21243 = (int) D.21242;
        do_newarr (&ctx, D.21243);
        ip = ip + 5;
        goto <D.20016>;
        <D.20212>:
        do_ldlen (&ctx);
        ip = ip + 1;
        goto <D.20016>;
        <D.20213>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21418>; else goto <D.21420>;
        <D.21420>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21418>; else goto <D.21419>;
        <D.21418>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21421 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21421;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21422 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21422;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21419>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        D.21243 = (int) D.21242;
        do_ldelema (&ctx, D.21243);
        ip = ip + 5;
        goto <D.20016>;
        <D.20215>:
        <D.20216>:
        <D.20217>:
        <D.20218>:
        <D.20219>:
        <D.20220>:
        <D.20221>:
        <D.20222>:
        <D.20223>:
        <D.20224>:
        <D.20225>:
        D.21032 = *ip;
        D.21033 = (int) D.21032;
        do_ldelem (&ctx, D.21033, 0);
        ip = ip + 1;
        goto <D.20016>;
        <D.20226>:
        <D.20227>:
        <D.20228>:
        <D.20229>:
        <D.20230>:
        <D.20231>:
        <D.20232>:
        <D.20233>:
        D.21032 = *ip;
        D.21033 = (int) D.21032;
        do_stelem (&ctx, D.21033, 0);
        ip = ip + 1;
        goto <D.20016>;
        <D.20234>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21423>; else goto <D.21425>;
        <D.21425>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21423>; else goto <D.21424>;
        <D.21423>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21426 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21426;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21427 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21427;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21424>:
        D.21032 = *ip;
        D.21033 = (int) D.21032;
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        D.21243 = (int) D.21242;
        do_ldelem (&ctx, D.21033, D.21243);
        ip = ip + 5;
        goto <D.20016>;
        <D.20236>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21428>; else goto <D.21430>;
        <D.21430>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21428>; else goto <D.21429>;
        <D.21428>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21431 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21431;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21432 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21432;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21429>:
        D.21032 = *ip;
        D.21033 = (int) D.21032;
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        D.21243 = (int) D.21242;
        do_stelem (&ctx, D.21033, D.21243);
        ip = ip + 5;
        goto <D.20016>;
        <D.20238>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21433>; else goto <D.21435>;
        <D.21435>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21433>; else goto <D.21434>;
        <D.21433>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21436 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21436;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21437 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21437;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21434>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        D.21243 = (int) D.21242;
        do_unbox_any (&ctx, D.21243);
        ip = ip + 5;
        goto <D.20016>;
        <D.20240>:
        <D.20241>:
        <D.20242>:
        <D.20243>:
        <D.20244>:
        <D.20245>:
        do_conversion (&ctx, 1);
        ip = ip + 1;
        goto <D.20016>;
        <D.20246>:
        <D.20247>:
        do_conversion (&ctx, 2);
        ip = ip + 1;
        goto <D.20016>;
        <D.20248>:
        <D.20249>:
        do_conversion (&ctx, 3);
        ip = ip + 1;
        goto <D.20016>;
        <D.20250>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21438>; else goto <D.21440>;
        <D.21440>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21438>; else goto <D.21439>;
        <D.21438>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21441 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21441;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21442 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21442;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21439>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        D.21243 = (int) D.21242;
        do_refanyval (&ctx, D.21243);
        ip = ip + 5;
        goto <D.20016>;
        <D.20252>:
        do_ckfinite (&ctx);
        ip = ip + 1;
        goto <D.20016>;
        <D.20253>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21443>; else goto <D.21445>;
        <D.21445>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21443>; else goto <D.21444>;
        <D.21443>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21446 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21446;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21447 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21447;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21444>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        D.21243 = (int) D.21242;
        do_mkrefany (&ctx, D.21243);
        ip = ip + 5;
        goto <D.20016>;
        <D.20255>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21448>; else goto <D.21450>;
        <D.21450>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21448>; else goto <D.21449>;
        <D.21448>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21451 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21451;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21452 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21452;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21449>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        D.21243 = (int) D.21242;
        do_load_token (&ctx, D.21243);
        ip = ip + 5;
        goto <D.20016>;
        <D.20257>:
        D.20786 = ctx.header;
        D.21453 = is_correct_endfinally (D.20786, ip_offset);
        if (D.21453 == 0) goto <D.21454>; else goto <D.21455>;
        <D.21454>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21141 = ctx.ip_offset;
          D.21456 = monoeg_g_strdup_printf ("endfinally must be used inside a finally/fault handler at 0x%04x", D.21141);
          vinfo->info.message = D.21456;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21457 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21457;
        }
        ctx.valid = 0;
        <D.21455>:
        ctx.eval.size = 0;
        start = 1;
        ip = ip + 1;
        goto <D.20016>;
        <D.20259>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21458>; else goto <D.21460>;
        <D.21460>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21458>; else goto <D.21459>;
        <D.21458>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21461 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21461;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21462 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21462;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21459>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        D.21463 = D.21242 + 5;
        D.21464 = (int) D.21463;
        do_leave (&ctx, D.21464);
        ip = ip + 5;
        start = 1;
        need_merge = 1;
        goto <D.20016>;
        <D.20261>:
        D.21138 = ip + 2;
        if (D.21138 > end) goto <D.21465>; else goto <D.21467>;
        <D.21467>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.21465>; else goto <D.21466>;
        <D.21465>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21468 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21468;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21469 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21469;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21466>:
        D.21144 = ip + 1;
        D.21145 = *D.21144;
        D.21228 = (signed char) D.21145;
        D.21229 = (int) D.21228;
        D.21230 = D.21229 + 2;
        do_leave (&ctx, D.21230);
        ip = ip + 2;
        start = 1;
        need_merge = 1;
        goto <D.20016>;
        <D.20263>:
        D.21138 = ip + 2;
        if (D.21138 > end) goto <D.21470>; else goto <D.21472>;
        <D.21472>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.21470>; else goto <D.21471>;
        <D.21470>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21473 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21473;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21474 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21474;
        }
        ctx.valid = 0;
        goto <D.20016>;
        <D.21471>:
        ip = ip + 1;
        D.21032 = *ip;
        D.21033 = (int) D.21032;
        switch (D.21033) <default: <D.20314>, case 0: <D.20275>, case 1: <D.20268>, case 2: <D.20269>, case 3: <D.20270>, case 4: <D.20271>, case 5: <D.20272>, case 6: <D.20277>, case 7: <D.20279>, case 8: <D.20288>, case 9: <D.20281>, case 10: <D.20282>, case 11: <D.20273>, case 12: <D.20284>, case 13: <D.20285>, case 14: <D.20265>, case 15: <D.20287>, case 16: <D.20289>, case 17: <D.20293>, case 18: <D.20294>, case 19: <D.20296>, case 20: <D.20297>, case 21: <D.20299>, case 22: <D.20301>, case 23: <D.20304>, case 24: <D.20306>, case 25: <D.20308>, case 26: <D.20309>, case 27: <D.20291>, case 28: <D.20311>, case 29: <D.20313>, case 30: <D.20303>, case 34: <D.20290>>
        <D.20265>:
        D.21477 = ip + 3;
        if (D.21477 > end) goto <D.21475>; else goto <D.21478>;
        <D.21478>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551612) goto <D.21475>; else goto <D.21476>;
        <D.21475>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21479 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21479;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21480 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21480;
        }
        ctx.valid = 0;
        goto <D.20267>;
        <D.21476>:
        D.21481 = ip + 1;
        D.21482 = *D.21481;
        D.21483 = (unsigned int) D.21482;
        store_local (&ctx, D.21483);
        ip = ip + 3;
        goto <D.20267>;
        <D.20268>:
        D.21032 = *ip;
        D.21484 = (unsigned int) D.21032;
        do_cmp_op (&ctx, &cmp_br_eq_op, D.21484);
        ip = ip + 1;
        goto <D.20267>;
        <D.20269>:
        <D.20270>:
        <D.20271>:
        <D.20272>:
        D.21032 = *ip;
        D.21484 = (unsigned int) D.21032;
        do_cmp_op (&ctx, &cmp_br_op, D.21484);
        ip = ip + 1;
        goto <D.20267>;
        <D.20273>:
        D.21477 = ip + 3;
        if (D.21477 > end) goto <D.21485>; else goto <D.21487>;
        <D.21487>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551612) goto <D.21485>; else goto <D.21486>;
        <D.21485>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21488 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21488;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21489 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21489;
        }
        ctx.valid = 0;
        goto <D.20267>;
        <D.21486>:
        D.21481 = ip + 1;
        D.21482 = *D.21481;
        D.21483 = (unsigned int) D.21482;
        store_arg (&ctx, D.21483);
        ip = ip + 3;
        goto <D.20267>;
        <D.20275>:
        D.21490 = check_overflow (&ctx);
        if (D.21490 == 0) goto <D.20267>; else goto <D.21491>;
        <D.21491>:
        D.20764 = ctx.signature;
        D.20779 = BIT_FIELD_REF <*D.20764, 64, 64>;
        D.21492 = D.20779 & 17732923532771328;
        if (D.21492 != 1407374883553280) goto <D.21493>; else goto <D.21494>;
        <D.21493>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21141 = ctx.ip_offset;
          D.21495 = monoeg_g_strdup_printf ("Cannot use arglist on method without VARGARG calling convention at 0x%04x", D.21141);
          vinfo->info.message = D.21495;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21496 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21496;
        }
        ctx.valid = 0;
        <D.21494>:
        D.21497 = stack_push (&ctx);
        D.21498 = mono_defaults.argumenthandle_class;
        D.21499 = &D.21498->byval_arg;
        set_stack_value (&ctx, D.21497, D.21499, 0);
        ip = ip + 1;
        goto <D.20267>;
        <D.20277>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21500>; else goto <D.21502>;
        <D.21502>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21500>; else goto <D.21501>;
        <D.21500>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21503 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21503;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21504 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21504;
        }
        ctx.valid = 0;
        goto <D.20267>;
        <D.21501>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        do_load_function_ptr (&ctx, D.21242, 0);
        ip = ip + 5;
        goto <D.20267>;
        <D.20279>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21505>; else goto <D.21507>;
        <D.21507>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21505>; else goto <D.21506>;
        <D.21505>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21508 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21508;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21509 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21509;
        }
        ctx.valid = 0;
        goto <D.20267>;
        <D.21506>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        do_load_function_ptr (&ctx, D.21242, 1);
        ip = ip + 5;
        goto <D.20267>;
        <D.20281>:
        <D.20282>:
        D.21477 = ip + 3;
        if (D.21477 > end) goto <D.21510>; else goto <D.21512>;
        <D.21512>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551612) goto <D.21510>; else goto <D.21511>;
        <D.21510>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21513 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21513;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21514 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21514;
        }
        ctx.valid = 0;
        goto <D.20267>;
        <D.21511>:
        D.21481 = ip + 1;
        D.21482 = *D.21481;
        D.21515 = (unsigned int) D.21482;
        D.21032 = *ip;
        D.21516 = D.21032 == 10;
        D.21517 = (int) D.21516;
        push_arg (&ctx, D.21515, D.21517);
        ip = ip + 3;
        goto <D.20267>;
        <D.20284>:
        <D.20285>:
        D.21477 = ip + 3;
        if (D.21477 > end) goto <D.21518>; else goto <D.21520>;
        <D.21520>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551612) goto <D.21518>; else goto <D.21519>;
        <D.21518>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21521 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21521;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21522 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21522;
        }
        ctx.valid = 0;
        goto <D.20267>;
        <D.21519>:
        D.21481 = ip + 1;
        D.21482 = *D.21481;
        D.21483 = (unsigned int) D.21482;
        D.21032 = *ip;
        D.21523 = D.21032 == 13;
        D.21524 = (int) D.21523;
        push_local (&ctx, D.21483, D.21524);
        ip = ip + 3;
        goto <D.20267>;
        <D.20287>:
        do_localloc (&ctx);
        ip = ip + 1;
        goto <D.20267>;
        <D.20288>:
        <D.20289>:
        <D.20290>:
        <D.20291>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21525 = monoeg_g_strdup_printf ("Use of the `unused\' opcode");
          vinfo->info.message = D.21525;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21526 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21526;
        }
        ctx.valid = 0;
        ip = ip + 1;
        goto <D.20267>;
        <D.20293>:
        do_endfilter (&ctx);
        start = 1;
        ip = ip + 1;
        goto <D.20267>;
        <D.20294>:
        D.21138 = ip + 2;
        if (D.21138 > end) goto <D.21527>; else goto <D.21529>;
        <D.21529>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551613) goto <D.21527>; else goto <D.21528>;
        <D.21527>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21530 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21530;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21531 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21531;
        }
        ctx.valid = 0;
        goto <D.20267>;
        <D.21528>:
        prefix = prefix | 1;
        ip = ip + 2;
        goto <D.20267>;
        <D.20296>:
        prefix = prefix | 2;
        ip = ip + 1;
        goto <D.20267>;
        <D.20297>:
        prefix = prefix | 4;
        ip = ip + 1;
        if (ip < end) goto <D.21532>; else goto <D.21533>;
        <D.21532>:
        D.21032 = *ip;
        D.21534 = D.21032 + 216;
        if (D.21534 > 1) goto <D.21535>; else goto <D.21536>;
        <D.21535>:
        D.21032 = *ip;
        if (D.21032 != 111) goto <D.21537>; else goto <D.21538>;
        <D.21537>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21539 = monoeg_g_strdup_printf ("tail prefix must be used only with call opcodes at 0x%04x", ip_offset);
          vinfo->info.message = D.21539;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21540 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21540;
        }
        ctx.valid = 0;
        <D.21538>:
        <D.21536>:
        <D.21533>:
        goto <D.20267>;
        <D.20299>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21541>; else goto <D.21543>;
        <D.21543>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21541>; else goto <D.21542>;
        <D.21541>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21544 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21544;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21545 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21545;
        }
        ctx.valid = 0;
        goto <D.20267>;
        <D.21542>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        D.21243 = (int) D.21242;
        do_initobj (&ctx, D.21243);
        ip = ip + 5;
        goto <D.20267>;
        <D.20301>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21546>; else goto <D.21548>;
        <D.21548>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21546>; else goto <D.21547>;
        <D.21546>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21549 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21549;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21550 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21550;
        }
        ctx.valid = 0;
        goto <D.20267>;
        <D.21547>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        D.21243 = (int) D.21242;
        D.21551 = get_boxable_mono_type (&ctx, D.21243, "constrained.");
        ctx.constrained_type = D.21551;
        prefix = prefix | 8;
        ip = ip + 5;
        goto <D.20267>;
        <D.20303>:
        prefix = prefix | 16;
        ip = ip + 1;
        goto <D.20267>;
        <D.20304>:
        D.21552 = ctx.prefix_set;
        D.21553 = D.21552 & 4294967292;
        ctx.prefix_set = D.21553;
        D.21554 = check_underflow (&ctx, 3);
        if (D.21554 == 0) goto <D.20267>; else goto <D.21555>;
        <D.21555>:
        D.20821 = ctx.verifiable;
        if (D.20821 != 0) goto <D.21556>; else goto <D.21558>;
        <D.21558>:
        D.20823 = ctx.level;
        D.20824 = D.20823 & 128;
        if (D.20824 != 0) goto <D.21556>; else goto <D.21557>;
        <D.21556>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.21141 = ctx.ip_offset;
          D.21559 = monoeg_g_strdup_printf ("Instruction cpblk is not verifiable at 0x%04x", D.21141);
          vinfo->info.message = D.21559;
          vinfo->exception_type = 4;
          D.20768 = ctx.list;
          D.21560 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21560;
        }
        ctx.verifiable = 0;
        D.20823 = ctx.level;
        D.20827 = D.20823 & 16;
        if (D.20827 != 0) goto <D.21561>; else goto <D.21562>;
        <D.21561>:
        ctx.valid = 0;
        <D.21562>:
        <D.21557>:
        ip = ip + 1;
        goto <D.20267>;
        <D.20306>:
        D.21552 = ctx.prefix_set;
        D.21553 = D.21552 & 4294967292;
        ctx.prefix_set = D.21553;
        D.21563 = check_underflow (&ctx, 3);
        if (D.21563 == 0) goto <D.20267>; else goto <D.21564>;
        <D.21564>:
        D.20821 = ctx.verifiable;
        if (D.20821 != 0) goto <D.21565>; else goto <D.21567>;
        <D.21567>:
        D.20823 = ctx.level;
        D.20824 = D.20823 & 128;
        if (D.20824 != 0) goto <D.21565>; else goto <D.21566>;
        <D.21565>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.21141 = ctx.ip_offset;
          D.21568 = monoeg_g_strdup_printf ("Instruction initblk is not verifiable at 0x%04x", D.21141);
          vinfo->info.message = D.21568;
          vinfo->exception_type = 4;
          D.20768 = ctx.list;
          D.21569 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21569;
        }
        ctx.verifiable = 0;
        D.20823 = ctx.level;
        D.20827 = D.20823 & 16;
        if (D.20827 != 0) goto <D.21570>; else goto <D.21571>;
        <D.21570>:
        ctx.valid = 0;
        <D.21571>:
        <D.21566>:
        ip = ip + 1;
        goto <D.20267>;
        <D.20308>:
        ip = ip + 2;
        goto <D.20267>;
        <D.20309>:
        D.20786 = ctx.header;
        D.21572 = is_correct_rethrow (D.20786, ip_offset);
        if (D.21572 == 0) goto <D.21573>; else goto <D.21574>;
        <D.21573>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21141 = ctx.ip_offset;
          D.21575 = monoeg_g_strdup_printf ("rethrow must be used inside a catch handler at 0x%04x", D.21141);
          vinfo->info.message = D.21575;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21576 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21576;
        }
        ctx.valid = 0;
        <D.21574>:
        ctx.eval.size = 0;
        start = 1;
        ip = ip + 1;
        goto <D.20267>;
        <D.20311>:
        D.21182 = ip + 5;
        if (D.21182 > end) goto <D.21577>; else goto <D.21579>;
        <D.21579>:
        ip.19 = (long unsigned int) ip;
        if (ip.19 > 18446744073709551610) goto <D.21577>; else goto <D.21578>;
        <D.21577>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21580 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21580;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21581 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21581;
        }
        ctx.valid = 0;
        goto <D.20267>;
        <D.21578>:
        D.21241 = ip + 1;
        D.21242 = *D.21241;
        D.21243 = (int) D.21242;
        do_sizeof (&ctx, D.21243);
        ip = ip + 5;
        goto <D.20267>;
        <D.20313>:
        do_refanytype (&ctx);
        ip = ip + 1;
        goto <D.20267>;
        <D.20314>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21582 = monoeg_g_strdup_printf ("Invalid instruction FE %x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21582;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21583 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21583;
        }
        ctx.valid = 0;
        ip = ip + 1;
        <D.20267>:
        goto <D.20016>;
        <D.20316>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21032 = *ip;
          D.21033 = (int) D.21032;
          D.21141 = ctx.ip_offset;
          D.21584 = monoeg_g_strdup_printf ("Invalid instruction %x at 0x%04x", D.21033, D.21141);
          vinfo->info.message = D.21584;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21585 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21585;
        }
        ctx.valid = 0;
        ip = ip + 1;
        <D.20016>:
        if (prefix != 0) goto <D.21586>; else goto <D.21587>;
        <D.21586>:
        D.21552 = ctx.prefix_set;
        if (D.21552 == 0) goto <D.21588>; else goto <D.21589>;
        <D.21588>:
        D.20805 = ctx.code;
        D.21141 = ctx.ip_offset;
        D.21590 = (long unsigned int) D.21141;
        D.21591 = D.21590 * 16;
        D.21592 = D.20805 + D.21591;
        D.20805 = ctx.code;
        D.21141 = ctx.ip_offset;
        D.21590 = (long unsigned int) D.21141;
        D.21591 = D.21590 * 16;
        D.21592 = D.20805 + D.21591;
        D.21593 = D.21592->flags;
        D.21594 = D.21593 | 1;
        D.21592->flags = D.21594;
        <D.21589>:
        D.21552 = ctx.prefix_set;
        D.21595 = D.21552 | prefix;
        ctx.prefix_set = D.21595;
        ctx.has_flags = 1;
        prefix = 0;
        goto <D.21596>;
        <D.21587>:
        D.21597 = ctx.has_flags;
        if (D.21597 == 0) goto <D.21598>; else goto <D.21599>;
        <D.21598>:
        D.20805 = ctx.code;
        D.21141 = ctx.ip_offset;
        D.21590 = (long unsigned int) D.21141;
        D.21591 = D.21590 * 16;
        D.21592 = D.20805 + D.21591;
        D.20805 = ctx.code;
        D.21141 = ctx.ip_offset;
        D.21590 = (long unsigned int) D.21141;
        D.21591 = D.21590 * 16;
        D.21592 = D.20805 + D.21591;
        D.21593 = D.21592->flags;
        D.21594 = D.21593 | 1;
        D.21592->flags = D.21594;
        <D.21599>:
        D.21552 = ctx.prefix_set;
        D.21600 = D.21552 & 8;
        if (D.21600 != 0) goto <D.21601>; else goto <D.21602>;
        <D.21601>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21141 = ctx.ip_offset;
          D.21603 = monoeg_g_strdup_printf ("Invalid instruction after constrained prefix at 0x%04x", D.21141);
          vinfo->info.message = D.21603;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21604 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21604;
        }
        ctx.valid = 0;
        <D.21602>:
        D.21552 = ctx.prefix_set;
        D.21605 = D.21552 & 16;
        if (D.21605 != 0) goto <D.21606>; else goto <D.21607>;
        <D.21606>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21141 = ctx.ip_offset;
          D.21608 = monoeg_g_strdup_printf ("Invalid instruction after readonly prefix at 0x%04x", D.21141);
          vinfo->info.message = D.21608;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21609 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21609;
        }
        ctx.valid = 0;
        <D.21607>:
        D.21552 = ctx.prefix_set;
        D.21610 = D.21552 & 2;
        if (D.21610 != 0) goto <D.21611>; else goto <D.21612>;
        <D.21611>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21141 = ctx.ip_offset;
          D.21613 = monoeg_g_strdup_printf ("Invalid instruction after volatile prefix at 0x%04x", D.21141);
          vinfo->info.message = D.21613;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21614 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21614;
        }
        ctx.valid = 0;
        <D.21612>:
        D.21552 = ctx.prefix_set;
        D.21615 = D.21552 & 1;
        if (D.21615 != 0) goto <D.21616>; else goto <D.21617>;
        <D.21616>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21141 = ctx.ip_offset;
          D.21618 = monoeg_g_strdup_printf ("Invalid instruction after unaligned prefix at 0x%04x", D.21141);
          vinfo->info.message = D.21618;
          vinfo->exception_type = 3;
          D.20768 = ctx.list;
          D.21619 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21619;
        }
        ctx.valid = 0;
        <D.21617>:
        prefix = 0;
        ctx.prefix_set = prefix;
        ctx.has_flags = 0;
        <D.21596>:
      }
      <D.20012>:
      if (ip < end) goto <D.21620>; else goto <D.20013>;
      <D.21620>:
      D.20800 = ctx.valid;
      if (D.20800 != 0) goto <D.20322>; else goto <D.20013>;
      <D.20013>:
      if (ip != end) goto <D.21621>; else goto <D.21623>;
      <D.21623>:
      if (start == 0) goto <D.21621>; else goto <D.21622>;
      <D.21621>:
      D.20821 = ctx.verifiable;
      if (D.20821 != 0) goto <D.21624>; else goto <D.21625>;
      <D.21624>:
      D.20768 = ctx.list;
      if (D.20768 == 0B) goto <D.21626>; else goto <D.21627>;
      <D.21626>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21628 = monoeg_g_strdup_printf ("Run ahead of method code at 0x%04x", ip_offset);
        vinfo->info.message = D.21628;
        vinfo->exception_type = 3;
        D.20768 = ctx.list;
        D.21629 = monoeg_g_slist_prepend (D.20768, vinfo);
        ctx.list = D.21629;
      }
      ctx.valid = 0;
      <D.21627>:
      <D.21625>:
      <D.21622>:
      i = 0;
      goto <D.20329>;
      <D.20328>:
      D.20805 = ctx.code;
      D.20863 = (long unsigned int) i;
      D.21630 = D.20863 * 16;
      D.21631 = D.20805 + D.21630;
      D.21632 = D.21631->flags;
      D.21633 = (int) D.21632;
      D.21634 = D.21633 & 2;
      if (D.21634 != 0) goto <D.21635>; else goto <D.21636>;
      <D.21635>:
      D.20805 = ctx.code;
      D.20863 = (long unsigned int) i;
      D.21630 = D.20863 * 16;
      D.21631 = D.20805 + D.21630;
      D.21632 = D.21631->flags;
      D.21633 = (int) D.21632;
      D.21637 = D.21633 & 1;
      if (D.21637 == 0) goto <D.21638>; else goto <D.21639>;
      <D.21638>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21640 = monoeg_g_strdup_printf ("Branch or exception block target middle of intruction at 0x%04x", i);
        vinfo->info.message = D.21640;
        vinfo->exception_type = 3;
        D.20768 = ctx.list;
        D.21641 = monoeg_g_slist_prepend (D.20768, vinfo);
        ctx.list = D.21641;
      }
      ctx.valid = 0;
      <D.21639>:
      D.20805 = ctx.code;
      D.20863 = (long unsigned int) i;
      D.21630 = D.20863 * 16;
      D.21631 = D.20805 + D.21630;
      D.21632 = D.21631->flags;
      D.21633 = (int) D.21632;
      D.21642 = D.21633 & 16;
      if (D.21642 != 0) goto <D.21643>; else goto <D.21644>;
      <D.21643>:
      D.20821 = ctx.verifiable;
      if (D.20821 != 0) goto <D.21645>; else goto <D.21647>;
      <D.21647>:
      D.20823 = ctx.level;
      D.20824 = D.20823 & 128;
      if (D.20824 != 0) goto <D.21645>; else goto <D.21646>;
      <D.21645>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.21648 = monoeg_g_strdup_printf ("Branch to delegate code sequence at 0x%04x", i);
        vinfo->info.message = D.21648;
        vinfo->exception_type = 4;
        D.20768 = ctx.list;
        D.21649 = monoeg_g_slist_prepend (D.20768, vinfo);
        ctx.list = D.21649;
      }
      ctx.verifiable = 0;
      D.20823 = ctx.level;
      D.20827 = D.20823 & 16;
      if (D.20827 != 0) goto <D.21650>; else goto <D.21651>;
      <D.21650>:
      ctx.valid = 0;
      <D.21651>:
      <D.21646>:
      <D.21644>:
      <D.21636>:
      D.20805 = ctx.code;
      D.20863 = (long unsigned int) i;
      D.21630 = D.20863 * 16;
      D.21631 = D.20805 + D.21630;
      D.21632 = D.21631->flags;
      D.21633 = (int) D.21632;
      D.21652 = D.21633 & 32;
      if (D.21652 != 0) goto <D.21653>; else goto <D.21654>;
      <D.21653>:
      D.21655 = ctx.has_this_store;
      if (D.21655 != 0) goto <D.21656>; else goto <D.21657>;
      <D.21656>:
      D.20821 = ctx.verifiable;
      if (D.20821 != 0) goto <D.21658>; else goto <D.21660>;
      <D.21660>:
      D.20823 = ctx.level;
      D.20824 = D.20823 & 128;
      if (D.20824 != 0) goto <D.21658>; else goto <D.21659>;
      <D.21658>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.21661 = monoeg_g_strdup_printf ("Invalid ldftn with virtual function in method with stdarg 0 at  0x%04x", i);
        vinfo->info.message = D.21661;
        vinfo->exception_type = 4;
        D.20768 = ctx.list;
        D.21662 = monoeg_g_slist_prepend (D.20768, vinfo);
        ctx.list = D.21662;
      }
      ctx.verifiable = 0;
      D.20823 = ctx.level;
      D.20827 = D.20823 & 16;
      if (D.20827 != 0) goto <D.21663>; else goto <D.21664>;
      <D.21663>:
      ctx.valid = 0;
      <D.21664>:
      <D.21659>:
      <D.21657>:
      <D.21654>:
      D.20805 = ctx.code;
      D.20863 = (long unsigned int) i;
      D.21630 = D.20863 * 16;
      D.21631 = D.20805 + D.21630;
      D.21632 = D.21631->flags;
      D.21633 = (int) D.21632;
      D.21665 = D.21633 & 64;
      if (D.21665 != 0) goto <D.21666>; else goto <D.21667>;
      <D.21666>:
      D.21655 = ctx.has_this_store;
      if (D.21655 != 0) goto <D.21668>; else goto <D.21669>;
      <D.21668>:
      D.20821 = ctx.verifiable;
      if (D.20821 != 0) goto <D.21670>; else goto <D.21672>;
      <D.21672>:
      D.20823 = ctx.level;
      D.20824 = D.20823 & 128;
      if (D.20824 != 0) goto <D.21670>; else goto <D.21671>;
      <D.21670>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.21673 = monoeg_g_strdup_printf ("Invalid call to a non-final virtual function in method with stdarg.0 or ldarga.0 at  0x%04x", i);
        vinfo->info.message = D.21673;
        vinfo->exception_type = 4;
        D.20768 = ctx.list;
        D.21674 = monoeg_g_slist_prepend (D.20768, vinfo);
        ctx.list = D.21674;
      }
      ctx.verifiable = 0;
      D.20823 = ctx.level;
      D.20827 = D.20823 & 16;
      if (D.20827 != 0) goto <D.21675>; else goto <D.21676>;
      <D.21675>:
      ctx.valid = 0;
      <D.21676>:
      <D.21671>:
      <D.21669>:
      <D.21667>:
      i = i + 1;
      <D.20329>:
      D.20910 = ctx.code_size;
      if (D.20910 > i) goto <D.21677>; else goto <D.20330>;
      <D.21677>:
      i.22 = (unsigned int) i;
      if (i.22 < ip_offset) goto <D.20328>; else goto <D.20330>;
      <D.20330>:
      D.21679 = ctx.method;
      D.21680 = mono_method_is_constructor (D.21679);
      if (D.21680 != 0) goto <D.21681>; else goto <D.21682>;
      <D.21681>:
      D.21683 = ctx.super_ctor_called;
      if (D.21683 == 0) goto <D.21684>; else goto <D.21685>;
      <D.21684>:
      D.21679 = ctx.method;
      D.21686 = D.21679->klass;
      D.21687 = BIT_FIELD_REF <*D.21686, 64, 256>;
      D.21688 = D.21687 & 8;
      if (D.21688 == 0) goto <D.21689>; else goto <D.21690>;
      <D.21689>:
      D.21679 = ctx.method;
      D.21686 = D.21679->klass;
      D.21221 = mono_defaults.object_class;
      if (D.21686 != D.21221) goto <D.21691>; else goto <D.21692>;
      <D.21691>:
      {
        char * method_name;
        char * type;

        D.21679 = ctx.method;
        method_name = mono_method_full_name (D.21679, 1);
        D.21679 = ctx.method;
        D.21686 = D.21679->klass;
        type = mono_type_get_full_name (D.21686);
        D.21679 = ctx.method;
        D.21686 = D.21679->klass;
        D.21695 = D.21686->parent;
        if (D.21695 != 0B) goto <D.21696>; else goto <D.21693>;
        <D.21696>:
        D.21679 = ctx.method;
        D.21686 = D.21679->klass;
        D.21695 = D.21686->parent;
        D.21697 = D.21695->exception_type;
        if (D.21697 != 0) goto <D.21698>; else goto <D.21693>;
        <D.21698>:
        D.20821 = ctx.verifiable;
        if (D.20821 != 0) goto <D.21699>; else goto <D.21701>;
        <D.21701>:
        D.20823 = ctx.level;
        D.20824 = D.20823 & 128;
        if (D.20824 != 0) goto <D.21699>; else goto <D.21700>;
        <D.21699>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.21702 = monoeg_g_strdup_printf ("Constructor %s for type %s not calling base type ctor due to a TypeLoadException on base type.", method_name, type);
          vinfo->info.message = D.21702;
          vinfo->exception_type = 4;
          D.20768 = ctx.list;
          D.21703 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21703;
        }
        ctx.verifiable = 0;
        D.20823 = ctx.level;
        D.20827 = D.20823 & 16;
        if (D.20827 != 0) goto <D.21704>; else goto <D.21705>;
        <D.21704>:
        ctx.valid = 0;
        <D.21705>:
        <D.21700>:
        goto <D.21694>;
        <D.21693>:
        D.20821 = ctx.verifiable;
        if (D.20821 != 0) goto <D.21706>; else goto <D.21708>;
        <D.21708>:
        D.20823 = ctx.level;
        D.20824 = D.20823 & 128;
        if (D.20824 != 0) goto <D.21706>; else goto <D.21707>;
        <D.21706>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.21709 = monoeg_g_strdup_printf ("Constructor %s for type %s not calling base type ctor.", method_name, type);
          vinfo->info.message = D.21709;
          vinfo->exception_type = 4;
          D.20768 = ctx.list;
          D.21710 = monoeg_g_slist_prepend (D.20768, vinfo);
          ctx.list = D.21710;
        }
        ctx.verifiable = 0;
        D.20823 = ctx.level;
        D.20827 = D.20823 & 16;
        if (D.20827 != 0) goto <D.21711>; else goto <D.21712>;
        <D.21711>:
        ctx.valid = 0;
        <D.21712>:
        <D.21707>:
        <D.21694>:
        monoeg_g_free (method_name);
        monoeg_g_free (type);
      }
      <D.21692>:
      <D.21690>:
      <D.21685>:
      <D.21682>:
      cleanup:
      D.20805 = ctx.code;
      if (D.20805 != 0B) goto <D.21713>; else goto <D.21714>;
      <D.21713>:
      i = 0;
      goto <D.20336>;
      <D.20335>:
      D.20805 = ctx.code;
      D.20863 = (long unsigned int) i;
      D.21630 = D.20863 * 16;
      D.21631 = D.20805 + D.21630;
      D.21715 = D.21631->stack;
      if (D.21715 != 0B) goto <D.21716>; else goto <D.21717>;
      <D.21716>:
      D.20805 = ctx.code;
      D.20863 = (long unsigned int) i;
      D.21630 = D.20863 * 16;
      D.21631 = D.20805 + D.21630;
      D.21715 = D.21631->stack;
      monoeg_g_free (D.21715);
      <D.21717>:
      i = i + 1;
      <D.20336>:
      i.23 = (unsigned int) i;
      D.20786 = ctx.header;
      D.20791 = D.20786->code_size;
      if (i.23 < D.20791) goto <D.20335>; else goto <D.20337>;
      <D.20337>:
      <D.21714>:
      tmp = ctx.funptrs;
      goto <D.20339>;
      <D.20338>:
      D.21719 = tmp->data;
      monoeg_g_free (D.21719);
      tmp = tmp->next;
      <D.20339>:
      if (tmp != 0B) goto <D.20338>; else goto <D.20340>;
      <D.20340>:
      D.21720 = ctx.funptrs;
      monoeg_g_slist_free (D.21720);
      tmp = ctx.exception_types;
      goto <D.20342>;
      <D.20341>:
      D.21719 = tmp->data;
      mono_metadata_free_type (D.21719);
      tmp = tmp->next;
      <D.20342>:
      if (tmp != 0B) goto <D.20341>; else goto <D.20343>;
      <D.20343>:
      D.21721 = ctx.exception_types;
      monoeg_g_slist_free (D.21721);
      i = 0;
      goto <D.20345>;
      <D.20344>:
      D.20862 = ctx.locals;
      D.20863 = (long unsigned int) i;
      D.20864 = D.20863 * 8;
      D.20865 = D.20862 + D.20864;
      D.20866 = *D.20865;
      if (D.20866 != 0B) goto <D.21722>; else goto <D.21723>;
      <D.21722>:
      D.20862 = ctx.locals;
      D.20863 = (long unsigned int) i;
      D.20864 = D.20863 * 8;
      D.20865 = D.20862 + D.20864;
      D.20866 = *D.20865;
      mono_metadata_free_type (D.20866);
      <D.21723>:
      i = i + 1;
      <D.20345>:
      D.20812 = ctx.num_locals;
      if (D.20812 > i) goto <D.20344>; else goto <D.20346>;
      <D.20346>:
      i = 0;
      goto <D.20348>;
      <D.20347>:
      D.20837 = ctx.params;
      D.20863 = (long unsigned int) i;
      D.20864 = D.20863 * 8;
      D.20878 = D.20837 + D.20864;
      D.20879 = *D.20878;
      if (D.20879 != 0B) goto <D.21724>; else goto <D.21725>;
      <D.21724>:
      D.20837 = ctx.params;
      D.20863 = (long unsigned int) i;
      D.20864 = D.20863 * 8;
      D.20878 = D.20837 + D.20864;
      D.20879 = *D.20878;
      mono_metadata_free_type (D.20879);
      <D.21725>:
      i = i + 1;
      <D.20348>:
      D.20830 = ctx.max_args;
      if (D.20830 > i) goto <D.20347>; else goto <D.20349>;
      <D.20349>:
      D.21726 = ctx.eval.stack;
      if (D.21726 != 0B) goto <D.21727>; else goto <D.21728>;
      <D.21727>:
      D.21726 = ctx.eval.stack;
      monoeg_g_free (D.21726);
      <D.21728>:
      D.20805 = ctx.code;
      if (D.20805 != 0B) goto <D.21729>; else goto <D.21730>;
      <D.21729>:
      D.20805 = ctx.code;
      monoeg_g_free (D.20805);
      <D.21730>:
      D.20862 = ctx.locals;
      monoeg_g_free (D.20862);
      D.20837 = ctx.params;
      monoeg_g_free (D.20837);
      mono_basic_block_free (original_bb);
      D.20786 = ctx.header;
      mono_metadata_free_mh (D.20786);
      D.20762 = ctx.list;
      return D.20762;
    }
  finally
    {
      error = {CLOBBER};
      ctx = {CLOBBER};
    }
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.21737;
  int D.21742;
  void * D.21744;
  long unsigned int D.21745;

  D.21737 = __builtin_constant_p (__len);
  if (D.21737 != 0) goto <D.21738>; else goto <D.21739>;
  <D.21738>:
  if (__len == 0) goto <D.21740>; else goto <D.21741>;
  <D.21740>:
  D.21742 = __builtin_constant_p (__ch);
  if (D.21742 == 0) goto <D.21735>; else goto <D.21743>;
  <D.21743>:
  if (__ch != 0) goto <D.21735>; else goto <D.21736>;
  <D.21735>:
  __warn_memset_zero_len ();
  D.21744 = __dest;
  return D.21744;
  <D.21736>:
  <D.21741>:
  <D.21739>:
  D.21745 = __builtin_object_size (__dest, 0);
  D.21744 = __builtin___memset_chk (__dest, __ch, __len, D.21745);
  return D.21744;
}


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

  D.21748 = __builtin_object_size (__dest, 0);
  D.21747 = __builtin___memcpy_chk (__dest, __src, __len, D.21748);
  return D.21747;
}


stack_init (struct VerifyContext * ctx, struct ILCodeDesc * state)
{
  short unsigned int D.21750;
  int D.21751;
  int D.21752;
  short unsigned int D.21755;
  short unsigned int D.21756;

  D.21750 = state->flags;
  D.21751 = (int) D.21750;
  D.21752 = D.21751 & 4;
  if (D.21752 != 0) goto <D.21753>; else goto <D.21754>;
  <D.21753>:
  return;
  <D.21754>:
  state->max_size = 0;
  D.21755 = state->max_size;
  state->size = D.21755;
  D.21750 = state->flags;
  D.21756 = D.21750 | 4;
  state->flags = D.21756;
}


get_stack_type (struct MonoType * type)
{
  unsigned char D.21758;
  long unsigned int D.21759;
  long unsigned int D.21760;
  int D.21763;
  int D.21764;
  int mask;
  int type_kind;
  void handle_enum = <<< error >>>;

  mask = 0;
  D.21758 = type->type;
  type_kind = (int) D.21758;
  D.21759 = BIT_FIELD_REF <*type, 64, 64>;
  D.21760 = D.21759 & 1073741824;
  if (D.21760 != 0) goto <D.21761>; else goto <D.21762>;
  <D.21761>:
  mask = 256;
  <D.21762>:
  handle_enum:
  switch (type_kind) <default: <D.18940>, case 2: <D.18916>, case 3: <D.18919>, case 4: <D.18914>, case 5: <D.18915>, case 6: <D.18917>, case 7: <D.18918>, case 8: <D.18920>, case 9: <D.18921>, case 10: <D.18934>, case 11: <D.18935>, case 12: <D.18936>, case 13: <D.18937>, case 14: <D.18930>, case 15: <D.18925>, case 17: <D.18939>, case 18: <D.18929>, case 19: <D.18927>, case 20: <D.18933>, case 21: <D.18938>, case 22: <D.18926>, case 24: <D.18922>, case 25: <D.18923>, case 27: <D.18924>, case 28: <D.18931>, case 29: <D.18932>, case 30: <D.18928>>
  <D.18914>:
  <D.18915>:
  <D.18916>:
  <D.18917>:
  <D.18918>:
  <D.18919>:
  <D.18920>:
  <D.18921>:
  D.21763 = mask | 1;
  return D.21763;
  <D.18922>:
  <D.18923>:
  D.21763 = mask | 3;
  return D.21763;
  <D.18924>:
  <D.18925>:
  <D.18926>:
  D.21763 = mask | 5;
  return D.21763;
  <D.18927>:
  <D.18928>:
  <D.18929>:
  <D.18930>:
  <D.18931>:
  <D.18932>:
  <D.18933>:
  D.21763 = mask | 6;
  return D.21763;
  <D.18934>:
  <D.18935>:
  D.21763 = mask | 2;
  return D.21763;
  <D.18936>:
  <D.18937>:
  D.21763 = mask | 4;
  return D.21763;
  <D.18938>:
  <D.18939>:
  D.21764 = mono_type_is_enum_type (type);
  if (D.21764 != 0) goto <D.21765>; else goto <D.21766>;
  <D.21765>:
  type = mono_type_get_underlying_type_any (type);
  if (type == 0B) goto <D.21767>; else goto <D.21768>;
  <D.21767>:
  D.21763 = 0;
  return D.21763;
  <D.21768>:
  D.21758 = type->type;
  type_kind = (int) D.21758;
  goto handle_enum;
  <D.21766>:
  D.21763 = mask | 6;
  return D.21763;
  <D.18940>:
  D.21763 = 0;
  return D.21763;
}


mono_type_is_enum_type (struct MonoType * type)
{
  unsigned char D.21770;
  struct MonoClass * D.21773;
  long unsigned int D.21774;
  long unsigned int D.21775;
  gboolean D.21778;
  struct MonoGenericClass * D.21781;
  struct MonoClass * D.21782;
  long unsigned int D.21783;
  long unsigned int D.21784;

  D.21770 = type->type;
  if (D.21770 == 17) goto <D.21771>; else goto <D.21772>;
  <D.21771>:
  D.21773 = type->data.klass;
  D.21774 = BIT_FIELD_REF <*D.21773, 64, 256>;
  D.21775 = D.21774 & 16;
  if (D.21775 != 0) goto <D.21776>; else goto <D.21777>;
  <D.21776>:
  D.21778 = 1;
  return D.21778;
  <D.21777>:
  <D.21772>:
  D.21770 = type->type;
  if (D.21770 == 21) goto <D.21779>; else goto <D.21780>;
  <D.21779>:
  D.21781 = type->data.generic_class;
  D.21782 = D.21781->container_class;
  D.21783 = BIT_FIELD_REF <*D.21782, 64, 256>;
  D.21784 = D.21783 & 16;
  if (D.21784 != 0) goto <D.21785>; else goto <D.21786>;
  <D.21785>:
  D.21778 = 1;
  return D.21778;
  <D.21786>:
  <D.21780>:
  D.21778 = 0;
  return D.21778;
}


mono_type_get_underlying_type_any (struct MonoType * type)
{
  unsigned char D.21788;
  struct MonoClass * D.21791;
  long unsigned int D.21792;
  long unsigned int D.21793;
  struct MonoType * D.21796;
  struct MonoGenericClass * D.21799;
  struct MonoClass * D.21800;
  long unsigned int D.21801;
  long unsigned int D.21802;

  D.21788 = type->type;
  if (D.21788 == 17) goto <D.21789>; else goto <D.21790>;
  <D.21789>:
  D.21791 = type->data.klass;
  D.21792 = BIT_FIELD_REF <*D.21791, 64, 256>;
  D.21793 = D.21792 & 16;
  if (D.21793 != 0) goto <D.21794>; else goto <D.21795>;
  <D.21794>:
  D.21791 = type->data.klass;
  D.21796 = mono_class_enum_basetype (D.21791);
  return D.21796;
  <D.21795>:
  <D.21790>:
  D.21788 = type->type;
  if (D.21788 == 21) goto <D.21797>; else goto <D.21798>;
  <D.21797>:
  D.21799 = type->data.generic_class;
  D.21800 = D.21799->container_class;
  D.21801 = BIT_FIELD_REF <*D.21800, 64, 256>;
  D.21802 = D.21801 & 16;
  if (D.21802 != 0) goto <D.21803>; else goto <D.21804>;
  <D.21803>:
  D.21799 = type->data.generic_class;
  D.21800 = D.21799->container_class;
  D.21796 = mono_class_enum_basetype (D.21800);
  return D.21796;
  <D.21804>:
  <D.21798>:
  D.21796 = type;
  return D.21796;
}


verify_clause_relationship (struct VerifyContext * ctx, struct MonoExceptionClause * clause, struct MonoExceptionClause * to_test)
{
  unsigned int D.21806;
  unsigned int D.21809;
  unsigned int D.21810;
  int D.21811;
  gchar * D.21814;
  struct GSList * D.21815;
  struct GSList * D.21816;
  int D.21817;
  gchar * D.21820;
  struct GSList * D.21821;
  unsigned int D.21822;
  unsigned int D.21823;
  unsigned int D.21826;
  unsigned int D.21827;
  uint32_t iftmp.24;
  unsigned int D.21831;
  unsigned int D.21835;
  unsigned int D.21836;
  unsigned int D.21837;
  int D.21838;
  gchar * D.21841;
  struct GSList * D.21842;
  gchar * D.21846;
  struct GSList * D.21847;
  unsigned int D.21850;
  int D.21851;
  uint32_t iftmp.25;
  int D.21857;
  int D.21858;
  gchar * D.21861;
  struct GSList * D.21862;

  D.21806 = to_test->flags;
  if (D.21806 == 1) goto <D.21807>; else goto <D.21808>;
  <D.21807>:
  D.21809 = to_test->data.filter_offset;
  D.21810 = to_test->handler_offset;
  D.21811 = is_clause_inside_range (clause, D.21809, D.21810);
  if (D.21811 != 0) goto <D.21812>; else goto <D.21813>;
  <D.21812>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21814 = monoeg_g_strdup_printf ("Exception clause inside filter");
    vinfo->info.message = D.21814;
    vinfo->exception_type = 3;
    D.21815 = ctx->list;
    D.21816 = monoeg_g_slist_prepend (D.21815, vinfo);
    ctx->list = D.21816;
  }
  ctx->valid = 0;
  return;
  <D.21813>:
  <D.21808>:
  D.21817 = is_clause_nested (clause, to_test);
  if (D.21817 != 0) goto <D.21818>; else goto <D.21819>;
  <D.21818>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21820 = monoeg_g_strdup_printf ("Nested exception clause appears after enclosing clause");
    vinfo->info.message = D.21820;
    vinfo->exception_type = 3;
    D.21815 = ctx->list;
    D.21821 = monoeg_g_slist_prepend (D.21815, vinfo);
    ctx->list = D.21821;
  }
  ctx->valid = 0;
  return;
  <D.21819>:
  D.21822 = clause->try_offset;
  D.21823 = to_test->try_offset;
  if (D.21822 == D.21823) goto <D.21824>; else goto <D.21825>;
  <D.21824>:
  D.21826 = clause->try_len;
  D.21827 = to_test->try_len;
  if (D.21826 == D.21827) goto <D.21828>; else goto <D.21829>;
  <D.21828>:
  D.21831 = clause->flags;
  if (D.21831 == 1) goto <D.21832>; else goto <D.21833>;
  <D.21832>:
  iftmp.24 = clause->data.filter_offset;
  goto <D.21834>;
  <D.21833>:
  iftmp.24 = clause->handler_offset;
  <D.21834>:
  D.21835 = clause->handler_offset;
  D.21836 = clause->handler_len;
  D.21837 = D.21835 + D.21836;
  D.21838 = is_clause_in_range (to_test, iftmp.24, D.21837);
  if (D.21838 != 0) goto <D.21839>; else goto <D.21840>;
  <D.21839>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21841 = monoeg_g_strdup_printf ("Exception handlers overlap");
    vinfo->info.message = D.21841;
    vinfo->exception_type = 3;
    D.21815 = ctx->list;
    D.21842 = monoeg_g_slist_prepend (D.21815, vinfo);
    ctx->list = D.21842;
  }
  ctx->valid = 0;
  return;
  <D.21840>:
  D.21831 = clause->flags;
  if (D.21831 > 1) goto <D.21843>; else goto <D.21845>;
  <D.21845>:
  D.21806 = to_test->flags;
  if (D.21806 > 1) goto <D.21843>; else goto <D.21844>;
  <D.21843>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21846 = monoeg_g_strdup_printf ("Exception clauses with shared protected block are neither catch or filter");
    vinfo->info.message = D.21846;
    vinfo->exception_type = 3;
    D.21815 = ctx->list;
    D.21847 = monoeg_g_slist_prepend (D.21815, vinfo);
    ctx->list = D.21847;
  }
  ctx->valid = 0;
  return;
  <D.21844>:
  return;
  <D.21829>:
  <D.21825>:
  D.21822 = clause->try_offset;
  D.21822 = clause->try_offset;
  D.21826 = clause->try_len;
  D.21850 = D.21822 + D.21826;
  D.21851 = is_clause_in_range (to_test, D.21822, D.21850);
  if (D.21851 != 0) goto <D.21848>; else goto <D.21852>;
  <D.21852>:
  D.21831 = clause->flags;
  if (D.21831 == 1) goto <D.21854>; else goto <D.21855>;
  <D.21854>:
  iftmp.25 = clause->data.filter_offset;
  goto <D.21856>;
  <D.21855>:
  iftmp.25 = clause->handler_offset;
  <D.21856>:
  D.21835 = clause->handler_offset;
  D.21836 = clause->handler_len;
  D.21837 = D.21835 + D.21836;
  D.21857 = is_clause_in_range (to_test, iftmp.25, D.21837);
  if (D.21857 != 0) goto <D.21848>; else goto <D.21849>;
  <D.21848>:
  D.21858 = is_clause_nested (to_test, clause);
  if (D.21858 == 0) goto <D.21859>; else goto <D.21860>;
  <D.21859>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21861 = monoeg_g_strdup_printf ("Exception clauses overlap");
    vinfo->info.message = D.21861;
    vinfo->exception_type = 3;
    D.21815 = ctx->list;
    D.21862 = monoeg_g_slist_prepend (D.21815, vinfo);
    ctx->list = D.21862;
  }
  ctx->valid = 0;
  <D.21860>:
  <D.21849>:
}


is_clause_inside_range (struct MonoExceptionClause * clause, guint32 start, guint32 end)
{
  unsigned int D.21866;
  unsigned int D.21868;
  unsigned int D.21869;
  gboolean D.21870;
  uint32_t iftmp.26;
  unsigned int D.21874;
  unsigned int D.21879;
  unsigned int D.21880;
  unsigned int D.21881;

  D.21866 = clause->try_offset;
  if (D.21866 < start) goto <D.21864>; else goto <D.21867>;
  <D.21867>:
  D.21866 = clause->try_offset;
  D.21868 = clause->try_len;
  D.21869 = D.21866 + D.21868;
  if (D.21869 > end) goto <D.21864>; else goto <D.21865>;
  <D.21864>:
  D.21870 = 0;
  return D.21870;
  <D.21865>:
  D.21874 = clause->flags;
  if (D.21874 == 1) goto <D.21875>; else goto <D.21876>;
  <D.21875>:
  iftmp.26 = clause->data.filter_offset;
  goto <D.21877>;
  <D.21876>:
  iftmp.26 = clause->handler_offset;
  <D.21877>:
  if (iftmp.26 < start) goto <D.21871>; else goto <D.21878>;
  <D.21878>:
  D.21879 = clause->handler_offset;
  D.21880 = clause->handler_len;
  D.21881 = D.21879 + D.21880;
  if (D.21881 > end) goto <D.21871>; else goto <D.21872>;
  <D.21871>:
  D.21870 = 0;
  return D.21870;
  <D.21872>:
  D.21870 = 1;
  return D.21870;
}


is_clause_in_range (struct MonoExceptionClause * clause, guint32 start, guint32 end)
{
  unsigned int D.21883;
  gboolean D.21888;
  uint32_t iftmp.27;
  unsigned int D.21890;
  uint32_t iftmp.28;

  D.21883 = clause->try_offset;
  if (D.21883 >= start) goto <D.21884>; else goto <D.21885>;
  <D.21884>:
  D.21883 = clause->try_offset;
  if (D.21883 < end) goto <D.21886>; else goto <D.21887>;
  <D.21886>:
  D.21888 = 1;
  return D.21888;
  <D.21887>:
  <D.21885>:
  D.21890 = clause->flags;
  if (D.21890 == 1) goto <D.21891>; else goto <D.21892>;
  <D.21891>:
  iftmp.27 = clause->data.filter_offset;
  goto <D.21893>;
  <D.21892>:
  iftmp.27 = clause->handler_offset;
  <D.21893>:
  if (iftmp.27 >= start) goto <D.21894>; else goto <D.21895>;
  <D.21894>:
  D.21890 = clause->flags;
  if (D.21890 == 1) goto <D.21897>; else goto <D.21898>;
  <D.21897>:
  iftmp.28 = clause->data.filter_offset;
  goto <D.21899>;
  <D.21898>:
  iftmp.28 = clause->handler_offset;
  <D.21899>:
  if (iftmp.28 < end) goto <D.21900>; else goto <D.21901>;
  <D.21900>:
  D.21888 = 1;
  return D.21888;
  <D.21901>:
  <D.21895>:
  D.21888 = 0;
  return D.21888;
}


is_clause_nested (struct MonoExceptionClause * clause, struct MonoExceptionClause * nested)
{
  unsigned int D.21903;
  unsigned int D.21906;
  unsigned int D.21907;
  int D.21908;
  gboolean D.21911;
  int iftmp.29;
  unsigned int D.21916;
  unsigned int D.21917;
  unsigned int D.21918;
  int D.21919;
  unsigned int D.21921;
  unsigned int D.21922;
  int D.21923;

  D.21903 = clause->flags;
  if (D.21903 == 1) goto <D.21904>; else goto <D.21905>;
  <D.21904>:
  D.21906 = clause->data.filter_offset;
  D.21907 = clause->handler_offset;
  D.21908 = is_clause_inside_range (nested, D.21906, D.21907);
  if (D.21908 != 0) goto <D.21909>; else goto <D.21910>;
  <D.21909>:
  D.21911 = 1;
  return D.21911;
  <D.21910>:
  <D.21905>:
  D.21916 = clause->try_offset;
  D.21916 = clause->try_offset;
  D.21917 = clause->try_len;
  D.21918 = D.21916 + D.21917;
  D.21919 = is_clause_inside_range (nested, D.21916, D.21918);
  if (D.21919 != 0) goto <D.21913>; else goto <D.21920>;
  <D.21920>:
  D.21907 = clause->handler_offset;
  D.21907 = clause->handler_offset;
  D.21921 = clause->handler_len;
  D.21922 = D.21907 + D.21921;
  D.21923 = is_clause_inside_range (nested, D.21907, D.21922);
  if (D.21923 != 0) goto <D.21913>; else goto <D.21914>;
  <D.21913>:
  iftmp.29 = 1;
  goto <D.21915>;
  <D.21914>:
  iftmp.29 = 0;
  <D.21915>:
  D.21911 = iftmp.29;
  return D.21911;
}


mono_type_is_valid_in_context (struct VerifyContext * ctx, struct MonoType * type)
{
  unsigned int D.21927;
  gchar * D.21928;
  struct GSList * D.21929;
  struct GSList * D.21930;
  gboolean D.21931;
  int D.21932;
  const char * iftmp.30;
  char D.21936;
  const char * iftmp.31;
  unsigned char D.21940;
  const char * iftmp.32;
  gchar * D.21949;
  struct GSList * D.21950;
  struct MonoLoaderError * D.21953;
  unsigned char D.21955;
  struct MonoGenericClass * D.21958;
  int D.21960;
  const char * D.21962;
  const char * D.21963;
  gchar * D.21964;
  struct GSList * D.21965;
  gchar * D.21966;
  struct GSList * D.21967;
  struct MonoClass * D.21970;
  unsigned char D.21971;
  gchar * D.21974;
  struct GSList * D.21975;
  int D.21978;
  gchar * D.21981;
  struct GSList * D.21982;
  int D.21983;
  gchar * D.21986;
  struct GSList * D.21987;
  struct MonoClass * klass;

  if (type == 0B) goto <D.21925>; else goto <D.21926>;
  <D.21925>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21927 = ctx->ip_offset;
    D.21928 = monoeg_g_strdup_printf ("Invalid null type at 0x%04x", D.21927);
    vinfo->info.message = D.21928;
    vinfo->exception_type = 12;
    D.21929 = ctx->list;
    D.21930 = monoeg_g_slist_prepend (D.21929, vinfo);
    ctx->list = D.21930;
  }
  ctx->valid = 0;
  D.21931 = 0;
  return D.21931;
  <D.21926>:
  D.21932 = is_valid_type_in_context (ctx, type);
  if (D.21932 == 0) goto <D.21933>; else goto <D.21934>;
  <D.21933>:
  {
    char * str;

    str = mono_type_full_name (type);
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.21936 = *str;
      if (D.21936 != 33) goto <D.21937>; else goto <D.21938>;
      <D.21937>:
      D.21940 = type->type;
      if (D.21940 == 19) goto <D.21941>; else goto <D.21942>;
      <D.21941>:
      iftmp.31 = "!";
      goto <D.21943>;
      <D.21942>:
      iftmp.31 = "!!";
      <D.21943>:
      iftmp.30 = iftmp.31;
      goto <D.21944>;
      <D.21938>:
      iftmp.30 = "";
      <D.21944>:
      D.21940 = type->type;
      if (D.21940 == 19) goto <D.21946>; else goto <D.21947>;
      <D.21946>:
      iftmp.32 = "class";
      goto <D.21948>;
      <D.21947>:
      iftmp.32 = "method";
      <D.21948>:
      D.21927 = ctx->ip_offset;
      D.21949 = monoeg_g_strdup_printf ("Invalid generic type (%s%s) (argument out of range or %s is not generic) at 0x%04x", iftmp.30, str, iftmp.32, D.21927);
      vinfo->info.message = D.21949;
      vinfo->exception_type = 12;
      D.21929 = ctx->list;
      D.21950 = monoeg_g_slist_prepend (D.21929, vinfo);
      ctx->list = D.21950;
    }
    ctx->valid = 0;
    monoeg_g_free (str);
    D.21931 = 0;
    return D.21931;
  }
  <D.21934>:
  klass = mono_class_from_mono_type (type);
  mono_class_init (klass);
  D.21953 = mono_loader_get_last_error ();
  if (D.21953 != 0B) goto <D.21951>; else goto <D.21954>;
  <D.21954>:
  D.21955 = klass->exception_type;
  if (D.21955 != 0) goto <D.21951>; else goto <D.21952>;
  <D.21951>:
  D.21958 = klass->generic_class;
  if (D.21958 != 0B) goto <D.21959>; else goto <D.21956>;
  <D.21959>:
  D.21960 = mono_class_is_valid_generic_instantiation (0B, klass);
  if (D.21960 == 0) goto <D.21961>; else goto <D.21956>;
  <D.21961>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21962 = klass->name_space;
    D.21963 = klass->name;
    D.21927 = ctx->ip_offset;
    D.21964 = monoeg_g_strdup_printf ("Invalid generic instantiation of type %s.%s at 0x%04x", D.21962, D.21963, D.21927);
    vinfo->info.message = D.21964;
    vinfo->exception_type = 7;
    D.21929 = ctx->list;
    D.21965 = monoeg_g_slist_prepend (D.21929, vinfo);
    ctx->list = D.21965;
  }
  ctx->valid = 0;
  goto <D.21957>;
  <D.21956>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21962 = klass->name_space;
    D.21963 = klass->name;
    D.21927 = ctx->ip_offset;
    D.21966 = monoeg_g_strdup_printf ("Could not load type %s.%s at 0x%04x", D.21962, D.21963, D.21927);
    vinfo->info.message = D.21966;
    vinfo->exception_type = 7;
    D.21929 = ctx->list;
    D.21967 = monoeg_g_slist_prepend (D.21929, vinfo);
    ctx->list = D.21967;
  }
  ctx->valid = 0;
  <D.21957>:
  mono_loader_clear_error ();
  D.21931 = 0;
  return D.21931;
  <D.21952>:
  D.21958 = klass->generic_class;
  if (D.21958 != 0B) goto <D.21968>; else goto <D.21969>;
  <D.21968>:
  D.21958 = klass->generic_class;
  D.21970 = D.21958->container_class;
  D.21971 = D.21970->exception_type;
  if (D.21971 != 0) goto <D.21972>; else goto <D.21973>;
  <D.21972>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21962 = klass->name_space;
    D.21963 = klass->name;
    D.21927 = ctx->ip_offset;
    D.21974 = monoeg_g_strdup_printf ("Could not load type %s.%s at 0x%04x", D.21962, D.21963, D.21927);
    vinfo->info.message = D.21974;
    vinfo->exception_type = 7;
    D.21929 = ctx->list;
    D.21975 = monoeg_g_slist_prepend (D.21929, vinfo);
    ctx->list = D.21975;
  }
  ctx->valid = 0;
  D.21931 = 0;
  return D.21931;
  <D.21973>:
  <D.21969>:
  D.21958 = klass->generic_class;
  if (D.21958 == 0B) goto <D.21976>; else goto <D.21977>;
  <D.21976>:
  D.21931 = 1;
  return D.21931;
  <D.21977>:
  D.21978 = mono_class_is_valid_generic_instantiation (ctx, klass);
  if (D.21978 == 0) goto <D.21979>; else goto <D.21980>;
  <D.21979>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21962 = klass->name_space;
    D.21963 = klass->name;
    D.21927 = ctx->ip_offset;
    D.21981 = monoeg_g_strdup_printf ("Invalid generic type instantiation of type %s.%s at 0x%04x", D.21962, D.21963, D.21927);
    vinfo->info.message = D.21981;
    vinfo->exception_type = 7;
    D.21929 = ctx->list;
    D.21982 = monoeg_g_slist_prepend (D.21929, vinfo);
    ctx->list = D.21982;
  }
  ctx->valid = 0;
  D.21931 = 0;
  return D.21931;
  <D.21980>:
  D.21983 = mono_class_repect_method_constraints (ctx, klass);
  if (D.21983 == 0) goto <D.21984>; else goto <D.21985>;
  <D.21984>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.21962 = klass->name_space;
    D.21963 = klass->name;
    D.21927 = ctx->ip_offset;
    D.21986 = monoeg_g_strdup_printf ("Invalid generic type instantiation of type %s.%s (generic args don\'t respect target\'s constraints) at 0x%04x", D.21962, D.21963, D.21927);
    vinfo->info.message = D.21986;
    vinfo->exception_type = 7;
    D.21929 = ctx->list;
    D.21987 = monoeg_g_slist_prepend (D.21929, vinfo);
    ctx->list = D.21987;
  }
  ctx->valid = 0;
  D.21931 = 0;
  return D.21931;
  <D.21985>:
  D.21931 = 1;
  return D.21931;
}


is_valid_type_in_context (struct VerifyContext * ctx, struct MonoType * type)
{
  gboolean D.21989;
  struct MonoGenericContext * D.21990;

  D.21990 = ctx->generic_context;
  D.21989 = mono_type_is_valid_type_in_context (type, D.21990);
  return D.21989;
}


mono_type_is_valid_type_in_context (struct MonoType * type, struct MonoGenericContext * context)
{
  gboolean D.21992;

  D.21992 = mono_type_is_valid_type_in_context_full (type, context, 0);
  return D.21992;
}


mono_type_is_valid_type_in_context_full (struct MonoType * type, struct MonoGenericContext * context, gboolean check_gtd)
{
  unsigned char D.21994;
  int D.21995;
  gboolean D.21998;
  struct MonoGenericInst * iftmp.33;
  struct MonoGenericParam * D.22006;
  short unsigned int D.22007;
  int D.22008;
  <unnamed-unsigned:22> D.22009;
  int D.22010;
  struct MonoClass * D.22011;
  struct MonoType * D.22012;
  struct MonoArrayType * D.22013;
  struct MonoClass * D.22014;
  struct MonoType * D.22015;
  struct MonoType * D.22016;
  struct MonoGenericClass * D.22017;
  long unsigned int D.22018;
  long unsigned int D.22019;
  struct MonoType * D.22021;
  int D.22022;
  unsigned char D.22025;
  struct MonoType * D.22028;
  struct MonoGenericContainer * D.22031;
  int i;
  struct MonoGenericInst * inst;

  D.21994 = type->type;
  D.21995 = (int) D.21994;
  switch (D.21995) <default: <D.22034>, case 15: <D.18477>, case 17: <D.18483>, case 18: <D.18482>, case 19: <D.18472>, case 20: <D.18476>, case 21: <D.18478>, case 29: <D.18475>, case 30: <D.18473>>
  <D.18472>:
  <D.18473>:
  if (context == 0B) goto <D.21996>; else goto <D.21997>;
  <D.21996>:
  D.21998 = 0;
  return D.21998;
  <D.21997>:
  D.21994 = type->type;
  if (D.21994 == 19) goto <D.22000>; else goto <D.22001>;
  <D.22000>:
  iftmp.33 = context->class_inst;
  goto <D.22002>;
  <D.22001>:
  iftmp.33 = context->method_inst;
  <D.22002>:
  inst = iftmp.33;
  if (inst == 0B) goto <D.22003>; else goto <D.22005>;
  <D.22005>:
  D.22006 = type->data.generic_param;
  D.22007 = D.22006->num;
  D.22008 = (int) D.22007;
  D.22009 = inst->type_argc;
  D.22010 = (int) D.22009;
  if (D.22008 >= D.22010) goto <D.22003>; else goto <D.22004>;
  <D.22003>:
  D.21998 = 0;
  return D.21998;
  <D.22004>:
  goto <D.18474>;
  <D.18475>:
  D.22011 = type->data.klass;
  D.22012 = &D.22011->byval_arg;
  D.21998 = mono_type_is_valid_type_in_context_full (D.22012, context, check_gtd);
  return D.21998;
  <D.18476>:
  D.22013 = type->data.array;
  D.22014 = D.22013->eklass;
  D.22015 = &D.22014->byval_arg;
  D.21998 = mono_type_is_valid_type_in_context_full (D.22015, context, check_gtd);
  return D.21998;
  <D.18477>:
  D.22016 = type->data.type;
  D.21998 = mono_type_is_valid_type_in_context_full (D.22016, context, check_gtd);
  return D.21998;
  <D.18478>:
  D.22017 = type->data.generic_class;
  inst = D.22017->context.class_inst;
  D.22018 = BIT_FIELD_REF <*inst, 64, 0>;
  D.22019 = D.22018 & 18014398509481984;
  if (D.22019 == 0) goto <D.18474>; else goto <D.22020>;
  <D.22020>:
  i = 0;
  goto <D.18480>;
  <D.18479>:
  D.22021 = inst->type_argv[i];
  D.22022 = mono_type_is_valid_type_in_context_full (D.22021, context, check_gtd);
  if (D.22022 == 0) goto <D.22023>; else goto <D.22024>;
  <D.22023>:
  D.21998 = 0;
  return D.21998;
  <D.22024>:
  i = i + 1;
  <D.18480>:
  D.22009 = inst->type_argc;
  D.22010 = (int) D.22009;
  if (D.22010 > i) goto <D.18479>; else goto <D.18481>;
  <D.18481>:
  goto <D.18474>;
  <D.18482>:
  <D.18483>:
  {
    struct MonoClass * klass;

    klass = type->data.klass;
    D.22025 = klass->byval_arg.type;
    D.21994 = type->type;
    if (D.22025 != D.21994) goto <D.22026>; else goto <D.22027>;
    <D.22026>:
    D.22028 = &klass->byval_arg;
    D.21998 = mono_type_is_valid_type_in_context_full (D.22028, context, check_gtd);
    return D.21998;
    <D.22027>:
    if (check_gtd != 0) goto <D.22029>; else goto <D.22030>;
    <D.22029>:
    D.22031 = klass->generic_container;
    if (D.22031 != 0B) goto <D.22032>; else goto <D.22033>;
    <D.22032>:
    D.21998 = 0;
    return D.21998;
    <D.22033>:
    <D.22030>:
    goto <D.18474>;
  }
  <D.22034>:
  <D.18474>:
  D.21998 = 1;
  return D.21998;
}


mono_class_is_valid_generic_instantiation (struct VerifyContext * ctx, struct MonoClass * klass)
{
  struct MonoClass * D.22036;
  int D.22039;
  gboolean D.22042;
  struct MonoGenericContext * D.22043;
  struct MonoGenericClass * gklass;
  struct MonoGenericInst * ginst;
  struct MonoGenericContainer * gc;

  gklass = klass->generic_class;
  ginst = gklass->context.class_inst;
  D.22036 = gklass->container_class;
  gc = D.22036->generic_container;
  if (ctx != 0B) goto <D.22037>; else goto <D.22038>;
  <D.22037>:
  D.22039 = is_valid_generic_instantiation_in_context (ctx, ginst, 1);
  if (D.22039 == 0) goto <D.22040>; else goto <D.22041>;
  <D.22040>:
  D.22042 = 0;
  return D.22042;
  <D.22041>:
  <D.22038>:
  D.22043 = &gklass->context;
  D.22042 = is_valid_generic_instantiation (gc, D.22043, ginst);
  return D.22042;
}


is_valid_generic_instantiation_in_context (struct VerifyContext * ctx, struct MonoGenericInst * ginst, gboolean check_gtd)
{
  struct MonoGenericContext * D.22045;
  int D.22046;
  gboolean D.22049;
  <unnamed-unsigned:22> D.22050;
  int D.22051;
  int i;

  i = 0;
  goto <D.18568>;
  <D.18567>:
  {
    struct MonoType * type;

    type = ginst->type_argv[i];
    D.22045 = ctx->generic_context;
    D.22046 = mono_type_is_valid_type_in_context_full (type, D.22045, 1);
    if (D.22046 == 0) goto <D.22047>; else goto <D.22048>;
    <D.22047>:
    D.22049 = 0;
    return D.22049;
    <D.22048>:
  }
  i = i + 1;
  <D.18568>:
  D.22050 = ginst->type_argc;
  D.22051 = (int) D.22050;
  if (D.22051 > i) goto <D.18567>; else goto <D.18569>;
  <D.18569>:
  D.22049 = 1;
  return D.22049;
}


is_valid_generic_instantiation (struct MonoGenericContainer * gc, struct MonoGenericContext * context, struct MonoGenericInst * ginst)
{
  <unnamed-unsigned:22> D.22053;
  int D.22054;
  <unnamed-signed:31> D.22055;
  int D.22056;
  gboolean D.22059;
  struct MonoGenericParamFull * D.22060;
  long unsigned int D.22061;
  long unsigned int D.22062;
  struct MonoGenericParamFull * D.22063;
  int D.22064;
  struct MonoGenericContainer * D.22067;
  unsigned char D.22070;
  long unsigned int D.22073;
  long unsigned int D.22074;
  struct MonoGenericClass * D.22077;
  long unsigned int D.22080;
  long unsigned int D.22081;
  int D.22084;
  struct MonoClass * * D.22087;
  short unsigned int D.22090;
  int D.22091;
  int D.22092;
  int D.22097;
  long unsigned int D.22100;
  int D.22102;
  int D.22103;
  int D.22108;
  int D.22113;
  struct MonoType * D.22118;
  int D.22119;
  int D.22122;
  struct MonoClass * D.22125;
  struct MonoError error;
  int i;

  try
    {
      D.22053 = ginst->type_argc;
      D.22054 = (int) D.22053;
      D.22055 = gc->type_argc;
      D.22056 = (int) D.22055;
      if (D.22054 != D.22056) goto <D.22057>; else goto <D.22058>;
      <D.22057>:
      D.22059 = 0;
      return D.22059;
      <D.22058>:
      i = 0;
      goto <D.18514>;
      <D.18513>:
      {
        struct MonoGenericParamInfo * param_info;
        struct MonoClass * paramClass;
        struct MonoClass * * constraints;
        struct MonoType * param_type;

        D.22060 = gc->type_params;
        D.22061 = (long unsigned int) i;
        D.22062 = D.22061 * 56;
        D.22063 = D.22060 + D.22062;
        param_info = &D.22063->info;
        param_type = ginst->type_argv[i];
        D.22064 = mono_type_is_generic_argument (param_type);
        if (D.22064 != 0) goto <D.22065>; else goto <D.22066>;
        <D.22065>:
        // predicted unlikely by continue predictor.
        goto <D.18507>;
        <D.22066>:
        paramClass = mono_class_from_mono_type (param_type);
        D.22067 = paramClass->generic_container;
        if (D.22067 != 0B) goto <D.22068>; else goto <D.22069>;
        <D.22068>:
        D.22070 = param_type->type;
        if (D.22070 != 21) goto <D.22071>; else goto <D.22072>;
        <D.22071>:
        D.22073 = BIT_FIELD_REF <*ginst, 64, 0>;
        D.22074 = D.22073 & 18014398509481984;
        if (D.22074 == 0) goto <D.22075>; else goto <D.22076>;
        <D.22075>:
        D.22059 = 0;
        return D.22059;
        <D.22076>:
        <D.22072>:
        <D.22069>:
        D.22077 = paramClass->generic_class;
        if (D.22077 != 0B) goto <D.22078>; else goto <D.22079>;
        <D.22078>:
        D.22080 = BIT_FIELD_REF <*paramClass, 64, 256>;
        D.22081 = D.22080 & 1;
        if (D.22081 == 0) goto <D.22082>; else goto <D.22083>;
        <D.22082>:
        D.22084 = mono_class_is_valid_generic_instantiation (0B, paramClass);
        if (D.22084 == 0) goto <D.22085>; else goto <D.22086>;
        <D.22085>:
        D.22059 = 0;
        return D.22059;
        <D.22086>:
        <D.22083>:
        <D.22079>:
        D.22087 = param_info->constraints;
        if (D.22087 == 0B) goto <D.22088>; else goto <D.22089>;
        <D.22088>:
        D.22090 = param_info->flags;
        D.22091 = (int) D.22090;
        D.22092 = D.22091 & 28;
        if (D.22092 == 0) goto <D.22093>; else goto <D.22094>;
        <D.22093>:
        // predicted unlikely by continue predictor.
        goto <D.18507>;
        <D.22094>:
        <D.22089>:
        D.22090 = param_info->flags;
        D.22091 = (int) D.22090;
        D.22097 = D.22091 & 8;
        if (D.22097 != 0) goto <D.22098>; else goto <D.22099>;
        <D.22098>:
        D.22080 = BIT_FIELD_REF <*paramClass, 64, 256>;
        D.22100 = D.22080 & 8;
        if (D.22100 == 0) goto <D.22095>; else goto <D.22101>;
        <D.22101>:
        D.22102 = mono_class_is_nullable (paramClass);
        if (D.22102 != 0) goto <D.22095>; else goto <D.22096>;
        <D.22095>:
        D.22059 = 0;
        return D.22059;
        <D.22096>:
        <D.22099>:
        D.22090 = param_info->flags;
        D.22091 = (int) D.22090;
        D.22103 = D.22091 & 4;
        if (D.22103 != 0) goto <D.22104>; else goto <D.22105>;
        <D.22104>:
        D.22080 = BIT_FIELD_REF <*paramClass, 64, 256>;
        D.22100 = D.22080 & 8;
        if (D.22100 != 0) goto <D.22106>; else goto <D.22107>;
        <D.22106>:
        D.22059 = 0;
        return D.22059;
        <D.22107>:
        <D.22105>:
        D.22090 = param_info->flags;
        D.22091 = (int) D.22090;
        D.22108 = D.22091 & 16;
        if (D.22108 != 0) goto <D.22109>; else goto <D.22110>;
        <D.22109>:
        D.22080 = BIT_FIELD_REF <*paramClass, 64, 256>;
        D.22100 = D.22080 & 8;
        if (D.22100 == 0) goto <D.22111>; else goto <D.22112>;
        <D.22111>:
        D.22113 = mono_class_has_default_constructor (paramClass);
        if (D.22113 == 0) goto <D.22114>; else goto <D.22115>;
        <D.22114>:
        D.22059 = 0;
        return D.22059;
        <D.22115>:
        <D.22112>:
        <D.22110>:
        D.22087 = param_info->constraints;
        if (D.22087 == 0B) goto <D.22116>; else goto <D.22117>;
        <D.22116>:
        // predicted unlikely by continue predictor.
        goto <D.18507>;
        <D.22117>:
        constraints = param_info->constraints;
        goto <D.18511>;
        <D.18510>:
        {
          struct MonoClass * ctr;
          struct MonoType * inflated;

          ctr = *constraints;
          D.22118 = &ctr->byval_arg;
          inflated = mono_class_inflate_generic_type_checked (D.22118, context, &error);
          D.22119 = mono_error_ok (&error);
          if (D.22119 == 0) goto <D.22120>; else goto <D.22121>;
          <D.22120>:
          mono_error_cleanup (&error);
          D.22059 = 0;
          return D.22059;
          <D.22121>:
          ctr = mono_class_from_mono_type (inflated);
          mono_metadata_free_type (inflated);
          D.22122 = mono_class_is_assignable_from_slow (ctr, paramClass);
          if (D.22122 == 0) goto <D.22123>; else goto <D.22124>;
          <D.22123>:
          D.22059 = 0;
          return D.22059;
          <D.22124>:
        }
        constraints = constraints + 8;
        <D.18511>:
        D.22125 = *constraints;
        if (D.22125 != 0B) goto <D.18510>; else goto <D.18512>;
        <D.18512>:
      }
      <D.18507>:
      i = i + 1;
      <D.18514>:
      D.22055 = gc->type_argc;
      D.22056 = (int) D.22055;
      if (D.22056 > i) goto <D.18513>; else goto <D.18515>;
      <D.18515>:
      D.22059 = 1;
      return D.22059;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_type_is_generic_argument (struct MonoType * type)
{
  gboolean D.22128;
  int iftmp.34;
  unsigned char D.22133;

  D.22133 = type->type;
  if (D.22133 == 19) goto <D.22130>; else goto <D.22134>;
  <D.22134>:
  D.22133 = type->type;
  if (D.22133 == 30) goto <D.22130>; else goto <D.22131>;
  <D.22130>:
  iftmp.34 = 1;
  goto <D.22132>;
  <D.22131>:
  iftmp.34 = 0;
  <D.22132>:
  D.22128 = iftmp.34;
  return D.22128;
}


mono_class_has_default_constructor (struct MonoClass * klass)
{
  unsigned char D.22136;
  gboolean D.22139;
  struct MonoMethod * * D.22140;
  long unsigned int D.22141;
  long unsigned int D.22142;
  struct MonoMethod * * D.22143;
  int D.22144;
  struct MonoMethodSignature * D.22147;
  struct MonoMethodSignature * D.22150;
  short unsigned int D.22151;
  short unsigned int D.22154;
  int D.22155;
  int D.22156;
  unsigned int i.35;
  unsigned int D.22160;
  struct MonoMethod * method;
  int i;

  mono_class_setup_methods (klass);
  D.22136 = klass->exception_type;
  if (D.22136 != 0) goto <D.22137>; else goto <D.22138>;
  <D.22137>:
  D.22139 = 0;
  return D.22139;
  <D.22138>:
  i = 0;
  goto <D.18463>;
  <D.18462>:
  D.22140 = klass->methods;
  D.22141 = (long unsigned int) i;
  D.22142 = D.22141 * 8;
  D.22143 = D.22140 + D.22142;
  method = *D.22143;
  D.22144 = mono_method_is_constructor (method);
  if (D.22144 != 0) goto <D.22145>; else goto <D.22146>;
  <D.22145>:
  D.22147 = mono_method_signature (method);
  if (D.22147 != 0B) goto <D.22148>; else goto <D.22149>;
  <D.22148>:
  D.22150 = mono_method_signature (method);
  D.22151 = D.22150->param_count;
  if (D.22151 == 0) goto <D.22152>; else goto <D.22153>;
  <D.22152>:
  D.22154 = method->flags;
  D.22155 = (int) D.22154;
  D.22156 = D.22155 & 7;
  if (D.22156 == 6) goto <D.22157>; else goto <D.22158>;
  <D.22157>:
  D.22139 = 1;
  return D.22139;
  <D.22158>:
  <D.22153>:
  <D.22149>:
  <D.22146>:
  i = i + 1;
  <D.18463>:
  i.35 = (unsigned int) i;
  D.22160 = klass->method.count;
  if (i.35 < D.22160) goto <D.18462>; else goto <D.18464>;
  <D.18464>:
  D.22139 = 0;
  return D.22139;
}


mono_class_repect_method_constraints (struct VerifyContext * ctx, struct MonoClass * klass)
{
  struct MonoClass * D.22162;
  gboolean D.22163;
  int iftmp.36;
  struct MonoGenericContext * D.22169;
  int D.22170;
  struct MonoGenericClass * gklass;
  struct MonoGenericInst * ginst;
  struct MonoGenericContainer * gc;

  gklass = klass->generic_class;
  ginst = gklass->context.class_inst;
  D.22162 = gklass->container_class;
  gc = D.22162->generic_container;
  if (gc == 0B) goto <D.22165>; else goto <D.22168>;
  <D.22168>:
  D.22169 = &gklass->context;
  D.22170 = generic_arguments_respect_constraints (ctx, gc, D.22169, ginst);
  if (D.22170 != 0) goto <D.22165>; else goto <D.22166>;
  <D.22165>:
  iftmp.36 = 1;
  goto <D.22167>;
  <D.22166>:
  iftmp.36 = 0;
  <D.22167>:
  D.22163 = iftmp.36;
  return D.22163;
}


generic_arguments_respect_constraints (struct VerifyContext * ctx, struct MonoGenericContainer * gc, struct MonoGenericContext * context, struct MonoGenericInst * ginst)
{
  struct MonoGenericParamFull * D.22172;
  long unsigned int D.22173;
  long unsigned int D.22174;
  int D.22175;
  int D.22178;
  gboolean D.22181;
  int D.22182;
  <unnamed-unsigned:22> D.22185;
  int D.22186;
  int i;

  i = 0;
  goto <D.18583>;
  <D.18582>:
  {
    struct MonoType * type;
    struct MonoGenericParam * target;
    struct MonoGenericParam * candidate;
    struct MonoClass * candidate_class;

    type = ginst->type_argv[i];
    D.22172 = gc->type_params;
    D.22173 = (long unsigned int) i;
    D.22174 = D.22173 * 56;
    target = D.22172 + D.22174;
    D.22175 = mono_type_is_generic_argument (type);
    if (D.22175 == 0) goto <D.22176>; else goto <D.22177>;
    <D.22176>:
    // predicted unlikely by continue predictor.
    goto <D.18581>;
    <D.22177>:
    D.22178 = is_valid_type_in_context (ctx, type);
    if (D.22178 == 0) goto <D.22179>; else goto <D.22180>;
    <D.22179>:
    D.22181 = 0;
    return D.22181;
    <D.22180>:
    candidate = verifier_get_generic_param_from_type (ctx, type);
    candidate_class = mono_class_from_mono_type (type);
    D.22182 = mono_generic_param_is_constraint_compatible (ctx, target, candidate, candidate_class, context);
    if (D.22182 == 0) goto <D.22183>; else goto <D.22184>;
    <D.22183>:
    D.22181 = 0;
    return D.22181;
    <D.22184>:
  }
  <D.18581>:
  i = i + 1;
  <D.18583>:
  D.22185 = ginst->type_argc;
  D.22186 = (int) D.22185;
  if (D.22186 > i) goto <D.18582>; else goto <D.18584>;
  <D.18584>:
  D.22181 = 1;
  return D.22181;
}


verifier_get_generic_param_from_type (struct VerifyContext * ctx, struct MonoType * type)
{
  struct MonoGenericParam * D.22188;
  short unsigned int D.22189;
  unsigned char D.22190;
  struct MonoGenericClass * D.22193;
  long unsigned int D.22197;
  long unsigned int D.22198;
  struct MonoGenericParam * D.22203;
  struct MonoGenericParamFull * D.22204;
  long unsigned int D.22205;
  long unsigned int D.22206;
  struct MonoGenericContainer * gc;
  struct MonoMethod * method;
  int num;

  method = ctx->method;
  D.22188 = type->data.generic_param;
  D.22189 = D.22188->num;
  num = (int) D.22189;
  D.22190 = type->type;
  if (D.22190 == 19) goto <D.22191>; else goto <D.22192>;
  <D.22191>:
  {
    struct MonoClass * gtd;

    gtd = method->klass;
    D.22193 = gtd->generic_class;
    if (D.22193 != 0B) goto <D.22194>; else goto <D.22195>;
    <D.22194>:
    D.22193 = gtd->generic_class;
    gtd = D.22193->container_class;
    <D.22195>:
    gc = gtd->generic_container;
  }
  goto <D.22196>;
  <D.22192>:
  {
    struct MonoMethod * gmd;

    gmd = method;
    D.22197 = BIT_FIELD_REF <*method, 64, 256>;
    D.22198 = D.22197 & 4096;
    if (D.22198 != 0) goto <D.22199>; else goto <D.22200>;
    <D.22199>:
    gmd = MEM[(struct MonoMethodInflated *)method].declaring;
    <D.22200>:
    gc = mono_method_get_generic_container (gmd);
  }
  <D.22196>:
  if (gc == 0B) goto <D.22201>; else goto <D.22202>;
  <D.22201>:
  D.22203 = 0B;
  return D.22203;
  <D.22202>:
  D.22204 = gc->type_params;
  D.22205 = (long unsigned int) num;
  D.22206 = D.22205 * 56;
  D.22203 = D.22204 + D.22206;
  return D.22203;
}


mono_generic_param_is_constraint_compatible (struct VerifyContext * ctx, struct MonoGenericParam * target, struct MonoGenericParam * candidate, struct MonoClass * candidate_param_class, struct MonoGenericContext * context)
{
  struct MonoGenericParamInfo * iftmp.37;
  struct MonoGenericContainer * D.22209;
  struct MonoGenericParamInfo * iftmp.38;
  struct MonoGenericContainer * D.22214;
  short unsigned int D.22218;
  int D.22219;
  short unsigned int D.22220;
  int D.22221;
  struct MonoClass * * D.22222;
  struct MonoClass * D.22225;
  struct MonoType * D.22226;
  struct MonoGenericContext * D.22227;
  gboolean D.22230;
  struct MonoType * D.22233;
  int D.22234;
  unsigned int D.22236;
  unsigned int D.22237;
  unsigned char D.22239;
  int D.22242;
  int D.22251;
  _Bool D.22252;
  int D.22253;
  int D.22254;
  _Bool D.22255;
  int D.22256;
  int D.22257;
  int D.22262;
  int D.22267;
  int D.22270;
  int D.22271;
  struct MonoClass * * D.22274;
  struct MonoClass * D.22277;
  struct MonoType * D.22278;
  struct MonoType * D.22281;
  struct MonoType * D.22282;
  int D.22283;
  int D.22290;
  struct MonoType * D.22292;
  int D.22293;
  int D.22296;
  struct MonoGenericParamInfo * tinfo;
  struct MonoGenericParamInfo * cinfo;
  struct MonoClass * * candidate_class;
  gboolean class_constraint_satisfied;
  gboolean valuetype_constraint_satisfied;
  int tmask;
  int cmask;

  D.22209 = target->owner;
  if (D.22209 != 0B) goto <D.22210>; else goto <D.22211>;
  <D.22210>:
  iftmp.37 = &MEM[(struct MonoGenericParamFull *)target].info;
  goto <D.22212>;
  <D.22211>:
  iftmp.37 = 0B;
  <D.22212>:
  tinfo = iftmp.37;
  D.22214 = candidate->owner;
  if (D.22214 != 0B) goto <D.22215>; else goto <D.22216>;
  <D.22215>:
  iftmp.38 = &MEM[(struct MonoGenericParamFull *)candidate].info;
  goto <D.22217>;
  <D.22216>:
  iftmp.38 = 0B;
  <D.22217>:
  cinfo = iftmp.38;
  class_constraint_satisfied = 0;
  valuetype_constraint_satisfied = 0;
  D.22218 = tinfo->flags;
  D.22219 = (int) D.22218;
  tmask = D.22219 & 28;
  D.22220 = cinfo->flags;
  D.22221 = (int) D.22220;
  cmask = D.22221 & 28;
  D.22222 = cinfo->constraints;
  if (D.22222 != 0B) goto <D.22223>; else goto <D.22224>;
  <D.22223>:
  candidate_class = cinfo->constraints;
  goto <D.18533>;
  <D.18532>:
  {
    struct MonoClass * cc;
    struct MonoType * inflated;

    D.22225 = *candidate_class;
    D.22226 = &D.22225->byval_arg;
    D.22227 = ctx->generic_context;
    inflated = verifier_inflate_type (ctx, D.22226, D.22227);
    if (inflated == 0B) goto <D.22228>; else goto <D.22229>;
    <D.22228>:
    D.22230 = 0;
    return D.22230;
    <D.22229>:
    cc = mono_class_from_mono_type (inflated);
    mono_metadata_free_type (inflated);
    D.22233 = &cc->byval_arg;
    D.22234 = mono_type_is_reference (D.22233);
    if (D.22234 != 0) goto <D.22235>; else goto <D.22231>;
    <D.22235>:
    D.22236 = cc->flags;
    D.22237 = D.22236 & 32;
    if (D.22237 == 0) goto <D.22238>; else goto <D.22231>;
    <D.22238>:
    D.22239 = cc->byval_arg.type;
    if (D.22239 != 19) goto <D.22240>; else goto <D.22231>;
    <D.22240>:
    D.22239 = cc->byval_arg.type;
    if (D.22239 != 30) goto <D.22241>; else goto <D.22231>;
    <D.22241>:
    class_constraint_satisfied = 1;
    goto <D.22232>;
    <D.22231>:
    D.22233 = &cc->byval_arg;
    D.22242 = mono_type_is_reference (D.22233);
    if (D.22242 == 0) goto <D.22243>; else goto <D.22244>;
    <D.22243>:
    D.22236 = cc->flags;
    D.22237 = D.22236 & 32;
    if (D.22237 == 0) goto <D.22245>; else goto <D.22246>;
    <D.22245>:
    D.22239 = cc->byval_arg.type;
    if (D.22239 != 19) goto <D.22247>; else goto <D.22248>;
    <D.22247>:
    D.22239 = cc->byval_arg.type;
    if (D.22239 != 30) goto <D.22249>; else goto <D.22250>;
    <D.22249>:
    valuetype_constraint_satisfied = 1;
    <D.22250>:
    <D.22248>:
    <D.22246>:
    <D.22244>:
    <D.22232>:
  }
  candidate_class = candidate_class + 8;
  <D.18533>:
  D.22225 = *candidate_class;
  if (D.22225 != 0B) goto <D.18532>; else goto <D.18534>;
  <D.18534>:
  <D.22224>:
  D.22251 = cmask & 4;
  D.22252 = D.22251 != 0;
  D.22253 = (int) D.22252;
  class_constraint_satisfied = D.22253 | class_constraint_satisfied;
  D.22254 = cmask & 8;
  D.22255 = D.22254 != 0;
  D.22256 = (int) D.22255;
  valuetype_constraint_satisfied = D.22256 | valuetype_constraint_satisfied;
  D.22257 = tmask & 4;
  if (D.22257 != 0) goto <D.22258>; else goto <D.22259>;
  <D.22258>:
  if (class_constraint_satisfied == 0) goto <D.22260>; else goto <D.22261>;
  <D.22260>:
  D.22230 = 0;
  return D.22230;
  <D.22261>:
  <D.22259>:
  D.22262 = tmask & 8;
  if (D.22262 != 0) goto <D.22263>; else goto <D.22264>;
  <D.22263>:
  if (valuetype_constraint_satisfied == 0) goto <D.22265>; else goto <D.22266>;
  <D.22265>:
  D.22230 = 0;
  return D.22230;
  <D.22266>:
  <D.22264>:
  D.22267 = tmask & 16;
  if (D.22267 != 0) goto <D.22268>; else goto <D.22269>;
  <D.22268>:
  D.22270 = cmask & 16;
  D.22271 = D.22270 | valuetype_constraint_satisfied;
  if (D.22271 == 0) goto <D.22272>; else goto <D.22273>;
  <D.22272>:
  D.22230 = 0;
  return D.22230;
  <D.22273>:
  <D.22269>:
  D.22274 = tinfo->constraints;
  if (D.22274 != 0B) goto <D.22275>; else goto <D.22276>;
  <D.22275>:
  {
    struct MonoClass * * target_class;

    target_class = tinfo->constraints;
    goto <D.18545>;
    <D.18544>:
    {
      struct MonoClass * tc;
      struct MonoType * inflated;

      D.22277 = *target_class;
      D.22278 = &D.22277->byval_arg;
      inflated = verifier_inflate_type (ctx, D.22278, context);
      if (inflated == 0B) goto <D.22279>; else goto <D.22280>;
      <D.22279>:
      D.22230 = 0;
      return D.22230;
      <D.22280>:
      tc = mono_class_from_mono_type (inflated);
      mono_metadata_free_type (inflated);
      D.22281 = &tc->byval_arg;
      D.22282 = &candidate_param_class->byval_arg;
      D.22283 = mono_metadata_type_equal (D.22281, D.22282);
      if (D.22283 != 0) goto <D.22284>; else goto <D.22285>;
      <D.22284>:
      // predicted unlikely by continue predictor.
      goto <D.18538>;
      <D.22285>:
      D.22222 = cinfo->constraints;
      if (D.22222 == 0B) goto <D.22286>; else goto <D.22287>;
      <D.22286>:
      D.22230 = 0;
      return D.22230;
      <D.22287>:
      candidate_class = cinfo->constraints;
      goto <D.18543>;
      <D.18542>:
      {
        struct MonoClass * cc;

        D.22225 = *candidate_class;
        D.22226 = &D.22225->byval_arg;
        D.22227 = ctx->generic_context;
        inflated = verifier_inflate_type (ctx, D.22226, D.22227);
        if (inflated == 0B) goto <D.22288>; else goto <D.22289>;
        <D.22288>:
        D.22230 = 0;
        return D.22230;
        <D.22289>:
        cc = mono_class_from_mono_type (inflated);
        mono_metadata_free_type (inflated);
        D.22290 = verifier_class_is_assignable_from (tc, cc);
        if (D.22290 != 0) goto <D.18540>; else goto <D.22291>;
        <D.22291>:
        D.22292 = &cc->byval_arg;
        D.22293 = mono_type_is_generic_argument (D.22292);
        if (D.22293 != 0) goto <D.22294>; else goto <D.22295>;
        <D.22294>:
        {
          struct MonoGenericParam * other_candidate;

          D.22292 = &cc->byval_arg;
          other_candidate = verifier_get_generic_param_from_type (ctx, D.22292);
          D.22296 = mono_generic_param_is_constraint_compatible (ctx, target, other_candidate, cc, context);
          if (D.22296 != 0) goto <D.18540>; else goto <D.22297>;
          <D.22297>:
        }
        <D.22295>:
      }
      candidate_class = candidate_class + 8;
      <D.18543>:
      D.22225 = *candidate_class;
      if (D.22225 != 0B) goto <D.18542>; else goto <D.18540>;
      <D.18540>:
      D.22225 = *candidate_class;
      if (D.22225 == 0B) goto <D.22298>; else goto <D.22299>;
      <D.22298>:
      D.22230 = 0;
      return D.22230;
      <D.22299>:
    }
    <D.18538>:
    target_class = target_class + 8;
    <D.18545>:
    D.22277 = *target_class;
    if (D.22277 != 0B) goto <D.18544>; else goto <D.18546>;
    <D.18546>:
  }
  <D.22276>:
  D.22230 = 1;
  return D.22230;
}


verifier_inflate_type (struct VerifyContext * ctx, struct MonoType * type, struct MonoGenericContext * context)
{
  int D.22301;
  struct MonoType * D.22304;
  struct MonoError error;
  struct MonoType * result;

  try
    {
      result = mono_class_inflate_generic_type_checked (type, context, &error);
      D.22301 = mono_error_ok (&error);
      if (D.22301 == 0) goto <D.22302>; else goto <D.22303>;
      <D.22302>:
      mono_error_cleanup (&error);
      D.22304 = 0B;
      return D.22304;
      <D.22303>:
      D.22304 = result;
      return D.22304;
    }
  finally
    {
      error = {CLOBBER};
    }
}


init_stack_with_value_at_exception_boundary (struct VerifyContext * ctx, struct ILCodeDesc * code, struct MonoClass * klass)
{
  struct MonoType * D.22307;
  struct MonoGenericContext * D.22308;
  int D.22309;
  gchar * D.22312;
  struct GSList * D.22313;
  struct GSList * D.22314;
  int D.22315;
  unsigned int D.22318;
  gchar * D.22319;
  struct GSList * D.22320;
  struct ILStackDesc * D.22321;
  struct GSList * D.22322;
  struct GSList * D.22323;
  short unsigned int D.22324;
  short unsigned int D.22325;
  int D.22326;
  int D.22329;
  int D.22330;
  struct MonoError error;
  struct MonoType * type;

  try
    {
      D.22307 = &klass->byval_arg;
      D.22308 = ctx->generic_context;
      type = mono_class_inflate_generic_type_checked (D.22307, D.22308, &error);
      D.22309 = mono_error_ok (&error);
      if (D.22309 == 0) goto <D.22310>; else goto <D.22311>;
      <D.22310>:
      {
        char * name;

        name = mono_type_get_full_name (klass);
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.22312 = monoeg_g_strdup_printf ("Invalid class %s used for exception", name);
          vinfo->info.message = D.22312;
          vinfo->exception_type = 3;
          D.22313 = ctx->list;
          D.22314 = monoeg_g_slist_prepend (D.22313, vinfo);
          ctx->list = D.22314;
        }
        ctx->valid = 0;
        monoeg_g_free (name);
        mono_error_cleanup (&error);
        return;
      }
      <D.22311>:
      D.22315 = ctx->max_stack;
      if (D.22315 == 0) goto <D.22316>; else goto <D.22317>;
      <D.22316>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22318 = ctx->ip_offset;
        D.22319 = monoeg_g_strdup_printf ("Stack overflow at 0x%04x", D.22318);
        vinfo->info.message = D.22319;
        vinfo->exception_type = 3;
        D.22313 = ctx->list;
        D.22320 = monoeg_g_slist_prepend (D.22313, vinfo);
        ctx->list = D.22320;
      }
      ctx->valid = 0;
      return;
      <D.22317>:
      stack_init (ctx, code);
      ensure_stack_size (code, 1);
      D.22321 = code->stack;
      set_stack_value (ctx, D.22321, type, 0);
      D.22322 = ctx->exception_types;
      D.22323 = monoeg_g_slist_prepend (D.22322, type);
      ctx->exception_types = D.22323;
      code->size = 1;
      D.22324 = code->flags;
      D.22325 = D.22324 | 2;
      code->flags = D.22325;
      D.22326 = mono_type_is_generic_argument (type);
      if (D.22326 != 0) goto <D.22327>; else goto <D.22328>;
      <D.22327>:
      D.22321 = code->stack;
      D.22321 = code->stack;
      D.22329 = D.22321->stype;
      D.22330 = D.22329 | 4096;
      D.22321->stype = D.22330;
      <D.22328>:
    }
  finally
    {
      error = {CLOBBER};
    }
}


ensure_stack_size (struct ILCodeDesc * stack, int required)
{
  short unsigned int D.22334;
  int D.22335;
  int D.22338;
  int D.22339;
  short unsigned int D.22340;
  int D.22341;
  _Bool D.22342;
  long int D.22343;
  long int D.22344;
  _Bool D.22347;
  long int D.22348;
  long int D.22349;
  long unsigned int D.22352;
  long unsigned int D.22353;
  struct ILStackDesc * D.22354;
  long unsigned int D.22359;
  long unsigned int D.22360;
  short unsigned int D.22361;
  int new_size;
  struct ILStackDesc * tmp;

  new_size = 8;
  D.22334 = stack->max_size;
  D.22335 = (int) D.22334;
  if (D.22335 > required) goto <D.22336>; else goto <D.22337>;
  <D.22336>:
  return;
  <D.22337>:
  D.22334 = stack->max_size;
  D.22335 = (int) D.22334;
  D.22338 = D.22335 * 2;
  D.22339 = MAX_EXPR <D.22338, required>;
  new_size = MAX_EXPR <D.22339, 8>;
  D.22340 = stack->size;
  D.22341 = (int) D.22340;
  D.22342 = D.22341 > new_size;
  D.22343 = (long int) D.22342;
  D.22344 = __builtin_expect (D.22343, 0);
  if (D.22344 != 0) goto <D.22345>; else goto <D.22346>;
  <D.22345>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1499, "new_size >= stack->size");
  <D.22346>:
  D.22347 = new_size < required;
  D.22348 = (long int) D.22347;
  D.22349 = __builtin_expect (D.22348, 0);
  if (D.22349 != 0) goto <D.22350>; else goto <D.22351>;
  <D.22350>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1500, "new_size >= required");
  <D.22351>:
  D.22352 = (long unsigned int) new_size;
  D.22353 = D.22352 * 24;
  tmp = monoeg_malloc0 (D.22353);
  D.22354 = stack->stack;
  if (D.22354 != 0B) goto <D.22355>; else goto <D.22356>;
  <D.22355>:
  D.22340 = stack->size;
  if (D.22340 != 0) goto <D.22357>; else goto <D.22358>;
  <D.22357>:
  D.22354 = stack->stack;
  D.22340 = stack->size;
  D.22359 = (long unsigned int) D.22340;
  D.22360 = D.22359 * 24;
  memcpy (tmp, D.22354, D.22360);
  <D.22358>:
  D.22354 = stack->stack;
  monoeg_g_free (D.22354);
  <D.22356>:
  stack->stack = tmp;
  D.22361 = (short unsigned int) new_size;
  stack->max_size = D.22361;
}


mono_opcode_is_prefix (int op)
{
  gboolean D.22363;

  switch (op) <default: <D.22364>, case 274: <D.19926>, case 275: <D.19927>, case 276: <D.19928>, case 278: <D.19929>, case 286: <D.19930>>
  <D.19926>:
  <D.19927>:
  <D.19928>:
  <D.19929>:
  <D.19930>:
  D.22363 = 1;
  return D.22363;
  <D.22364>:
  D.22363 = 0;
  return D.22363;
}


merge_stacks (struct VerifyContext * ctx, struct ILCodeDesc * from, struct ILCodeDesc * to, gboolean start, gboolean external)
{
  short unsigned int D.22368;
  struct ILCodeDesc * D.22372;
  int D.22373;
  int D.22374;
  short unsigned int D.22377;
  short unsigned int D.22378;
  int D.22381;
  int D.22382;
  unsigned int D.22383;
  gchar * D.22384;
  struct GSList * D.22385;
  struct GSList * D.22386;
  struct ILStackDesc * D.22387;
  long unsigned int D.22388;
  long unsigned int D.22389;
  struct ILStackDesc * D.22390;
  int D.22391;
  int D.22394;
  int D.22397;
  int D.22400;
  int D.22403;
  int D.22408;
  int D.22410;
  int D.22413;
  int D.22415;
  int D.22416;
  gchar * D.22417;
  struct GSList * D.22418;
  int D.22419;
  struct MonoClass * D.22423;
  long unsigned int D.22424;
  long unsigned int D.22425;
  struct MonoClass * D.22427;
  long unsigned int D.22428;
  long unsigned int D.22429;
  int D.22431;
  int D.22433;
  short unsigned int D.22435;
  short unsigned int D.22436;
  short unsigned int D.22437;
  int D.22438;
  struct MonoClass * * D.22439;
  long unsigned int D.22440;
  long unsigned int D.22441;
  struct MonoClass * * D.22442;
  struct MonoClass * D.22443;
  struct MonoType * D.22444;
  struct MonoClass * * D.22445;
  struct MonoClass * * D.22446;
  struct MonoClass * D.22447;
  struct MonoType * D.22448;
  int D.22449;
  int D.22452;
  const char * D.22458;
  gchar * D.22459;
  struct GSList * D.22460;
  int D.22463;
  const char * D.22469;
  gchar * D.22470;
  struct GSList * D.22471;
  unsigned int D.22474;
  unsigned int D.22475;
  int D.22478;
  struct MonoClass * * D.22481;
  struct MonoClass * * D.22482;
  struct MonoClass * D.22483;
  int D.22484;
  short unsigned int D.22487;
  int D.22488;
  unsigned int D.22489;
  unsigned int D.22490;
  int D.22493;
  struct MonoClass * * D.22496;
  struct MonoClass * * D.22497;
  struct MonoClass * D.22498;
  int D.22499;
  short unsigned int D.22502;
  int D.22503;
  int D.22506;
  int D.22508;
  gchar * D.22512;
  struct GSList * D.22513;
  struct MonoType * D.22516;
  int D.22517;
  _Bool D.22518;
  long int D.22519;
  long int D.22520;
  struct MonoType * D.22523;
  int D.22524;
  int D.22525;
  short unsigned int D.22528;
  short unsigned int D.22529;
  struct MonoError error;
  int i;
  int j;
  void end_verify = <<< error >>>;
  void match_found = <<< error >>>;

  try
    {
      stack_init (ctx, to);
      if (start != 0) goto <D.22366>; else goto <D.22367>;
      <D.22366>:
      D.22368 = to->flags;
      if (D.22368 == 0) goto <D.22369>; else goto <D.22370>;
      <D.22369>:
      from->size = 0;
      goto <D.22371>;
      <D.22370>:
      D.22372 = &ctx->eval;
      stack_copy (D.22372, to);
      <D.22371>:
      goto end_verify;
      <D.22367>:
      D.22368 = to->flags;
      D.22373 = (int) D.22368;
      D.22374 = D.22373 & 8;
      if (D.22374 == 0) goto <D.22375>; else goto <D.22376>;
      <D.22375>:
      D.22372 = &ctx->eval;
      stack_copy (to, D.22372);
      goto end_verify;
      <D.22376>:
      D.22377 = from->size;
      D.22378 = to->size;
      if (D.22377 != D.22378) goto <D.22379>; else goto <D.22380>;
      <D.22379>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22377 = from->size;
        D.22381 = (int) D.22377;
        D.22378 = to->size;
        D.22382 = (int) D.22378;
        D.22383 = ctx->ip_offset;
        D.22384 = monoeg_g_strdup_printf ("Could not merge stacks, different sizes (%d x %d) at 0x%04x", D.22381, D.22382, D.22383);
        vinfo->info.message = D.22384;
        vinfo->exception_type = 3;
        D.22385 = ctx->list;
        D.22386 = monoeg_g_slist_prepend (D.22385, vinfo);
        ctx->list = D.22386;
      }
      ctx->valid = 0;
      goto end_verify;
      <D.22380>:
      i = 0;
      goto <D.19897>;
      <D.19896>:
      {
        struct ILStackDesc * new_slot;
        struct ILStackDesc * old_slot;
        struct MonoType * new_type;
        struct MonoType * old_type;
        struct MonoClass * old_class;
        struct MonoClass * new_class;
        struct MonoClass * match_class;

        D.22387 = from->stack;
        D.22388 = (long unsigned int) i;
        D.22389 = D.22388 * 24;
        new_slot = D.22387 + D.22389;
        D.22390 = to->stack;
        D.22388 = (long unsigned int) i;
        D.22389 = D.22388 * 24;
        old_slot = D.22390 + D.22389;
        new_type = mono_type_from_stack_slot (new_slot);
        old_type = mono_type_from_stack_slot (old_slot);
        old_class = mono_class_from_mono_type (old_type);
        new_class = mono_class_from_mono_type (new_type);
        match_class = 0B;
        D.22391 = verify_stack_type_compatibility (ctx, old_type, new_slot);
        if (D.22391 != 0) goto <D.22392>; else goto <D.22393>;
        <D.22392>:
        copy_stack_value (new_slot, old_slot);
        // predicted unlikely by continue predictor.
        goto <D.19877>;
        <D.22393>:
        D.22394 = verify_stack_type_compatibility (ctx, new_type, old_slot);
        if (D.22394 != 0) goto <D.22395>; else goto <D.22396>;
        <D.22395>:
        copy_stack_value (old_slot, new_slot);
        // predicted unlikely by continue predictor.
        goto <D.19877>;
        <D.22396>:
        D.22397 = stack_slot_is_boxed_value (old_slot);
        if (D.22397 != 0) goto <D.22398>; else goto <D.22399>;
        <D.22398>:
        D.22400 = stack_slot_is_boxed_value (new_slot);
        if (D.22400 != 0) goto <D.22401>; else goto <D.22402>;
        <D.22401>:
        D.22403 = mono_metadata_type_equal (old_type, new_type);
        if (D.22403 != 0) goto <D.22404>; else goto <D.22405>;
        <D.22404>:
        copy_stack_value (new_slot, old_slot);
        // predicted unlikely by continue predictor.
        goto <D.19877>;
        <D.22405>:
        <D.22402>:
        <D.22399>:
        D.22408 = mono_type_is_generic_argument (old_type);
        if (D.22408 != 0) goto <D.22406>; else goto <D.22409>;
        <D.22409>:
        D.22410 = mono_type_is_generic_argument (new_type);
        if (D.22410 != 0) goto <D.22406>; else goto <D.22407>;
        <D.22406>:
        {
          char * old_name;
          char * new_name;

          old_name = stack_slot_full_name (old_slot);
          new_name = stack_slot_full_name (new_slot);
          D.22413 = ctx->verifiable;
          if (D.22413 != 0) goto <D.22411>; else goto <D.22414>;
          <D.22414>:
          D.22415 = ctx->level;
          D.22416 = D.22415 & 128;
          if (D.22416 != 0) goto <D.22411>; else goto <D.22412>;
          <D.22411>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 8;
            D.22383 = ctx->ip_offset;
            D.22417 = monoeg_g_strdup_printf ("Could not merge stack at depth %d, types not compatible: %s X %s at 0x%04x", i, old_name, new_name, D.22383);
            vinfo->info.message = D.22417;
            vinfo->exception_type = 4;
            D.22385 = ctx->list;
            D.22418 = monoeg_g_slist_prepend (D.22385, vinfo);
            ctx->list = D.22418;
          }
          ctx->verifiable = 0;
          D.22415 = ctx->level;
          D.22419 = D.22415 & 16;
          if (D.22419 != 0) goto <D.22420>; else goto <D.22421>;
          <D.22420>:
          ctx->valid = 0;
          <D.22421>:
          <D.22412>:
          monoeg_g_free (old_name);
          monoeg_g_free (new_name);
          goto end_verify;
        }
        <D.22407>:
        D.22423 = mono_class_from_mono_type (old_type);
        D.22424 = BIT_FIELD_REF <*D.22423, 64, 256>;
        D.22425 = D.22424 & 8;
        if (D.22425 == 0) goto <D.22426>; else goto <D.22422>;
        <D.22426>:
        D.22427 = mono_class_from_mono_type (new_type);
        D.22428 = BIT_FIELD_REF <*D.22427, 64, 256>;
        D.22429 = D.22428 & 8;
        if (D.22429 == 0) goto <D.22430>; else goto <D.22422>;
        <D.22430>:
        D.22431 = stack_slot_is_managed_pointer (old_slot);
        if (D.22431 == 0) goto <D.22432>; else goto <D.22422>;
        <D.22432>:
        D.22433 = stack_slot_is_managed_pointer (new_slot);
        if (D.22433 == 0) goto <D.22434>; else goto <D.22422>;
        <D.22434>:
        mono_class_setup_supertypes (old_class);
        mono_class_setup_supertypes (new_class);
        D.22435 = new_class->idepth;
        D.22436 = old_class->idepth;
        D.22437 = MIN_EXPR <D.22435, D.22436>;
        D.22438 = (int) D.22437;
        j = D.22438 + -1;
        goto <D.19883>;
        <D.19882>:
        D.22439 = old_class->supertypes;
        D.22440 = (long unsigned int) j;
        D.22441 = D.22440 * 8;
        D.22442 = D.22439 + D.22441;
        D.22443 = *D.22442;
        D.22444 = &D.22443->byval_arg;
        D.22445 = new_class->supertypes;
        D.22440 = (long unsigned int) j;
        D.22441 = D.22440 * 8;
        D.22446 = D.22445 + D.22441;
        D.22447 = *D.22446;
        D.22448 = &D.22447->byval_arg;
        D.22449 = mono_metadata_type_equal (D.22444, D.22448);
        if (D.22449 != 0) goto <D.22450>; else goto <D.22451>;
        <D.22450>:
        D.22439 = old_class->supertypes;
        D.22440 = (long unsigned int) j;
        D.22441 = D.22440 * 8;
        D.22442 = D.22439 + D.22441;
        match_class = *D.22442;
        goto match_found;
        <D.22451>:
        j = j + -1;
        <D.19883>:
        if (j > 0) goto <D.19882>; else goto <D.19884>;
        <D.19884>:
        mono_class_setup_interfaces (old_class, &error);
        D.22452 = mono_error_ok (&error);
        if (D.22452 == 0) goto <D.22453>; else goto <D.22454>;
        <D.22453>:
        D.22413 = ctx->verifiable;
        if (D.22413 != 0) goto <D.22455>; else goto <D.22457>;
        <D.22457>:
        D.22415 = ctx->level;
        D.22416 = D.22415 & 128;
        if (D.22416 != 0) goto <D.22455>; else goto <D.22456>;
        <D.22455>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.22458 = mono_error_get_message (&error);
          D.22383 = ctx->ip_offset;
          D.22459 = monoeg_g_strdup_printf ("Cannot merge stacks due to a TypeLoadException %s at 0x%04x", D.22458, D.22383);
          vinfo->info.message = D.22459;
          vinfo->exception_type = 4;
          D.22385 = ctx->list;
          D.22460 = monoeg_g_slist_prepend (D.22385, vinfo);
          ctx->list = D.22460;
        }
        ctx->verifiable = 0;
        D.22415 = ctx->level;
        D.22419 = D.22415 & 16;
        if (D.22419 != 0) goto <D.22461>; else goto <D.22462>;
        <D.22461>:
        ctx->valid = 0;
        <D.22462>:
        <D.22456>:
        mono_error_cleanup (&error);
        goto end_verify;
        <D.22454>:
        mono_class_setup_interfaces (new_class, &error);
        D.22463 = mono_error_ok (&error);
        if (D.22463 == 0) goto <D.22464>; else goto <D.22465>;
        <D.22464>:
        D.22413 = ctx->verifiable;
        if (D.22413 != 0) goto <D.22466>; else goto <D.22468>;
        <D.22468>:
        D.22415 = ctx->level;
        D.22416 = D.22415 & 128;
        if (D.22416 != 0) goto <D.22466>; else goto <D.22467>;
        <D.22466>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.22469 = mono_error_get_message (&error);
          D.22383 = ctx->ip_offset;
          D.22470 = monoeg_g_strdup_printf ("Cannot merge stacks due to a TypeLoadException %s at 0x%04x", D.22469, D.22383);
          vinfo->info.message = D.22470;
          vinfo->exception_type = 4;
          D.22385 = ctx->list;
          D.22471 = monoeg_g_slist_prepend (D.22385, vinfo);
          ctx->list = D.22471;
        }
        ctx->verifiable = 0;
        D.22415 = ctx->level;
        D.22419 = D.22415 & 16;
        if (D.22419 != 0) goto <D.22472>; else goto <D.22473>;
        <D.22472>:
        ctx->valid = 0;
        <D.22473>:
        <D.22467>:
        mono_error_cleanup (&error);
        goto end_verify;
        <D.22465>:
        D.22474 = old_class->flags;
        D.22475 = D.22474 & 32;
        if (D.22475 != 0) goto <D.22476>; else goto <D.22477>;
        <D.22476>:
        D.22478 = verifier_class_is_assignable_from (old_class, new_class);
        if (D.22478 != 0) goto <D.22479>; else goto <D.22480>;
        <D.22479>:
        match_class = old_class;
        goto match_found;
        <D.22480>:
        j = 0;
        goto <D.19888>;
        <D.19887>:
        D.22481 = old_class->interfaces;
        D.22440 = (long unsigned int) j;
        D.22441 = D.22440 * 8;
        D.22482 = D.22481 + D.22441;
        D.22483 = *D.22482;
        D.22484 = verifier_class_is_assignable_from (D.22483, new_class);
        if (D.22484 != 0) goto <D.22485>; else goto <D.22486>;
        <D.22485>:
        D.22481 = old_class->interfaces;
        D.22440 = (long unsigned int) j;
        D.22441 = D.22440 * 8;
        D.22482 = D.22481 + D.22441;
        match_class = *D.22482;
        goto match_found;
        <D.22486>:
        j = j + 1;
        <D.19888>:
        D.22487 = old_class->interface_count;
        D.22488 = (int) D.22487;
        if (D.22488 > j) goto <D.19887>; else goto <D.19889>;
        <D.19889>:
        <D.22477>:
        D.22489 = new_class->flags;
        D.22490 = D.22489 & 32;
        if (D.22490 != 0) goto <D.22491>; else goto <D.22492>;
        <D.22491>:
        D.22493 = verifier_class_is_assignable_from (new_class, old_class);
        if (D.22493 != 0) goto <D.22494>; else goto <D.22495>;
        <D.22494>:
        match_class = new_class;
        goto match_found;
        <D.22495>:
        j = 0;
        goto <D.19891>;
        <D.19890>:
        D.22496 = new_class->interfaces;
        D.22440 = (long unsigned int) j;
        D.22441 = D.22440 * 8;
        D.22497 = D.22496 + D.22441;
        D.22498 = *D.22497;
        D.22499 = verifier_class_is_assignable_from (D.22498, old_class);
        if (D.22499 != 0) goto <D.22500>; else goto <D.22501>;
        <D.22500>:
        D.22496 = new_class->interfaces;
        D.22440 = (long unsigned int) j;
        D.22441 = D.22440 * 8;
        D.22497 = D.22496 + D.22441;
        match_class = *D.22497;
        goto match_found;
        <D.22501>:
        j = j + 1;
        <D.19891>:
        D.22502 = new_class->interface_count;
        D.22503 = (int) D.22502;
        if (D.22503 > j) goto <D.19890>; else goto <D.19892>;
        <D.19892>:
        <D.22492>:
        match_class = mono_defaults.object_class;
        goto match_found;
        <D.22422>:
        D.22506 = is_compatible_boxed_valuetype (ctx, old_type, new_type, new_slot, 0);
        if (D.22506 != 0) goto <D.22504>; else goto <D.22507>;
        <D.22507>:
        D.22508 = is_compatible_boxed_valuetype (ctx, new_type, old_type, old_slot, 0);
        if (D.22508 != 0) goto <D.22504>; else goto <D.22505>;
        <D.22504>:
        match_class = mono_defaults.object_class;
        goto match_found;
        <D.22505>:
        {
          char * old_name;
          char * new_name;

          old_name = stack_slot_full_name (old_slot);
          new_name = stack_slot_full_name (new_slot);
          D.22413 = ctx->verifiable;
          if (D.22413 != 0) goto <D.22509>; else goto <D.22511>;
          <D.22511>:
          D.22415 = ctx->level;
          D.22416 = D.22415 & 128;
          if (D.22416 != 0) goto <D.22509>; else goto <D.22510>;
          <D.22509>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 8;
            D.22383 = ctx->ip_offset;
            D.22512 = monoeg_g_strdup_printf ("Could not merge stack at depth %d, types not compatible: %s X %s at 0x%04x", i, old_name, new_name, D.22383);
            vinfo->info.message = D.22512;
            vinfo->exception_type = 4;
            D.22385 = ctx->list;
            D.22513 = monoeg_g_slist_prepend (D.22385, vinfo);
            ctx->list = D.22513;
          }
          ctx->verifiable = 0;
          D.22415 = ctx->level;
          D.22419 = D.22415 & 16;
          if (D.22419 != 0) goto <D.22514>; else goto <D.22515>;
          <D.22514>:
          ctx->valid = 0;
          <D.22515>:
          <D.22510>:
          monoeg_g_free (old_name);
          monoeg_g_free (new_name);
        }
        D.22516 = &new_class->byval_arg;
        D.22517 = stack_slot_is_managed_pointer (old_slot);
        set_stack_value (ctx, old_slot, D.22516, D.22517);
        goto end_verify;
        match_found:
        D.22518 = match_class == 0B;
        D.22519 = (long int) D.22518;
        D.22520 = __builtin_expect (D.22519, 0);
        if (D.22520 != 0) goto <D.22521>; else goto <D.22522>;
        <D.22521>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 4668, "match_class");
        <D.22522>:
        D.22523 = &match_class->byval_arg;
        D.22524 = stack_slot_is_managed_pointer (old_slot);
        set_stack_value (ctx, old_slot, D.22523, D.22524);
        D.22523 = &match_class->byval_arg;
        D.22525 = stack_slot_is_managed_pointer (old_slot);
        set_stack_value (ctx, new_slot, D.22523, D.22525);
        // predicted unlikely by continue predictor.
        goto <D.19877>;
      }
      <D.19877>:
      i = i + 1;
      <D.19897>:
      D.22377 = from->size;
      D.22381 = (int) D.22377;
      if (D.22381 > i) goto <D.19896>; else goto <D.19898>;
      <D.19898>:
      end_verify:
      if (external != 0) goto <D.22526>; else goto <D.22527>;
      <D.22526>:
      D.22368 = to->flags;
      D.22528 = D.22368 | 2;
      to->flags = D.22528;
      <D.22527>:
      D.22368 = to->flags;
      D.22529 = D.22368 | 8;
      to->flags = D.22529;
    }
  finally
    {
      error = {CLOBBER};
    }
}


stack_copy (struct ILCodeDesc * to, struct ILCodeDesc * from)
{
  short unsigned int D.22530;
  int D.22531;
  struct ILStackDesc * D.22534;
  struct ILStackDesc * D.22535;
  long unsigned int D.22536;
  long unsigned int D.22537;

  D.22530 = from->size;
  D.22531 = (int) D.22530;
  ensure_stack_size (to, D.22531);
  D.22530 = from->size;
  to->size = D.22530;
  D.22530 = from->size;
  if (D.22530 != 0) goto <D.22532>; else goto <D.22533>;
  <D.22532>:
  D.22534 = to->stack;
  D.22535 = from->stack;
  D.22530 = from->size;
  D.22536 = (long unsigned int) D.22530;
  D.22537 = D.22536 * 24;
  memcpy (D.22534, D.22535, D.22537);
  <D.22533>:
}


mono_type_from_stack_slot (struct ILStackDesc * slot)
{
  int D.22538;
  struct MonoType * D.22541;
  struct MonoType * D.22542;

  D.22538 = stack_slot_is_managed_pointer (slot);
  if (D.22538 != 0) goto <D.22539>; else goto <D.22540>;
  <D.22539>:
  D.22542 = slot->type;
  D.22541 = mono_type_get_type_byref (D.22542);
  return D.22541;
  <D.22540>:
  D.22541 = slot->type;
  return D.22541;
}


mono_type_get_type_byref (struct MonoType * type)
{
  long unsigned int D.22544;
  long unsigned int D.22545;
  struct MonoType * D.22548;
  struct MonoClass * D.22549;

  D.22544 = BIT_FIELD_REF <*type, 64, 64>;
  D.22545 = D.22544 & 1073741824;
  if (D.22545 != 0) goto <D.22546>; else goto <D.22547>;
  <D.22546>:
  D.22548 = type;
  return D.22548;
  <D.22547>:
  D.22549 = mono_class_from_mono_type (type);
  D.22548 = &D.22549->this_arg;
  return D.22548;
}


verify_stack_type_compatibility (struct VerifyContext * ctx, struct MonoType * type, struct ILStackDesc * stack)
{
  int D.22551;

  D.22551 = verify_stack_type_compatibility_full (ctx, type, stack, 0, 0);
  return D.22551;
}


verify_stack_type_compatibility_full (struct VerifyContext * ctx, struct MonoType * type, struct ILStackDesc * stack, gboolean drop_byref, gboolean valuetype_must_be_boxed)
{
  int D.22553;
  long unsigned int D.22556;
  long unsigned int D.22557;
  int D.22560;
  int D.22563;
  int D.22564;
  int D.22569;
  int D.22572;
  int D.22577;
  struct MonoType * D.22582;
  struct MonoType * candidate;

  candidate = mono_type_from_stack_slot (stack);
  D.22553 = mono_type_is_reference (type);
  if (D.22553 != 0) goto <D.22554>; else goto <D.22555>;
  <D.22554>:
  D.22556 = BIT_FIELD_REF <*type, 64, 64>;
  D.22557 = D.22556 & 1073741824;
  if (D.22557 == 0) goto <D.22558>; else goto <D.22559>;
  <D.22558>:
  D.22560 = stack_slot_is_null_literal (stack);
  if (D.22560 != 0) goto <D.22561>; else goto <D.22562>;
  <D.22561>:
  D.22563 = 1;
  return D.22563;
  <D.22562>:
  <D.22559>:
  <D.22555>:
  D.22564 = is_compatible_boxed_valuetype (ctx, type, candidate, stack, 1);
  if (D.22564 != 0) goto <D.22565>; else goto <D.22566>;
  <D.22565>:
  D.22563 = 1;
  return D.22563;
  <D.22566>:
  if (valuetype_must_be_boxed != 0) goto <D.22567>; else goto <D.22568>;
  <D.22567>:
  D.22569 = stack_slot_is_boxed_value (stack);
  if (D.22569 == 0) goto <D.22570>; else goto <D.22571>;
  <D.22570>:
  D.22572 = mono_type_is_reference (candidate);
  if (D.22572 == 0) goto <D.22573>; else goto <D.22574>;
  <D.22573>:
  D.22563 = 0;
  return D.22563;
  <D.22574>:
  <D.22571>:
  <D.22568>:
  if (valuetype_must_be_boxed == 0) goto <D.22575>; else goto <D.22576>;
  <D.22575>:
  D.22577 = stack_slot_is_boxed_value (stack);
  if (D.22577 != 0) goto <D.22578>; else goto <D.22579>;
  <D.22578>:
  D.22563 = 0;
  return D.22563;
  <D.22579>:
  <D.22576>:
  if (drop_byref != 0) goto <D.22580>; else goto <D.22581>;
  <D.22580>:
  D.22582 = mono_type_get_type_byval (candidate);
  D.22563 = verify_type_compatibility_full (ctx, type, D.22582, 0);
  return D.22563;
  <D.22581>:
  D.22563 = verify_type_compatibility_full (ctx, type, candidate, 0);
  return D.22563;
}


stack_slot_is_null_literal (struct ILStackDesc * value)
{
  gboolean D.22584;
  int D.22585;
  int D.22586;
  _Bool D.22587;

  D.22585 = value->stype;
  D.22586 = D.22585 & 1024;
  D.22587 = D.22586 != 0;
  D.22584 = (gboolean) D.22587;
  return D.22584;
}


mono_type_get_type_byval (struct MonoType * type)
{
  long unsigned int D.22589;
  long unsigned int D.22590;
  struct MonoType * D.22593;
  struct MonoClass * D.22594;

  D.22589 = BIT_FIELD_REF <*type, 64, 64>;
  D.22590 = D.22589 & 1073741824;
  if (D.22590 == 0) goto <D.22591>; else goto <D.22592>;
  <D.22591>:
  D.22593 = type;
  return D.22593;
  <D.22592>:
  D.22594 = mono_class_from_mono_type (type);
  D.22593 = &D.22594->byval_arg;
  return D.22593;
}


verify_type_compatibility_full (struct VerifyContext * ctx, struct MonoType * target, struct MonoType * candidate, gboolean strict)
{
  long unsigned int D.22596;
  long unsigned int D.22597;
  long unsigned int D.22598;
  long unsigned int D.22599;
  int D.22602;
  long unsigned int D.22605;
  int D.22610;
  int D.22612;
  int D.22613;
  unsigned int D.22614;
  gchar * D.22615;
  struct GSList * D.22616;
  struct GSList * D.22617;
  int D.22618;
  gboolean D.22621;
  <unnamed-unsigned:1> D.22622;
  int D.22623;
  unsigned char D.22624;
  int D.22625;
  unsigned char D.22626;
  _Bool D.22627;
  int iftmp.39;
  unsigned char D.22634;
  int iftmp.40;
  unsigned char D.22642;
  unsigned char D.22644;
  _Bool D.22645;
  unsigned char D.22646;
  _Bool D.22647;
  int D.22650;
  _Bool D.22651;
  int iftmp.41;
  int D.22657;
  unsigned char D.22658;
  _Bool D.22659;
  _Bool D.22662;
  unsigned char D.22663;
  _Bool D.22664;
  int D.22667;
  _Bool D.22668;
  int iftmp.42;
  int D.22674;
  struct MonoType * D.22677;
  struct MonoType * D.22678;
  int iftmp.43;
  int D.22684;
  long unsigned int D.22686;
  long unsigned int D.22687;
  long unsigned int D.22688;
  long unsigned int D.22689;
  int D.22691;
  int D.22696;
  int D.22699;
  int D.22702;
  _Bool D.22705;
  _Bool D.22706;
  int D.22707;
  struct MonoClass * D.22712;
  struct MonoClass * D.22713;
  _Bool D.22718;
  int D.22723;
  struct MonoGenericParam * D.22730;
  short unsigned int D.22731;
  struct MonoGenericParam * D.22732;
  short unsigned int D.22733;
  _Bool D.22734;
  struct MonoType * original_candidate;
  void handle_enum = <<< error >>>;

  original_candidate = candidate;
  D.22596 = BIT_FIELD_REF <*candidate, 64, 64>;
  D.22597 = BIT_FIELD_REF <*target, 64, 64>;
  D.22598 = D.22596 ^ D.22597;
  D.22599 = D.22598 & 1073741824;
  if (D.22599 != 0) goto <D.22600>; else goto <D.22601>;
  <D.22600>:
  D.22602 = get_stack_type (candidate);
  if (D.22602 == 3) goto <D.22603>; else goto <D.22604>;
  <D.22603>:
  D.22597 = BIT_FIELD_REF <*target, 64, 64>;
  D.22605 = D.22597 & 1073741824;
  if (D.22605 != 0) goto <D.22606>; else goto <D.22607>;
  <D.22606>:
  D.22610 = ctx->verifiable;
  if (D.22610 != 0) goto <D.22608>; else goto <D.22611>;
  <D.22611>:
  D.22612 = ctx->level;
  D.22613 = D.22612 & 128;
  if (D.22613 != 0) goto <D.22608>; else goto <D.22609>;
  <D.22608>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22614 = ctx->ip_offset;
    D.22615 = monoeg_g_strdup_printf ("using byref native int at 0x%04x", D.22614);
    vinfo->info.message = D.22615;
    vinfo->exception_type = 4;
    D.22616 = ctx->list;
    D.22617 = monoeg_g_slist_prepend (D.22616, vinfo);
    ctx->list = D.22617;
  }
  ctx->verifiable = 0;
  D.22612 = ctx->level;
  D.22618 = D.22612 & 16;
  if (D.22618 != 0) goto <D.22619>; else goto <D.22620>;
  <D.22619>:
  ctx->valid = 0;
  <D.22620>:
  <D.22609>:
  D.22621 = 1;
  return D.22621;
  <D.22607>:
  <D.22604>:
  D.22621 = 0;
  return D.22621;
  <D.22601>:
  D.22622 = target->byref;
  D.22623 = (int) D.22622;
  strict = D.22623 | strict;
  candidate = mono_type_get_underlying_type_any (candidate);
  handle_enum:
  D.22624 = target->type;
  D.22625 = (int) D.22624;
  switch (D.22625) <default: <D.19084>, case 1: <D.19045>, case 2: <D.19048>, case 3: <D.19051>, case 4: <D.19046>, case 5: <D.19047>, case 6: <D.19049>, case 7: <D.19050>, case 8: <D.19052>, case 9: <D.19053>, case 10: <D.19056>, case 11: <D.19057>, case 12: <D.19058>, case 13: <D.19059>, case 14: <D.19071>, case 15: <D.19064>, case 17: <D.19079>, case 18: <D.19072>, case 19: <D.19082>, case 20: <D.19077>, case 21: <D.19068>, case 22: <D.19078>, case 24: <D.19060>, case 25: <D.19061>, case 27: <D.19065>, case 28: <D.19073>, case 29: <D.19074>, case 30: <D.19083>>
  <D.19045>:
  D.22626 = candidate->type;
  D.22627 = D.22626 == 1;
  D.22621 = (gboolean) D.22627;
  return D.22621;
  <D.19046>:
  <D.19047>:
  <D.19048>:
  if (strict != 0) goto <D.22628>; else goto <D.22629>;
  <D.22628>:
  D.22626 = candidate->type;
  D.22634 = D.22626 + 252;
  if (D.22634 <= 1) goto <D.22631>; else goto <D.22635>;
  <D.22635>:
  D.22626 = candidate->type;
  if (D.22626 == 2) goto <D.22631>; else goto <D.22632>;
  <D.22631>:
  iftmp.39 = 1;
  goto <D.22633>;
  <D.22632>:
  iftmp.39 = 0;
  <D.22633>:
  D.22621 = iftmp.39;
  return D.22621;
  <D.22629>:
  <D.19049>:
  <D.19050>:
  <D.19051>:
  if (strict != 0) goto <D.22636>; else goto <D.22637>;
  <D.22636>:
  D.22626 = candidate->type;
  D.22642 = D.22626 + 250;
  if (D.22642 <= 1) goto <D.22639>; else goto <D.22643>;
  <D.22643>:
  D.22626 = candidate->type;
  if (D.22626 == 3) goto <D.22639>; else goto <D.22640>;
  <D.22639>:
  iftmp.40 = 1;
  goto <D.22641>;
  <D.22640>:
  iftmp.40 = 0;
  <D.22641>:
  D.22621 = iftmp.40;
  return D.22621;
  <D.22637>:
  <D.19052>:
  <D.19053>:
  {
    gboolean is_native_int;
    gboolean is_int4;

    D.22626 = candidate->type;
    D.22644 = D.22626 + 232;
    D.22645 = D.22644 <= 1;
    is_native_int = (gboolean) D.22645;
    D.22626 = candidate->type;
    D.22646 = D.22626 + 248;
    D.22647 = D.22646 <= 1;
    is_int4 = (gboolean) D.22647;
    if (strict != 0) goto <D.22648>; else goto <D.22649>;
    <D.22648>:
    D.22650 = is_native_int | is_int4;
    D.22651 = D.22650 != 0;
    D.22621 = (gboolean) D.22651;
    return D.22621;
    <D.22649>:
    if (is_native_int != 0) goto <D.22653>; else goto <D.22656>;
    <D.22656>:
    D.22657 = get_stack_type (candidate);
    if (D.22657 == 1) goto <D.22653>; else goto <D.22654>;
    <D.22653>:
    iftmp.41 = 1;
    goto <D.22655>;
    <D.22654>:
    iftmp.41 = 0;
    <D.22655>:
    D.22621 = iftmp.41;
    return D.22621;
  }
  <D.19056>:
  <D.19057>:
  D.22626 = candidate->type;
  D.22658 = D.22626 + 246;
  D.22659 = D.22658 <= 1;
  D.22621 = (gboolean) D.22659;
  return D.22621;
  <D.19058>:
  <D.19059>:
  if (strict != 0) goto <D.22660>; else goto <D.22661>;
  <D.22660>:
  D.22626 = candidate->type;
  D.22624 = target->type;
  D.22662 = D.22626 == D.22624;
  D.22621 = (gboolean) D.22662;
  return D.22621;
  <D.22661>:
  D.22626 = candidate->type;
  D.22663 = D.22626 + 244;
  D.22664 = D.22663 <= 1;
  D.22621 = (gboolean) D.22664;
  return D.22621;
  <D.19060>:
  <D.19061>:
  {
    gboolean is_native_int;
    gboolean is_int4;

    D.22626 = candidate->type;
    D.22644 = D.22626 + 232;
    D.22645 = D.22644 <= 1;
    is_native_int = (gboolean) D.22645;
    D.22626 = candidate->type;
    D.22646 = D.22626 + 248;
    D.22647 = D.22646 <= 1;
    is_int4 = (gboolean) D.22647;
    if (strict != 0) goto <D.22665>; else goto <D.22666>;
    <D.22665>:
    D.22667 = is_native_int | is_int4;
    D.22668 = D.22667 != 0;
    D.22621 = (gboolean) D.22668;
    return D.22621;
    <D.22666>:
    if (is_native_int != 0) goto <D.22670>; else goto <D.22673>;
    <D.22673>:
    D.22674 = get_stack_type (candidate);
    if (D.22674 == 1) goto <D.22670>; else goto <D.22671>;
    <D.22670>:
    iftmp.42 = 1;
    goto <D.22672>;
    <D.22671>:
    iftmp.42 = 0;
    <D.22672>:
    D.22621 = iftmp.42;
    return D.22621;
  }
  <D.19064>:
  D.22626 = candidate->type;
  if (D.22626 != 15) goto <D.22675>; else goto <D.22676>;
  <D.22675>:
  D.22621 = 0;
  return D.22621;
  <D.22676>:
  D.22677 = target->data.type;
  D.22678 = candidate->data.type;
  D.22621 = verify_type_compatibility_full (ctx, D.22677, D.22678, 1);
  return D.22621;
  <D.19065>:
  {
    struct MonoMethodSignature * left;
    struct MonoMethodSignature * right;

    D.22626 = candidate->type;
    if (D.22626 != 27) goto <D.22679>; else goto <D.22680>;
    <D.22679>:
    D.22621 = 0;
    return D.22621;
    <D.22680>:
    left = mono_type_get_signature (target);
    right = mono_type_get_signature (candidate);
    D.22684 = mono_metadata_signature_equal (left, right);
    if (D.22684 != 0) goto <D.22685>; else goto <D.22682>;
    <D.22685>:
    D.22686 = BIT_FIELD_REF <*left, 64, 64>;
    D.22687 = BIT_FIELD_REF <*right, 64, 64>;
    D.22688 = D.22686 ^ D.22687;
    D.22689 = D.22688 & 17732923532771328;
    if (D.22689 == 0) goto <D.22690>; else goto <D.22682>;
    <D.22690>:
    iftmp.43 = 1;
    goto <D.22683>;
    <D.22682>:
    iftmp.43 = 0;
    <D.22683>:
    D.22621 = iftmp.43;
    return D.22621;
  }
  <D.19068>:
  {
    struct MonoClass * target_klass;
    struct MonoClass * candidate_klass;

    D.22691 = mono_type_is_enum_type (target);
    if (D.22691 != 0) goto <D.22692>; else goto <D.22693>;
    <D.22692>:
    target = mono_type_get_underlying_type_any (target);
    if (target == 0B) goto <D.22694>; else goto <D.22695>;
    <D.22694>:
    D.22621 = 0;
    return D.22621;
    <D.22695>:
    goto handle_enum;
    <D.22693>:
    D.22696 = mono_type_is_generic_argument (original_candidate);
    if (D.22696 != 0) goto <D.22697>; else goto <D.22698>;
    <D.22697>:
    D.22621 = 0;
    return D.22621;
    <D.22698>:
    target_klass = mono_class_from_mono_type (target);
    candidate_klass = mono_class_from_mono_type (candidate);
    D.22699 = mono_class_is_nullable (target_klass);
    if (D.22699 != 0) goto <D.22700>; else goto <D.22701>;
    <D.22700>:
    D.22702 = mono_class_is_nullable (candidate_klass);
    if (D.22702 == 0) goto <D.22703>; else goto <D.22704>;
    <D.22703>:
    D.22621 = 0;
    return D.22621;
    <D.22704>:
    D.22705 = target_klass == candidate_klass;
    D.22621 = (gboolean) D.22705;
    return D.22621;
    <D.22701>:
    D.22621 = verifier_class_is_assignable_from (target_klass, candidate_klass);
    return D.22621;
  }
  <D.19071>:
  D.22626 = candidate->type;
  D.22706 = D.22626 == 14;
  D.22621 = (gboolean) D.22706;
  return D.22621;
  <D.19072>:
  D.22707 = mono_type_is_generic_argument (original_candidate);
  if (D.22707 != 0) goto <D.22708>; else goto <D.22709>;
  <D.22708>:
  D.22621 = 0;
  return D.22621;
  <D.22709>:
  D.22626 = candidate->type;
  if (D.22626 == 17) goto <D.22710>; else goto <D.22711>;
  <D.22710>:
  D.22621 = 0;
  return D.22621;
  <D.22711>:
  D.22712 = target->data.klass;
  D.22713 = mono_class_from_mono_type (original_candidate);
  D.22621 = verifier_class_is_assignable_from (D.22712, D.22713);
  return D.22621;
  <D.19073>:
  D.22621 = mono_type_is_reference (candidate);
  return D.22621;
  <D.19074>:
  {
    struct MonoClass * left;
    struct MonoClass * right;

    D.22626 = candidate->type;
    if (D.22626 != 29) goto <D.22714>; else goto <D.22715>;
    <D.22714>:
    D.22621 = 0;
    return D.22621;
    <D.22715>:
    left = mono_class_from_mono_type (target);
    right = mono_class_from_mono_type (candidate);
    D.22621 = verifier_class_is_assignable_from (left, right);
    return D.22621;
  }
  <D.19077>:
  D.22626 = candidate->type;
  if (D.22626 != 20) goto <D.22716>; else goto <D.22717>;
  <D.22716>:
  D.22621 = 0;
  return D.22621;
  <D.22717>:
  D.22621 = is_array_type_compatible (target, candidate);
  return D.22621;
  <D.19078>:
  D.22626 = candidate->type;
  D.22718 = D.22626 == 22;
  D.22621 = (gboolean) D.22718;
  return D.22621;
  <D.19079>:
  {
    struct MonoClass * target_klass;
    struct MonoClass * candidate_klass;

    D.22626 = candidate->type;
    if (D.22626 == 18) goto <D.22719>; else goto <D.22720>;
    <D.22719>:
    D.22621 = 0;
    return D.22621;
    <D.22720>:
    target_klass = mono_class_from_mono_type (target);
    candidate_klass = mono_class_from_mono_type (candidate);
    if (target_klass == candidate_klass) goto <D.22721>; else goto <D.22722>;
    <D.22721>:
    D.22621 = 1;
    return D.22621;
    <D.22722>:
    D.22723 = mono_type_is_enum_type (target);
    if (D.22723 != 0) goto <D.22724>; else goto <D.22725>;
    <D.22724>:
    target = mono_type_get_underlying_type_any (target);
    if (target == 0B) goto <D.22726>; else goto <D.22727>;
    <D.22726>:
    D.22621 = 0;
    return D.22621;
    <D.22727>:
    goto handle_enum;
    <D.22725>:
    D.22621 = 0;
    return D.22621;
  }
  <D.19082>:
  D.22626 = candidate->type;
  if (D.22626 != 19) goto <D.22728>; else goto <D.22729>;
  <D.22728>:
  D.22621 = 0;
  return D.22621;
  <D.22729>:
  D.22730 = candidate->data.generic_param;
  D.22731 = D.22730->num;
  D.22732 = target->data.generic_param;
  D.22733 = D.22732->num;
  D.22734 = D.22731 == D.22733;
  D.22621 = (gboolean) D.22734;
  return D.22621;
  <D.19083>:
  D.22626 = candidate->type;
  if (D.22626 != 30) goto <D.22735>; else goto <D.22736>;
  <D.22735>:
  D.22621 = 0;
  return D.22621;
  <D.22736>:
  D.22730 = candidate->data.generic_param;
  D.22731 = D.22730->num;
  D.22732 = target->data.generic_param;
  D.22733 = D.22732->num;
  D.22734 = D.22731 == D.22733;
  D.22621 = (gboolean) D.22734;
  return D.22621;
  <D.19084>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "verify.c", 2389);
  D.22621 = 0;
  return D.22621;
  D.22621 = 1;
  return D.22621;
}


stack_slot_is_boxed_value (struct ILStackDesc * value)
{
  gboolean D.22738;
  int D.22739;
  int D.22740;
  _Bool D.22741;

  D.22739 = value->stype;
  D.22740 = D.22739 & 4096;
  D.22741 = D.22740 != 0;
  D.22738 = (gboolean) D.22741;
  return D.22738;
}


is_compatible_boxed_valuetype (struct VerifyContext * ctx, struct MonoType * type, struct MonoType * candidate, struct ILStackDesc * stack, gboolean strict)
{
  int D.22743;
  gboolean D.22746;
  long unsigned int D.22749;
  long unsigned int D.22750;
  long unsigned int D.22752;
  long unsigned int D.22753;
  int D.22754;
  struct MonoGenericParamInfo * iftmp.44;
  struct MonoGenericContainer * D.22760;
  struct MonoClass * D.22764;
  int D.22765;
  int D.22769;
  int iftmp.45;
  int D.22777;
  struct MonoClass * D.22779;
  struct MonoClass * D.22780;
  int D.22781;

  D.22743 = stack_slot_is_boxed_value (stack);
  if (D.22743 == 0) goto <D.22744>; else goto <D.22745>;
  <D.22744>:
  D.22746 = 0;
  return D.22746;
  <D.22745>:
  D.22749 = BIT_FIELD_REF <*type, 64, 64>;
  D.22750 = D.22749 & 1073741824;
  if (D.22750 != 0) goto <D.22747>; else goto <D.22751>;
  <D.22751>:
  D.22752 = BIT_FIELD_REF <*candidate, 64, 64>;
  D.22753 = D.22752 & 1073741824;
  if (D.22753 != 0) goto <D.22747>; else goto <D.22748>;
  <D.22747>:
  D.22746 = 0;
  return D.22746;
  <D.22748>:
  D.22754 = mono_type_is_generic_argument (candidate);
  if (D.22754 != 0) goto <D.22755>; else goto <D.22756>;
  <D.22755>:
  {
    struct MonoGenericParam * param;
    struct MonoClass * * class;

    param = get_generic_param (ctx, candidate);
    if (param == 0B) goto <D.22757>; else goto <D.22758>;
    <D.22757>:
    D.22746 = 0;
    return D.22746;
    <D.22758>:
    D.22760 = param->owner;
    if (D.22760 != 0B) goto <D.22761>; else goto <D.22762>;
    <D.22761>:
    iftmp.44 = &MEM[(struct MonoGenericParamFull *)param].info;
    goto <D.22763>;
    <D.22762>:
    iftmp.44 = 0B;
    <D.22763>:
    class = iftmp.44->constraints;
    goto <D.19119>;
    <D.19118>:
    D.22764 = *class;
    D.22765 = recursive_boxed_constraint_type_check (ctx, type, D.22764, 256);
    if (D.22765 != 0) goto <D.22766>; else goto <D.22767>;
    <D.22766>:
    D.22746 = 1;
    return D.22746;
    <D.22767>:
    class = class + 8;
    <D.19119>:
    if (class != 0B) goto <D.22768>; else goto <D.19120>;
    <D.22768>:
    D.22764 = *class;
    if (D.22764 != 0B) goto <D.19118>; else goto <D.19120>;
    <D.19120>:
  }
  <D.22756>:
  D.22769 = mono_type_is_generic_argument (type);
  if (D.22769 != 0) goto <D.22770>; else goto <D.22771>;
  <D.22770>:
  D.22746 = 0;
  return D.22746;
  <D.22771>:
  if (strict == 0) goto <D.22772>; else goto <D.22773>;
  <D.22772>:
  D.22746 = 1;
  return D.22746;
  <D.22773>:
  D.22777 = mono_type_is_reference (type);
  if (D.22777 != 0) goto <D.22778>; else goto <D.22775>;
  <D.22778>:
  D.22779 = mono_class_from_mono_type (type);
  D.22780 = mono_class_from_mono_type (candidate);
  D.22781 = verifier_class_is_assignable_from (D.22779, D.22780);
  if (D.22781 != 0) goto <D.22782>; else goto <D.22775>;
  <D.22782>:
  iftmp.45 = 1;
  goto <D.22776>;
  <D.22775>:
  iftmp.45 = 0;
  <D.22776>:
  D.22746 = iftmp.45;
  return D.22746;
}


get_generic_param (struct VerifyContext * ctx, struct MonoType * param)
{
  struct MonoGenericParam * D.22784;
  unsigned char D.22785;
  struct MonoGenericContext * D.22790;
  struct MonoGenericInst * D.22791;
  <unnamed-unsigned:22> D.22793;
  int D.22794;
  int D.22795;
  gchar * D.22796;
  struct GSList * D.22797;
  struct GSList * D.22798;
  struct MonoGenericParam * D.22799;
  struct MonoType * D.22800;
  struct MonoGenericInst * D.22803;
  <unnamed-unsigned:22> D.22805;
  int D.22806;
  gchar * D.22807;
  struct GSList * D.22808;
  struct MonoType * D.22809;
  guint16 param_num;

  D.22784 = param->data.generic_param;
  param_num = D.22784->num;
  D.22785 = param->type;
  if (D.22785 == 19) goto <D.22786>; else goto <D.22787>;
  <D.22786>:
  D.22790 = ctx->generic_context;
  D.22791 = D.22790->class_inst;
  if (D.22791 == 0B) goto <D.22788>; else goto <D.22792>;
  <D.22792>:
  D.22790 = ctx->generic_context;
  D.22791 = D.22790->class_inst;
  D.22793 = D.22791->type_argc;
  D.22794 = (int) D.22793;
  D.22795 = (int) param_num;
  if (D.22794 <= D.22795) goto <D.22788>; else goto <D.22789>;
  <D.22788>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.22795 = (int) param_num;
    D.22796 = monoeg_g_strdup_printf ("Invalid generic type argument %d", D.22795);
    vinfo->info.message = D.22796;
    vinfo->exception_type = 3;
    D.22797 = ctx->list;
    D.22798 = monoeg_g_slist_prepend (D.22797, vinfo);
    ctx->list = D.22798;
  }
  ctx->valid = 0;
  D.22799 = 0B;
  return D.22799;
  <D.22789>:
  D.22790 = ctx->generic_context;
  D.22791 = D.22790->class_inst;
  D.22795 = (int) param_num;
  D.22800 = D.22791->type_argv[D.22795];
  D.22799 = D.22800->data.generic_param;
  return D.22799;
  <D.22787>:
  D.22790 = ctx->generic_context;
  D.22803 = D.22790->method_inst;
  if (D.22803 == 0B) goto <D.22801>; else goto <D.22804>;
  <D.22804>:
  D.22790 = ctx->generic_context;
  D.22803 = D.22790->method_inst;
  D.22805 = D.22803->type_argc;
  D.22806 = (int) D.22805;
  D.22795 = (int) param_num;
  if (D.22806 <= D.22795) goto <D.22801>; else goto <D.22802>;
  <D.22801>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.22795 = (int) param_num;
    D.22807 = monoeg_g_strdup_printf ("Invalid generic method argument %d", D.22795);
    vinfo->info.message = D.22807;
    vinfo->exception_type = 3;
    D.22797 = ctx->list;
    D.22808 = monoeg_g_slist_prepend (D.22797, vinfo);
    ctx->list = D.22808;
  }
  ctx->valid = 0;
  D.22799 = 0B;
  return D.22799;
  <D.22802>:
  D.22790 = ctx->generic_context;
  D.22803 = D.22790->method_inst;
  D.22795 = (int) param_num;
  D.22809 = D.22803->type_argv[D.22795];
  D.22799 = D.22809->data.generic_param;
  return D.22799;
}


recursive_boxed_constraint_type_check (struct VerifyContext * ctx, struct MonoType * type, struct MonoClass * constraint_class, int recursion_level)
{
  gboolean D.22813;
  struct MonoType * D.22814;
  int D.22815;
  int D.22818;
  struct MonoGenericParamInfo * iftmp.46;
  struct MonoGenericContainer * D.22824;
  struct MonoClass * D.22828;
  int D.22829;
  int D.22830;
  struct MonoType * constraint_type;

  constraint_type = &constraint_class->byval_arg;
  if (recursion_level <= 0) goto <D.22811>; else goto <D.22812>;
  <D.22811>:
  D.22813 = 0;
  return D.22813;
  <D.22812>:
  D.22814 = mono_type_get_type_byval (constraint_type);
  D.22815 = verify_type_compatibility_full (ctx, type, D.22814, 0);
  if (D.22815 != 0) goto <D.22816>; else goto <D.22817>;
  <D.22816>:
  D.22813 = 1;
  return D.22813;
  <D.22817>:
  D.22818 = mono_type_is_generic_argument (constraint_type);
  if (D.22818 != 0) goto <D.22819>; else goto <D.22820>;
  <D.22819>:
  {
    struct MonoGenericParam * param;
    struct MonoClass * * class;

    param = get_generic_param (ctx, constraint_type);
    if (param == 0B) goto <D.22821>; else goto <D.22822>;
    <D.22821>:
    D.22813 = 0;
    return D.22813;
    <D.22822>:
    D.22824 = param->owner;
    if (D.22824 != 0B) goto <D.22825>; else goto <D.22826>;
    <D.22825>:
    iftmp.46 = &MEM[(struct MonoGenericParamFull *)param].info;
    goto <D.22827>;
    <D.22826>:
    iftmp.46 = 0B;
    <D.22827>:
    class = iftmp.46->constraints;
    goto <D.19107>;
    <D.19106>:
    D.22828 = *class;
    D.22829 = recursion_level + -1;
    D.22830 = recursive_boxed_constraint_type_check (ctx, type, D.22828, D.22829);
    if (D.22830 != 0) goto <D.22831>; else goto <D.22832>;
    <D.22831>:
    D.22813 = 1;
    return D.22813;
    <D.22832>:
    class = class + 8;
    <D.19107>:
    if (class != 0B) goto <D.22833>; else goto <D.19108>;
    <D.22833>:
    D.22828 = *class;
    if (D.22828 != 0B) goto <D.19106>; else goto <D.19108>;
    <D.19108>:
  }
  <D.22820>:
  D.22813 = 0;
  return D.22813;
}


stack_slot_full_name (struct ILStackDesc * value)
{
  struct MonoType * D.22835;
  char * D.22836;
  char * type_name;
  char * stack_name;
  char * res;

  D.22835 = value->type;
  type_name = mono_type_full_name (D.22835);
  stack_name = stack_slot_stack_type_full_name (value);
  res = monoeg_g_strdup_printf ("%s (%s)", type_name, stack_name);
  monoeg_g_free (type_name);
  monoeg_g_free (stack_name);
  D.22836 = res;
  return D.22836;
}


stack_slot_stack_type_full_name (struct ILStackDesc * value)
{
  int D.22838;
  int D.22839;
  int D.22842;
  int D.22847;
  int D.22852;
  int D.22857;
  int D.22862;
  struct MonoType * D.22867;
  int D.22868;
  int D.22871;
  const char * D.22880;
  char * D.22881;
  struct GString * str;
  char * result;
  gboolean has_pred;
  gboolean first;

  str = monoeg_g_string_new ("");
  has_pred = 0;
  first = 1;
  D.22838 = value->stype;
  D.22839 = D.22838 & 15;
  D.22838 = value->stype;
  if (D.22839 != D.22838) goto <D.22840>; else goto <D.22841>;
  <D.22840>:
  monoeg_g_string_append (str, "[");
  D.22842 = stack_slot_is_this_pointer (value);
  if (D.22842 != 0) goto <D.22843>; else goto <D.22844>;
  <D.22843>:
  if (first == 0) goto <D.22845>; else goto <D.22846>;
  <D.22845>:
  monoeg_g_string_append (str, ", ");
  <D.22846>:
  monoeg_g_string_append (str, "this");
  first = 0;
  <D.22844>:
  D.22847 = stack_slot_is_boxed_value (value);
  if (D.22847 != 0) goto <D.22848>; else goto <D.22849>;
  <D.22848>:
  if (first == 0) goto <D.22850>; else goto <D.22851>;
  <D.22850>:
  monoeg_g_string_append (str, ", ");
  <D.22851>:
  monoeg_g_string_append (str, "boxed");
  first = 0;
  <D.22849>:
  D.22852 = stack_slot_is_null_literal (value);
  if (D.22852 != 0) goto <D.22853>; else goto <D.22854>;
  <D.22853>:
  if (first == 0) goto <D.22855>; else goto <D.22856>;
  <D.22855>:
  monoeg_g_string_append (str, ", ");
  <D.22856>:
  monoeg_g_string_append (str, "null");
  first = 0;
  <D.22854>:
  D.22857 = stack_slot_is_managed_mutability_pointer (value);
  if (D.22857 != 0) goto <D.22858>; else goto <D.22859>;
  <D.22858>:
  if (first == 0) goto <D.22860>; else goto <D.22861>;
  <D.22860>:
  monoeg_g_string_append (str, ", ");
  <D.22861>:
  monoeg_g_string_append (str, "cmmp");
  first = 0;
  <D.22859>:
  D.22862 = stack_slot_is_managed_pointer (value);
  if (D.22862 != 0) goto <D.22863>; else goto <D.22864>;
  <D.22863>:
  if (first == 0) goto <D.22865>; else goto <D.22866>;
  <D.22865>:
  monoeg_g_string_append (str, ", ");
  <D.22866>:
  monoeg_g_string_append (str, "mp");
  first = 0;
  <D.22864>:
  has_pred = 1;
  <D.22841>:
  D.22867 = value->type;
  D.22868 = mono_type_is_generic_argument (D.22867);
  if (D.22868 != 0) goto <D.22869>; else goto <D.22870>;
  <D.22869>:
  D.22871 = stack_slot_is_boxed_value (value);
  if (D.22871 == 0) goto <D.22872>; else goto <D.22873>;
  <D.22872>:
  if (has_pred == 0) goto <D.22874>; else goto <D.22875>;
  <D.22874>:
  monoeg_g_string_append (str, "[");
  <D.22875>:
  if (first == 0) goto <D.22876>; else goto <D.22877>;
  <D.22876>:
  monoeg_g_string_append (str, ", ");
  <D.22877>:
  monoeg_g_string_append (str, "unboxed");
  has_pred = 1;
  <D.22873>:
  <D.22870>:
  if (has_pred != 0) goto <D.22878>; else goto <D.22879>;
  <D.22878>:
  monoeg_g_string_append (str, "] ");
  <D.22879>:
  D.22880 = stack_slot_get_name (value);
  monoeg_g_string_append (str, D.22880);
  result = str->str;
  monoeg_g_string_free (str, 0);
  D.22881 = result;
  return D.22881;
}


stack_slot_is_this_pointer (struct ILStackDesc * value)
{
  gboolean D.22883;
  int D.22884;
  int D.22885;
  _Bool D.22886;

  D.22884 = value->stype;
  D.22885 = D.22884 & 2048;
  D.22886 = D.22885 != 0;
  D.22883 = (gboolean) D.22886;
  return D.22883;
}


stack_slot_is_managed_mutability_pointer (struct ILStackDesc * value)
{
  gboolean D.22888;
  int D.22889;
  int D.22890;
  _Bool D.22891;

  D.22889 = value->stype;
  D.22890 = D.22889 & 512;
  D.22891 = D.22890 != 0;
  D.22888 = (gboolean) D.22891;
  return D.22888;
}


stack_slot_get_name (struct ILStackDesc * value)
{
  const char * D.22893;
  int D.22894;
  int D.22895;

  D.22894 = value->stype;
  D.22895 = D.22894 & 15;
  D.22893 = type_names[D.22895];
  return D.22893;
}


stack_slot_is_managed_pointer (struct ILStackDesc * value)
{
  gboolean D.22897;
  int D.22898;
  int D.22899;
  _Bool D.22900;

  D.22898 = value->stype;
  D.22899 = D.22898 & 256;
  D.22900 = D.22899 != 0;
  D.22897 = (gboolean) D.22900;
  return D.22897;
}


do_binop (struct VerifyContext * ctx, unsigned int opcode, const unsigned char[6] * table)
{
  int D.22902;
  int D.22905;
  int D.22908;
  long unsigned int D.22911;
  long unsigned int D.22912;
  const unsigned char[6] * D.22913;
  int D.22918;
  int D.22920;
  int D.22921;
  const char * D.22922;
  const char * D.22923;
  gchar * D.22924;
  struct GSList * D.22925;
  struct GSList * D.22926;
  int D.22927;
  signed char res.47;
  const char * D.22936;
  const char * D.22937;
  gchar * D.22938;
  struct GSList * D.22939;
  int D.22951;
  struct ILStackDesc * a;
  struct ILStackDesc * b;
  struct ILStackDesc * top;
  int idxa;
  int idxb;
  int complexMerge;
  unsigned char res;

  complexMerge = 0;
  D.22902 = check_underflow (ctx, 2);
  if (D.22902 == 0) goto <D.22903>; else goto <D.22904>;
  <D.22903>:
  return;
  <D.22904>:
  b = stack_pop (ctx);
  a = stack_pop (ctx);
  idxa = stack_slot_get_underlying_type (a);
  D.22905 = stack_slot_is_managed_pointer (a);
  if (D.22905 != 0) goto <D.22906>; else goto <D.22907>;
  <D.22906>:
  idxa = 5;
  complexMerge = 1;
  <D.22907>:
  idxb = stack_slot_get_underlying_type (b);
  D.22908 = stack_slot_is_managed_pointer (b);
  if (D.22908 != 0) goto <D.22909>; else goto <D.22910>;
  <D.22909>:
  idxb = 5;
  complexMerge = 2;
  <D.22910>:
  idxa = idxa + -1;
  idxb = idxb + -1;
  D.22911 = (long unsigned int) idxa;
  D.22912 = D.22911 * 6;
  D.22913 = table + D.22912;
  res = *D.22913[idxb];
  top = stack_push (ctx);
  if (res == 0) goto <D.22914>; else goto <D.22915>;
  <D.22914>:
  D.22918 = ctx->verifiable;
  if (D.22918 != 0) goto <D.22916>; else goto <D.22919>;
  <D.22919>:
  D.22920 = ctx->level;
  D.22921 = D.22920 & 128;
  if (D.22921 != 0) goto <D.22916>; else goto <D.22917>;
  <D.22916>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22922 = stack_slot_get_name (a);
    D.22923 = stack_slot_get_name (b);
    D.22924 = monoeg_g_strdup_printf ("Binary instruction applyed to ill formed stack (%s x %s)", D.22922, D.22923);
    vinfo->info.message = D.22924;
    vinfo->exception_type = 4;
    D.22925 = ctx->list;
    D.22926 = monoeg_g_slist_prepend (D.22925, vinfo);
    ctx->list = D.22926;
  }
  ctx->verifiable = 0;
  D.22920 = ctx->level;
  D.22927 = D.22920 & 16;
  if (D.22927 != 0) goto <D.22928>; else goto <D.22929>;
  <D.22928>:
  ctx->valid = 0;
  <D.22929>:
  <D.22917>:
  copy_stack_value (top, a);
  return;
  <D.22915>:
  res.47 = (signed char) res;
  if (res.47 < 0) goto <D.22931>; else goto <D.22932>;
  <D.22931>:
  D.22918 = ctx->verifiable;
  if (D.22918 != 0) goto <D.22933>; else goto <D.22935>;
  <D.22935>:
  D.22920 = ctx->level;
  D.22921 = D.22920 & 128;
  if (D.22921 != 0) goto <D.22933>; else goto <D.22934>;
  <D.22933>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22936 = stack_slot_get_name (a);
    D.22937 = stack_slot_get_name (b);
    D.22938 = monoeg_g_strdup_printf ("Binary instruction is not verifiable (%s x %s)", D.22936, D.22937);
    vinfo->info.message = D.22938;
    vinfo->exception_type = 4;
    D.22925 = ctx->list;
    D.22939 = monoeg_g_slist_prepend (D.22925, vinfo);
    ctx->list = D.22939;
  }
  ctx->verifiable = 0;
  D.22920 = ctx->level;
  D.22927 = D.22920 & 16;
  if (D.22927 != 0) goto <D.22940>; else goto <D.22941>;
  <D.22940>:
  ctx->valid = 0;
  <D.22941>:
  <D.22934>:
  res = res & 127;
  <D.22932>:
  if (complexMerge != 0) goto <D.22944>; else goto <D.22942>;
  <D.22944>:
  if (res == 5) goto <D.22945>; else goto <D.22942>;
  <D.22945>:
  if (complexMerge == 1) goto <D.22946>; else goto <D.22947>;
  <D.22946>:
  copy_stack_value (top, a);
  goto <D.22948>;
  <D.22947>:
  if (complexMerge == 2) goto <D.22949>; else goto <D.22950>;
  <D.22949>:
  copy_stack_value (top, b);
  <D.22950>:
  <D.22948>:
  goto <D.22943>;
  <D.22942>:
  D.22951 = (int) res;
  top->stype = D.22951;
  <D.22943>:
}


stack_pop (struct VerifyContext * ctx)
{
  short unsigned int D.22953;
  _Bool D.22954;
  long int D.22955;
  long int D.22956;
  struct ILStackDesc * D.22959;
  short unsigned int D.22960;
  long unsigned int D.22961;
  long unsigned int D.22962;
  int D.22963;
  int D.22964;
  int D.22969;
  int D.22971;
  int D.22972;
  unsigned int D.22973;
  gchar * D.22974;
  struct GSList * D.22975;
  struct GSList * D.22976;
  int D.22977;
  struct ILStackDesc * D.22980;
  struct ILStackDesc * ret;

  D.22953 = ctx->eval.size;
  D.22954 = D.22953 == 0;
  D.22955 = (long int) D.22954;
  D.22956 = __builtin_expect (D.22955, 0);
  if (D.22956 != 0) goto <D.22957>; else goto <D.22958>;
  <D.22957>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1610, "ctx->eval.size > 0");
  <D.22958>:
  D.22959 = ctx->eval.stack;
  D.22953 = ctx->eval.size;
  D.22960 = D.22953 + 65535;
  ctx->eval.size = D.22960;
  D.22953 = ctx->eval.size;
  D.22961 = (long unsigned int) D.22953;
  D.22962 = D.22961 * 24;
  ret = D.22959 + D.22962;
  D.22963 = ret->stype;
  D.22964 = D.22963 & 8192;
  if (D.22964 != 0) goto <D.22965>; else goto <D.22966>;
  <D.22965>:
  D.22969 = ctx->verifiable;
  if (D.22969 != 0) goto <D.22967>; else goto <D.22970>;
  <D.22970>:
  D.22971 = ctx->level;
  D.22972 = D.22971 & 128;
  if (D.22972 != 0) goto <D.22967>; else goto <D.22968>;
  <D.22967>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.22973 = ctx->ip_offset;
    D.22974 = monoeg_g_strdup_printf ("Found use of uninitialized \'this ptr\' ref at 0x%04x", D.22973);
    vinfo->info.message = D.22974;
    vinfo->exception_type = 4;
    D.22975 = ctx->list;
    D.22976 = monoeg_g_slist_prepend (D.22975, vinfo);
    ctx->list = D.22976;
  }
  ctx->verifiable = 0;
  D.22971 = ctx->level;
  D.22977 = D.22971 & 16;
  if (D.22977 != 0) goto <D.22978>; else goto <D.22979>;
  <D.22978>:
  ctx->valid = 0;
  <D.22979>:
  <D.22968>:
  <D.22966>:
  D.22980 = ret;
  return D.22980;
}


stack_slot_get_underlying_type (struct ILStackDesc * value)
{
  gint32 D.22982;
  int D.22983;

  D.22983 = value->stype;
  D.22982 = D.22983 & 15;
  return D.22982;
}


stack_pop_safe (struct VerifyContext * ctx)
{
  short unsigned int D.22985;
  _Bool D.22986;
  long int D.22987;
  long int D.22988;
  struct ILStackDesc * D.22991;
  struct ILStackDesc * D.22992;
  short unsigned int D.22993;
  long unsigned int D.22994;
  long unsigned int D.22995;

  D.22985 = ctx->eval.size;
  D.22986 = D.22985 == 0;
  D.22987 = (long int) D.22986;
  D.22988 = __builtin_expect (D.22987, 0);
  if (D.22988 != 0) goto <D.22989>; else goto <D.22990>;
  <D.22989>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1623, "ctx->eval.size > 0");
  <D.22990>:
  D.22992 = ctx->eval.stack;
  D.22985 = ctx->eval.size;
  D.22993 = D.22985 + 65535;
  ctx->eval.size = D.22993;
  D.22985 = ctx->eval.size;
  D.22994 = (long unsigned int) D.22985;
  D.22995 = D.22994 * 24;
  D.22991 = D.22992 + D.22995;
  return D.22991;
}


do_ret (struct VerifyContext * ctx)
{
  struct MonoMethodSignature * D.22997;
  unsigned char D.22998;
  int D.23001;
  struct MonoType * D.23004;
  int D.23005;
  int D.23010;
  int D.23012;
  int D.23013;
  unsigned int D.23014;
  gchar * D.23015;
  struct GSList * D.23016;
  struct GSList * D.23017;
  int D.23018;
  long unsigned int D.23023;
  long unsigned int D.23024;
  int D.23027;
  int D.23029;
  gchar * D.23033;
  struct GSList * D.23034;
  short unsigned int D.23037;
  int D.23043;
  gchar * D.23044;
  struct GSList * D.23045;
  struct MonoMethodHeader * D.23048;
  int D.23049;
  gchar * D.23055;
  struct GSList * D.23056;
  struct MonoType * ret;

  D.22997 = ctx->signature;
  ret = D.22997->ret;
  D.22998 = ret->type;
  if (D.22998 != 1) goto <D.22999>; else goto <D.23000>;
  <D.22999>:
  {
    struct ILStackDesc * top;

    D.23001 = check_underflow (ctx, 1);
    if (D.23001 == 0) goto <D.23002>; else goto <D.23003>;
    <D.23002>:
    return;
    <D.23003>:
    top = stack_pop (ctx);
    D.22997 = ctx->signature;
    D.23004 = D.22997->ret;
    D.23005 = verify_stack_type_compatibility (ctx, D.23004, top);
    if (D.23005 == 0) goto <D.23006>; else goto <D.23007>;
    <D.23006>:
    {
      char * ret_type;
      char * stack_type;

      D.22997 = ctx->signature;
      D.23004 = D.22997->ret;
      ret_type = mono_type_full_name (D.23004);
      stack_type = stack_slot_full_name (top);
      D.23010 = ctx->verifiable;
      if (D.23010 != 0) goto <D.23008>; else goto <D.23011>;
      <D.23011>:
      D.23012 = ctx->level;
      D.23013 = D.23012 & 128;
      if (D.23013 != 0) goto <D.23008>; else goto <D.23009>;
      <D.23008>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.23014 = ctx->ip_offset;
        D.23015 = monoeg_g_strdup_printf ("Incompatible return value on stack with method signature, expected \'%s\' but got \'%s\' at 0x%04x", ret_type, stack_type, D.23014);
        vinfo->info.message = D.23015;
        vinfo->exception_type = 4;
        D.23016 = ctx->list;
        D.23017 = monoeg_g_slist_prepend (D.23016, vinfo);
        ctx->list = D.23017;
      }
      ctx->verifiable = 0;
      D.23012 = ctx->level;
      D.23018 = D.23012 & 16;
      if (D.23018 != 0) goto <D.23019>; else goto <D.23020>;
      <D.23019>:
      ctx->valid = 0;
      <D.23020>:
      <D.23009>:
      monoeg_g_free (stack_type);
      monoeg_g_free (ret_type);
      return;
    }
    <D.23007>:
    D.23023 = BIT_FIELD_REF <*ret, 64, 64>;
    D.23024 = D.23023 & 1073741824;
    if (D.23024 != 0) goto <D.23021>; else goto <D.23025>;
    <D.23025>:
    D.22998 = ret->type;
    if (D.22998 == 22) goto <D.23021>; else goto <D.23026>;
    <D.23026>:
    D.23027 = mono_type_is_value_type (ret, "System", "ArgIterator");
    if (D.23027 != 0) goto <D.23021>; else goto <D.23028>;
    <D.23028>:
    D.23029 = mono_type_is_value_type (ret, "System", "RuntimeArgumentHandle");
    if (D.23029 != 0) goto <D.23021>; else goto <D.23022>;
    <D.23021>:
    D.23010 = ctx->verifiable;
    if (D.23010 != 0) goto <D.23030>; else goto <D.23032>;
    <D.23032>:
    D.23012 = ctx->level;
    D.23013 = D.23012 & 128;
    if (D.23013 != 0) goto <D.23030>; else goto <D.23031>;
    <D.23030>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.23014 = ctx->ip_offset;
      D.23033 = monoeg_g_strdup_printf ("Method returns byref, TypedReference, ArgIterator or RuntimeArgumentHandle at 0x%04x", D.23014);
      vinfo->info.message = D.23033;
      vinfo->exception_type = 4;
      D.23016 = ctx->list;
      D.23034 = monoeg_g_slist_prepend (D.23016, vinfo);
      ctx->list = D.23034;
    }
    ctx->verifiable = 0;
    D.23012 = ctx->level;
    D.23018 = D.23012 & 16;
    if (D.23018 != 0) goto <D.23035>; else goto <D.23036>;
    <D.23035>:
    ctx->valid = 0;
    <D.23036>:
    <D.23031>:
    <D.23022>:
  }
  <D.23000>:
  D.23037 = ctx->eval.size;
  if (D.23037 != 0) goto <D.23038>; else goto <D.23039>;
  <D.23038>:
  D.23010 = ctx->verifiable;
  if (D.23010 != 0) goto <D.23040>; else goto <D.23042>;
  <D.23042>:
  D.23012 = ctx->level;
  D.23013 = D.23012 & 128;
  if (D.23013 != 0) goto <D.23040>; else goto <D.23041>;
  <D.23040>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23037 = ctx->eval.size;
    D.23043 = (int) D.23037;
    D.23014 = ctx->ip_offset;
    D.23044 = monoeg_g_strdup_printf ("Stack not empty (%d) after ret at 0x%04x", D.23043, D.23014);
    vinfo->info.message = D.23044;
    vinfo->exception_type = 4;
    D.23016 = ctx->list;
    D.23045 = monoeg_g_slist_prepend (D.23016, vinfo);
    ctx->list = D.23045;
  }
  ctx->verifiable = 0;
  D.23012 = ctx->level;
  D.23018 = D.23012 & 16;
  if (D.23018 != 0) goto <D.23046>; else goto <D.23047>;
  <D.23046>:
  ctx->valid = 0;
  <D.23047>:
  <D.23041>:
  <D.23039>:
  D.23048 = ctx->header;
  D.23014 = ctx->ip_offset;
  D.23049 = in_any_block (D.23048, D.23014);
  if (D.23049 != 0) goto <D.23050>; else goto <D.23051>;
  <D.23050>:
  D.23010 = ctx->verifiable;
  if (D.23010 != 0) goto <D.23052>; else goto <D.23054>;
  <D.23054>:
  D.23012 = ctx->level;
  D.23013 = D.23012 & 128;
  if (D.23013 != 0) goto <D.23052>; else goto <D.23053>;
  <D.23052>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23014 = ctx->ip_offset;
    D.23055 = monoeg_g_strdup_printf ("ret cannot escape exception blocks at 0x%04x", D.23014);
    vinfo->info.message = D.23055;
    vinfo->exception_type = 4;
    D.23016 = ctx->list;
    D.23056 = monoeg_g_slist_prepend (D.23016, vinfo);
    ctx->list = D.23056;
  }
  ctx->verifiable = 0;
  D.23012 = ctx->level;
  D.23018 = D.23012 & 16;
  if (D.23018 != 0) goto <D.23057>; else goto <D.23058>;
  <D.23057>:
  ctx->valid = 0;
  <D.23058>:
  <D.23053>:
  <D.23051>:
}


mono_type_is_value_type (struct MonoType * type, const char * namespace, const char * name)
{
  gboolean D.23060;
  int iftmp.48;
  unsigned char D.23064;
  int D.18426;
  struct MonoClass * D.23066;
  const char * D.23067;
  int D.18435;
  const char * D.23069;

  D.23064 = type->type;
  if (D.23064 == 17) goto <D.23065>; else goto <D.23062>;
  <D.23065>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.23066 = type->data.klass;
    D.23067 = D.23066->name_space;
    D.18426 = __builtin_strcmp (namespace, D.23067);
  }
  if (D.18426 == 0) goto <D.23068>; else goto <D.23062>;
  <D.23068>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.23066 = type->data.klass;
    D.23069 = D.23066->name;
    D.18435 = __builtin_strcmp (name, D.23069);
  }
  if (D.18435 == 0) goto <D.23070>; else goto <D.23062>;
  <D.23070>:
  iftmp.48 = 1;
  goto <D.23063>;
  <D.23062>:
  iftmp.48 = 0;
  <D.23063>:
  D.23060 = iftmp.48;
  return D.23060;
}


stack_push_val (struct VerifyContext * ctx, int stype, struct MonoType * type)
{
  struct ILStackDesc * D.23072;
  struct ILStackDesc * top;

  top = stack_push (ctx);
  top->stype = stype;
  top->type = type;
  D.23072 = top;
  return D.23072;
}


do_branch_op (struct VerifyContext * ctx, int delta, const unsigned char[6] * table)
{
  unsigned int D.23074;
  unsigned int delta.49;
  unsigned int D.23076;
  int D.23080;
  gchar * D.23081;
  struct GSList * D.23082;
  struct GSList * D.23083;
  struct MonoMethodHeader * D.23084;
  unsigned int target.50;
  int D.23086;
  int D.23089;
  int D.23091;
  int D.23092;
  gchar * D.23093;
  struct GSList * D.23094;
  int D.23095;
  gchar * D.23098;
  struct GSList * D.23099;
  int D.23101;
  int D.23104;
  int D.23107;
  int D.23113;
  int D.23115;
  long unsigned int D.23116;
  long unsigned int D.23117;
  const unsigned char[6] * D.23118;
  const char * D.23124;
  const char * D.23125;
  gchar * D.23126;
  struct GSList * D.23127;
  signed char res.51;
  const char * D.23137;
  const char * D.23138;
  gchar * D.23139;
  struct GSList * D.23140;
  struct ILStackDesc * a;
  struct ILStackDesc * b;
  int idxa;
  int idxb;
  unsigned char res;
  int target;

  D.23074 = ctx->ip_offset;
  delta.49 = (unsigned int) delta;
  D.23076 = D.23074 + delta.49;
  target = (int) D.23076;
  if (target < 0) goto <D.23077>; else goto <D.23079>;
  <D.23079>:
  D.23080 = ctx->code_size;
  if (D.23080 <= target) goto <D.23077>; else goto <D.23078>;
  <D.23077>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23074 = ctx->ip_offset;
    D.23081 = monoeg_g_strdup_printf ("Branch target out of code at 0x%04x", D.23074);
    vinfo->info.message = D.23081;
    vinfo->exception_type = 3;
    D.23082 = ctx->list;
    D.23083 = monoeg_g_slist_prepend (D.23082, vinfo);
    ctx->list = D.23083;
  }
  ctx->valid = 0;
  return;
  <D.23078>:
  D.23084 = ctx->header;
  D.23074 = ctx->ip_offset;
  target.50 = (unsigned int) target;
  D.23086 = is_valid_cmp_branch_instruction (D.23084, D.23074, target.50);
  switch (D.23086) <default: <D.23100>, case 1: <D.19302>, case 2: <D.19305>>
  <D.19302>:
  D.23089 = ctx->verifiable;
  if (D.23089 != 0) goto <D.23087>; else goto <D.23090>;
  <D.23090>:
  D.23091 = ctx->level;
  D.23092 = D.23091 & 128;
  if (D.23092 != 0) goto <D.23087>; else goto <D.23088>;
  <D.23087>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23074 = ctx->ip_offset;
    D.23093 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.23074);
    vinfo->info.message = D.23093;
    vinfo->exception_type = 4;
    D.23082 = ctx->list;
    D.23094 = monoeg_g_slist_prepend (D.23082, vinfo);
    ctx->list = D.23094;
  }
  ctx->verifiable = 0;
  D.23091 = ctx->level;
  D.23095 = D.23091 & 16;
  if (D.23095 != 0) goto <D.23096>; else goto <D.23097>;
  <D.23096>:
  ctx->valid = 0;
  <D.23097>:
  <D.23088>:
  goto <D.19304>;
  <D.19305>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23074 = ctx->ip_offset;
    D.23098 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.23074);
    vinfo->info.message = D.23098;
    vinfo->exception_type = 3;
    D.23082 = ctx->list;
    D.23099 = monoeg_g_slist_prepend (D.23082, vinfo);
    ctx->list = D.23099;
  }
  ctx->valid = 0;
  return;
  <D.23100>:
  <D.19304>:
  ctx->target = target;
  D.23101 = check_underflow (ctx, 2);
  if (D.23101 == 0) goto <D.23102>; else goto <D.23103>;
  <D.23102>:
  return;
  <D.23103>:
  b = stack_pop (ctx);
  a = stack_pop (ctx);
  idxa = stack_slot_get_underlying_type (a);
  D.23104 = stack_slot_is_managed_pointer (a);
  if (D.23104 != 0) goto <D.23105>; else goto <D.23106>;
  <D.23105>:
  idxa = 5;
  <D.23106>:
  idxb = stack_slot_get_underlying_type (b);
  D.23107 = stack_slot_is_managed_pointer (b);
  if (D.23107 != 0) goto <D.23108>; else goto <D.23109>;
  <D.23108>:
  idxb = 5;
  <D.23109>:
  D.23113 = stack_slot_is_complex_type_not_reference_type (a);
  if (D.23113 != 0) goto <D.23110>; else goto <D.23114>;
  <D.23114>:
  D.23115 = stack_slot_is_complex_type_not_reference_type (b);
  if (D.23115 != 0) goto <D.23110>; else goto <D.23111>;
  <D.23110>:
  res = 0;
  goto <D.23112>;
  <D.23111>:
  idxa = idxa + -1;
  idxb = idxb + -1;
  D.23116 = (long unsigned int) idxa;
  D.23117 = D.23116 * 6;
  D.23118 = table + D.23117;
  res = *D.23118[idxb];
  <D.23112>:
  if (res == 0) goto <D.23119>; else goto <D.23120>;
  <D.23119>:
  D.23089 = ctx->verifiable;
  if (D.23089 != 0) goto <D.23121>; else goto <D.23123>;
  <D.23123>:
  D.23091 = ctx->level;
  D.23092 = D.23091 & 128;
  if (D.23092 != 0) goto <D.23121>; else goto <D.23122>;
  <D.23121>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23124 = stack_slot_get_name (a);
    D.23125 = stack_slot_get_name (b);
    D.23074 = ctx->ip_offset;
    D.23126 = monoeg_g_strdup_printf ("Compare and Branch instruction applyed to ill formed stack (%s x %s) at 0x%04x", D.23124, D.23125, D.23074);
    vinfo->info.message = D.23126;
    vinfo->exception_type = 4;
    D.23082 = ctx->list;
    D.23127 = monoeg_g_slist_prepend (D.23082, vinfo);
    ctx->list = D.23127;
  }
  ctx->verifiable = 0;
  D.23091 = ctx->level;
  D.23095 = D.23091 & 16;
  if (D.23095 != 0) goto <D.23128>; else goto <D.23129>;
  <D.23128>:
  ctx->valid = 0;
  <D.23129>:
  <D.23122>:
  goto <D.23130>;
  <D.23120>:
  res.51 = (signed char) res;
  if (res.51 < 0) goto <D.23132>; else goto <D.23133>;
  <D.23132>:
  D.23089 = ctx->verifiable;
  if (D.23089 != 0) goto <D.23134>; else goto <D.23136>;
  <D.23136>:
  D.23091 = ctx->level;
  D.23092 = D.23091 & 128;
  if (D.23092 != 0) goto <D.23134>; else goto <D.23135>;
  <D.23134>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23137 = stack_slot_get_name (a);
    D.23138 = stack_slot_get_name (b);
    D.23074 = ctx->ip_offset;
    D.23139 = monoeg_g_strdup_printf ("Compare and Branch instruction is not verifiable (%s x %s) at 0x%04x", D.23137, D.23138, D.23074);
    vinfo->info.message = D.23139;
    vinfo->exception_type = 4;
    D.23082 = ctx->list;
    D.23140 = monoeg_g_slist_prepend (D.23082, vinfo);
    ctx->list = D.23140;
  }
  ctx->verifiable = 0;
  D.23091 = ctx->level;
  D.23095 = D.23091 & 16;
  if (D.23095 != 0) goto <D.23141>; else goto <D.23142>;
  <D.23141>:
  ctx->valid = 0;
  <D.23142>:
  <D.23135>:
  res = res & 127;
  <D.23133>:
  <D.23130>:
}


is_valid_cmp_branch_instruction (struct MonoMethodHeader * header, guint offset, guint target)
{
  struct MonoExceptionClause * D.23144;
  long unsigned int D.23145;
  long unsigned int D.23146;
  unsigned int D.23149;
  unsigned int D.23152;
  unsigned int D.23155;
  unsigned int D.23156;
  int D.23160;
  unsigned int D.23161;
  int iftmp.52;
  unsigned int D.23168;
  unsigned int D.23169;
  _Bool D.23171;
  int iftmp.53;
  _Bool D.23177;
  _Bool D.23178;
  int iftmp.54;
  _Bool D.23186;
  int iftmp.55;
  _Bool D.23192;
  _Bool D.23193;
  int iftmp.56;
  unsigned int D.23200;
  _Bool D.23203;
  int iftmp.57;
  _Bool D.23210;
  _Bool D.23211;
  <unnamed-unsigned:15> D.23214;
  int D.23215;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.18742>;
  <D.18741>:
  D.23144 = header->clauses;
  D.23145 = (long unsigned int) i;
  D.23146 = D.23145 * 32;
  clause = D.23144 + D.23146;
  D.23149 = clause->flags;
  if (D.23149 != 0) goto <D.23150>; else goto <D.23151>;
  <D.23150>:
  D.23152 = clause->handler_offset;
  if (D.23152 <= offset) goto <D.23153>; else goto <D.23154>;
  <D.23153>:
  D.23152 = clause->handler_offset;
  D.23155 = clause->handler_len;
  D.23156 = D.23152 + D.23155;
  if (D.23156 > offset) goto <D.23157>; else goto <D.23158>;
  <D.23157>:
  D.23152 = clause->handler_offset;
  if (D.23152 > target) goto <D.23147>; else goto <D.23159>;
  <D.23159>:
  D.23152 = clause->handler_offset;
  D.23155 = clause->handler_len;
  D.23156 = D.23152 + D.23155;
  if (D.23156 <= target) goto <D.23147>; else goto <D.23148>;
  <D.23147>:
  D.23160 = 1;
  return D.23160;
  <D.23148>:
  <D.23158>:
  <D.23154>:
  <D.23151>:
  D.23161 = clause->try_offset;
  if (D.23161 != target) goto <D.23162>; else goto <D.23163>;
  <D.23162>:
  D.23161 = clause->try_offset;
  if (D.23161 <= offset) goto <D.23167>; else goto <D.23165>;
  <D.23167>:
  D.23161 = clause->try_offset;
  D.23168 = clause->try_len;
  D.23169 = D.23161 + D.23168;
  if (D.23169 > offset) goto <D.23170>; else goto <D.23165>;
  <D.23170>:
  iftmp.52 = 1;
  goto <D.23166>;
  <D.23165>:
  iftmp.52 = 0;
  <D.23166>:
  D.23171 = (_Bool) iftmp.52;
  D.23161 = clause->try_offset;
  if (D.23161 <= target) goto <D.23175>; else goto <D.23173>;
  <D.23175>:
  D.23161 = clause->try_offset;
  D.23168 = clause->try_len;
  D.23169 = D.23161 + D.23168;
  if (D.23169 > target) goto <D.23176>; else goto <D.23173>;
  <D.23176>:
  iftmp.53 = 1;
  goto <D.23174>;
  <D.23173>:
  iftmp.53 = 0;
  <D.23174>:
  D.23177 = (_Bool) iftmp.53;
  D.23178 = D.23171 ^ D.23177;
  if (D.23178 != 0) goto <D.23179>; else goto <D.23180>;
  <D.23179>:
  D.23160 = 2;
  return D.23160;
  <D.23180>:
  <D.23163>:
  D.23152 = clause->handler_offset;
  if (D.23152 <= offset) goto <D.23184>; else goto <D.23182>;
  <D.23184>:
  D.23152 = clause->handler_offset;
  D.23155 = clause->handler_len;
  D.23156 = D.23152 + D.23155;
  if (D.23156 > offset) goto <D.23185>; else goto <D.23182>;
  <D.23185>:
  iftmp.54 = 1;
  goto <D.23183>;
  <D.23182>:
  iftmp.54 = 0;
  <D.23183>:
  D.23186 = (_Bool) iftmp.54;
  D.23152 = clause->handler_offset;
  if (D.23152 <= target) goto <D.23190>; else goto <D.23188>;
  <D.23190>:
  D.23152 = clause->handler_offset;
  D.23155 = clause->handler_len;
  D.23156 = D.23152 + D.23155;
  if (D.23156 > target) goto <D.23191>; else goto <D.23188>;
  <D.23191>:
  iftmp.55 = 1;
  goto <D.23189>;
  <D.23188>:
  iftmp.55 = 0;
  <D.23189>:
  D.23192 = (_Bool) iftmp.55;
  D.23193 = D.23186 ^ D.23192;
  if (D.23193 != 0) goto <D.23194>; else goto <D.23195>;
  <D.23194>:
  D.23160 = 2;
  return D.23160;
  <D.23195>:
  D.23149 = clause->flags;
  if (D.23149 == 1) goto <D.23199>; else goto <D.23197>;
  <D.23199>:
  D.23200 = clause->data.filter_offset;
  if (D.23200 <= offset) goto <D.23201>; else goto <D.23197>;
  <D.23201>:
  D.23152 = clause->handler_offset;
  if (D.23152 > offset) goto <D.23202>; else goto <D.23197>;
  <D.23202>:
  iftmp.56 = 1;
  goto <D.23198>;
  <D.23197>:
  iftmp.56 = 0;
  <D.23198>:
  D.23203 = (_Bool) iftmp.56;
  D.23149 = clause->flags;
  if (D.23149 == 1) goto <D.23207>; else goto <D.23205>;
  <D.23207>:
  D.23200 = clause->data.filter_offset;
  if (D.23200 <= target) goto <D.23208>; else goto <D.23205>;
  <D.23208>:
  D.23152 = clause->handler_offset;
  if (D.23152 > target) goto <D.23209>; else goto <D.23205>;
  <D.23209>:
  iftmp.57 = 1;
  goto <D.23206>;
  <D.23205>:
  iftmp.57 = 0;
  <D.23206>:
  D.23210 = (_Bool) iftmp.57;
  D.23211 = D.23203 ^ D.23210;
  if (D.23211 != 0) goto <D.23212>; else goto <D.23213>;
  <D.23212>:
  D.23160 = 2;
  return D.23160;
  <D.23213>:
  i = i + 1;
  <D.18742>:
  D.23214 = header->num_clauses;
  D.23215 = (int) D.23214;
  if (D.23215 > i) goto <D.18741>; else goto <D.18743>;
  <D.18743>:
  D.23160 = 0;
  return D.23160;
}


stack_slot_is_complex_type_not_reference_type (struct ILStackDesc * slot)
{
  gboolean D.23217;
  int iftmp.58;
  int D.23221;
  struct MonoType * D.23223;
  int D.23224;
  int D.23226;

  D.23221 = stack_slot_get_type (slot);
  if (D.23221 == 6) goto <D.23222>; else goto <D.23219>;
  <D.23222>:
  D.23223 = slot->type;
  D.23224 = mono_type_is_reference (D.23223);
  if (D.23224 == 0) goto <D.23225>; else goto <D.23219>;
  <D.23225>:
  D.23226 = stack_slot_is_boxed_value (slot);
  if (D.23226 == 0) goto <D.23227>; else goto <D.23219>;
  <D.23227>:
  iftmp.58 = 1;
  goto <D.23220>;
  <D.23219>:
  iftmp.58 = 0;
  <D.23220>:
  D.23217 = iftmp.58;
  return D.23217;
}


stack_slot_get_type (struct ILStackDesc * value)
{
  gint32 D.23229;
  int D.23230;

  D.23230 = value->stype;
  D.23229 = D.23230 & 271;
  return D.23229;
}


stack_peek (struct VerifyContext * ctx, int distance)
{
  short unsigned int D.23232;
  int D.23233;
  int D.23234;
  _Bool D.23235;
  long int D.23236;
  long int D.23237;
  struct ILStackDesc * D.23240;
  struct ILStackDesc * D.23241;
  int D.23242;
  int D.23243;
  long unsigned int D.23244;
  long unsigned int D.23245;

  D.23232 = ctx->eval.size;
  D.23233 = (int) D.23232;
  D.23234 = D.23233 - distance;
  D.23235 = D.23234 <= 0;
  D.23236 = (long int) D.23235;
  D.23237 = __builtin_expect (D.23236, 0);
  if (D.23237 != 0) goto <D.23238>; else goto <D.23239>;
  <D.23238>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1631, "ctx->eval.size - distance > 0");
  <D.23239>:
  D.23241 = ctx->eval.stack;
  D.23232 = ctx->eval.size;
  D.23233 = (int) D.23232;
  D.23242 = D.23233 + -1;
  D.23243 = D.23242 - distance;
  D.23244 = (long unsigned int) D.23243;
  D.23245 = D.23244 * 24;
  D.23240 = D.23241 + D.23245;
  return D.23240;
}


copy_stack_value (struct ILStackDesc * to, struct ILStackDesc * from)
{
  int D.23247;
  struct MonoType * D.23248;
  struct MonoMethod * D.23249;

  D.23247 = from->stype;
  to->stype = D.23247;
  D.23248 = from->type;
  to->type = D.23248;
  D.23249 = from->method;
  to->method = D.23249;
}


in_any_block (struct MonoMethodHeader * header, guint offset)
{
  struct MonoExceptionClause * D.23250;
  long unsigned int D.23251;
  long unsigned int D.23252;
  unsigned int D.23253;
  unsigned int D.23256;
  unsigned int D.23257;
  int D.23260;
  unsigned int D.23261;
  unsigned int D.23264;
  unsigned int D.23265;
  unsigned int D.23268;
  unsigned int D.23271;
  <unnamed-unsigned:15> D.23276;
  int D.23277;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.18713>;
  <D.18712>:
  D.23250 = header->clauses;
  D.23251 = (long unsigned int) i;
  D.23252 = D.23251 * 32;
  clause = D.23250 + D.23252;
  D.23253 = clause->try_offset;
  if (D.23253 <= offset) goto <D.23254>; else goto <D.23255>;
  <D.23254>:
  D.23253 = clause->try_offset;
  D.23256 = clause->try_len;
  D.23257 = D.23253 + D.23256;
  if (D.23257 > offset) goto <D.23258>; else goto <D.23259>;
  <D.23258>:
  D.23260 = 1;
  return D.23260;
  <D.23259>:
  <D.23255>:
  D.23261 = clause->handler_offset;
  if (D.23261 <= offset) goto <D.23262>; else goto <D.23263>;
  <D.23262>:
  D.23261 = clause->handler_offset;
  D.23264 = clause->handler_len;
  D.23265 = D.23261 + D.23264;
  if (D.23265 > offset) goto <D.23266>; else goto <D.23267>;
  <D.23266>:
  D.23260 = 1;
  return D.23260;
  <D.23267>:
  <D.23263>:
  D.23268 = clause->flags;
  if (D.23268 == 1) goto <D.23269>; else goto <D.23270>;
  <D.23269>:
  D.23271 = clause->data.filter_offset;
  if (D.23271 <= offset) goto <D.23272>; else goto <D.23273>;
  <D.23272>:
  D.23261 = clause->handler_offset;
  if (D.23261 > offset) goto <D.23274>; else goto <D.23275>;
  <D.23274>:
  D.23260 = 1;
  return D.23260;
  <D.23275>:
  <D.23273>:
  <D.23270>:
  i = i + 1;
  <D.18713>:
  D.23276 = header->num_clauses;
  D.23277 = (int) D.23276;
  if (D.23277 > i) goto <D.18712>; else goto <D.18714>;
  <D.18714>:
  D.23260 = 0;
  return D.23260;
}


do_invoke_method (struct VerifyContext * ctx, int method_token, gboolean virtual)
{
  unsigned int D.23279;
  int D.23280;
  const char * iftmp.59;
  unsigned int D.23289;
  struct MonoClass * D.23290;
  long unsigned int D.23291;
  long unsigned int D.23292;
  int D.23297;
  int D.23299;
  int D.23300;
  unsigned int D.23301;
  gchar * D.23302;
  struct GSList * D.23303;
  struct GSList * D.23304;
  int D.23305;
  short unsigned int D.23308;
  int D.23309;
  int D.23310;
  gchar * D.23316;
  struct GSList * D.23317;
  int D.23321;
  gchar * D.23327;
  struct GSList * D.23328;
  unsigned int D.23331;
  unsigned int D.23332;
  unsigned int D.23335;
  unsigned int D.23336;
  struct ILCodeDesc * D.23339;
  long unsigned int D.23340;
  long unsigned int D.23341;
  struct ILCodeDesc * D.23342;
  short unsigned int D.23343;
  short unsigned int D.23344;
  struct MonoImage * D.23345;
  unsigned int method_token.60;
  struct MonoGenericContext * D.23347;
  const char * D.23352;
  gchar * D.23353;
  struct GSList * D.23354;
  short unsigned int D.23355;
  int D.23356;
  <unnamed-unsigned:1> D.23357;
  int D.23358;
  int D.23359;
  struct MonoType * D.23362;
  int D.23363;
  gchar * D.23369;
  struct GSList * D.23370;
  int D.23373;
  const char * iftmp.61;
  gchar * D.23383;
  struct GSList * D.23384;
  unsigned int D.23387;
  int D.23390;
  const char * iftmp.62;
  gchar * D.23397;
  struct GSList * D.23398;
  long unsigned int D.23399;
  long unsigned int D.23400;
  int D.23405;
  int D.23408;
  struct MonoMethod * D.23411;
  int D.23412;
  gchar * D.23418;
  struct GSList * D.23419;
  struct MonoClass * D.23424;
  struct MonoClass * D.23425;
  gchar * D.23433;
  struct GSList * D.23434;
  int D.23439;
  int D.23440;
  gchar * D.23446;
  struct GSList * D.23447;
  struct MonoType * D.23450;
  struct MonoType * D.23451;
  int D.23452;
  int D.23453;
  int D.23456;
  int D.23461;
  gchar * D.23467;
  struct GSList * D.23468;
  int D.23475;
  gchar * D.23481;
  struct GSList * D.23482;
  struct MonoType * D.23485;
  struct MonoType * D.23486;
  struct MonoType * D.23487;
  int D.23488;
  gchar * D.23494;
  struct GSList * D.23495;
  int D.23498;
  int D.23499;
  struct MonoClass * D.23502;
  long unsigned int D.23503;
  long unsigned int D.23504;
  gchar * D.23510;
  struct GSList * D.23511;
  struct MonoClass * D.23516;
  long unsigned int D.23517;
  long unsigned int D.23518;
  int D.23523;
  gchar * D.23529;
  struct GSList * D.23530;
  struct MonoClass * D.23535;
  long unsigned int D.23536;
  long unsigned int D.23537;
  int D.23540;
  gchar * D.23546;
  struct GSList * D.23547;
  int D.23554;
  int D.23556;
  gchar * D.23560;
  struct GSList * D.23561;
  int D.23564;
  gchar * D.23570;
  struct GSList * D.23571;
  int D.23574;
  struct MonoClass * D.23577;
  int D.23578;
  gchar * D.23584;
  struct GSList * D.23585;
  int D.23591;
  gchar * D.23597;
  struct GSList * D.23598;
  struct MonoType * D.23601;
  unsigned char D.23602;
  int D.23605;
  int D.23608;
  unsigned int D.23611;
  unsigned char D.23614;
  int D.19385;
  int iftmp.63;
  int D.19384;
  const char[8] * D.23620;
  unsigned char D.23621;
  int D.23622;
  unsigned char D.23623;
  int D.23624;
  const unsigned char * D.23629;
  unsigned char D.23630;
  int D.23631;
  const unsigned char * D.23632;
  unsigned char D.23633;
  int D.23634;
  const unsigned char * D.23639;
  unsigned char D.23640;
  int D.23641;
  const unsigned char * D.23642;
  unsigned char D.23643;
  int D.23644;
  const unsigned char * D.23649;
  unsigned char D.23650;
  int D.23651;
  const unsigned char * D.23652;
  unsigned char D.23653;
  int D.23654;
  unsigned int D.23658;
  int D.23659;
  struct MonoMethodSignature * D.23662;
  struct MonoType * D.23663;
  int D.23664;
  gchar * D.23670;
  struct GSList * D.23671;
  struct MonoMethodHeader * D.23674;
  const unsigned char * D.23675;
  unsigned int D.23676;
  sizetype D.23677;
  const unsigned char * D.23678;
  unsigned char D.23679;
  gchar * D.23685;
  struct GSList * D.23686;
  int param_count;
  int i;
  struct MonoMethodSignature * sig;
  struct ILStackDesc * value;
  struct MonoMethod * method;
  gboolean virt_check_this;
  gboolean constrained;

  virt_check_this = 0;
  D.23279 = ctx->prefix_set;
  D.23280 = (int) D.23279;
  constrained = D.23280 & 8;
  if (virtual != 0) goto <D.23282>; else goto <D.23283>;
  <D.23282>:
  iftmp.59 = "callvirt";
  goto <D.23284>;
  <D.23283>:
  iftmp.59 = "call";
  <D.23284>:
  method = verifier_load_method (ctx, method_token, iftmp.59);
  if (method == 0B) goto <D.23285>; else goto <D.23286>;
  <D.23285>:
  return;
  <D.23286>:
  if (virtual != 0) goto <D.23287>; else goto <D.23288>;
  <D.23287>:
  D.23279 = ctx->prefix_set;
  D.23289 = D.23279 & 4294967287;
  ctx->prefix_set = D.23289;
  D.23290 = method->klass;
  D.23291 = BIT_FIELD_REF <*D.23290, 64, 256>;
  D.23292 = D.23291 & 8;
  if (D.23292 != 0) goto <D.23293>; else goto <D.23294>;
  <D.23293>:
  D.23297 = ctx->verifiable;
  if (D.23297 != 0) goto <D.23295>; else goto <D.23298>;
  <D.23298>:
  D.23299 = ctx->level;
  D.23300 = D.23299 & 128;
  if (D.23300 != 0) goto <D.23295>; else goto <D.23296>;
  <D.23295>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23301 = ctx->ip_offset;
    D.23302 = monoeg_g_strdup_printf ("Cannot use callvirtual with valuetype method at 0x%04x", D.23301);
    vinfo->info.message = D.23302;
    vinfo->exception_type = 4;
    D.23303 = ctx->list;
    D.23304 = monoeg_g_slist_prepend (D.23303, vinfo);
    ctx->list = D.23304;
  }
  ctx->verifiable = 0;
  D.23299 = ctx->level;
  D.23305 = D.23299 & 16;
  if (D.23305 != 0) goto <D.23306>; else goto <D.23307>;
  <D.23306>:
  ctx->valid = 0;
  <D.23307>:
  <D.23296>:
  <D.23294>:
  D.23308 = method->flags;
  D.23309 = (int) D.23308;
  D.23310 = D.23309 & 16;
  if (D.23310 != 0) goto <D.23311>; else goto <D.23312>;
  <D.23311>:
  D.23297 = ctx->verifiable;
  if (D.23297 != 0) goto <D.23313>; else goto <D.23315>;
  <D.23315>:
  D.23299 = ctx->level;
  D.23300 = D.23299 & 128;
  if (D.23300 != 0) goto <D.23313>; else goto <D.23314>;
  <D.23313>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23301 = ctx->ip_offset;
    D.23316 = monoeg_g_strdup_printf ("Cannot use callvirtual with static method at 0x%04x", D.23301);
    vinfo->info.message = D.23316;
    vinfo->exception_type = 4;
    D.23303 = ctx->list;
    D.23317 = monoeg_g_slist_prepend (D.23303, vinfo);
    ctx->list = D.23317;
  }
  ctx->verifiable = 0;
  D.23299 = ctx->level;
  D.23305 = D.23299 & 16;
  if (D.23305 != 0) goto <D.23318>; else goto <D.23319>;
  <D.23318>:
  ctx->valid = 0;
  <D.23319>:
  <D.23314>:
  <D.23312>:
  goto <D.23320>;
  <D.23288>:
  D.23308 = method->flags;
  D.23309 = (int) D.23308;
  D.23321 = D.23309 & 1024;
  if (D.23321 != 0) goto <D.23322>; else goto <D.23323>;
  <D.23322>:
  D.23297 = ctx->verifiable;
  if (D.23297 != 0) goto <D.23324>; else goto <D.23326>;
  <D.23326>:
  D.23299 = ctx->level;
  D.23300 = D.23299 & 128;
  if (D.23300 != 0) goto <D.23324>; else goto <D.23325>;
  <D.23324>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23301 = ctx->ip_offset;
    D.23327 = monoeg_g_strdup_printf ("Cannot use call with an abstract method at 0x%04x", D.23301);
    vinfo->info.message = D.23327;
    vinfo->exception_type = 4;
    D.23303 = ctx->list;
    D.23328 = monoeg_g_slist_prepend (D.23303, vinfo);
    ctx->list = D.23328;
  }
  ctx->verifiable = 0;
  D.23299 = ctx->level;
  D.23305 = D.23299 & 16;
  if (D.23305 != 0) goto <D.23329>; else goto <D.23330>;
  <D.23329>:
  ctx->valid = 0;
  <D.23330>:
  <D.23325>:
  <D.23323>:
  D.23308 = method->flags;
  D.23331 = (unsigned int) D.23308;
  D.23332 = D.23331 & 96;
  if (D.23332 == 64) goto <D.23333>; else goto <D.23334>;
  <D.23333>:
  D.23290 = method->klass;
  D.23335 = D.23290->flags;
  D.23336 = D.23335 & 256;
  if (D.23336 == 0) goto <D.23337>; else goto <D.23338>;
  <D.23337>:
  virt_check_this = 1;
  D.23339 = ctx->code;
  D.23301 = ctx->ip_offset;
  D.23340 = (long unsigned int) D.23301;
  D.23341 = D.23340 * 16;
  D.23342 = D.23339 + D.23341;
  D.23339 = ctx->code;
  D.23301 = ctx->ip_offset;
  D.23340 = (long unsigned int) D.23301;
  D.23341 = D.23340 * 16;
  D.23342 = D.23339 + D.23341;
  D.23343 = D.23342->flags;
  D.23344 = D.23343 | 64;
  D.23342->flags = D.23344;
  <D.23338>:
  <D.23334>:
  <D.23320>:
  D.23345 = ctx->image;
  method_token.60 = (unsigned int) method_token;
  D.23347 = ctx->generic_context;
  sig = mono_method_get_signature_full (method, D.23345, method_token.60, D.23347);
  if (sig == 0B) goto <D.23348>; else goto <D.23349>;
  <D.23348>:
  D.23345 = ctx->image;
  method_token.60 = (unsigned int) method_token;
  sig = mono_method_get_signature (method, D.23345, method_token.60);
  <D.23349>:
  if (sig == 0B) goto <D.23350>; else goto <D.23351>;
  <D.23350>:
  {
    char * name;

    D.23290 = method->klass;
    name = mono_type_get_full_name (D.23290);
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.23352 = method->name;
      D.23301 = ctx->ip_offset;
      D.23353 = monoeg_g_strdup_printf ("Could not resolve signature of %s:%s at 0x%04x", name, D.23352, D.23301);
      vinfo->info.message = D.23353;
      vinfo->exception_type = 3;
      D.23303 = ctx->list;
      D.23354 = monoeg_g_slist_prepend (D.23303, vinfo);
      ctx->list = D.23354;
    }
    ctx->valid = 0;
    monoeg_g_free (name);
    return;
  }
  <D.23351>:
  D.23355 = sig->param_count;
  D.23356 = (int) D.23355;
  D.23357 = sig->hasthis;
  D.23358 = (int) D.23357;
  param_count = D.23356 + D.23358;
  D.23359 = check_underflow (ctx, param_count);
  if (D.23359 == 0) goto <D.23360>; else goto <D.23361>;
  <D.23360>:
  return;
  <D.23361>:
  D.23355 = sig->param_count;
  D.23356 = (int) D.23355;
  i = D.23356 + -1;
  goto <D.19355>;
  <D.19354>:
  value = stack_pop (ctx);
  D.23362 = sig->params[i];
  D.23363 = verify_stack_type_compatibility (ctx, D.23362, value);
  if (D.23363 == 0) goto <D.23364>; else goto <D.23365>;
  <D.23364>:
  {
    char * stack_name;
    char * sig_name;

    stack_name = stack_slot_full_name (value);
    D.23362 = sig->params[i];
    sig_name = mono_type_full_name (D.23362);
    D.23297 = ctx->verifiable;
    if (D.23297 != 0) goto <D.23366>; else goto <D.23368>;
    <D.23368>:
    D.23299 = ctx->level;
    D.23300 = D.23299 & 128;
    if (D.23300 != 0) goto <D.23366>; else goto <D.23367>;
    <D.23366>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.23301 = ctx->ip_offset;
      D.23369 = monoeg_g_strdup_printf ("Incompatible parameter with function signature: Calling method with signature (%s) but for argument %d there is a (%s) on stack at 0x%04x", sig_name, i, stack_name, D.23301);
      vinfo->info.message = D.23369;
      vinfo->exception_type = 4;
      D.23303 = ctx->list;
      D.23370 = monoeg_g_slist_prepend (D.23303, vinfo);
      ctx->list = D.23370;
    }
    ctx->verifiable = 0;
    D.23299 = ctx->level;
    D.23305 = D.23299 & 16;
    if (D.23305 != 0) goto <D.23371>; else goto <D.23372>;
    <D.23371>:
    ctx->valid = 0;
    <D.23372>:
    <D.23367>:
    monoeg_g_free (stack_name);
    monoeg_g_free (sig_name);
  }
  <D.23365>:
  D.23373 = stack_slot_is_managed_mutability_pointer (value);
  if (D.23373 != 0) goto <D.23374>; else goto <D.23375>;
  <D.23374>:
  D.23297 = ctx->verifiable;
  if (D.23297 != 0) goto <D.23376>; else goto <D.23378>;
  <D.23378>:
  D.23299 = ctx->level;
  D.23300 = D.23299 & 128;
  if (D.23300 != 0) goto <D.23376>; else goto <D.23377>;
  <D.23376>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    if (virtual != 0) goto <D.23380>; else goto <D.23381>;
    <D.23380>:
    iftmp.61 = "callvirt";
    goto <D.23382>;
    <D.23381>:
    iftmp.61 = "call";
    <D.23382>:
    D.23301 = ctx->ip_offset;
    D.23383 = monoeg_g_strdup_printf ("Cannot use a readonly pointer as argument of %s at 0x%04x", iftmp.61, D.23301);
    vinfo->info.message = D.23383;
    vinfo->exception_type = 4;
    D.23303 = ctx->list;
    D.23384 = monoeg_g_slist_prepend (D.23303, vinfo);
    ctx->list = D.23384;
  }
  ctx->verifiable = 0;
  D.23299 = ctx->level;
  D.23305 = D.23299 & 16;
  if (D.23305 != 0) goto <D.23385>; else goto <D.23386>;
  <D.23385>:
  ctx->valid = 0;
  <D.23386>:
  <D.23377>:
  <D.23375>:
  D.23279 = ctx->prefix_set;
  D.23387 = D.23279 & 4;
  if (D.23387 != 0) goto <D.23388>; else goto <D.23389>;
  <D.23388>:
  D.23390 = stack_slot_is_managed_pointer (value);
  if (D.23390 != 0) goto <D.23391>; else goto <D.23392>;
  <D.23391>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    if (virtual != 0) goto <D.23394>; else goto <D.23395>;
    <D.23394>:
    iftmp.62 = "callvirt";
    goto <D.23396>;
    <D.23395>:
    iftmp.62 = "call";
    <D.23396>:
    D.23301 = ctx->ip_offset;
    D.23397 = monoeg_g_strdup_printf ("Cannot  pass a byref argument to a tail %s at 0x%04x", iftmp.62, D.23301);
    vinfo->info.message = D.23397;
    vinfo->exception_type = 3;
    D.23303 = ctx->list;
    D.23398 = monoeg_g_slist_prepend (D.23303, vinfo);
    ctx->list = D.23398;
  }
  ctx->valid = 0;
  return;
  <D.23392>:
  <D.23389>:
  i = i + -1;
  <D.19355>:
  if (i >= 0) goto <D.19354>; else goto <D.19356>;
  <D.19356>:
  D.23399 = BIT_FIELD_REF <*sig, 64, 64>;
  D.23400 = D.23399 & 18014398509481984;
  if (D.23400 != 0) goto <D.23401>; else goto <D.23402>;
  <D.23401>:
  {
    struct MonoType * type;
    struct ILStackDesc copy;

    try
      {
        D.23290 = method->klass;
        type = &D.23290->byval_arg;
        D.23405 = mono_method_is_constructor (method);
        if (D.23405 != 0) goto <D.23406>; else goto <D.23403>;
        <D.23406>:
        D.23290 = method->klass;
        D.23291 = BIT_FIELD_REF <*D.23290, 64, 256>;
        D.23292 = D.23291 & 8;
        if (D.23292 == 0) goto <D.23407>; else goto <D.23403>;
        <D.23407>:
        D.23299 = ctx->level;
        D.23408 = D.23299 & 32;
        if (D.23408 == 0) goto <D.23409>; else goto <D.23410>;
        <D.23409>:
        D.23411 = ctx->method;
        D.23412 = mono_method_is_constructor (D.23411);
        if (D.23412 == 0) goto <D.23413>; else goto <D.23414>;
        <D.23413>:
        D.23297 = ctx->verifiable;
        if (D.23297 != 0) goto <D.23415>; else goto <D.23417>;
        <D.23417>:
        D.23299 = ctx->level;
        D.23300 = D.23299 & 128;
        if (D.23300 != 0) goto <D.23415>; else goto <D.23416>;
        <D.23415>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.23301 = ctx->ip_offset;
          D.23418 = monoeg_g_strdup_printf ("Cannot call a constructor outside one at 0x%04x", D.23301);
          vinfo->info.message = D.23418;
          vinfo->exception_type = 4;
          D.23303 = ctx->list;
          D.23419 = monoeg_g_slist_prepend (D.23303, vinfo);
          ctx->list = D.23419;
        }
        ctx->verifiable = 0;
        D.23299 = ctx->level;
        D.23305 = D.23299 & 16;
        if (D.23305 != 0) goto <D.23420>; else goto <D.23421>;
        <D.23420>:
        ctx->valid = 0;
        <D.23421>:
        <D.23416>:
        <D.23414>:
        <D.23410>:
        D.23299 = ctx->level;
        D.23408 = D.23299 & 32;
        if (D.23408 == 0) goto <D.23422>; else goto <D.23423>;
        <D.23422>:
        D.23290 = method->klass;
        D.23411 = ctx->method;
        D.23424 = D.23411->klass;
        D.23425 = D.23424->parent;
        if (D.23290 != D.23425) goto <D.23426>; else goto <D.23427>;
        <D.23426>:
        D.23290 = method->klass;
        D.23411 = ctx->method;
        D.23424 = D.23411->klass;
        if (D.23290 != D.23424) goto <D.23428>; else goto <D.23429>;
        <D.23428>:
        D.23297 = ctx->verifiable;
        if (D.23297 != 0) goto <D.23430>; else goto <D.23432>;
        <D.23432>:
        D.23299 = ctx->level;
        D.23300 = D.23299 & 128;
        if (D.23300 != 0) goto <D.23430>; else goto <D.23431>;
        <D.23430>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.23301 = ctx->ip_offset;
          D.23433 = monoeg_g_strdup_printf ("Cannot call a constructor of a type different from this or super at 0x%04x", D.23301);
          vinfo->info.message = D.23433;
          vinfo->exception_type = 4;
          D.23303 = ctx->list;
          D.23434 = monoeg_g_slist_prepend (D.23303, vinfo);
          ctx->list = D.23434;
        }
        ctx->verifiable = 0;
        D.23299 = ctx->level;
        D.23305 = D.23299 & 16;
        if (D.23305 != 0) goto <D.23435>; else goto <D.23436>;
        <D.23435>:
        ctx->valid = 0;
        <D.23436>:
        <D.23431>:
        <D.23429>:
        <D.23427>:
        <D.23423>:
        ctx->super_ctor_called = 1;
        value = stack_pop_safe (ctx);
        D.23299 = ctx->level;
        D.23408 = D.23299 & 32;
        if (D.23408 == 0) goto <D.23437>; else goto <D.23438>;
        <D.23437>:
        D.23439 = value->stype;
        D.23440 = D.23439 & 2048;
        if (D.23440 == 0) goto <D.23441>; else goto <D.23442>;
        <D.23441>:
        D.23297 = ctx->verifiable;
        if (D.23297 != 0) goto <D.23443>; else goto <D.23445>;
        <D.23445>:
        D.23299 = ctx->level;
        D.23300 = D.23299 & 128;
        if (D.23300 != 0) goto <D.23443>; else goto <D.23444>;
        <D.23443>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.23301 = ctx->ip_offset;
          D.23446 = monoeg_g_strdup_printf ("Invalid \'this ptr\' argument for constructor at 0x%04x", D.23301);
          vinfo->info.message = D.23446;
          vinfo->exception_type = 4;
          D.23303 = ctx->list;
          D.23447 = monoeg_g_slist_prepend (D.23303, vinfo);
          ctx->list = D.23447;
        }
        ctx->verifiable = 0;
        D.23299 = ctx->level;
        D.23305 = D.23299 & 16;
        if (D.23305 != 0) goto <D.23448>; else goto <D.23449>;
        <D.23448>:
        ctx->valid = 0;
        <D.23449>:
        <D.23444>:
        <D.23442>:
        <D.23438>:
        goto <D.23404>;
        <D.23403>:
        value = stack_pop (ctx);
        <D.23404>:
        copy_stack_value (&copy, value);
        D.23450 = copy.type;
        D.23451 = mono_type_get_type_byval (D.23450);
        copy.type = D.23451;
        D.23452 = copy.stype;
        D.23453 = D.23452 & -257;
        copy.stype = D.23453;
        if (virt_check_this != 0) goto <D.23454>; else goto <D.23455>;
        <D.23454>:
        D.23456 = stack_slot_is_this_pointer (value);
        if (D.23456 == 0) goto <D.23457>; else goto <D.23458>;
        <D.23457>:
        D.23290 = method->klass;
        D.23291 = BIT_FIELD_REF <*D.23290, 64, 256>;
        D.23292 = D.23291 & 8;
        if (D.23292 == 0) goto <D.23459>; else goto <D.23460>;
        <D.23459>:
        D.23461 = stack_slot_is_boxed_value (value);
        if (D.23461 == 0) goto <D.23462>; else goto <D.23463>;
        <D.23462>:
        D.23297 = ctx->verifiable;
        if (D.23297 != 0) goto <D.23464>; else goto <D.23466>;
        <D.23466>:
        D.23299 = ctx->level;
        D.23300 = D.23299 & 128;
        if (D.23300 != 0) goto <D.23464>; else goto <D.23465>;
        <D.23464>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.23301 = ctx->ip_offset;
          D.23467 = monoeg_g_strdup_printf ("Cannot use the call opcode with a non-final virtual method on an object different than the \'this\' pointer at 0x%04x", D.23301);
          vinfo->info.message = D.23467;
          vinfo->exception_type = 4;
          D.23303 = ctx->list;
          D.23468 = monoeg_g_slist_prepend (D.23303, vinfo);
          ctx->list = D.23468;
        }
        ctx->verifiable = 0;
        D.23299 = ctx->level;
        D.23305 = D.23299 & 16;
        if (D.23305 != 0) goto <D.23469>; else goto <D.23470>;
        <D.23469>:
        ctx->valid = 0;
        <D.23470>:
        <D.23465>:
        <D.23463>:
        <D.23460>:
        <D.23458>:
        <D.23455>:
        if (constrained != 0) goto <D.23473>; else goto <D.23471>;
        <D.23473>:
        if (virtual != 0) goto <D.23474>; else goto <D.23471>;
        <D.23474>:
        D.23475 = stack_slot_is_managed_pointer (value);
        if (D.23475 == 0) goto <D.23476>; else goto <D.23477>;
        <D.23476>:
        D.23297 = ctx->verifiable;
        if (D.23297 != 0) goto <D.23478>; else goto <D.23480>;
        <D.23480>:
        D.23299 = ctx->level;
        D.23300 = D.23299 & 128;
        if (D.23300 != 0) goto <D.23478>; else goto <D.23479>;
        <D.23478>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.23301 = ctx->ip_offset;
          D.23481 = monoeg_g_strdup_printf ("Object is not a managed pointer for a constrained call at 0x%04x", D.23301);
          vinfo->info.message = D.23481;
          vinfo->exception_type = 4;
          D.23303 = ctx->list;
          D.23482 = monoeg_g_slist_prepend (D.23303, vinfo);
          ctx->list = D.23482;
        }
        ctx->verifiable = 0;
        D.23299 = ctx->level;
        D.23305 = D.23299 & 16;
        if (D.23305 != 0) goto <D.23483>; else goto <D.23484>;
        <D.23483>:
        ctx->valid = 0;
        <D.23484>:
        <D.23479>:
        <D.23477>:
        D.23485 = value->type;
        D.23486 = mono_type_get_type_byval (D.23485);
        D.23487 = ctx->constrained_type;
        D.23488 = mono_metadata_type_equal_full (D.23486, D.23487, 1);
        if (D.23488 == 0) goto <D.23489>; else goto <D.23490>;
        <D.23489>:
        D.23297 = ctx->verifiable;
        if (D.23297 != 0) goto <D.23491>; else goto <D.23493>;
        <D.23493>:
        D.23299 = ctx->level;
        D.23300 = D.23299 & 128;
        if (D.23300 != 0) goto <D.23491>; else goto <D.23492>;
        <D.23491>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.23301 = ctx->ip_offset;
          D.23494 = monoeg_g_strdup_printf ("Object not compatible with constrained type at 0x%04x", D.23301);
          vinfo->info.message = D.23494;
          vinfo->exception_type = 4;
          D.23303 = ctx->list;
          D.23495 = monoeg_g_slist_prepend (D.23303, vinfo);
          ctx->list = D.23495;
        }
        ctx->verifiable = 0;
        D.23299 = ctx->level;
        D.23305 = D.23299 & 16;
        if (D.23305 != 0) goto <D.23496>; else goto <D.23497>;
        <D.23496>:
        ctx->valid = 0;
        <D.23497>:
        <D.23492>:
        <D.23490>:
        D.23452 = copy.stype;
        D.23498 = D.23452 | 4096;
        copy.stype = D.23498;
        goto <D.23472>;
        <D.23471>:
        D.23499 = stack_slot_is_managed_pointer (value);
        if (D.23499 != 0) goto <D.23500>; else goto <D.23501>;
        <D.23500>:
        D.23485 = value->type;
        D.23502 = mono_class_from_mono_type (D.23485);
        D.23503 = BIT_FIELD_REF <*D.23502, 64, 256>;
        D.23504 = D.23503 & 8;
        if (D.23504 == 0) goto <D.23505>; else goto <D.23506>;
        <D.23505>:
        D.23297 = ctx->verifiable;
        if (D.23297 != 0) goto <D.23507>; else goto <D.23509>;
        <D.23509>:
        D.23299 = ctx->level;
        D.23300 = D.23299 & 128;
        if (D.23300 != 0) goto <D.23507>; else goto <D.23508>;
        <D.23507>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.23301 = ctx->ip_offset;
          D.23510 = monoeg_g_strdup_printf ("Cannot call a reference type using a managed pointer to the this arg at 0x%04x", D.23301);
          vinfo->info.message = D.23510;
          vinfo->exception_type = 4;
          D.23303 = ctx->list;
          D.23511 = monoeg_g_slist_prepend (D.23303, vinfo);
          ctx->list = D.23511;
        }
        ctx->verifiable = 0;
        D.23299 = ctx->level;
        D.23305 = D.23299 & 16;
        if (D.23305 != 0) goto <D.23512>; else goto <D.23513>;
        <D.23512>:
        ctx->valid = 0;
        <D.23513>:
        <D.23508>:
        <D.23506>:
        <D.23501>:
        if (virtual == 0) goto <D.23514>; else goto <D.23515>;
        <D.23514>:
        D.23485 = value->type;
        D.23516 = mono_class_from_mono_type (D.23485);
        D.23517 = BIT_FIELD_REF <*D.23516, 64, 256>;
        D.23518 = D.23517 & 8;
        if (D.23518 != 0) goto <D.23519>; else goto <D.23520>;
        <D.23519>:
        D.23290 = method->klass;
        D.23291 = BIT_FIELD_REF <*D.23290, 64, 256>;
        D.23292 = D.23291 & 8;
        if (D.23292 == 0) goto <D.23521>; else goto <D.23522>;
        <D.23521>:
        D.23523 = stack_slot_is_boxed_value (value);
        if (D.23523 == 0) goto <D.23524>; else goto <D.23525>;
        <D.23524>:
        D.23297 = ctx->verifiable;
        if (D.23297 != 0) goto <D.23526>; else goto <D.23528>;
        <D.23528>:
        D.23299 = ctx->level;
        D.23300 = D.23299 & 128;
        if (D.23300 != 0) goto <D.23526>; else goto <D.23527>;
        <D.23526>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.23301 = ctx->ip_offset;
          D.23529 = monoeg_g_strdup_printf ("Cannot call a valuetype baseclass at 0x%04x", D.23301);
          vinfo->info.message = D.23529;
          vinfo->exception_type = 4;
          D.23303 = ctx->list;
          D.23530 = monoeg_g_slist_prepend (D.23303, vinfo);
          ctx->list = D.23530;
        }
        ctx->verifiable = 0;
        D.23299 = ctx->level;
        D.23305 = D.23299 & 16;
        if (D.23305 != 0) goto <D.23531>; else goto <D.23532>;
        <D.23531>:
        ctx->valid = 0;
        <D.23532>:
        <D.23527>:
        <D.23525>:
        <D.23522>:
        <D.23520>:
        <D.23515>:
        if (virtual != 0) goto <D.23533>; else goto <D.23534>;
        <D.23533>:
        D.23485 = value->type;
        D.23535 = mono_class_from_mono_type (D.23485);
        D.23536 = BIT_FIELD_REF <*D.23535, 64, 256>;
        D.23537 = D.23536 & 8;
        if (D.23537 != 0) goto <D.23538>; else goto <D.23539>;
        <D.23538>:
        D.23540 = stack_slot_is_boxed_value (value);
        if (D.23540 == 0) goto <D.23541>; else goto <D.23542>;
        <D.23541>:
        D.23297 = ctx->verifiable;
        if (D.23297 != 0) goto <D.23543>; else goto <D.23545>;
        <D.23545>:
        D.23299 = ctx->level;
        D.23300 = D.23299 & 128;
        if (D.23300 != 0) goto <D.23543>; else goto <D.23544>;
        <D.23543>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.23301 = ctx->ip_offset;
          D.23546 = monoeg_g_strdup_printf ("Cannot use a valuetype with callvirt at 0x%04x", D.23301);
          vinfo->info.message = D.23546;
          vinfo->exception_type = 4;
          D.23303 = ctx->list;
          D.23547 = monoeg_g_slist_prepend (D.23303, vinfo);
          ctx->list = D.23547;
        }
        ctx->verifiable = 0;
        D.23299 = ctx->level;
        D.23305 = D.23299 & 16;
        if (D.23305 != 0) goto <D.23548>; else goto <D.23549>;
        <D.23548>:
        ctx->valid = 0;
        <D.23549>:
        <D.23544>:
        <D.23542>:
        <D.23539>:
        <D.23534>:
        D.23290 = method->klass;
        D.23291 = BIT_FIELD_REF <*D.23290, 64, 256>;
        D.23292 = D.23291 & 8;
        if (D.23292 != 0) goto <D.23552>; else goto <D.23553>;
        <D.23552>:
        D.23554 = stack_slot_is_boxed_value (value);
        if (D.23554 != 0) goto <D.23550>; else goto <D.23555>;
        <D.23555>:
        D.23556 = stack_slot_is_managed_pointer (value);
        if (D.23556 == 0) goto <D.23550>; else goto <D.23551>;
        <D.23550>:
        D.23297 = ctx->verifiable;
        if (D.23297 != 0) goto <D.23557>; else goto <D.23559>;
        <D.23559>:
        D.23299 = ctx->level;
        D.23300 = D.23299 & 128;
        if (D.23300 != 0) goto <D.23557>; else goto <D.23558>;
        <D.23557>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.23301 = ctx->ip_offset;
          D.23560 = monoeg_g_strdup_printf ("Cannot use a boxed or literal valuetype to call a valuetype method at 0x%04x", D.23301);
          vinfo->info.message = D.23560;
          vinfo->exception_type = 4;
          D.23303 = ctx->list;
          D.23561 = monoeg_g_slist_prepend (D.23303, vinfo);
          ctx->list = D.23561;
        }
        ctx->verifiable = 0;
        D.23299 = ctx->level;
        D.23305 = D.23299 & 16;
        if (D.23305 != 0) goto <D.23562>; else goto <D.23563>;
        <D.23562>:
        ctx->valid = 0;
        <D.23563>:
        <D.23558>:
        <D.23551>:
        <D.23553>:
        <D.23472>:
        D.23564 = verify_stack_type_compatibility (ctx, type, &copy);
        if (D.23564 == 0) goto <D.23565>; else goto <D.23566>;
        <D.23565>:
        {
          char * expected;
          char * effective;
          char * method_name;

          expected = mono_type_full_name (type);
          effective = stack_slot_full_name (&copy);
          method_name = mono_method_full_name (method, 1);
          D.23297 = ctx->verifiable;
          if (D.23297 != 0) goto <D.23567>; else goto <D.23569>;
          <D.23569>:
          D.23299 = ctx->level;
          D.23300 = D.23299 & 128;
          if (D.23300 != 0) goto <D.23567>; else goto <D.23568>;
          <D.23567>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 8;
            D.23301 = ctx->ip_offset;
            D.23570 = monoeg_g_strdup_printf ("Incompatible this argument on stack with method signature expected \'%s\' but got \'%s\' for a call to \'%s\' at 0x%04x", expected, effective, method_name, D.23301);
            vinfo->info.message = D.23570;
            vinfo->exception_type = 4;
            D.23303 = ctx->list;
            D.23571 = monoeg_g_slist_prepend (D.23303, vinfo);
            ctx->list = D.23571;
          }
          ctx->verifiable = 0;
          D.23299 = ctx->level;
          D.23305 = D.23299 & 16;
          if (D.23305 != 0) goto <D.23572>; else goto <D.23573>;
          <D.23572>:
          ctx->valid = 0;
          <D.23573>:
          <D.23568>:
          monoeg_g_free (method_name);
          monoeg_g_free (effective);
          monoeg_g_free (expected);
        }
        <D.23566>:
        D.23299 = ctx->level;
        D.23574 = D.23299 & 64;
        if (D.23574 == 0) goto <D.23575>; else goto <D.23576>;
        <D.23575>:
        D.23411 = ctx->method;
        D.23485 = value->type;
        D.23577 = mono_class_from_mono_type (D.23485);
        D.23578 = mono_method_can_access_method_full (D.23411, method, D.23577);
        if (D.23578 == 0) goto <D.23579>; else goto <D.23580>;
        <D.23579>:
        {
          char * name;

          name = mono_method_full_name (method, 1);
          D.23297 = ctx->verifiable;
          if (D.23297 != 0) goto <D.23581>; else goto <D.23583>;
          <D.23583>:
          D.23299 = ctx->level;
          D.23300 = D.23299 & 128;
          if (D.23300 != 0) goto <D.23581>; else goto <D.23582>;
          <D.23581>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (24);
            vinfo->info.status = 8;
            D.23301 = ctx->ip_offset;
            D.23584 = monoeg_g_strdup_printf ("Method %s is not accessible at 0x%04x", name, D.23301);
            vinfo->info.message = D.23584;
            vinfo->exception_type = 9;
            D.23303 = ctx->list;
            D.23585 = monoeg_g_slist_prepend (D.23303, vinfo);
            ctx->list = D.23585;
          }
          ctx->verifiable = 0;
          D.23299 = ctx->level;
          D.23305 = D.23299 & 16;
          if (D.23305 != 0) goto <D.23586>; else goto <D.23587>;
          <D.23586>:
          ctx->valid = 0;
          <D.23587>:
          <D.23582>:
          monoeg_g_free (name);
        }
        <D.23580>:
        <D.23576>:
      }
    finally
      {
        copy = {CLOBBER};
      }
  }
  goto <D.23588>;
  <D.23402>:
  D.23299 = ctx->level;
  D.23574 = D.23299 & 64;
  if (D.23574 == 0) goto <D.23589>; else goto <D.23590>;
  <D.23589>:
  D.23411 = ctx->method;
  D.23591 = mono_method_can_access_method_full (D.23411, method, 0B);
  if (D.23591 == 0) goto <D.23592>; else goto <D.23593>;
  <D.23592>:
  {
    char * name;

    name = mono_method_full_name (method, 1);
    D.23297 = ctx->verifiable;
    if (D.23297 != 0) goto <D.23594>; else goto <D.23596>;
    <D.23596>:
    D.23299 = ctx->level;
    D.23300 = D.23299 & 128;
    if (D.23300 != 0) goto <D.23594>; else goto <D.23595>;
    <D.23594>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.23301 = ctx->ip_offset;
      D.23597 = monoeg_g_strdup_printf ("Method %s is not accessible at 0x%04x", name, D.23301);
      vinfo->info.message = D.23597;
      vinfo->exception_type = 9;
      D.23303 = ctx->list;
      D.23598 = monoeg_g_slist_prepend (D.23303, vinfo);
      ctx->list = D.23598;
    }
    ctx->verifiable = 0;
    D.23299 = ctx->level;
    D.23305 = D.23299 & 16;
    if (D.23305 != 0) goto <D.23599>; else goto <D.23600>;
    <D.23599>:
    ctx->valid = 0;
    <D.23600>:
    <D.23595>:
    monoeg_g_free (name);
  }
  <D.23593>:
  <D.23590>:
  <D.23588>:
  D.23601 = sig->ret;
  D.23602 = D.23601->type;
  if (D.23602 != 1) goto <D.23603>; else goto <D.23604>;
  <D.23603>:
  D.23601 = sig->ret;
  D.23605 = mono_type_is_valid_in_context (ctx, D.23601);
  if (D.23605 == 0) goto <D.23606>; else goto <D.23607>;
  <D.23606>:
  return;
  <D.23607>:
  D.23608 = check_overflow (ctx);
  if (D.23608 != 0) goto <D.23609>; else goto <D.23610>;
  <D.23609>:
  value = stack_push (ctx);
  D.23601 = sig->ret;
  set_stack_value (ctx, value, D.23601, 0);
  D.23279 = ctx->prefix_set;
  D.23611 = D.23279 & 16;
  if (D.23611 != 0) goto <D.23612>; else goto <D.23613>;
  <D.23612>:
  D.23290 = method->klass;
  D.23614 = D.23290->rank;
  if (D.23614 != 0) goto <D.23615>; else goto <D.23616>;
  <D.23615>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 7;
    if (__s2_len <= 3) goto <D.23618>; else goto <D.23619>;
    <D.23618>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = method->name;
      D.23620 = "Address";
      D.23621 = MEM[(const unsigned char *)D.23620];
      D.23622 = (int) D.23621;
      D.23623 = *__s2;
      D.23624 = (int) D.23623;
      __result = D.23622 - D.23624;
      {
        if (__s2_len != 0) goto <D.23625>; else goto <D.23626>;
        <D.23625>:
        if (__result == 0) goto <D.23627>; else goto <D.23628>;
        <D.23627>:
        D.23629 = &MEM[(void *)"Address" + 1B];
        D.23630 = *D.23629;
        D.23631 = (int) D.23630;
        D.23632 = __s2 + 1;
        D.23633 = *D.23632;
        D.23634 = (int) D.23633;
        __result = D.23631 - D.23634;
        if (__s2_len > 1) goto <D.23635>; else goto <D.23636>;
        <D.23635>:
        if (__result == 0) goto <D.23637>; else goto <D.23638>;
        <D.23637>:
        D.23639 = &MEM[(void *)"Address" + 2B];
        D.23640 = *D.23639;
        D.23641 = (int) D.23640;
        D.23642 = __s2 + 2;
        D.23643 = *D.23642;
        D.23644 = (int) D.23643;
        __result = D.23641 - D.23644;
        if (__s2_len > 2) goto <D.23645>; else goto <D.23646>;
        <D.23645>:
        if (__result == 0) goto <D.23647>; else goto <D.23648>;
        <D.23647>:
        D.23649 = &MEM[(void *)"Address" + 3B];
        D.23650 = *D.23649;
        D.23651 = (int) D.23650;
        D.23652 = __s2 + 3;
        D.23653 = *D.23652;
        D.23654 = (int) D.23653;
        __result = D.23651 - D.23654;
        <D.23648>:
        <D.23646>:
        <D.23638>:
        <D.23636>:
        <D.23628>:
        <D.23626>:
      }
      D.19384 = __result;
    }
    iftmp.63 = -D.19384;
    goto <D.23655>;
    <D.23619>:
    D.23352 = method->name;
    iftmp.63 = __builtin_strcmp (D.23352, "Address");
    <D.23655>:
    D.19385 = iftmp.63;
  }
  if (D.19385 == 0) goto <D.23656>; else goto <D.23657>;
  <D.23656>:
  D.23279 = ctx->prefix_set;
  D.23658 = D.23279 & 4294967279;
  ctx->prefix_set = D.23658;
  D.23439 = value->stype;
  D.23659 = D.23439 | 512;
  value->stype = D.23659;
  <D.23657>:
  <D.23616>:
  <D.23613>:
  <D.23610>:
  <D.23604>:
  D.23279 = ctx->prefix_set;
  D.23387 = D.23279 & 4;
  if (D.23387 != 0) goto <D.23660>; else goto <D.23661>;
  <D.23660>:
  D.23411 = ctx->method;
  D.23662 = mono_method_signature (D.23411);
  D.23663 = D.23662->ret;
  D.23601 = sig->ret;
  D.23664 = mono_delegate_ret_equal (D.23663, D.23601);
  if (D.23664 == 0) goto <D.23665>; else goto <D.23666>;
  <D.23665>:
  D.23297 = ctx->verifiable;
  if (D.23297 != 0) goto <D.23667>; else goto <D.23669>;
  <D.23669>:
  D.23299 = ctx->level;
  D.23300 = D.23299 & 128;
  if (D.23300 != 0) goto <D.23667>; else goto <D.23668>;
  <D.23667>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23301 = ctx->ip_offset;
    D.23670 = monoeg_g_strdup_printf ("Tail call with incompatible return type at 0x%04x", D.23301);
    vinfo->info.message = D.23670;
    vinfo->exception_type = 4;
    D.23303 = ctx->list;
    D.23671 = monoeg_g_slist_prepend (D.23303, vinfo);
    ctx->list = D.23671;
  }
  ctx->verifiable = 0;
  D.23299 = ctx->level;
  D.23305 = D.23299 & 16;
  if (D.23305 != 0) goto <D.23672>; else goto <D.23673>;
  <D.23672>:
  ctx->valid = 0;
  <D.23673>:
  <D.23668>:
  <D.23666>:
  D.23674 = ctx->header;
  D.23675 = D.23674->code;
  D.23301 = ctx->ip_offset;
  D.23676 = D.23301 + 5;
  D.23677 = (sizetype) D.23676;
  D.23678 = D.23675 + D.23677;
  D.23679 = *D.23678;
  if (D.23679 != 42) goto <D.23680>; else goto <D.23681>;
  <D.23680>:
  D.23297 = ctx->verifiable;
  if (D.23297 != 0) goto <D.23682>; else goto <D.23684>;
  <D.23684>:
  D.23299 = ctx->level;
  D.23300 = D.23299 & 128;
  if (D.23300 != 0) goto <D.23682>; else goto <D.23683>;
  <D.23682>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23301 = ctx->ip_offset;
    D.23685 = monoeg_g_strdup_printf ("Tail call not followed by ret at 0x%04x", D.23301);
    vinfo->info.message = D.23685;
    vinfo->exception_type = 4;
    D.23303 = ctx->list;
    D.23686 = monoeg_g_slist_prepend (D.23303, vinfo);
    ctx->list = D.23686;
  }
  ctx->verifiable = 0;
  D.23299 = ctx->level;
  D.23305 = D.23299 & 16;
  if (D.23305 != 0) goto <D.23687>; else goto <D.23688>;
  <D.23687>:
  ctx->valid = 0;
  <D.23688>:
  <D.23683>:
  <D.23681>:
  <D.23661>:
}


verifier_load_method (struct VerifyContext * ctx, int token, const char * opcode)
{
  struct MonoMethod * D.23690;
  long unsigned int D.23691;
  long unsigned int D.23692;
  unsigned int token.64;
  int D.23700;
  struct MonoImage * D.23703;
  unsigned int token.65;
  int D.23705;
  unsigned int D.23706;
  gchar * D.23707;
  struct GSList * D.23708;
  struct GSList * D.23709;
  struct MonoMethod * D.23710;
  unsigned int token.66;
  struct MonoGenericContext * D.23712;
  struct MonoLoaderError * D.23716;
  gchar * D.23717;
  struct GSList * D.23718;
  <unnamed type> D.23719;
  struct MonoMethod * method;

  D.23690 = ctx->method;
  D.23691 = BIT_FIELD_REF <*D.23690, 64, 256>;
  D.23692 = D.23691 & 124;
  if (D.23692 != 0) goto <D.23693>; else goto <D.23694>;
  <D.23693>:
  D.23690 = ctx->method;
  token.64 = (unsigned int) token;
  method = mono_method_get_wrapper_data (D.23690, token.64);
  goto <D.23696>;
  <D.23694>:
  D.23700 = token >> 24;
  if (D.23700 != 6) goto <D.23701>; else goto <D.23697>;
  <D.23701>:
  D.23700 = token >> 24;
  if (D.23700 != 10) goto <D.23702>; else goto <D.23697>;
  <D.23702>:
  D.23700 = token >> 24;
  if (D.23700 != 43) goto <D.23698>; else goto <D.23697>;
  <D.23697>:
  D.23703 = ctx->image;
  token.65 = (unsigned int) token;
  D.23705 = token_bounds_check (D.23703, token.65);
  if (D.23705 == 0) goto <D.23698>; else goto <D.23699>;
  <D.23698>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23706 = ctx->ip_offset;
    D.23707 = monoeg_g_strdup_printf ("Invalid method token 0x%08x for %s at 0x%04x", token, opcode, D.23706);
    vinfo->info.message = D.23707;
    vinfo->exception_type = 12;
    D.23708 = ctx->list;
    D.23709 = monoeg_g_slist_prepend (D.23708, vinfo);
    ctx->list = D.23709;
  }
  ctx->valid = 0;
  D.23710 = 0B;
  return D.23710;
  <D.23699>:
  D.23703 = ctx->image;
  token.66 = (unsigned int) token;
  D.23712 = ctx->generic_context;
  method = mono_get_method_full (D.23703, token.66, 0B, D.23712);
  <D.23696>:
  if (method == 0B) goto <D.23713>; else goto <D.23715>;
  <D.23715>:
  D.23716 = mono_loader_get_last_error ();
  if (D.23716 != 0B) goto <D.23713>; else goto <D.23714>;
  <D.23713>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23706 = ctx->ip_offset;
    D.23717 = monoeg_g_strdup_printf ("Cannot load method from token 0x%08x for %s at 0x%04x", token, opcode, D.23706);
    vinfo->info.message = D.23717;
    vinfo->exception_type = 12;
    D.23708 = ctx->list;
    D.23718 = monoeg_g_slist_prepend (D.23708, vinfo);
    ctx->list = D.23718;
  }
  ctx->valid = 0;
  mono_loader_clear_error ();
  D.23710 = 0B;
  return D.23710;
  <D.23714>:
  D.23719 = mono_method_is_valid_in_context (ctx, method);
  if (D.23719 == 2) goto <D.23720>; else goto <D.23721>;
  <D.23720>:
  D.23710 = 0B;
  return D.23710;
  <D.23721>:
  D.23710 = method;
  return D.23710;
}


token_bounds_check (struct MonoImage * image, guint32 token)
{
  long unsigned int D.23723;
  long unsigned int D.23724;
  gboolean D.23727;
  int iftmp.67;
  unsigned int D.23731;
  <unnamed-unsigned:24> D.23732;
  unsigned int D.23733;
  unsigned int D.23734;

  D.23723 = BIT_FIELD_REF <*image, 64, 192>;
  D.23724 = D.23723 & 34359738368;
  if (D.23724 != 0) goto <D.23725>; else goto <D.23726>;
  <D.23725>:
  D.23727 = mono_reflection_is_valid_dynamic_token (image, token);
  return D.23727;
  <D.23726>:
  D.23731 = token >> 24;
  D.23732 = image->tables[D.23731].rows;
  D.23733 = (unsigned int) D.23732;
  D.23734 = token & 16777215;
  if (D.23733 >= D.23734) goto <D.23735>; else goto <D.23729>;
  <D.23735>:
  D.23734 = token & 16777215;
  if (D.23734 != 0) goto <D.23736>; else goto <D.23729>;
  <D.23736>:
  iftmp.67 = 1;
  goto <D.23730>;
  <D.23729>:
  iftmp.67 = 0;
  <D.23730>:
  D.23727 = iftmp.67;
  return D.23727;
}


mono_method_is_valid_in_context (struct VerifyContext * ctx, struct MonoMethod * method)
{
  struct MonoClass * D.23738;
  struct MonoType * D.23739;
  int D.23740;
  verify_result_t D.23743;
  long unsigned int D.23744;
  long unsigned int D.23745;
  int D.23748;
  const char * D.23751;
  const char * D.23752;
  const char * D.23753;
  unsigned int D.23754;
  gchar * D.23755;
  struct GSList * D.23756;
  struct GSList * D.23757;
  int D.23758;
  int D.23763;
  int D.23765;
  int D.23766;
  gchar * D.23767;
  struct GSList * D.23768;
  int D.23769;

  D.23738 = method->klass;
  D.23739 = &D.23738->byval_arg;
  D.23740 = mono_type_is_valid_in_context (ctx, D.23739);
  if (D.23740 == 0) goto <D.23741>; else goto <D.23742>;
  <D.23741>:
  D.23743 = 2;
  return D.23743;
  <D.23742>:
  D.23744 = BIT_FIELD_REF <*method, 64, 256>;
  D.23745 = D.23744 & 4096;
  if (D.23745 == 0) goto <D.23746>; else goto <D.23747>;
  <D.23746>:
  D.23743 = 0;
  return D.23743;
  <D.23747>:
  D.23748 = mono_method_is_valid_generic_instantiation (ctx, method);
  if (D.23748 == 0) goto <D.23749>; else goto <D.23750>;
  <D.23749>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23738 = method->klass;
    D.23751 = D.23738->name_space;
    D.23738 = method->klass;
    D.23752 = D.23738->name;
    D.23753 = method->name;
    D.23754 = ctx->ip_offset;
    D.23755 = monoeg_g_strdup_printf ("Invalid generic method instantiation of method %s.%s::%s at 0x%04x", D.23751, D.23752, D.23753, D.23754);
    vinfo->info.message = D.23755;
    vinfo->exception_type = 4;
    D.23756 = ctx->list;
    D.23757 = monoeg_g_slist_prepend (D.23756, vinfo);
    ctx->list = D.23757;
  }
  ctx->valid = 0;
  D.23743 = 2;
  return D.23743;
  <D.23750>:
  D.23758 = mono_method_repect_method_constraints (ctx, method);
  if (D.23758 == 0) goto <D.23759>; else goto <D.23760>;
  <D.23759>:
  D.23763 = ctx->verifiable;
  if (D.23763 != 0) goto <D.23761>; else goto <D.23764>;
  <D.23764>:
  D.23765 = ctx->level;
  D.23766 = D.23765 & 128;
  if (D.23766 != 0) goto <D.23761>; else goto <D.23762>;
  <D.23761>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23738 = method->klass;
    D.23751 = D.23738->name_space;
    D.23738 = method->klass;
    D.23752 = D.23738->name;
    D.23753 = method->name;
    D.23754 = ctx->ip_offset;
    D.23767 = monoeg_g_strdup_printf ("Invalid generic method instantiation of method %s.%s::%s (generic args don\'t respect target\'s constraints) at 0x%04x", D.23751, D.23752, D.23753, D.23754);
    vinfo->info.message = D.23767;
    vinfo->exception_type = 4;
    D.23756 = ctx->list;
    D.23768 = monoeg_g_slist_prepend (D.23756, vinfo);
    ctx->list = D.23768;
  }
  ctx->verifiable = 0;
  D.23765 = ctx->level;
  D.23769 = D.23765 & 16;
  if (D.23769 != 0) goto <D.23770>; else goto <D.23771>;
  <D.23770>:
  ctx->valid = 0;
  <D.23771>:
  <D.23762>:
  D.23743 = 1;
  return D.23743;
  <D.23760>:
  D.23743 = 0;
  return D.23743;
}


mono_method_is_valid_generic_instantiation (struct VerifyContext * ctx, struct MonoMethod * method)
{
  struct MonoMethod * D.23773;
  gboolean D.23776;
  int D.23779;
  struct MonoGenericContext * D.23782;
  struct MonoMethodInflated * gmethod;
  struct MonoGenericInst * ginst;
  struct MonoGenericContainer * gc;

  gmethod = method;
  ginst = gmethod->context.method_inst;
  D.23773 = gmethod->declaring;
  gc = mono_method_get_generic_container (D.23773);
  if (gc == 0B) goto <D.23774>; else goto <D.23775>;
  <D.23774>:
  D.23776 = 1;
  return D.23776;
  <D.23775>:
  if (ctx != 0B) goto <D.23777>; else goto <D.23778>;
  <D.23777>:
  D.23779 = is_valid_generic_instantiation_in_context (ctx, ginst, 1);
  if (D.23779 == 0) goto <D.23780>; else goto <D.23781>;
  <D.23780>:
  D.23776 = 0;
  return D.23776;
  <D.23781>:
  <D.23778>:
  D.23782 = &gmethod->context;
  D.23776 = is_valid_generic_instantiation (gc, D.23782, ginst);
  return D.23776;
}


mono_method_repect_method_constraints (struct VerifyContext * ctx, struct MonoMethod * method)
{
  struct MonoMethod * D.23784;
  gboolean D.23785;
  int iftmp.68;
  struct MonoGenericContext * D.23791;
  int D.23792;
  struct MonoMethodInflated * gmethod;
  struct MonoGenericInst * ginst;
  struct MonoGenericContainer * gc;

  gmethod = method;
  ginst = gmethod->context.method_inst;
  D.23784 = gmethod->declaring;
  gc = mono_method_get_generic_container (D.23784);
  if (gc == 0B) goto <D.23787>; else goto <D.23790>;
  <D.23790>:
  D.23791 = &gmethod->context;
  D.23792 = generic_arguments_respect_constraints (ctx, gc, D.23791, ginst);
  if (D.23792 != 0) goto <D.23787>; else goto <D.23788>;
  <D.23787>:
  iftmp.68 = 1;
  goto <D.23789>;
  <D.23788>:
  iftmp.68 = 0;
  <D.23789>:
  D.23785 = iftmp.68;
  return D.23785;
}


do_static_branch (struct VerifyContext * ctx, int delta)
{
  unsigned int D.23794;
  unsigned int delta.69;
  unsigned int D.23796;
  int D.23800;
  gchar * D.23801;
  struct GSList * D.23802;
  struct GSList * D.23803;
  struct MonoMethodHeader * D.23804;
  unsigned int target.70;
  int D.23806;
  int D.23809;
  int D.23811;
  int D.23812;
  gchar * D.23813;
  struct GSList * D.23814;
  int D.23815;
  gchar * D.23818;
  struct GSList * D.23819;
  int target;

  D.23794 = ctx->ip_offset;
  delta.69 = (unsigned int) delta;
  D.23796 = D.23794 + delta.69;
  target = (int) D.23796;
  if (target < 0) goto <D.23797>; else goto <D.23799>;
  <D.23799>:
  D.23800 = ctx->code_size;
  if (D.23800 <= target) goto <D.23797>; else goto <D.23798>;
  <D.23797>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23794 = ctx->ip_offset;
    D.23801 = monoeg_g_strdup_printf ("branch target out of code at 0x%04x", D.23794);
    vinfo->info.message = D.23801;
    vinfo->exception_type = 3;
    D.23802 = ctx->list;
    D.23803 = monoeg_g_slist_prepend (D.23802, vinfo);
    ctx->list = D.23803;
  }
  ctx->valid = 0;
  return;
  <D.23798>:
  D.23804 = ctx->header;
  D.23794 = ctx->ip_offset;
  target.70 = (unsigned int) target;
  D.23806 = is_valid_branch_instruction (D.23804, D.23794, target.70);
  switch (D.23806) <default: <D.23820>, case 1: <D.19770>, case 2: <D.19773>>
  <D.19770>:
  D.23809 = ctx->verifiable;
  if (D.23809 != 0) goto <D.23807>; else goto <D.23810>;
  <D.23810>:
  D.23811 = ctx->level;
  D.23812 = D.23811 & 128;
  if (D.23812 != 0) goto <D.23807>; else goto <D.23808>;
  <D.23807>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23794 = ctx->ip_offset;
    D.23813 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.23794);
    vinfo->info.message = D.23813;
    vinfo->exception_type = 4;
    D.23802 = ctx->list;
    D.23814 = monoeg_g_slist_prepend (D.23802, vinfo);
    ctx->list = D.23814;
  }
  ctx->verifiable = 0;
  D.23811 = ctx->level;
  D.23815 = D.23811 & 16;
  if (D.23815 != 0) goto <D.23816>; else goto <D.23817>;
  <D.23816>:
  ctx->valid = 0;
  <D.23817>:
  <D.23808>:
  goto <D.19772>;
  <D.19773>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23794 = ctx->ip_offset;
    D.23818 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.23794);
    vinfo->info.message = D.23818;
    vinfo->exception_type = 3;
    D.23802 = ctx->list;
    D.23819 = monoeg_g_slist_prepend (D.23802, vinfo);
    ctx->list = D.23819;
  }
  ctx->valid = 0;
  goto <D.19772>;
  <D.23820>:
  <D.19772>:
  ctx->target = target;
}


is_valid_branch_instruction (struct MonoMethodHeader * header, guint offset, guint target)
{
  struct MonoExceptionClause * D.23822;
  long unsigned int D.23823;
  long unsigned int D.23824;
  unsigned int D.23828;
  unsigned int D.23830;
  unsigned int D.23832;
  unsigned int D.23833;
  int D.23838;
  unsigned int D.23839;
  int iftmp.71;
  unsigned int D.23846;
  unsigned int D.23847;
  _Bool D.23849;
  int iftmp.72;
  _Bool D.23855;
  _Bool D.23856;
  int iftmp.73;
  _Bool D.23864;
  int iftmp.74;
  _Bool D.23870;
  _Bool D.23871;
  int iftmp.75;
  unsigned int D.23878;
  _Bool D.23881;
  int iftmp.76;
  _Bool D.23888;
  _Bool D.23889;
  <unnamed-unsigned:15> D.23892;
  int D.23893;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.18732>;
  <D.18731>:
  D.23822 = header->clauses;
  D.23823 = (long unsigned int) i;
  D.23824 = D.23823 * 32;
  clause = D.23822 + D.23824;
  D.23828 = clause->flags;
  if (D.23828 == 2) goto <D.23827>; else goto <D.23829>;
  <D.23829>:
  D.23828 = clause->flags;
  if (D.23828 == 4) goto <D.23827>; else goto <D.23826>;
  <D.23827>:
  D.23830 = clause->handler_offset;
  if (D.23830 > offset) goto <D.23825>; else goto <D.23831>;
  <D.23831>:
  D.23830 = clause->handler_offset;
  D.23832 = clause->handler_len;
  D.23833 = D.23830 + D.23832;
  if (D.23833 <= offset) goto <D.23825>; else goto <D.23826>;
  <D.23825>:
  D.23830 = clause->handler_offset;
  if (D.23830 <= target) goto <D.23834>; else goto <D.23835>;
  <D.23834>:
  D.23830 = clause->handler_offset;
  D.23832 = clause->handler_len;
  D.23833 = D.23830 + D.23832;
  if (D.23833 > target) goto <D.23836>; else goto <D.23837>;
  <D.23836>:
  D.23838 = 2;
  return D.23838;
  <D.23837>:
  <D.23835>:
  <D.23826>:
  D.23839 = clause->try_offset;
  if (D.23839 != target) goto <D.23840>; else goto <D.23841>;
  <D.23840>:
  D.23839 = clause->try_offset;
  if (D.23839 <= offset) goto <D.23845>; else goto <D.23843>;
  <D.23845>:
  D.23839 = clause->try_offset;
  D.23846 = clause->try_len;
  D.23847 = D.23839 + D.23846;
  if (D.23847 > offset) goto <D.23848>; else goto <D.23843>;
  <D.23848>:
  iftmp.71 = 1;
  goto <D.23844>;
  <D.23843>:
  iftmp.71 = 0;
  <D.23844>:
  D.23849 = (_Bool) iftmp.71;
  D.23839 = clause->try_offset;
  if (D.23839 <= target) goto <D.23853>; else goto <D.23851>;
  <D.23853>:
  D.23839 = clause->try_offset;
  D.23846 = clause->try_len;
  D.23847 = D.23839 + D.23846;
  if (D.23847 > target) goto <D.23854>; else goto <D.23851>;
  <D.23854>:
  iftmp.72 = 1;
  goto <D.23852>;
  <D.23851>:
  iftmp.72 = 0;
  <D.23852>:
  D.23855 = (_Bool) iftmp.72;
  D.23856 = D.23849 ^ D.23855;
  if (D.23856 != 0) goto <D.23857>; else goto <D.23858>;
  <D.23857>:
  D.23838 = 1;
  return D.23838;
  <D.23858>:
  <D.23841>:
  D.23830 = clause->handler_offset;
  if (D.23830 <= offset) goto <D.23862>; else goto <D.23860>;
  <D.23862>:
  D.23830 = clause->handler_offset;
  D.23832 = clause->handler_len;
  D.23833 = D.23830 + D.23832;
  if (D.23833 > offset) goto <D.23863>; else goto <D.23860>;
  <D.23863>:
  iftmp.73 = 1;
  goto <D.23861>;
  <D.23860>:
  iftmp.73 = 0;
  <D.23861>:
  D.23864 = (_Bool) iftmp.73;
  D.23830 = clause->handler_offset;
  if (D.23830 <= target) goto <D.23868>; else goto <D.23866>;
  <D.23868>:
  D.23830 = clause->handler_offset;
  D.23832 = clause->handler_len;
  D.23833 = D.23830 + D.23832;
  if (D.23833 > target) goto <D.23869>; else goto <D.23866>;
  <D.23869>:
  iftmp.74 = 1;
  goto <D.23867>;
  <D.23866>:
  iftmp.74 = 0;
  <D.23867>:
  D.23870 = (_Bool) iftmp.74;
  D.23871 = D.23864 ^ D.23870;
  if (D.23871 != 0) goto <D.23872>; else goto <D.23873>;
  <D.23872>:
  D.23838 = 1;
  return D.23838;
  <D.23873>:
  D.23828 = clause->flags;
  if (D.23828 == 1) goto <D.23877>; else goto <D.23875>;
  <D.23877>:
  D.23878 = clause->data.filter_offset;
  if (D.23878 <= offset) goto <D.23879>; else goto <D.23875>;
  <D.23879>:
  D.23830 = clause->handler_offset;
  if (D.23830 > offset) goto <D.23880>; else goto <D.23875>;
  <D.23880>:
  iftmp.75 = 1;
  goto <D.23876>;
  <D.23875>:
  iftmp.75 = 0;
  <D.23876>:
  D.23881 = (_Bool) iftmp.75;
  D.23828 = clause->flags;
  if (D.23828 == 1) goto <D.23885>; else goto <D.23883>;
  <D.23885>:
  D.23878 = clause->data.filter_offset;
  if (D.23878 <= target) goto <D.23886>; else goto <D.23883>;
  <D.23886>:
  D.23830 = clause->handler_offset;
  if (D.23830 > target) goto <D.23887>; else goto <D.23883>;
  <D.23887>:
  iftmp.76 = 1;
  goto <D.23884>;
  <D.23883>:
  iftmp.76 = 0;
  <D.23884>:
  D.23888 = (_Bool) iftmp.76;
  D.23889 = D.23881 ^ D.23888;
  if (D.23889 != 0) goto <D.23890>; else goto <D.23891>;
  <D.23890>:
  D.23838 = 1;
  return D.23838;
  <D.23891>:
  i = i + 1;
  <D.18732>:
  D.23892 = header->num_clauses;
  D.23893 = (int) D.23892;
  if (D.23893 > i) goto <D.18731>; else goto <D.18733>;
  <D.18733>:
  D.23838 = 0;
  return D.23838;
}


do_boolean_branch_op (struct VerifyContext * ctx, int delta)
{
  unsigned int D.23895;
  unsigned int delta.77;
  unsigned int D.23897;
  int D.23901;
  gchar * D.23902;
  struct GSList * D.23903;
  struct GSList * D.23904;
  struct MonoMethodHeader * D.23905;
  unsigned int target.78;
  int D.23907;
  int D.23910;
  int D.23912;
  int D.23913;
  gchar * D.23914;
  struct GSList * D.23915;
  int D.23916;
  gchar * D.23919;
  struct GSList * D.23920;
  int D.23922;
  int D.23925;
  const char * D.23931;
  gchar * D.23932;
  struct GSList * D.23933;
  int target;
  struct ILStackDesc * top;

  D.23895 = ctx->ip_offset;
  delta.77 = (unsigned int) delta;
  D.23897 = D.23895 + delta.77;
  target = (int) D.23897;
  if (target < 0) goto <D.23898>; else goto <D.23900>;
  <D.23900>:
  D.23901 = ctx->code_size;
  if (D.23901 <= target) goto <D.23898>; else goto <D.23899>;
  <D.23898>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23895 = ctx->ip_offset;
    D.23902 = monoeg_g_strdup_printf ("Boolean branch target out of code at 0x%04x", D.23895);
    vinfo->info.message = D.23902;
    vinfo->exception_type = 3;
    D.23903 = ctx->list;
    D.23904 = monoeg_g_slist_prepend (D.23903, vinfo);
    ctx->list = D.23904;
  }
  ctx->valid = 0;
  return;
  <D.23899>:
  D.23905 = ctx->header;
  D.23895 = ctx->ip_offset;
  target.78 = (unsigned int) target;
  D.23907 = is_valid_branch_instruction (D.23905, D.23895, target.78);
  switch (D.23907) <default: <D.23921>, case 1: <D.19281>, case 2: <D.19284>>
  <D.19281>:
  D.23910 = ctx->verifiable;
  if (D.23910 != 0) goto <D.23908>; else goto <D.23911>;
  <D.23911>:
  D.23912 = ctx->level;
  D.23913 = D.23912 & 128;
  if (D.23913 != 0) goto <D.23908>; else goto <D.23909>;
  <D.23908>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23895 = ctx->ip_offset;
    D.23914 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.23895);
    vinfo->info.message = D.23914;
    vinfo->exception_type = 4;
    D.23903 = ctx->list;
    D.23915 = monoeg_g_slist_prepend (D.23903, vinfo);
    ctx->list = D.23915;
  }
  ctx->verifiable = 0;
  D.23912 = ctx->level;
  D.23916 = D.23912 & 16;
  if (D.23916 != 0) goto <D.23917>; else goto <D.23918>;
  <D.23917>:
  ctx->valid = 0;
  <D.23918>:
  <D.23909>:
  goto <D.19283>;
  <D.19284>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.23895 = ctx->ip_offset;
    D.23919 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.23895);
    vinfo->info.message = D.23919;
    vinfo->exception_type = 3;
    D.23903 = ctx->list;
    D.23920 = monoeg_g_slist_prepend (D.23903, vinfo);
    ctx->list = D.23920;
  }
  ctx->valid = 0;
  return;
  <D.23921>:
  <D.19283>:
  ctx->target = target;
  D.23922 = check_underflow (ctx, 1);
  if (D.23922 == 0) goto <D.23923>; else goto <D.23924>;
  <D.23923>:
  return;
  <D.23924>:
  top = stack_pop (ctx);
  D.23925 = is_valid_bool_arg (top);
  if (D.23925 == 0) goto <D.23926>; else goto <D.23927>;
  <D.23926>:
  D.23910 = ctx->verifiable;
  if (D.23910 != 0) goto <D.23928>; else goto <D.23930>;
  <D.23930>:
  D.23912 = ctx->level;
  D.23913 = D.23912 & 128;
  if (D.23913 != 0) goto <D.23928>; else goto <D.23929>;
  <D.23928>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23931 = stack_slot_get_name (top);
    D.23895 = ctx->ip_offset;
    D.23932 = monoeg_g_strdup_printf ("Argument type %s not valid for brtrue/brfalse at 0x%04x", D.23931, D.23895);
    vinfo->info.message = D.23932;
    vinfo->exception_type = 4;
    D.23903 = ctx->list;
    D.23933 = monoeg_g_slist_prepend (D.23903, vinfo);
    ctx->list = D.23933;
  }
  ctx->verifiable = 0;
  D.23912 = ctx->level;
  D.23916 = D.23912 & 16;
  if (D.23916 != 0) goto <D.23934>; else goto <D.23935>;
  <D.23934>:
  ctx->valid = 0;
  <D.23935>:
  <D.23929>:
  <D.23927>:
  check_unmanaged_pointer (ctx, top);
}


is_valid_bool_arg (struct ILStackDesc * arg)
{
  int D.23939;
  int D.23941;
  int D.23943;
  gboolean D.23944;
  int D.23945;
  struct MonoType * D.23946;
  _Bool D.23947;
  long int D.23948;
  long int D.23949;
  unsigned char D.23952;
  int D.23953;
  struct MonoGenericClass * D.23954;
  struct MonoClass * D.23955;
  long unsigned int D.23956;
  long unsigned int D.23957;
  _Bool D.23958;

  D.23939 = stack_slot_is_managed_pointer (arg);
  if (D.23939 != 0) goto <D.23937>; else goto <D.23940>;
  <D.23940>:
  D.23941 = stack_slot_is_boxed_value (arg);
  if (D.23941 != 0) goto <D.23937>; else goto <D.23942>;
  <D.23942>:
  D.23943 = stack_slot_is_null_literal (arg);
  if (D.23943 != 0) goto <D.23937>; else goto <D.23938>;
  <D.23937>:
  D.23944 = 1;
  return D.23944;
  <D.23938>:
  D.23945 = stack_slot_get_underlying_type (arg);
  switch (D.23945) <default: <D.18807>, case 1: <D.18794>, case 2: <D.18795>, case 3: <D.18796>, case 5: <D.18797>, case 6: <D.18798>>
  <D.18794>:
  <D.18795>:
  <D.18796>:
  <D.18797>:
  D.23944 = 1;
  return D.23944;
  <D.18798>:
  D.23946 = arg->type;
  D.23947 = D.23946 == 0B;
  D.23948 = (long int) D.23947;
  D.23949 = __builtin_expect (D.23948, 0);
  if (D.23949 != 0) goto <D.23950>; else goto <D.23951>;
  <D.23950>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1433, "arg->type");
  <D.23951>:
  D.23946 = arg->type;
  D.23952 = D.23946->type;
  D.23953 = (int) D.23952;
  switch (D.23953) <default: <D.23959>, case 14: <D.18800>, case 15: <D.18805>, case 18: <D.18799>, case 20: <D.18803>, case 21: <D.18806>, case 27: <D.18804>, case 28: <D.18801>, case 29: <D.18802>>
  <D.18799>:
  <D.18800>:
  <D.18801>:
  <D.18802>:
  <D.18803>:
  <D.18804>:
  <D.18805>:
  D.23944 = 1;
  return D.23944;
  <D.18806>:
  D.23946 = arg->type;
  D.23954 = D.23946->data.generic_class;
  D.23955 = D.23954->container_class;
  D.23956 = BIT_FIELD_REF <*D.23955, 64, 256>;
  D.23957 = D.23956 & 8;
  D.23958 = D.23957 == 0;
  D.23944 = (gboolean) D.23958;
  return D.23944;
  <D.23959>:
  <D.18807>:
  D.23944 = 0;
  return D.23944;
}


check_unmanaged_pointer (struct VerifyContext * ctx, struct ILStackDesc * value)
{
  int D.23961;
  int D.23966;
  int D.23968;
  int D.23969;
  unsigned int D.23970;
  gchar * D.23971;
  struct GSList * D.23972;
  struct GSList * D.23973;
  int D.23974;
  gboolean D.23977;

  D.23961 = stack_slot_get_type (value);
  if (D.23961 == 5) goto <D.23962>; else goto <D.23963>;
  <D.23962>:
  D.23966 = ctx->verifiable;
  if (D.23966 != 0) goto <D.23964>; else goto <D.23967>;
  <D.23967>:
  D.23968 = ctx->level;
  D.23969 = D.23968 & 128;
  if (D.23969 != 0) goto <D.23964>; else goto <D.23965>;
  <D.23964>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23970 = ctx->ip_offset;
    D.23971 = monoeg_g_strdup_printf ("Unmanaged pointer is not a verifiable type at 0x%04x", D.23970);
    vinfo->info.message = D.23971;
    vinfo->exception_type = 4;
    D.23972 = ctx->list;
    D.23973 = monoeg_g_slist_prepend (D.23972, vinfo);
    ctx->list = D.23973;
  }
  ctx->verifiable = 0;
  D.23968 = ctx->level;
  D.23974 = D.23968 & 16;
  if (D.23974 != 0) goto <D.23975>; else goto <D.23976>;
  <D.23975>:
  ctx->valid = 0;
  <D.23976>:
  <D.23965>:
  D.23977 = 0;
  return D.23977;
  <D.23963>:
  D.23977 = 1;
  return D.23977;
}


do_switch (struct VerifyContext * ctx, int count, const unsigned char * data)
{
  unsigned int D.23979;
  int D.23980;
  unsigned int D.23981;
  unsigned int D.23982;
  unsigned int D.23983;
  int D.23984;
  int D.23987;
  int D.23990;
  int D.23995;
  int D.23997;
  int D.23998;
  gchar * D.23999;
  struct GSList * D.24000;
  struct GSList * D.24001;
  int D.24002;
  int D.24005;
  sizetype D.24006;
  const guint32 * D.24007;
  unsigned int D.24008;
  unsigned int base.79;
  unsigned int D.24010;
  int D.24014;
  gchar * D.24015;
  struct GSList * D.24016;
  struct MonoMethodHeader * D.24017;
  unsigned int target.80;
  int D.24019;
  gchar * D.24023;
  struct GSList * D.24024;
  gchar * D.24027;
  struct GSList * D.24028;
  struct ILCodeDesc * D.24030;
  struct ILCodeDesc * D.24031;
  long unsigned int D.24032;
  long unsigned int D.24033;
  struct ILCodeDesc * D.24034;
  int i;
  int base;
  struct ILStackDesc * value;

  D.23979 = ctx->ip_offset;
  D.23980 = count * 4;
  D.23981 = (unsigned int) D.23980;
  D.23982 = D.23979 + D.23981;
  D.23983 = D.23982 + 5;
  base = (int) D.23983;
  D.23984 = check_underflow (ctx, 1);
  if (D.23984 == 0) goto <D.23985>; else goto <D.23986>;
  <D.23985>:
  return;
  <D.23986>:
  value = stack_pop (ctx);
  D.23987 = stack_slot_get_type (value);
  if (D.23987 != 1) goto <D.23988>; else goto <D.23989>;
  <D.23988>:
  D.23990 = stack_slot_get_type (value);
  if (D.23990 != 3) goto <D.23991>; else goto <D.23992>;
  <D.23991>:
  D.23995 = ctx->verifiable;
  if (D.23995 != 0) goto <D.23993>; else goto <D.23996>;
  <D.23996>:
  D.23997 = ctx->level;
  D.23998 = D.23997 & 128;
  if (D.23998 != 0) goto <D.23993>; else goto <D.23994>;
  <D.23993>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.23979 = ctx->ip_offset;
    D.23999 = monoeg_g_strdup_printf ("Invalid argument to switch at 0x%04x", D.23979);
    vinfo->info.message = D.23999;
    vinfo->exception_type = 4;
    D.24000 = ctx->list;
    D.24001 = monoeg_g_slist_prepend (D.24000, vinfo);
    ctx->list = D.24001;
  }
  ctx->verifiable = 0;
  D.23997 = ctx->level;
  D.24002 = D.23997 & 16;
  if (D.24002 != 0) goto <D.24003>; else goto <D.24004>;
  <D.24003>:
  ctx->valid = 0;
  <D.24004>:
  <D.23994>:
  <D.23992>:
  <D.23989>:
  i = 0;
  goto <D.19792>;
  <D.19791>:
  {
    int target;

    D.24005 = i * 4;
    D.24006 = (sizetype) D.24005;
    D.24007 = data + D.24006;
    D.24008 = *D.24007;
    base.79 = (unsigned int) base;
    D.24010 = D.24008 + base.79;
    target = (int) D.24010;
    if (target < 0) goto <D.24011>; else goto <D.24013>;
    <D.24013>:
    D.24014 = ctx->code_size;
    if (D.24014 <= target) goto <D.24011>; else goto <D.24012>;
    <D.24011>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.23979 = ctx->ip_offset;
      D.24015 = monoeg_g_strdup_printf ("Switch target %x out of code at 0x%04x", i, D.23979);
      vinfo->info.message = D.24015;
      vinfo->exception_type = 3;
      D.24000 = ctx->list;
      D.24016 = monoeg_g_slist_prepend (D.24000, vinfo);
      ctx->list = D.24016;
    }
    ctx->valid = 0;
    return;
    <D.24012>:
    D.24017 = ctx->header;
    D.23979 = ctx->ip_offset;
    target.80 = (unsigned int) target;
    D.24019 = is_valid_branch_instruction (D.24017, D.23979, target.80);
    switch (D.24019) <default: <D.24029>, case 1: <D.19786>, case 2: <D.19789>>
    <D.19786>:
    D.23995 = ctx->verifiable;
    if (D.23995 != 0) goto <D.24020>; else goto <D.24022>;
    <D.24022>:
    D.23997 = ctx->level;
    D.23998 = D.23997 & 128;
    if (D.23998 != 0) goto <D.24020>; else goto <D.24021>;
    <D.24020>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.23979 = ctx->ip_offset;
      D.24023 = monoeg_g_strdup_printf ("Switch target %x escapes out of exception block at 0x%04x", i, D.23979);
      vinfo->info.message = D.24023;
      vinfo->exception_type = 4;
      D.24000 = ctx->list;
      D.24024 = monoeg_g_slist_prepend (D.24000, vinfo);
      ctx->list = D.24024;
    }
    ctx->verifiable = 0;
    D.23997 = ctx->level;
    D.24002 = D.23997 & 16;
    if (D.24002 != 0) goto <D.24025>; else goto <D.24026>;
    <D.24025>:
    ctx->valid = 0;
    <D.24026>:
    <D.24021>:
    goto <D.19788>;
    <D.19789>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.23979 = ctx->ip_offset;
      D.24027 = monoeg_g_strdup_printf ("Switch target %x escapes out of exception block at 0x%04x", i, D.23979);
      vinfo->info.message = D.24027;
      vinfo->exception_type = 3;
      D.24000 = ctx->list;
      D.24028 = monoeg_g_slist_prepend (D.24000, vinfo);
      ctx->list = D.24028;
    }
    ctx->valid = 0;
    return;
    <D.24029>:
    <D.19788>:
    D.24030 = &ctx->eval;
    D.24031 = ctx->code;
    D.24032 = (long unsigned int) target;
    D.24033 = D.24032 * 16;
    D.24034 = D.24031 + D.24033;
    merge_stacks (ctx, D.24030, D.24034, 0, 1);
  }
  i = i + 1;
  <D.19792>:
  if (i < count) goto <D.19791>; else goto <D.19793>;
  <D.19793>:
}


do_load_indirect (struct VerifyContext * ctx, int opcode)
{
  unsigned int D.24036;
  unsigned int D.24037;
  int D.24038;
  int D.24041;
  int D.24046;
  int D.24048;
  int D.24049;
  unsigned int D.24050;
  gchar * D.24051;
  struct GSList * D.24052;
  struct GSList * D.24053;
  int D.24054;
  struct ILStackDesc * D.24057;
  struct MonoType * D.24058;
  int D.24063;
  struct MonoType * D.24065;
  struct MonoClass * D.24066;
  long unsigned int D.24067;
  long unsigned int D.24068;
  gchar * D.24072;
  struct GSList * D.24073;
  struct ILStackDesc * D.24076;
  struct MonoType * D.24077;
  struct MonoType * D.24079;
  struct MonoType * D.24080;
  int D.24081;
  gchar * D.24087;
  struct GSList * D.24088;
  struct ILStackDesc * D.24091;
  struct MonoType * D.24092;
  struct ILStackDesc * value;

  D.24036 = ctx->prefix_set;
  D.24037 = D.24036 & 4294967292;
  ctx->prefix_set = D.24037;
  D.24038 = check_underflow (ctx, 1);
  if (D.24038 == 0) goto <D.24039>; else goto <D.24040>;
  <D.24039>:
  return;
  <D.24040>:
  value = stack_pop (ctx);
  D.24041 = stack_slot_is_managed_pointer (value);
  if (D.24041 == 0) goto <D.24042>; else goto <D.24043>;
  <D.24042>:
  D.24046 = ctx->verifiable;
  if (D.24046 != 0) goto <D.24044>; else goto <D.24047>;
  <D.24047>:
  D.24048 = ctx->level;
  D.24049 = D.24048 & 128;
  if (D.24049 != 0) goto <D.24044>; else goto <D.24045>;
  <D.24044>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24050 = ctx->ip_offset;
    D.24051 = monoeg_g_strdup_printf ("Load indirect not using a manager pointer at 0x%04x", D.24050);
    vinfo->info.message = D.24051;
    vinfo->exception_type = 4;
    D.24052 = ctx->list;
    D.24053 = monoeg_g_slist_prepend (D.24052, vinfo);
    ctx->list = D.24053;
  }
  ctx->verifiable = 0;
  D.24048 = ctx->level;
  D.24054 = D.24048 & 16;
  if (D.24054 != 0) goto <D.24055>; else goto <D.24056>;
  <D.24055>:
  ctx->valid = 0;
  <D.24056>:
  <D.24045>:
  D.24057 = stack_push (ctx);
  D.24058 = mono_type_from_opcode (opcode);
  set_stack_value (ctx, D.24057, D.24058, 0);
  return;
  <D.24043>:
  if (opcode == 80) goto <D.24059>; else goto <D.24060>;
  <D.24059>:
  D.24063 = stack_slot_get_underlying_type (value);
  if (D.24063 != 6) goto <D.24061>; else goto <D.24064>;
  <D.24064>:
  D.24065 = value->type;
  D.24066 = mono_class_from_mono_type (D.24065);
  D.24067 = BIT_FIELD_REF <*D.24066, 64, 256>;
  D.24068 = D.24067 & 8;
  if (D.24068 != 0) goto <D.24061>; else goto <D.24062>;
  <D.24061>:
  D.24046 = ctx->verifiable;
  if (D.24046 != 0) goto <D.24069>; else goto <D.24071>;
  <D.24071>:
  D.24048 = ctx->level;
  D.24049 = D.24048 & 128;
  if (D.24049 != 0) goto <D.24069>; else goto <D.24070>;
  <D.24069>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24050 = ctx->ip_offset;
    D.24072 = monoeg_g_strdup_printf ("Invalid type at stack for ldind_ref expected object byref operation at 0x%04x", D.24050);
    vinfo->info.message = D.24072;
    vinfo->exception_type = 4;
    D.24052 = ctx->list;
    D.24073 = monoeg_g_slist_prepend (D.24052, vinfo);
    ctx->list = D.24073;
  }
  ctx->verifiable = 0;
  D.24048 = ctx->level;
  D.24054 = D.24048 & 16;
  if (D.24054 != 0) goto <D.24074>; else goto <D.24075>;
  <D.24074>:
  ctx->valid = 0;
  <D.24075>:
  <D.24070>:
  <D.24062>:
  D.24076 = stack_push (ctx);
  D.24065 = value->type;
  D.24077 = mono_type_get_type_byval (D.24065);
  set_stack_value (ctx, D.24076, D.24077, 0);
  goto <D.24078>;
  <D.24060>:
  D.24079 = mono_type_from_opcode (opcode);
  D.24065 = value->type;
  D.24080 = mono_type_get_type_byval (D.24065);
  D.24081 = verify_type_compatibility_full (ctx, D.24079, D.24080, 1);
  if (D.24081 == 0) goto <D.24082>; else goto <D.24083>;
  <D.24082>:
  D.24046 = ctx->verifiable;
  if (D.24046 != 0) goto <D.24084>; else goto <D.24086>;
  <D.24086>:
  D.24048 = ctx->level;
  D.24049 = D.24048 & 128;
  if (D.24049 != 0) goto <D.24084>; else goto <D.24085>;
  <D.24084>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24050 = ctx->ip_offset;
    D.24087 = monoeg_g_strdup_printf ("Invalid type at stack for ldind 0x%x operation at 0x%04x", opcode, D.24050);
    vinfo->info.message = D.24087;
    vinfo->exception_type = 4;
    D.24052 = ctx->list;
    D.24088 = monoeg_g_slist_prepend (D.24052, vinfo);
    ctx->list = D.24088;
  }
  ctx->verifiable = 0;
  D.24048 = ctx->level;
  D.24054 = D.24048 & 16;
  if (D.24054 != 0) goto <D.24089>; else goto <D.24090>;
  <D.24089>:
  ctx->valid = 0;
  <D.24090>:
  <D.24085>:
  <D.24083>:
  D.24091 = stack_push (ctx);
  D.24092 = mono_type_from_opcode (opcode);
  set_stack_value (ctx, D.24091, D.24092, 0);
  <D.24078>:
}


mono_type_from_opcode (int opcode)
{
  struct MonoType * D.24094;
  struct MonoClass * D.24095;
  struct MonoClass * D.24096;
  struct MonoClass * D.24097;
  struct MonoClass * D.24098;
  struct MonoClass * D.24099;
  struct MonoClass * D.24100;
  struct MonoClass * D.24101;
  struct MonoClass * D.24102;

  switch (opcode) <default: <D.19662>, case 70: <D.19624>, case 71: <D.19625>, case 72: <D.19630>, case 73: <D.19631>, case 74: <D.19636>, case 75: <D.19637>, case 76: <D.19642>, case 77: <D.19654>, case 78: <D.19646>, case 79: <D.19650>, case 80: <D.19658>, case 81: <D.19659>, case 82: <D.19626>, case 83: <D.19632>, case 84: <D.19638>, case 85: <D.19643>, case 86: <D.19647>, case 87: <D.19651>, case 144: <D.19627>, case 145: <D.19628>, case 146: <D.19633>, case 147: <D.19634>, case 148: <D.19639>, case 149: <D.19640>, case 150: <D.19644>, case 151: <D.19656>, case 152: <D.19648>, case 153: <D.19652>, case 154: <D.19660>, case 155: <D.19657>, case 156: <D.19629>, case 157: <D.19635>, case 158: <D.19641>, case 159: <D.19645>, case 160: <D.19649>, case 161: <D.19653>, case 162: <D.19661>, case 223: <D.19655>>
  <D.19624>:
  <D.19625>:
  <D.19626>:
  <D.19627>:
  <D.19628>:
  <D.19629>:
  D.24095 = mono_defaults.sbyte_class;
  D.24094 = &D.24095->byval_arg;
  return D.24094;
  <D.19630>:
  <D.19631>:
  <D.19632>:
  <D.19633>:
  <D.19634>:
  <D.19635>:
  D.24096 = mono_defaults.int16_class;
  D.24094 = &D.24096->byval_arg;
  return D.24094;
  <D.19636>:
  <D.19637>:
  <D.19638>:
  <D.19639>:
  <D.19640>:
  <D.19641>:
  D.24097 = mono_defaults.int32_class;
  D.24094 = &D.24097->byval_arg;
  return D.24094;
  <D.19642>:
  <D.19643>:
  <D.19644>:
  <D.19645>:
  D.24098 = mono_defaults.int64_class;
  D.24094 = &D.24098->byval_arg;
  return D.24094;
  <D.19646>:
  <D.19647>:
  <D.19648>:
  <D.19649>:
  D.24099 = mono_defaults.single_class;
  D.24094 = &D.24099->byval_arg;
  return D.24094;
  <D.19650>:
  <D.19651>:
  <D.19652>:
  <D.19653>:
  D.24100 = mono_defaults.double_class;
  D.24094 = &D.24100->byval_arg;
  return D.24094;
  <D.19654>:
  <D.19655>:
  <D.19656>:
  <D.19657>:
  D.24101 = mono_defaults.int_class;
  D.24094 = &D.24101->byval_arg;
  return D.24094;
  <D.19658>:
  <D.19659>:
  <D.19660>:
  <D.19661>:
  D.24102 = mono_defaults.object_class;
  D.24094 = &D.24102->byval_arg;
  return D.24094;
  <D.19662>:
  monoeg_g_log (0B, 4, "unknown opcode %02x in mono_type_from_opcode ", opcode);
  <D.19663>:
  goto <D.19663>;
  D.24094 = 0B;
  return D.24094;
}


do_store_indirect (struct VerifyContext * ctx, int opcode)
{
  unsigned int D.24104;
  unsigned int D.24105;
  int D.24106;
  int D.24109;
  int D.24112;
  int D.24117;
  int D.24119;
  int D.24120;
  unsigned int D.24121;
  gchar * D.24122;
  struct GSList * D.24123;
  struct GSList * D.24124;
  int D.24125;
  int D.24128;
  gchar * D.24134;
  struct GSList * D.24135;
  struct MonoType * D.24138;
  struct MonoType * D.24139;
  struct MonoType * D.24140;
  int D.24141;
  gchar * D.24147;
  struct GSList * D.24148;
  struct MonoType * D.24151;
  int D.24152;
  gchar * D.24158;
  struct GSList * D.24159;
  struct ILStackDesc * addr;
  struct ILStackDesc * val;

  D.24104 = ctx->prefix_set;
  D.24105 = D.24104 & 4294967292;
  ctx->prefix_set = D.24105;
  D.24106 = check_underflow (ctx, 2);
  if (D.24106 == 0) goto <D.24107>; else goto <D.24108>;
  <D.24107>:
  return;
  <D.24108>:
  val = stack_pop (ctx);
  addr = stack_pop (ctx);
  check_unmanaged_pointer (ctx, addr);
  D.24109 = stack_slot_is_managed_pointer (addr);
  if (D.24109 == 0) goto <D.24110>; else goto <D.24111>;
  <D.24110>:
  D.24112 = stack_slot_get_type (addr);
  if (D.24112 != 5) goto <D.24113>; else goto <D.24114>;
  <D.24113>:
  D.24117 = ctx->verifiable;
  if (D.24117 != 0) goto <D.24115>; else goto <D.24118>;
  <D.24118>:
  D.24119 = ctx->level;
  D.24120 = D.24119 & 128;
  if (D.24120 != 0) goto <D.24115>; else goto <D.24116>;
  <D.24115>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24121 = ctx->ip_offset;
    D.24122 = monoeg_g_strdup_printf ("Invalid non-pointer argument to stind at 0x%04x", D.24121);
    vinfo->info.message = D.24122;
    vinfo->exception_type = 4;
    D.24123 = ctx->list;
    D.24124 = monoeg_g_slist_prepend (D.24123, vinfo);
    ctx->list = D.24124;
  }
  ctx->verifiable = 0;
  D.24119 = ctx->level;
  D.24125 = D.24119 & 16;
  if (D.24125 != 0) goto <D.24126>; else goto <D.24127>;
  <D.24126>:
  ctx->valid = 0;
  <D.24127>:
  <D.24116>:
  return;
  <D.24114>:
  <D.24111>:
  D.24128 = stack_slot_is_managed_mutability_pointer (addr);
  if (D.24128 != 0) goto <D.24129>; else goto <D.24130>;
  <D.24129>:
  D.24117 = ctx->verifiable;
  if (D.24117 != 0) goto <D.24131>; else goto <D.24133>;
  <D.24133>:
  D.24119 = ctx->level;
  D.24120 = D.24119 & 128;
  if (D.24120 != 0) goto <D.24131>; else goto <D.24132>;
  <D.24131>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24121 = ctx->ip_offset;
    D.24134 = monoeg_g_strdup_printf ("Cannot use a readonly pointer with stind at 0x%04x", D.24121);
    vinfo->info.message = D.24134;
    vinfo->exception_type = 4;
    D.24123 = ctx->list;
    D.24135 = monoeg_g_slist_prepend (D.24123, vinfo);
    ctx->list = D.24135;
  }
  ctx->verifiable = 0;
  D.24119 = ctx->level;
  D.24125 = D.24119 & 16;
  if (D.24125 != 0) goto <D.24136>; else goto <D.24137>;
  <D.24136>:
  ctx->valid = 0;
  <D.24137>:
  <D.24132>:
  return;
  <D.24130>:
  D.24138 = mono_type_from_opcode (opcode);
  D.24139 = addr->type;
  D.24140 = mono_type_get_type_byval (D.24139);
  D.24141 = verify_type_compatibility_full (ctx, D.24138, D.24140, 1);
  if (D.24141 == 0) goto <D.24142>; else goto <D.24143>;
  <D.24142>:
  D.24117 = ctx->verifiable;
  if (D.24117 != 0) goto <D.24144>; else goto <D.24146>;
  <D.24146>:
  D.24119 = ctx->level;
  D.24120 = D.24119 & 128;
  if (D.24120 != 0) goto <D.24144>; else goto <D.24145>;
  <D.24144>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24121 = ctx->ip_offset;
    D.24147 = monoeg_g_strdup_printf ("Invalid addr type at stack for stind 0x%x operation at 0x%04x", opcode, D.24121);
    vinfo->info.message = D.24147;
    vinfo->exception_type = 4;
    D.24123 = ctx->list;
    D.24148 = monoeg_g_slist_prepend (D.24123, vinfo);
    ctx->list = D.24148;
  }
  ctx->verifiable = 0;
  D.24119 = ctx->level;
  D.24125 = D.24119 & 16;
  if (D.24125 != 0) goto <D.24149>; else goto <D.24150>;
  <D.24149>:
  ctx->valid = 0;
  <D.24150>:
  <D.24145>:
  <D.24143>:
  D.24151 = mono_type_from_opcode (opcode);
  D.24152 = verify_stack_type_compatibility (ctx, D.24151, val);
  if (D.24152 == 0) goto <D.24153>; else goto <D.24154>;
  <D.24153>:
  D.24117 = ctx->verifiable;
  if (D.24117 != 0) goto <D.24155>; else goto <D.24157>;
  <D.24157>:
  D.24119 = ctx->level;
  D.24120 = D.24119 & 128;
  if (D.24120 != 0) goto <D.24155>; else goto <D.24156>;
  <D.24155>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24121 = ctx->ip_offset;
    D.24158 = monoeg_g_strdup_printf ("Invalid value type at stack for stind 0x%x operation at 0x%04x", opcode, D.24121);
    vinfo->info.message = D.24158;
    vinfo->exception_type = 4;
    D.24123 = ctx->list;
    D.24159 = monoeg_g_slist_prepend (D.24123, vinfo);
    ctx->list = D.24159;
  }
  ctx->verifiable = 0;
  D.24119 = ctx->level;
  D.24125 = D.24119 & 16;
  if (D.24125 != 0) goto <D.24160>; else goto <D.24161>;
  <D.24160>:
  ctx->valid = 0;
  <D.24161>:
  <D.24156>:
  <D.24154>:
}


do_unary_math_op (struct VerifyContext * ctx, int op)
{
  int D.24163;
  int D.24166;
  struct MonoType * D.24168;
  int D.24169;
  int D.24173;
  int D.24175;
  int D.24176;
  unsigned int D.24177;
  gchar * D.24178;
  struct GSList * D.24179;
  struct GSList * D.24180;
  int D.24181;
  struct ILStackDesc * value;

  D.24163 = check_underflow (ctx, 1);
  if (D.24163 == 0) goto <D.24164>; else goto <D.24165>;
  <D.24164>:
  return;
  <D.24165>:
  value = stack_pop (ctx);
  D.24166 = stack_slot_get_type (value);
  switch (D.24166) <default: <D.19490>, case 1: <D.19484>, case 2: <D.19485>, case 3: <D.19486>, case 4: <D.19488>, case 6: <D.19489>>
  <D.19484>:
  <D.19485>:
  <D.19486>:
  goto <D.19487>;
  <D.19488>:
  if (op == 101) goto <D.19487>; else goto <D.24167>;
  <D.24167>:
  <D.19489>:
  D.24168 = value->type;
  D.24169 = mono_type_is_enum_type (D.24168);
  if (D.24169 != 0) goto <D.19487>; else goto <D.24170>;
  <D.24170>:
  <D.19490>:
  D.24173 = ctx->verifiable;
  if (D.24173 != 0) goto <D.24171>; else goto <D.24174>;
  <D.24174>:
  D.24175 = ctx->level;
  D.24176 = D.24175 & 128;
  if (D.24176 != 0) goto <D.24171>; else goto <D.24172>;
  <D.24171>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24177 = ctx->ip_offset;
    D.24178 = monoeg_g_strdup_printf ("Invalid type at stack for unary not at 0x%04x", D.24177);
    vinfo->info.message = D.24178;
    vinfo->exception_type = 4;
    D.24179 = ctx->list;
    D.24180 = monoeg_g_slist_prepend (D.24179, vinfo);
    ctx->list = D.24180;
  }
  ctx->verifiable = 0;
  D.24175 = ctx->level;
  D.24181 = D.24175 & 16;
  if (D.24181 != 0) goto <D.24182>; else goto <D.24183>;
  <D.24182>:
  ctx->valid = 0;
  <D.24183>:
  <D.24172>:
  <D.19487>:
  stack_push_stack_val (ctx, value);
}


stack_push_stack_val (struct VerifyContext * ctx, struct ILStackDesc * value)
{
  struct ILStackDesc * D.24186;
  struct ILStackDesc * top;

  top = stack_push (ctx);
  copy_stack_value (top, value);
  D.24186 = top;
  return D.24186;
}


do_cpobj (struct VerifyContext * ctx, int token)
{
  int D.24190;
  int D.24193;
  int D.24198;
  int D.24200;
  int D.24201;
  unsigned int D.24202;
  gchar * D.24203;
  struct GSList * D.24204;
  struct GSList * D.24205;
  int D.24206;
  int D.24209;
  gchar * D.24215;
  struct GSList * D.24216;
  int D.24219;
  gchar * D.24225;
  struct GSList * D.24226;
  struct MonoType * D.24229;
  struct MonoType * D.24230;
  int D.24231;
  gchar * D.24237;
  struct GSList * D.24238;
  struct MonoType * D.24241;
  struct MonoType * D.24242;
  int D.24243;
  gchar * D.24249;
  struct GSList * D.24250;
  struct ILStackDesc * dest;
  struct ILStackDesc * src;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, token, "cpobj");
  if (type == 0B) goto <D.24188>; else goto <D.24189>;
  <D.24188>:
  return;
  <D.24189>:
  D.24190 = check_underflow (ctx, 2);
  if (D.24190 == 0) goto <D.24191>; else goto <D.24192>;
  <D.24191>:
  return;
  <D.24192>:
  src = stack_pop (ctx);
  dest = stack_pop (ctx);
  D.24193 = stack_slot_is_managed_pointer (src);
  if (D.24193 == 0) goto <D.24194>; else goto <D.24195>;
  <D.24194>:
  D.24198 = ctx->verifiable;
  if (D.24198 != 0) goto <D.24196>; else goto <D.24199>;
  <D.24199>:
  D.24200 = ctx->level;
  D.24201 = D.24200 & 128;
  if (D.24201 != 0) goto <D.24196>; else goto <D.24197>;
  <D.24196>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24202 = ctx->ip_offset;
    D.24203 = monoeg_g_strdup_printf ("Invalid source of cpobj operation at 0x%04x", D.24202);
    vinfo->info.message = D.24203;
    vinfo->exception_type = 4;
    D.24204 = ctx->list;
    D.24205 = monoeg_g_slist_prepend (D.24204, vinfo);
    ctx->list = D.24205;
  }
  ctx->verifiable = 0;
  D.24200 = ctx->level;
  D.24206 = D.24200 & 16;
  if (D.24206 != 0) goto <D.24207>; else goto <D.24208>;
  <D.24207>:
  ctx->valid = 0;
  <D.24208>:
  <D.24197>:
  <D.24195>:
  D.24209 = stack_slot_is_managed_pointer (dest);
  if (D.24209 == 0) goto <D.24210>; else goto <D.24211>;
  <D.24210>:
  D.24198 = ctx->verifiable;
  if (D.24198 != 0) goto <D.24212>; else goto <D.24214>;
  <D.24214>:
  D.24200 = ctx->level;
  D.24201 = D.24200 & 128;
  if (D.24201 != 0) goto <D.24212>; else goto <D.24213>;
  <D.24212>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24202 = ctx->ip_offset;
    D.24215 = monoeg_g_strdup_printf ("Invalid destination of cpobj operation at 0x%04x", D.24202);
    vinfo->info.message = D.24215;
    vinfo->exception_type = 4;
    D.24204 = ctx->list;
    D.24216 = monoeg_g_slist_prepend (D.24204, vinfo);
    ctx->list = D.24216;
  }
  ctx->verifiable = 0;
  D.24200 = ctx->level;
  D.24206 = D.24200 & 16;
  if (D.24206 != 0) goto <D.24217>; else goto <D.24218>;
  <D.24217>:
  ctx->valid = 0;
  <D.24218>:
  <D.24213>:
  <D.24211>:
  D.24219 = stack_slot_is_managed_mutability_pointer (dest);
  if (D.24219 != 0) goto <D.24220>; else goto <D.24221>;
  <D.24220>:
  D.24198 = ctx->verifiable;
  if (D.24198 != 0) goto <D.24222>; else goto <D.24224>;
  <D.24224>:
  D.24200 = ctx->level;
  D.24201 = D.24200 & 128;
  if (D.24201 != 0) goto <D.24222>; else goto <D.24223>;
  <D.24222>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24202 = ctx->ip_offset;
    D.24225 = monoeg_g_strdup_printf ("Cannot use a readonly pointer with cpobj at 0x%04x", D.24202);
    vinfo->info.message = D.24225;
    vinfo->exception_type = 4;
    D.24204 = ctx->list;
    D.24226 = monoeg_g_slist_prepend (D.24204, vinfo);
    ctx->list = D.24226;
  }
  ctx->verifiable = 0;
  D.24200 = ctx->level;
  D.24206 = D.24200 & 16;
  if (D.24206 != 0) goto <D.24227>; else goto <D.24228>;
  <D.24227>:
  ctx->valid = 0;
  <D.24228>:
  <D.24223>:
  <D.24221>:
  D.24229 = src->type;
  D.24230 = mono_type_get_type_byval (D.24229);
  D.24231 = verify_type_compatibility (ctx, type, D.24230);
  if (D.24231 == 0) goto <D.24232>; else goto <D.24233>;
  <D.24232>:
  D.24198 = ctx->verifiable;
  if (D.24198 != 0) goto <D.24234>; else goto <D.24236>;
  <D.24236>:
  D.24200 = ctx->level;
  D.24201 = D.24200 & 128;
  if (D.24201 != 0) goto <D.24234>; else goto <D.24235>;
  <D.24234>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24202 = ctx->ip_offset;
    D.24237 = monoeg_g_strdup_printf ("Token and source types of cpobj don\'t match at 0x%04x", D.24202);
    vinfo->info.message = D.24237;
    vinfo->exception_type = 4;
    D.24204 = ctx->list;
    D.24238 = monoeg_g_slist_prepend (D.24204, vinfo);
    ctx->list = D.24238;
  }
  ctx->verifiable = 0;
  D.24200 = ctx->level;
  D.24206 = D.24200 & 16;
  if (D.24206 != 0) goto <D.24239>; else goto <D.24240>;
  <D.24239>:
  ctx->valid = 0;
  <D.24240>:
  <D.24235>:
  <D.24233>:
  D.24241 = dest->type;
  D.24242 = mono_type_get_type_byval (D.24241);
  D.24243 = verify_type_compatibility (ctx, D.24242, type);
  if (D.24243 == 0) goto <D.24244>; else goto <D.24245>;
  <D.24244>:
  D.24198 = ctx->verifiable;
  if (D.24198 != 0) goto <D.24246>; else goto <D.24248>;
  <D.24248>:
  D.24200 = ctx->level;
  D.24201 = D.24200 & 128;
  if (D.24201 != 0) goto <D.24246>; else goto <D.24247>;
  <D.24246>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24202 = ctx->ip_offset;
    D.24249 = monoeg_g_strdup_printf ("Destination and token types of cpobj don\'t match at 0x%04x", D.24202);
    vinfo->info.message = D.24249;
    vinfo->exception_type = 4;
    D.24204 = ctx->list;
    D.24250 = monoeg_g_slist_prepend (D.24204, vinfo);
    ctx->list = D.24250;
  }
  ctx->verifiable = 0;
  D.24200 = ctx->level;
  D.24206 = D.24200 & 16;
  if (D.24206 != 0) goto <D.24251>; else goto <D.24252>;
  <D.24251>:
  ctx->valid = 0;
  <D.24252>:
  <D.24247>:
  <D.24245>:
}


verify_type_compatibility (struct VerifyContext * ctx, struct MonoType * target, struct MonoType * candidate)
{
  gboolean D.24254;

  D.24254 = verify_type_compatibility_full (ctx, target, candidate, 0);
  return D.24254;
}


do_ldobj_value (struct VerifyContext * ctx, int token)
{
  unsigned int D.24256;
  unsigned int D.24257;
  int D.24260;
  int D.24265;
  int D.24268;
  int D.24271;
  struct MonoType * D.24273;
  unsigned char D.24274;
  const char * D.24275;
  unsigned int D.24276;
  gchar * D.24277;
  struct GSList * D.24278;
  struct GSList * D.24279;
  int D.24280;
  int D.24285;
  int D.24287;
  int D.24288;
  gchar * D.24289;
  struct GSList * D.24290;
  int D.24291;
  struct MonoType * D.24294;
  int D.24295;
  gchar * D.24301;
  struct GSList * D.24302;
  struct ILStackDesc * D.24305;
  struct ILStackDesc * value;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, token, "ldobj");
  D.24256 = ctx->prefix_set;
  D.24257 = D.24256 & 4294967292;
  ctx->prefix_set = D.24257;
  if (type == 0B) goto <D.24258>; else goto <D.24259>;
  <D.24258>:
  return;
  <D.24259>:
  D.24260 = check_underflow (ctx, 1);
  if (D.24260 == 0) goto <D.24261>; else goto <D.24262>;
  <D.24261>:
  return;
  <D.24262>:
  value = stack_pop (ctx);
  D.24265 = stack_slot_is_managed_pointer (value);
  if (D.24265 == 0) goto <D.24266>; else goto <D.24267>;
  <D.24266>:
  D.24268 = stack_slot_get_type (value);
  if (D.24268 != 3) goto <D.24269>; else goto <D.24270>;
  <D.24269>:
  D.24271 = stack_slot_get_type (value);
  if (D.24271 != 5) goto <D.24263>; else goto <D.24272>;
  <D.24272>:
  D.24273 = value->type;
  D.24274 = D.24273->type;
  if (D.24274 == 27) goto <D.24263>; else goto <D.24264>;
  <D.24263>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.24275 = stack_slot_get_name (value);
    D.24276 = ctx->ip_offset;
    D.24277 = monoeg_g_strdup_printf ("Invalid argument %s to ldobj at 0x%04x", D.24275, D.24276);
    vinfo->info.message = D.24277;
    vinfo->exception_type = 3;
    D.24278 = ctx->list;
    D.24279 = monoeg_g_slist_prepend (D.24278, vinfo);
    ctx->list = D.24279;
  }
  ctx->valid = 0;
  return;
  <D.24264>:
  <D.24270>:
  <D.24267>:
  D.24280 = stack_slot_get_type (value);
  if (D.24280 == 3) goto <D.24281>; else goto <D.24282>;
  <D.24281>:
  D.24285 = ctx->verifiable;
  if (D.24285 != 0) goto <D.24283>; else goto <D.24286>;
  <D.24286>:
  D.24287 = ctx->level;
  D.24288 = D.24287 & 128;
  if (D.24288 != 0) goto <D.24283>; else goto <D.24284>;
  <D.24283>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24276 = ctx->ip_offset;
    D.24289 = monoeg_g_strdup_printf ("Using native pointer to ldobj at 0x%04x", D.24276);
    vinfo->info.message = D.24289;
    vinfo->exception_type = 4;
    D.24278 = ctx->list;
    D.24290 = monoeg_g_slist_prepend (D.24278, vinfo);
    ctx->list = D.24290;
  }
  ctx->verifiable = 0;
  D.24287 = ctx->level;
  D.24291 = D.24287 & 16;
  if (D.24291 != 0) goto <D.24292>; else goto <D.24293>;
  <D.24292>:
  ctx->valid = 0;
  <D.24293>:
  <D.24284>:
  <D.24282>:
  D.24273 = value->type;
  D.24294 = mono_type_get_type_byval (D.24273);
  D.24295 = verify_type_compatibility_full (ctx, type, D.24294, 1);
  if (D.24295 == 0) goto <D.24296>; else goto <D.24297>;
  <D.24296>:
  D.24285 = ctx->verifiable;
  if (D.24285 != 0) goto <D.24298>; else goto <D.24300>;
  <D.24300>:
  D.24287 = ctx->level;
  D.24288 = D.24287 & 128;
  if (D.24288 != 0) goto <D.24298>; else goto <D.24299>;
  <D.24298>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24276 = ctx->ip_offset;
    D.24301 = monoeg_g_strdup_printf ("Invalid type at stack for ldojb operation at 0x%04x", D.24276);
    vinfo->info.message = D.24301;
    vinfo->exception_type = 4;
    D.24278 = ctx->list;
    D.24302 = monoeg_g_slist_prepend (D.24278, vinfo);
    ctx->list = D.24302;
  }
  ctx->verifiable = 0;
  D.24287 = ctx->level;
  D.24291 = D.24287 & 16;
  if (D.24291 != 0) goto <D.24303>; else goto <D.24304>;
  <D.24303>:
  ctx->valid = 0;
  <D.24304>:
  <D.24299>:
  <D.24297>:
  D.24305 = stack_push (ctx);
  set_stack_value (ctx, D.24305, type, 0);
}


do_ldstr (struct VerifyContext * ctx, guint32 token)
{
  struct MonoMethod * D.24307;
  long unsigned int D.24308;
  long unsigned int D.24309;
  struct MonoImage * D.24312;
  long unsigned int D.24313;
  long unsigned int D.24314;
  unsigned int D.24317;
  unsigned int D.24320;
  gchar * D.24321;
  struct GSList * D.24322;
  struct GSList * D.24323;
  unsigned int D.24324;
  int D.24325;
  struct GSList * error.81;
  struct GSList * D.24331;
  gchar * D.24332;
  struct GSList * D.24333;
  int D.24334;
  struct MonoClass * D.24337;
  struct MonoType * D.24338;
  struct GSList * error;

  try
    {
      error = 0B;
      D.24307 = ctx->method;
      D.24308 = BIT_FIELD_REF <*D.24307, 64, 256>;
      D.24309 = D.24308 & 124;
      if (D.24309 == 0) goto <D.24310>; else goto <D.24311>;
      <D.24310>:
      D.24312 = ctx->image;
      D.24313 = BIT_FIELD_REF <*D.24312, 64, 192>;
      D.24314 = D.24313 & 34359738368;
      if (D.24314 == 0) goto <D.24315>; else goto <D.24316>;
      <D.24315>:
      D.24317 = token & 4278190080;
      if (D.24317 != 1879048192) goto <D.24318>; else goto <D.24319>;
      <D.24318>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24320 = ctx->ip_offset;
        D.24321 = monoeg_g_strdup_printf ("Invalid string token %x at 0x%04x", token, D.24320);
        vinfo->info.message = D.24321;
        vinfo->exception_type = 12;
        D.24322 = ctx->list;
        D.24323 = monoeg_g_slist_prepend (D.24322, vinfo);
        ctx->list = D.24323;
      }
      ctx->valid = 0;
      return;
      <D.24319>:
      D.24312 = ctx->image;
      D.24324 = token & 16777215;
      D.24325 = mono_verifier_verify_string_signature (D.24312, D.24324, &error);
      if (D.24325 == 0) goto <D.24326>; else goto <D.24327>;
      <D.24326>:
      error.81 = error;
      if (error.81 != 0B) goto <D.24329>; else goto <D.24330>;
      <D.24329>:
      D.24322 = ctx->list;
      error.81 = error;
      D.24331 = monoeg_g_slist_concat (D.24322, error.81);
      ctx->list = D.24331;
      <D.24330>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24320 = ctx->ip_offset;
        D.24332 = monoeg_g_strdup_printf ("Invalid string index %x at 0x%04x", token, D.24320);
        vinfo->info.message = D.24332;
        vinfo->exception_type = 12;
        D.24322 = ctx->list;
        D.24333 = monoeg_g_slist_prepend (D.24322, vinfo);
        ctx->list = D.24333;
      }
      ctx->valid = 0;
      return;
      <D.24327>:
      <D.24316>:
      <D.24311>:
      D.24334 = check_overflow (ctx);
      if (D.24334 != 0) goto <D.24335>; else goto <D.24336>;
      <D.24335>:
      D.24337 = mono_defaults.string_class;
      D.24338 = &D.24337->byval_arg;
      stack_push_val (ctx, 6, D.24338);
      <D.24336>:
    }
  finally
    {
      error = {CLOBBER};
    }
}


do_newobj (struct VerifyContext * ctx, int token)
{
  int D.24344;
  unsigned int D.24347;
  gchar * D.24348;
  struct GSList * D.24349;
  struct GSList * D.24350;
  struct MonoClass * D.24351;
  unsigned int D.24352;
  unsigned int D.24353;
  int D.24358;
  int D.24360;
  int D.24361;
  gchar * D.24362;
  struct GSList * D.24363;
  int D.24364;
  int D.24367;
  struct MonoMethod * D.24370;
  int D.24371;
  gchar * D.24377;
  struct GSList * D.24378;
  gchar * D.24383;
  struct GSList * D.24384;
  long unsigned int D.24385;
  long unsigned int D.24386;
  gchar * D.24389;
  struct GSList * D.24390;
  short unsigned int D.24391;
  int D.24392;
  int D.24393;
  struct MonoClass * D.24396;
  struct MonoClass * D.24397;
  _Bool D.24398;
  gchar * D.24403;
  struct GSList * D.24404;
  struct MonoType * D.24406;
  int D.24407;
  gchar * D.24413;
  struct GSList * D.24414;
  int D.24417;
  gchar * D.24423;
  struct GSList * D.24424;
  int D.24427;
  struct ILStackDesc * D.24430;
  struct MonoType * D.24431;
  struct ILStackDesc * value;
  int i;
  struct MonoMethodSignature * sig;
  struct MonoMethod * method;
  gboolean is_delegate;

  is_delegate = 0;
  method = verifier_load_method (ctx, token, "newobj");
  if (method == 0B) goto <D.24342>; else goto <D.24343>;
  <D.24342>:
  return;
  <D.24343>:
  D.24344 = mono_method_is_constructor (method);
  if (D.24344 == 0) goto <D.24345>; else goto <D.24346>;
  <D.24345>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.24347 = ctx->ip_offset;
    D.24348 = monoeg_g_strdup_printf ("Method from token 0x%08x not a constructor at 0x%04x", token, D.24347);
    vinfo->info.message = D.24348;
    vinfo->exception_type = 3;
    D.24349 = ctx->list;
    D.24350 = monoeg_g_slist_prepend (D.24349, vinfo);
    ctx->list = D.24350;
  }
  ctx->valid = 0;
  return;
  <D.24346>:
  D.24351 = method->klass;
  D.24352 = D.24351->flags;
  D.24353 = D.24352 & 160;
  if (D.24353 != 0) goto <D.24354>; else goto <D.24355>;
  <D.24354>:
  D.24358 = ctx->verifiable;
  if (D.24358 != 0) goto <D.24356>; else goto <D.24359>;
  <D.24359>:
  D.24360 = ctx->level;
  D.24361 = D.24360 & 128;
  if (D.24361 != 0) goto <D.24356>; else goto <D.24357>;
  <D.24356>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24347 = ctx->ip_offset;
    D.24362 = monoeg_g_strdup_printf ("Trying to instantiate an abstract or interface type at 0x%04x", D.24347);
    vinfo->info.message = D.24362;
    vinfo->exception_type = 4;
    D.24349 = ctx->list;
    D.24363 = monoeg_g_slist_prepend (D.24349, vinfo);
    ctx->list = D.24363;
  }
  ctx->verifiable = 0;
  D.24360 = ctx->level;
  D.24364 = D.24360 & 16;
  if (D.24364 != 0) goto <D.24365>; else goto <D.24366>;
  <D.24365>:
  ctx->valid = 0;
  <D.24366>:
  <D.24357>:
  <D.24355>:
  D.24360 = ctx->level;
  D.24367 = D.24360 & 64;
  if (D.24367 == 0) goto <D.24368>; else goto <D.24369>;
  <D.24368>:
  D.24370 = ctx->method;
  D.24371 = mono_method_can_access_method_full (D.24370, method, 0B);
  if (D.24371 == 0) goto <D.24372>; else goto <D.24373>;
  <D.24372>:
  {
    char * from;
    char * to;

    D.24370 = ctx->method;
    from = mono_method_full_name (D.24370, 1);
    to = mono_method_full_name (method, 1);
    D.24358 = ctx->verifiable;
    if (D.24358 != 0) goto <D.24374>; else goto <D.24376>;
    <D.24376>:
    D.24360 = ctx->level;
    D.24361 = D.24360 & 128;
    if (D.24361 != 0) goto <D.24374>; else goto <D.24375>;
    <D.24374>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.24347 = ctx->ip_offset;
      D.24377 = monoeg_g_strdup_printf ("Constructor %s not visible from %s at 0x%04x", to, from, D.24347);
      vinfo->info.message = D.24377;
      vinfo->exception_type = 9;
      D.24349 = ctx->list;
      D.24378 = monoeg_g_slist_prepend (D.24349, vinfo);
      ctx->list = D.24378;
    }
    ctx->verifiable = 0;
    D.24360 = ctx->level;
    D.24364 = D.24360 & 16;
    if (D.24364 != 0) goto <D.24379>; else goto <D.24380>;
    <D.24379>:
    ctx->valid = 0;
    <D.24380>:
    <D.24375>:
    monoeg_g_free (from);
    monoeg_g_free (to);
  }
  <D.24373>:
  <D.24369>:
  sig = mono_method_signature (method);
  if (sig == 0B) goto <D.24381>; else goto <D.24382>;
  <D.24381>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.24347 = ctx->ip_offset;
    D.24383 = monoeg_g_strdup_printf ("Invalid constructor signature to newobj at 0x%04x", D.24347);
    vinfo->info.message = D.24383;
    vinfo->exception_type = 3;
    D.24349 = ctx->list;
    D.24384 = monoeg_g_slist_prepend (D.24349, vinfo);
    ctx->list = D.24384;
  }
  ctx->valid = 0;
  return;
  <D.24382>:
  D.24385 = BIT_FIELD_REF <*sig, 64, 64>;
  D.24386 = D.24385 & 18014398509481984;
  if (D.24386 == 0) goto <D.24387>; else goto <D.24388>;
  <D.24387>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.24347 = ctx->ip_offset;
    D.24389 = monoeg_g_strdup_printf ("Invalid constructor signature missing hasthis at 0x%04x", D.24347);
    vinfo->info.message = D.24389;
    vinfo->exception_type = 3;
    D.24349 = ctx->list;
    D.24390 = monoeg_g_slist_prepend (D.24349, vinfo);
    ctx->list = D.24390;
  }
  ctx->valid = 0;
  return;
  <D.24388>:
  D.24391 = sig->param_count;
  D.24392 = (int) D.24391;
  D.24393 = check_underflow (ctx, D.24392);
  if (D.24393 == 0) goto <D.24394>; else goto <D.24395>;
  <D.24394>:
  return;
  <D.24395>:
  D.24351 = method->klass;
  D.24396 = D.24351->parent;
  D.24397 = mono_defaults.multicastdelegate_class;
  D.24398 = D.24396 == D.24397;
  is_delegate = (gboolean) D.24398;
  if (is_delegate != 0) goto <D.24399>; else goto <D.24400>;
  <D.24399>:
  {
    struct ILStackDesc * funptr;

    D.24391 = sig->param_count;
    if (D.24391 != 2) goto <D.24401>; else goto <D.24402>;
    <D.24401>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.24347 = ctx->ip_offset;
      D.24403 = monoeg_g_strdup_printf ("Invalid delegate constructor at 0x%04x", D.24347);
      vinfo->info.message = D.24403;
      vinfo->exception_type = 3;
      D.24349 = ctx->list;
      D.24404 = monoeg_g_slist_prepend (D.24349, vinfo);
      ctx->list = D.24404;
    }
    ctx->valid = 0;
    return;
    <D.24402>:
    funptr = stack_pop (ctx);
    value = stack_pop (ctx);
    D.24351 = method->klass;
    verify_delegate_compatibility (ctx, D.24351, value, funptr);
  }
  goto <D.24405>;
  <D.24400>:
  D.24391 = sig->param_count;
  D.24392 = (int) D.24391;
  i = D.24392 + -1;
  goto <D.19602>;
  <D.19601>:
  value = stack_pop (ctx);
  D.24406 = sig->params[i];
  D.24407 = verify_stack_type_compatibility (ctx, D.24406, value);
  if (D.24407 == 0) goto <D.24408>; else goto <D.24409>;
  <D.24408>:
  {
    char * stack_name;
    char * sig_name;

    stack_name = stack_slot_full_name (value);
    D.24406 = sig->params[i];
    sig_name = mono_type_full_name (D.24406);
    D.24358 = ctx->verifiable;
    if (D.24358 != 0) goto <D.24410>; else goto <D.24412>;
    <D.24412>:
    D.24360 = ctx->level;
    D.24361 = D.24360 & 128;
    if (D.24361 != 0) goto <D.24410>; else goto <D.24411>;
    <D.24410>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.24347 = ctx->ip_offset;
      D.24413 = monoeg_g_strdup_printf ("Incompatible parameter value with constructor signature: %s X %s at 0x%04x", sig_name, stack_name, D.24347);
      vinfo->info.message = D.24413;
      vinfo->exception_type = 4;
      D.24349 = ctx->list;
      D.24414 = monoeg_g_slist_prepend (D.24349, vinfo);
      ctx->list = D.24414;
    }
    ctx->verifiable = 0;
    D.24360 = ctx->level;
    D.24364 = D.24360 & 16;
    if (D.24364 != 0) goto <D.24415>; else goto <D.24416>;
    <D.24415>:
    ctx->valid = 0;
    <D.24416>:
    <D.24411>:
    monoeg_g_free (stack_name);
    monoeg_g_free (sig_name);
  }
  <D.24409>:
  D.24417 = stack_slot_is_managed_mutability_pointer (value);
  if (D.24417 != 0) goto <D.24418>; else goto <D.24419>;
  <D.24418>:
  D.24358 = ctx->verifiable;
  if (D.24358 != 0) goto <D.24420>; else goto <D.24422>;
  <D.24422>:
  D.24360 = ctx->level;
  D.24361 = D.24360 & 128;
  if (D.24361 != 0) goto <D.24420>; else goto <D.24421>;
  <D.24420>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24347 = ctx->ip_offset;
    D.24423 = monoeg_g_strdup_printf ("Cannot use a readonly pointer as argument of newobj at 0x%04x", D.24347);
    vinfo->info.message = D.24423;
    vinfo->exception_type = 4;
    D.24349 = ctx->list;
    D.24424 = monoeg_g_slist_prepend (D.24349, vinfo);
    ctx->list = D.24424;
  }
  ctx->verifiable = 0;
  D.24360 = ctx->level;
  D.24364 = D.24360 & 16;
  if (D.24364 != 0) goto <D.24425>; else goto <D.24426>;
  <D.24425>:
  ctx->valid = 0;
  <D.24426>:
  <D.24421>:
  <D.24419>:
  i = i + -1;
  <D.19602>:
  if (i >= 0) goto <D.19601>; else goto <D.19603>;
  <D.19603>:
  <D.24405>:
  D.24427 = check_overflow (ctx);
  if (D.24427 != 0) goto <D.24428>; else goto <D.24429>;
  <D.24428>:
  D.24430 = stack_push (ctx);
  D.24351 = method->klass;
  D.24431 = &D.24351->byval_arg;
  set_stack_value (ctx, D.24430, D.24431, 0);
  <D.24429>:
}


verify_delegate_compatibility (struct VerifyContext * ctx, struct MonoClass * delegate, struct ILStackDesc * value, struct ILStackDesc * funptr)
{
  struct MonoMethodHeader * D.24433;
  int D.24436;
  struct MonoMethod * D.24438;
  int D.24441;
  int D.24443;
  int D.24444;
  unsigned int D.24445;
  gchar * D.24446;
  struct GSList * D.24447;
  struct GSList * D.24448;
  int D.24449;
  struct MonoMethodSignature * D.24455;
  gchar * D.24456;
  struct GSList * D.24457;
  struct MonoMethodSignature * D.24461;
  gchar * D.24462;
  struct GSList * D.24463;
  int iftmp.82;
  unsigned int D.24468;
  sizetype D.24469;
  const guint8 * D.24470;
  unsigned char D.24471;
  struct ILCodeDesc * D.24473;
  long unsigned int D.24474;
  long unsigned int D.24475;
  struct ILCodeDesc * D.24476;
  short unsigned int D.24477;
  int D.24478;
  int D.24479;
  unsigned int D.24481;
  sizetype D.24482;
  const guint8 * D.24483;
  unsigned char D.24484;
  short unsigned int D.24486;
  int D.24487;
  int D.24488;
  struct MonoMethodSignature * D.24492;
  short unsigned int D.24493;
  int D.24494;
  int D.24495;
  struct MonoMethodSignature * D.24496;
  short unsigned int D.24497;
  int D.24498;
  _Bool D.24499;
  struct MonoMethodSignature * D.24500;
  struct MonoMethodSignature * D.24501;
  int D.24502;
  struct MonoMethodSignature * D.24505;
  struct MonoMethodSignature * D.24506;
  gchar * D.24510;
  struct GSList * D.24511;
  unsigned int D.24523;
  sizetype D.24524;
  const guint8 * D.24525;
  unsigned char D.24526;
  long unsigned int D.24528;
  long unsigned int D.24529;
  struct ILCodeDesc * D.24530;
  short unsigned int D.24531;
  int D.24532;
  int D.24533;
  short unsigned int D.24538;
  gchar * D.24542;
  struct GSList * D.24543;
  long unsigned int D.24546;
  long unsigned int D.24547;
  struct ILCodeDesc * D.24548;
  short unsigned int D.24549;
  short unsigned int D.24550;
  struct MonoMethodSignature * D.24555;
  short unsigned int D.24556;
  struct MonoMethodSignature * D.24558;
  struct MonoType * D.24559;
  int D.24560;
  gchar * D.24564;
  struct GSList * D.24565;
  int D.24571;
  gchar * D.24579;
  struct GSList * D.24580;
  struct MonoClass * D.24584;
  struct MonoType * D.24585;
  int D.24586;
  int D.24589;
  gchar * D.24595;
  struct GSList * D.24596;
  int D.24599;
  gchar * D.24605;
  struct GSList * D.24606;
  struct MonoMethod * invoke;
  struct MonoMethod * method;
  const guint8 * ip;
  guint32 ip_offset;
  gboolean is_static_ldftn;
  gboolean is_first_arg_bound;

  D.24433 = ctx->header;
  ip = D.24433->code;
  ip_offset = ctx->ip_offset;
  is_static_ldftn = 0;
  is_first_arg_bound = 0;
  D.24436 = stack_slot_get_type (funptr);
  if (D.24436 != 5) goto <D.24434>; else goto <D.24437>;
  <D.24437>:
  D.24438 = funptr->method;
  if (D.24438 == 0B) goto <D.24434>; else goto <D.24435>;
  <D.24434>:
  D.24441 = ctx->verifiable;
  if (D.24441 != 0) goto <D.24439>; else goto <D.24442>;
  <D.24442>:
  D.24443 = ctx->level;
  D.24444 = D.24443 & 128;
  if (D.24444 != 0) goto <D.24439>; else goto <D.24440>;
  <D.24439>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24445 = ctx->ip_offset;
    D.24446 = monoeg_g_strdup_printf ("Invalid function pointer parameter for delegate constructor at 0x%04x", D.24445);
    vinfo->info.message = D.24446;
    vinfo->exception_type = 4;
    D.24447 = ctx->list;
    D.24448 = monoeg_g_slist_prepend (D.24447, vinfo);
    ctx->list = D.24448;
  }
  ctx->verifiable = 0;
  D.24443 = ctx->level;
  D.24449 = D.24443 & 16;
  if (D.24449 != 0) goto <D.24450>; else goto <D.24451>;
  <D.24450>:
  ctx->valid = 0;
  <D.24451>:
  <D.24440>:
  return;
  <D.24435>:
  invoke = mono_get_delegate_invoke (delegate);
  method = funptr->method;
  if (method == 0B) goto <D.24452>; else goto <D.24454>;
  <D.24454>:
  D.24455 = mono_method_signature (method);
  if (D.24455 == 0B) goto <D.24452>; else goto <D.24453>;
  <D.24452>:
  {
    char * name;

    name = mono_type_get_full_name (delegate);
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.24445 = ctx->ip_offset;
      D.24456 = monoeg_g_strdup_printf ("Invalid method on stack to create delegate %s construction at 0x%04x", name, D.24445);
      vinfo->info.message = D.24456;
      vinfo->exception_type = 3;
      D.24447 = ctx->list;
      D.24457 = monoeg_g_slist_prepend (D.24447, vinfo);
      ctx->list = D.24457;
    }
    ctx->valid = 0;
    monoeg_g_free (name);
    return;
  }
  <D.24453>:
  if (invoke == 0B) goto <D.24458>; else goto <D.24460>;
  <D.24460>:
  D.24461 = mono_method_signature (invoke);
  if (D.24461 == 0B) goto <D.24458>; else goto <D.24459>;
  <D.24458>:
  {
    char * name;

    name = mono_type_get_full_name (delegate);
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.24445 = ctx->ip_offset;
      D.24462 = monoeg_g_strdup_printf ("Delegate type %s with bad Invoke method at 0x%04x", name, D.24445);
      vinfo->info.message = D.24462;
      vinfo->exception_type = 3;
      D.24447 = ctx->list;
      D.24463 = monoeg_g_slist_prepend (D.24447, vinfo);
      ctx->list = D.24463;
    }
    ctx->valid = 0;
    monoeg_g_free (name);
    return;
  }
  <D.24459>:
  if (ip_offset > 5) goto <D.24467>; else goto <D.24465>;
  <D.24467>:
  D.24468 = ip_offset + 4294967290;
  D.24469 = (sizetype) D.24468;
  D.24470 = ip + D.24469;
  D.24471 = *D.24470;
  if (D.24471 == 254) goto <D.24472>; else goto <D.24465>;
  <D.24472>:
  D.24473 = ctx->code;
  D.24468 = ip_offset + 4294967290;
  D.24474 = (long unsigned int) D.24468;
  D.24475 = D.24474 * 16;
  D.24476 = D.24473 + D.24475;
  D.24477 = D.24476->flags;
  D.24478 = (int) D.24477;
  D.24479 = D.24478 & 1;
  if (D.24479 != 0) goto <D.24480>; else goto <D.24465>;
  <D.24480>:
  D.24481 = ip_offset + 4294967291;
  D.24482 = (sizetype) D.24481;
  D.24483 = ip + D.24482;
  D.24484 = *D.24483;
  if (D.24484 == 6) goto <D.24485>; else goto <D.24465>;
  <D.24485>:
  D.24486 = method->flags;
  D.24487 = (int) D.24486;
  D.24488 = D.24487 & 16;
  if (D.24488 != 0) goto <D.24489>; else goto <D.24465>;
  <D.24489>:
  iftmp.82 = 1;
  goto <D.24466>;
  <D.24465>:
  iftmp.82 = 0;
  <D.24466>:
  is_static_ldftn = iftmp.82;
  if (is_static_ldftn != 0) goto <D.24490>; else goto <D.24491>;
  <D.24490>:
  D.24492 = mono_method_signature (invoke);
  D.24493 = D.24492->param_count;
  D.24494 = (int) D.24493;
  D.24495 = D.24494 + 1;
  D.24496 = mono_method_signature (method);
  D.24497 = D.24496->param_count;
  D.24498 = (int) D.24497;
  D.24499 = D.24495 == D.24498;
  is_first_arg_bound = (gboolean) D.24499;
  <D.24491>:
  D.24500 = mono_method_signature (invoke);
  D.24501 = mono_method_signature (method);
  D.24502 = mono_delegate_signature_equal (D.24500, D.24501, is_first_arg_bound);
  if (D.24502 == 0) goto <D.24503>; else goto <D.24504>;
  <D.24503>:
  {
    char * fun_sig;
    char * invoke_sig;

    D.24505 = mono_method_signature (method);
    fun_sig = mono_signature_get_desc (D.24505, 0);
    D.24506 = mono_method_signature (invoke);
    invoke_sig = mono_signature_get_desc (D.24506, 0);
    D.24441 = ctx->verifiable;
    if (D.24441 != 0) goto <D.24507>; else goto <D.24509>;
    <D.24509>:
    D.24443 = ctx->level;
    D.24444 = D.24443 & 128;
    if (D.24444 != 0) goto <D.24507>; else goto <D.24508>;
    <D.24507>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.24445 = ctx->ip_offset;
      D.24510 = monoeg_g_strdup_printf ("Function pointer signature \'%s\' doesn\'t match delegate\'s signature \'%s\' at 0x%04x", fun_sig, invoke_sig, D.24445);
      vinfo->info.message = D.24510;
      vinfo->exception_type = 4;
      D.24447 = ctx->list;
      D.24511 = monoeg_g_slist_prepend (D.24447, vinfo);
      ctx->list = D.24511;
    }
    ctx->verifiable = 0;
    D.24443 = ctx->level;
    D.24449 = D.24443 & 16;
    if (D.24449 != 0) goto <D.24512>; else goto <D.24513>;
    <D.24512>:
    ctx->valid = 0;
    <D.24513>:
    <D.24508>:
    monoeg_g_free (fun_sig);
    monoeg_g_free (invoke_sig);
  }
  <D.24504>:
  if (ip_offset > 5) goto <D.24516>; else goto <D.24514>;
  <D.24516>:
  D.24468 = ip_offset + 4294967290;
  D.24469 = (sizetype) D.24468;
  D.24470 = ip + D.24469;
  D.24471 = *D.24470;
  if (D.24471 == 254) goto <D.24517>; else goto <D.24514>;
  <D.24517>:
  D.24473 = ctx->code;
  D.24468 = ip_offset + 4294967290;
  D.24474 = (long unsigned int) D.24468;
  D.24475 = D.24474 * 16;
  D.24476 = D.24473 + D.24475;
  D.24477 = D.24476->flags;
  D.24478 = (int) D.24477;
  D.24479 = D.24478 & 1;
  if (D.24479 != 0) goto <D.24518>; else goto <D.24514>;
  <D.24518>:
  D.24481 = ip_offset + 4294967291;
  D.24482 = (sizetype) D.24481;
  D.24483 = ip + D.24482;
  D.24484 = *D.24483;
  if (D.24484 == 6) goto <D.24519>; else goto <D.24514>;
  <D.24519>:
  verify_ldftn_delegate (ctx, delegate, value, funptr);
  goto <D.24515>;
  <D.24514>:
  if (ip_offset > 6) goto <D.24522>; else goto <D.24520>;
  <D.24522>:
  D.24523 = ip_offset + 4294967289;
  D.24524 = (sizetype) D.24523;
  D.24525 = ip + D.24524;
  D.24526 = *D.24525;
  if (D.24526 == 37) goto <D.24527>; else goto <D.24520>;
  <D.24527>:
  D.24473 = ctx->code;
  D.24523 = ip_offset + 4294967289;
  D.24528 = (long unsigned int) D.24523;
  D.24529 = D.24528 * 16;
  D.24530 = D.24473 + D.24529;
  D.24531 = D.24530->flags;
  D.24532 = (int) D.24531;
  D.24533 = D.24532 & 1;
  if (D.24533 != 0) goto <D.24534>; else goto <D.24520>;
  <D.24534>:
  D.24468 = ip_offset + 4294967290;
  D.24469 = (sizetype) D.24468;
  D.24470 = ip + D.24469;
  D.24471 = *D.24470;
  if (D.24471 == 254) goto <D.24535>; else goto <D.24520>;
  <D.24535>:
  D.24473 = ctx->code;
  D.24468 = ip_offset + 4294967290;
  D.24474 = (long unsigned int) D.24468;
  D.24475 = D.24474 * 16;
  D.24476 = D.24473 + D.24475;
  D.24477 = D.24476->flags;
  D.24478 = (int) D.24477;
  D.24479 = D.24478 & 1;
  if (D.24479 != 0) goto <D.24536>; else goto <D.24520>;
  <D.24536>:
  D.24481 = ip_offset + 4294967291;
  D.24482 = (sizetype) D.24481;
  D.24483 = ip + D.24482;
  D.24484 = *D.24483;
  if (D.24484 == 7) goto <D.24537>; else goto <D.24520>;
  <D.24537>:
  D.24473 = ctx->code;
  D.24468 = ip_offset + 4294967290;
  D.24474 = (long unsigned int) D.24468;
  D.24475 = D.24474 * 16;
  D.24476 = D.24473 + D.24475;
  D.24473 = ctx->code;
  D.24468 = ip_offset + 4294967290;
  D.24474 = (long unsigned int) D.24468;
  D.24475 = D.24474 * 16;
  D.24476 = D.24473 + D.24475;
  D.24477 = D.24476->flags;
  D.24538 = D.24477 | 16;
  D.24476->flags = D.24538;
  goto <D.24521>;
  <D.24520>:
  D.24441 = ctx->verifiable;
  if (D.24441 != 0) goto <D.24539>; else goto <D.24541>;
  <D.24541>:
  D.24443 = ctx->level;
  D.24444 = D.24443 & 128;
  if (D.24444 != 0) goto <D.24539>; else goto <D.24540>;
  <D.24539>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24445 = ctx->ip_offset;
    D.24542 = monoeg_g_strdup_printf ("Invalid code sequence for delegate creation at 0x%04x", D.24445);
    vinfo->info.message = D.24542;
    vinfo->exception_type = 4;
    D.24447 = ctx->list;
    D.24543 = monoeg_g_slist_prepend (D.24447, vinfo);
    ctx->list = D.24543;
  }
  ctx->verifiable = 0;
  D.24443 = ctx->level;
  D.24449 = D.24443 & 16;
  if (D.24449 != 0) goto <D.24544>; else goto <D.24545>;
  <D.24544>:
  ctx->valid = 0;
  <D.24545>:
  <D.24540>:
  <D.24521>:
  <D.24515>:
  D.24473 = ctx->code;
  D.24546 = (long unsigned int) ip_offset;
  D.24547 = D.24546 * 16;
  D.24548 = D.24473 + D.24547;
  D.24473 = ctx->code;
  D.24546 = (long unsigned int) ip_offset;
  D.24547 = D.24546 * 16;
  D.24548 = D.24473 + D.24547;
  D.24549 = D.24548->flags;
  D.24550 = D.24549 | 16;
  D.24548->flags = D.24550;
  if (is_first_arg_bound != 0) goto <D.24551>; else goto <D.24552>;
  <D.24551>:
  D.24555 = mono_method_signature (method);
  D.24556 = D.24555->param_count;
  if (D.24556 == 0) goto <D.24553>; else goto <D.24557>;
  <D.24557>:
  D.24558 = mono_method_signature (method);
  D.24559 = D.24558->params[0];
  D.24560 = verify_stack_type_compatibility_full (ctx, D.24559, value, 0, 1);
  if (D.24560 == 0) goto <D.24553>; else goto <D.24554>;
  <D.24553>:
  D.24441 = ctx->verifiable;
  if (D.24441 != 0) goto <D.24561>; else goto <D.24563>;
  <D.24563>:
  D.24443 = ctx->level;
  D.24444 = D.24443 & 128;
  if (D.24444 != 0) goto <D.24561>; else goto <D.24562>;
  <D.24561>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24445 = ctx->ip_offset;
    D.24564 = monoeg_g_strdup_printf ("This object not compatible with function pointer for delegate creation at 0x%04x", D.24445);
    vinfo->info.message = D.24564;
    vinfo->exception_type = 4;
    D.24447 = ctx->list;
    D.24565 = monoeg_g_slist_prepend (D.24447, vinfo);
    ctx->list = D.24565;
  }
  ctx->verifiable = 0;
  D.24443 = ctx->level;
  D.24449 = D.24443 & 16;
  if (D.24449 != 0) goto <D.24566>; else goto <D.24567>;
  <D.24566>:
  ctx->valid = 0;
  <D.24567>:
  <D.24562>:
  <D.24554>:
  goto <D.24568>;
  <D.24552>:
  D.24486 = method->flags;
  D.24487 = (int) D.24486;
  D.24488 = D.24487 & 16;
  if (D.24488 != 0) goto <D.24569>; else goto <D.24570>;
  <D.24569>:
  D.24571 = stack_slot_is_null_literal (value);
  if (D.24571 == 0) goto <D.24572>; else goto <D.24573>;
  <D.24572>:
  if (is_first_arg_bound == 0) goto <D.24574>; else goto <D.24575>;
  <D.24574>:
  D.24441 = ctx->verifiable;
  if (D.24441 != 0) goto <D.24576>; else goto <D.24578>;
  <D.24578>:
  D.24443 = ctx->level;
  D.24444 = D.24443 & 128;
  if (D.24444 != 0) goto <D.24576>; else goto <D.24577>;
  <D.24576>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24445 = ctx->ip_offset;
    D.24579 = monoeg_g_strdup_printf ("Non-null this args used with static function for delegate creation at 0x%04x", D.24445);
    vinfo->info.message = D.24579;
    vinfo->exception_type = 4;
    D.24447 = ctx->list;
    D.24580 = monoeg_g_slist_prepend (D.24447, vinfo);
    ctx->list = D.24580;
  }
  ctx->verifiable = 0;
  D.24443 = ctx->level;
  D.24449 = D.24443 & 16;
  if (D.24449 != 0) goto <D.24581>; else goto <D.24582>;
  <D.24581>:
  ctx->valid = 0;
  <D.24582>:
  <D.24577>:
  <D.24575>:
  <D.24573>:
  goto <D.24583>;
  <D.24570>:
  D.24584 = method->klass;
  D.24585 = &D.24584->byval_arg;
  D.24586 = verify_stack_type_compatibility_full (ctx, D.24585, value, 0, 1);
  if (D.24586 == 0) goto <D.24587>; else goto <D.24588>;
  <D.24587>:
  D.24589 = stack_slot_is_null_literal (value);
  if (D.24589 == 0) goto <D.24590>; else goto <D.24591>;
  <D.24590>:
  D.24441 = ctx->verifiable;
  if (D.24441 != 0) goto <D.24592>; else goto <D.24594>;
  <D.24594>:
  D.24443 = ctx->level;
  D.24444 = D.24443 & 128;
  if (D.24444 != 0) goto <D.24592>; else goto <D.24593>;
  <D.24592>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24445 = ctx->ip_offset;
    D.24595 = monoeg_g_strdup_printf ("This object not compatible with function pointer for delegate creation at 0x%04x", D.24445);
    vinfo->info.message = D.24595;
    vinfo->exception_type = 4;
    D.24447 = ctx->list;
    D.24596 = monoeg_g_slist_prepend (D.24447, vinfo);
    ctx->list = D.24596;
  }
  ctx->verifiable = 0;
  D.24443 = ctx->level;
  D.24449 = D.24443 & 16;
  if (D.24449 != 0) goto <D.24597>; else goto <D.24598>;
  <D.24597>:
  ctx->valid = 0;
  <D.24598>:
  <D.24593>:
  <D.24591>:
  <D.24588>:
  <D.24583>:
  <D.24568>:
  D.24599 = stack_slot_get_type (value);
  if (D.24599 != 6) goto <D.24600>; else goto <D.24601>;
  <D.24600>:
  D.24441 = ctx->verifiable;
  if (D.24441 != 0) goto <D.24602>; else goto <D.24604>;
  <D.24604>:
  D.24443 = ctx->level;
  D.24444 = D.24443 & 128;
  if (D.24444 != 0) goto <D.24602>; else goto <D.24603>;
  <D.24602>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24445 = ctx->ip_offset;
    D.24605 = monoeg_g_strdup_printf ("Invalid first parameter for delegate creation at 0x%04x", D.24445);
    vinfo->info.message = D.24605;
    vinfo->exception_type = 4;
    D.24447 = ctx->list;
    D.24606 = monoeg_g_slist_prepend (D.24447, vinfo);
    ctx->list = D.24606;
  }
  ctx->verifiable = 0;
  D.24443 = ctx->level;
  D.24449 = D.24443 & 16;
  if (D.24449 != 0) goto <D.24607>; else goto <D.24608>;
  <D.24607>:
  ctx->valid = 0;
  <D.24608>:
  <D.24603>:
  <D.24601>:
}


verify_ldftn_delegate (struct VerifyContext * ctx, struct MonoClass * delegate, struct ILStackDesc * value, struct ILStackDesc * funptr)
{
  short unsigned int D.24610;
  unsigned int D.24611;
  unsigned int D.24612;
  struct MonoClass * D.24615;
  unsigned int D.24616;
  unsigned int D.24617;
  int D.24620;
  int D.24623;
  int D.24624;
  int D.24627;
  int D.24632;
  int D.24634;
  unsigned int D.24635;
  gchar * D.24636;
  struct GSList * D.24637;
  struct GSList * D.24638;
  struct MonoMethod * D.24641;
  short unsigned int D.24642;
  int D.24643;
  int D.24644;
  gchar * D.24650;
  struct GSList * D.24651;
  int D.24654;
  gchar * D.24660;
  struct GSList * D.24661;
  struct ILCodeDesc * D.24664;
  long unsigned int D.24665;
  long unsigned int D.24666;
  struct ILCodeDesc * D.24667;
  short unsigned int D.24668;
  short unsigned int D.24669;
  struct MonoMethod * method;

  method = funptr->method;
  D.24610 = method->flags;
  D.24611 = (unsigned int) D.24610;
  D.24612 = D.24611 & 96;
  if (D.24612 == 64) goto <D.24613>; else goto <D.24614>;
  <D.24613>:
  D.24615 = method->klass;
  D.24616 = D.24615->flags;
  D.24617 = D.24616 & 256;
  if (D.24617 == 0) goto <D.24618>; else goto <D.24619>;
  <D.24618>:
  D.24620 = stack_slot_is_boxed_value (value);
  if (D.24620 == 0) goto <D.24621>; else goto <D.24622>;
  <D.24621>:
  D.24623 = ctx->level;
  D.24624 = D.24623 & 16;
  if (D.24624 != 0) goto <D.24625>; else goto <D.24626>;
  <D.24625>:
  D.24627 = ctx->has_this_store;
  if (D.24627 != 0) goto <D.24628>; else goto <D.24629>;
  <D.24628>:
  D.24632 = ctx->verifiable;
  if (D.24632 != 0) goto <D.24630>; else goto <D.24633>;
  <D.24633>:
  D.24623 = ctx->level;
  D.24634 = D.24623 & 128;
  if (D.24634 != 0) goto <D.24630>; else goto <D.24631>;
  <D.24630>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24635 = ctx->ip_offset;
    D.24636 = monoeg_g_strdup_printf ("Invalid ldftn with virtual function in method with stdarg 0 at  0x%04x", D.24635);
    vinfo->info.message = D.24636;
    vinfo->exception_type = 4;
    D.24637 = ctx->list;
    D.24638 = monoeg_g_slist_prepend (D.24637, vinfo);
    ctx->list = D.24638;
  }
  ctx->verifiable = 0;
  D.24623 = ctx->level;
  D.24624 = D.24623 & 16;
  if (D.24624 != 0) goto <D.24639>; else goto <D.24640>;
  <D.24639>:
  ctx->valid = 0;
  <D.24640>:
  <D.24631>:
  <D.24629>:
  <D.24626>:
  D.24641 = ctx->method;
  D.24642 = D.24641->flags;
  D.24643 = (int) D.24642;
  D.24644 = D.24643 & 16;
  if (D.24644 != 0) goto <D.24645>; else goto <D.24646>;
  <D.24645>:
  D.24632 = ctx->verifiable;
  if (D.24632 != 0) goto <D.24647>; else goto <D.24649>;
  <D.24649>:
  D.24623 = ctx->level;
  D.24634 = D.24623 & 128;
  if (D.24634 != 0) goto <D.24647>; else goto <D.24648>;
  <D.24647>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24635 = ctx->ip_offset;
    D.24650 = monoeg_g_strdup_printf ("Invalid ldftn with virtual function at 0x%04x", D.24635);
    vinfo->info.message = D.24650;
    vinfo->exception_type = 4;
    D.24637 = ctx->list;
    D.24651 = monoeg_g_slist_prepend (D.24637, vinfo);
    ctx->list = D.24651;
  }
  ctx->verifiable = 0;
  D.24623 = ctx->level;
  D.24624 = D.24623 & 16;
  if (D.24624 != 0) goto <D.24652>; else goto <D.24653>;
  <D.24652>:
  ctx->valid = 0;
  <D.24653>:
  <D.24648>:
  <D.24646>:
  D.24654 = stack_slot_is_this_pointer (value);
  if (D.24654 == 0) goto <D.24655>; else goto <D.24656>;
  <D.24655>:
  D.24632 = ctx->verifiable;
  if (D.24632 != 0) goto <D.24657>; else goto <D.24659>;
  <D.24659>:
  D.24623 = ctx->level;
  D.24634 = D.24623 & 128;
  if (D.24634 != 0) goto <D.24657>; else goto <D.24658>;
  <D.24657>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24635 = ctx->ip_offset;
    D.24660 = monoeg_g_strdup_printf ("Invalid object argument, it is not the this pointer, to ldftn with virtual method at  0x%04x", D.24635);
    vinfo->info.message = D.24660;
    vinfo->exception_type = 4;
    D.24637 = ctx->list;
    D.24661 = monoeg_g_slist_prepend (D.24637, vinfo);
    ctx->list = D.24661;
  }
  ctx->verifiable = 0;
  D.24623 = ctx->level;
  D.24624 = D.24623 & 16;
  if (D.24624 != 0) goto <D.24662>; else goto <D.24663>;
  <D.24662>:
  ctx->valid = 0;
  <D.24663>:
  <D.24658>:
  <D.24656>:
  D.24664 = ctx->code;
  D.24635 = ctx->ip_offset;
  D.24665 = (long unsigned int) D.24635;
  D.24666 = D.24665 * 16;
  D.24667 = D.24664 + D.24666;
  D.24664 = ctx->code;
  D.24635 = ctx->ip_offset;
  D.24665 = (long unsigned int) D.24635;
  D.24666 = D.24665 * 16;
  D.24667 = D.24664 + D.24666;
  D.24668 = D.24667->flags;
  D.24669 = D.24668 | 32;
  D.24667->flags = D.24669;
  <D.24622>:
  <D.24619>:
  <D.24614>:
}


do_cast (struct VerifyContext * ctx, int token, const char * opcode)
{
  int D.24670;
  long unsigned int D.24675;
  long unsigned int D.24676;
  unsigned int D.24679;
  gchar * D.24680;
  struct GSList * D.24681;
  struct GSList * D.24682;
  int D.24683;
  int D.24688;
  int D.24690;
  int D.24691;
  gchar * D.24692;
  struct GSList * D.24693;
  int D.24694;
  struct MonoType * D.24698;
  int D.24699;
  gchar * D.24707;
  struct GSList * D.24708;
  unsigned char D.24711;
  int D.24712;
  gchar * D.24716;
  struct GSList * D.24717;
  int iftmp.83;
  int D.24726;
  struct MonoClass * D.24728;
  long unsigned int D.24729;
  long unsigned int D.24730;
  int iftmp.84;
  struct ILStackDesc * value;
  struct MonoType * type;
  gboolean is_boxed;
  gboolean do_box;

  D.24670 = check_underflow (ctx, 1);
  if (D.24670 == 0) goto <D.24671>; else goto <D.24672>;
  <D.24671>:
  return;
  <D.24672>:
  type = get_boxable_mono_type (ctx, token, opcode);
  if (type == 0B) goto <D.24673>; else goto <D.24674>;
  <D.24673>:
  return;
  <D.24674>:
  D.24675 = BIT_FIELD_REF <*type, 64, 64>;
  D.24676 = D.24675 & 1073741824;
  if (D.24676 != 0) goto <D.24677>; else goto <D.24678>;
  <D.24677>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.24679 = ctx->ip_offset;
    D.24680 = monoeg_g_strdup_printf ("Invalid %s type at 0x%04x", opcode, D.24679);
    vinfo->info.message = D.24680;
    vinfo->exception_type = 3;
    D.24681 = ctx->list;
    D.24682 = monoeg_g_slist_prepend (D.24681, vinfo);
    ctx->list = D.24682;
  }
  ctx->valid = 0;
  return;
  <D.24678>:
  value = stack_pop (ctx);
  is_boxed = stack_slot_is_boxed_value (value);
  D.24683 = stack_slot_is_managed_pointer (value);
  if (D.24683 != 0) goto <D.24684>; else goto <D.24685>;
  <D.24684>:
  D.24688 = ctx->verifiable;
  if (D.24688 != 0) goto <D.24686>; else goto <D.24689>;
  <D.24689>:
  D.24690 = ctx->level;
  D.24691 = D.24690 & 128;
  if (D.24691 != 0) goto <D.24686>; else goto <D.24687>;
  <D.24686>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24679 = ctx->ip_offset;
    D.24692 = monoeg_g_strdup_printf ("Invalid value for %s at 0x%04x", opcode, D.24679);
    vinfo->info.message = D.24692;
    vinfo->exception_type = 4;
    D.24681 = ctx->list;
    D.24693 = monoeg_g_slist_prepend (D.24681, vinfo);
    ctx->list = D.24693;
  }
  ctx->verifiable = 0;
  D.24690 = ctx->level;
  D.24694 = D.24690 & 16;
  if (D.24694 != 0) goto <D.24695>; else goto <D.24696>;
  <D.24695>:
  ctx->valid = 0;
  <D.24696>:
  <D.24687>:
  goto <D.24697>;
  <D.24685>:
  D.24698 = value->type;
  D.24699 = mono_type_is_reference (D.24698);
  if (D.24699 == 0) goto <D.24700>; else goto <D.24701>;
  <D.24700>:
  if (is_boxed == 0) goto <D.24702>; else goto <D.24703>;
  <D.24702>:
  {
    char * name;

    name = stack_slot_full_name (value);
    D.24688 = ctx->verifiable;
    if (D.24688 != 0) goto <D.24704>; else goto <D.24706>;
    <D.24706>:
    D.24690 = ctx->level;
    D.24691 = D.24690 & 128;
    if (D.24691 != 0) goto <D.24704>; else goto <D.24705>;
    <D.24704>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.24679 = ctx->ip_offset;
      D.24707 = monoeg_g_strdup_printf ("Expected a reference type on stack for %s but found %s at 0x%04x", opcode, name, D.24679);
      vinfo->info.message = D.24707;
      vinfo->exception_type = 4;
      D.24681 = ctx->list;
      D.24708 = monoeg_g_slist_prepend (D.24681, vinfo);
      ctx->list = D.24708;
    }
    ctx->verifiable = 0;
    D.24690 = ctx->level;
    D.24694 = D.24690 & 16;
    if (D.24694 != 0) goto <D.24709>; else goto <D.24710>;
    <D.24709>:
    ctx->valid = 0;
    <D.24710>:
    <D.24705>:
    monoeg_g_free (name);
  }
  <D.24703>:
  <D.24701>:
  <D.24697>:
  D.24698 = value->type;
  D.24711 = D.24698->type;
  D.24712 = (int) D.24711;
  switch (D.24712) <default: <D.24720>, case 15: <D.19618>, case 22: <D.19619>, case 27: <D.19617>>
  <D.19617>:
  <D.19618>:
  <D.19619>:
  D.24688 = ctx->verifiable;
  if (D.24688 != 0) goto <D.24713>; else goto <D.24715>;
  <D.24715>:
  D.24690 = ctx->level;
  D.24691 = D.24690 & 128;
  if (D.24691 != 0) goto <D.24713>; else goto <D.24714>;
  <D.24713>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24679 = ctx->ip_offset;
    D.24716 = monoeg_g_strdup_printf ("Invalid value for %s at 0x%04x", opcode, D.24679);
    vinfo->info.message = D.24716;
    vinfo->exception_type = 4;
    D.24681 = ctx->list;
    D.24717 = monoeg_g_slist_prepend (D.24681, vinfo);
    ctx->list = D.24717;
  }
  ctx->verifiable = 0;
  D.24690 = ctx->level;
  D.24694 = D.24690 & 16;
  if (D.24694 != 0) goto <D.24718>; else goto <D.24719>;
  <D.24718>:
  ctx->valid = 0;
  <D.24719>:
  <D.24714>:
  <D.24720>:
  if (is_boxed != 0) goto <D.24722>; else goto <D.24725>;
  <D.24725>:
  D.24726 = mono_type_is_generic_argument (type);
  if (D.24726 != 0) goto <D.24722>; else goto <D.24727>;
  <D.24727>:
  D.24728 = mono_class_from_mono_type (type);
  D.24729 = BIT_FIELD_REF <*D.24728, 64, 256>;
  D.24730 = D.24729 & 8;
  if (D.24730 != 0) goto <D.24722>; else goto <D.24723>;
  <D.24722>:
  iftmp.83 = 1;
  goto <D.24724>;
  <D.24723>:
  iftmp.83 = 0;
  <D.24724>:
  do_box = iftmp.83;
  if (do_box != 0) goto <D.24732>; else goto <D.24733>;
  <D.24732>:
  iftmp.84 = 4102;
  goto <D.24734>;
  <D.24733>:
  iftmp.84 = 6;
  <D.24734>:
  stack_push_val (ctx, iftmp.84, type);
}


do_unbox_value (struct VerifyContext * ctx, int klass_token)
{
  int D.24738;
  struct MonoClass * D.24741;
  long unsigned int D.24742;
  long unsigned int D.24743;
  int D.24748;
  int D.24750;
  int D.24751;
  unsigned int D.24752;
  gchar * D.24753;
  struct GSList * D.24754;
  struct GSList * D.24755;
  int D.24756;
  int D.24761;
  int D.24763;
  struct MonoType * D.24765;
  struct MonoClass * D.24766;
  long unsigned int D.24767;
  long unsigned int D.24768;
  const char * D.24772;
  gchar * D.24773;
  struct GSList * D.24774;
  struct MonoType * D.24777;
  int D.24778;
  int D.24779;
  struct ILStackDesc * value;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, klass_token, "unbox");
  if (type == 0B) goto <D.24736>; else goto <D.24737>;
  <D.24736>:
  return;
  <D.24737>:
  D.24738 = check_underflow (ctx, 1);
  if (D.24738 == 0) goto <D.24739>; else goto <D.24740>;
  <D.24739>:
  return;
  <D.24740>:
  D.24741 = mono_class_from_mono_type (type);
  D.24742 = BIT_FIELD_REF <*D.24741, 64, 256>;
  D.24743 = D.24742 & 8;
  if (D.24743 == 0) goto <D.24744>; else goto <D.24745>;
  <D.24744>:
  D.24748 = ctx->verifiable;
  if (D.24748 != 0) goto <D.24746>; else goto <D.24749>;
  <D.24749>:
  D.24750 = ctx->level;
  D.24751 = D.24750 & 128;
  if (D.24751 != 0) goto <D.24746>; else goto <D.24747>;
  <D.24746>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24752 = ctx->ip_offset;
    D.24753 = monoeg_g_strdup_printf ("Invalid reference type for unbox at 0x%04x", D.24752);
    vinfo->info.message = D.24753;
    vinfo->exception_type = 4;
    D.24754 = ctx->list;
    D.24755 = monoeg_g_slist_prepend (D.24754, vinfo);
    ctx->list = D.24755;
  }
  ctx->verifiable = 0;
  D.24750 = ctx->level;
  D.24756 = D.24750 & 16;
  if (D.24756 != 0) goto <D.24757>; else goto <D.24758>;
  <D.24757>:
  ctx->valid = 0;
  <D.24758>:
  <D.24747>:
  <D.24745>:
  value = stack_pop (ctx);
  D.24761 = stack_slot_get_type (value);
  if (D.24761 != 6) goto <D.24759>; else goto <D.24762>;
  <D.24762>:
  D.24763 = stack_slot_is_boxed_value (value);
  if (D.24763 == 0) goto <D.24764>; else goto <D.24760>;
  <D.24764>:
  D.24765 = value->type;
  D.24766 = mono_class_from_mono_type (D.24765);
  D.24767 = BIT_FIELD_REF <*D.24766, 64, 256>;
  D.24768 = D.24767 & 8;
  if (D.24768 != 0) goto <D.24759>; else goto <D.24760>;
  <D.24759>:
  D.24748 = ctx->verifiable;
  if (D.24748 != 0) goto <D.24769>; else goto <D.24771>;
  <D.24771>:
  D.24750 = ctx->level;
  D.24751 = D.24750 & 128;
  if (D.24751 != 0) goto <D.24769>; else goto <D.24770>;
  <D.24769>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24772 = stack_slot_get_name (value);
    D.24752 = ctx->ip_offset;
    D.24773 = monoeg_g_strdup_printf ("Invalid type %s at stack for unbox operation at 0x%04x", D.24772, D.24752);
    vinfo->info.message = D.24773;
    vinfo->exception_type = 4;
    D.24754 = ctx->list;
    D.24774 = monoeg_g_slist_prepend (D.24754, vinfo);
    ctx->list = D.24774;
  }
  ctx->verifiable = 0;
  D.24750 = ctx->level;
  D.24756 = D.24750 & 16;
  if (D.24756 != 0) goto <D.24775>; else goto <D.24776>;
  <D.24775>:
  ctx->valid = 0;
  <D.24776>:
  <D.24770>:
  <D.24760>:
  value = stack_push (ctx);
  D.24777 = mono_type_get_type_byref (type);
  set_stack_value (ctx, value, D.24777, 0);
  D.24778 = value->stype;
  D.24779 = D.24778 | 512;
  value->stype = D.24779;
}


do_throw (struct VerifyContext * ctx)
{
  int D.24781;
  int D.24786;
  int D.24789;
  struct MonoType * D.24791;
  struct MonoClass * D.24792;
  long unsigned int D.24793;
  long unsigned int D.24794;
  int D.24797;
  int D.24799;
  int D.24800;
  unsigned int D.24801;
  gchar * D.24802;
  struct GSList * D.24803;
  struct GSList * D.24804;
  int D.24805;
  int D.24808;
  int D.24811;
  gchar * D.24817;
  struct GSList * D.24818;
  struct ILStackDesc * exception;

  D.24781 = check_underflow (ctx, 1);
  if (D.24781 == 0) goto <D.24782>; else goto <D.24783>;
  <D.24782>:
  return;
  <D.24783>:
  exception = stack_pop (ctx);
  D.24786 = stack_slot_is_null_literal (exception);
  if (D.24786 == 0) goto <D.24787>; else goto <D.24788>;
  <D.24787>:
  D.24789 = stack_slot_get_type (exception);
  if (D.24789 != 6) goto <D.24784>; else goto <D.24790>;
  <D.24790>:
  D.24791 = exception->type;
  D.24792 = mono_class_from_mono_type (D.24791);
  D.24793 = BIT_FIELD_REF <*D.24792, 64, 256>;
  D.24794 = D.24793 & 8;
  if (D.24794 != 0) goto <D.24784>; else goto <D.24785>;
  <D.24784>:
  D.24797 = ctx->verifiable;
  if (D.24797 != 0) goto <D.24795>; else goto <D.24798>;
  <D.24798>:
  D.24799 = ctx->level;
  D.24800 = D.24799 & 128;
  if (D.24800 != 0) goto <D.24795>; else goto <D.24796>;
  <D.24795>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.24801 = ctx->ip_offset;
    D.24802 = monoeg_g_strdup_printf ("Invalid type on stack for throw, expected reference type at 0x%04x", D.24801);
    vinfo->info.message = D.24802;
    vinfo->exception_type = 4;
    D.24803 = ctx->list;
    D.24804 = monoeg_g_slist_prepend (D.24803, vinfo);
    ctx->list = D.24804;
  }
  ctx->verifiable = 0;
  D.24799 = ctx->level;
  D.24805 = D.24799 & 16;
  if (D.24805 != 0) goto <D.24806>; else goto <D.24807>;
  <D.24806>:
  ctx->valid = 0;
  <D.24807>:
  <D.24796>:
  <D.24785>:
  <D.24788>:
  D.24791 = exception->type;
  D.24808 = mono_type_is_generic_argument (D.24791);
  if (D.24808 != 0) goto <D.24809>; else goto <D.24810>;
  <D.24809>:
  D.24811 = stack_slot_is_boxed_value (exception);
  if (D.24811 == 0) goto <D.24812>; else goto <D.24813>;
  <D.24812>:
  {
    char * name;

    D.24791 = exception->type;
    name = mono_type_full_name (D.24791);
    D.24797 = ctx->verifiable;
    if (D.24797 != 0) goto <D.24814>; else goto <D.24816>;
    <D.24816>:
    D.24799 = ctx->level;
    D.24800 = D.24799 & 128;
    if (D.24800 != 0) goto <D.24814>; else goto <D.24815>;
    <D.24814>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.24801 = ctx->ip_offset;
      D.24817 = monoeg_g_strdup_printf ("Invalid type on stack for throw, expected reference type but found unboxed %s  at 0x%04x ", name, D.24801);
      vinfo->info.message = D.24817;
      vinfo->exception_type = 4;
      D.24803 = ctx->list;
      D.24818 = monoeg_g_slist_prepend (D.24803, vinfo);
      ctx->list = D.24818;
    }
    ctx->verifiable = 0;
    D.24799 = ctx->level;
    D.24805 = D.24799 & 16;
    if (D.24805 != 0) goto <D.24819>; else goto <D.24820>;
    <D.24819>:
    ctx->valid = 0;
    <D.24820>:
    <D.24815>:
    monoeg_g_free (name);
  }
  <D.24813>:
  <D.24810>:
  ctx->eval.size = 0;
}


do_push_field (struct VerifyContext * ctx, int token, gboolean take_addr)
{
  unsigned int D.24824;
  unsigned int D.24825;
  int D.24826;
  const char * iftmp.85;
  int D.24833;
  struct MonoClassField * field.86;
  struct MonoClass * D.24839;
  long unsigned int D.24840;
  long unsigned int D.24841;
  int D.24844;
  int D.24849;
  int D.24851;
  int D.24852;
  unsigned int D.24853;
  gchar * D.24854;
  struct GSList * D.24855;
  struct GSList * D.24856;
  int D.24857;
  struct MonoType * D.24864;
  short unsigned int D.24865;
  int D.24866;
  int D.24867;
  struct MonoMethod * D.24870;
  struct MonoClass * D.24871;
  int D.24873;
  gchar * D.24877;
  struct GSList * D.24878;
  struct ILStackDesc * D.24881;
  struct ILStackDesc * obj;
  struct MonoClassField * field;

  try
    {
      if (take_addr == 0) goto <D.24822>; else goto <D.24823>;
      <D.24822>:
      D.24824 = ctx->prefix_set;
      D.24825 = D.24824 & 4294967292;
      ctx->prefix_set = D.24825;
      <D.24823>:
      D.24826 = check_underflow (ctx, 1);
      if (D.24826 == 0) goto <D.24827>; else goto <D.24828>;
      <D.24827>:
      return;
      <D.24828>:
      obj = stack_pop_safe (ctx);
      if (take_addr != 0) goto <D.24830>; else goto <D.24831>;
      <D.24830>:
      iftmp.85 = "ldflda";
      goto <D.24832>;
      <D.24831>:
      iftmp.85 = "ldfld";
      <D.24832>:
      D.24833 = check_is_valid_type_for_field_ops (ctx, token, obj, &field, iftmp.85);
      if (D.24833 == 0) goto <D.24834>; else goto <D.24835>;
      <D.24834>:
      return;
      <D.24835>:
      if (take_addr != 0) goto <D.24836>; else goto <D.24837>;
      <D.24836>:
      field.86 = field;
      D.24839 = field.86->parent;
      D.24840 = BIT_FIELD_REF <*D.24839, 64, 256>;
      D.24841 = D.24840 & 8;
      if (D.24841 != 0) goto <D.24842>; else goto <D.24843>;
      <D.24842>:
      D.24844 = stack_slot_is_managed_pointer (obj);
      if (D.24844 == 0) goto <D.24845>; else goto <D.24846>;
      <D.24845>:
      D.24849 = ctx->verifiable;
      if (D.24849 != 0) goto <D.24847>; else goto <D.24850>;
      <D.24850>:
      D.24851 = ctx->level;
      D.24852 = D.24851 & 128;
      if (D.24852 != 0) goto <D.24847>; else goto <D.24848>;
      <D.24847>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24853 = ctx->ip_offset;
        D.24854 = monoeg_g_strdup_printf ("Cannot take the address of a temporary value-type at 0x%04x", D.24853);
        vinfo->info.message = D.24854;
        vinfo->exception_type = 4;
        D.24855 = ctx->list;
        D.24856 = monoeg_g_slist_prepend (D.24855, vinfo);
        ctx->list = D.24856;
      }
      ctx->verifiable = 0;
      D.24851 = ctx->level;
      D.24857 = D.24851 & 16;
      if (D.24857 != 0) goto <D.24858>; else goto <D.24859>;
      <D.24858>:
      ctx->valid = 0;
      <D.24859>:
      <D.24848>:
      <D.24846>:
      <D.24843>:
      <D.24837>:
      if (take_addr != 0) goto <D.24862>; else goto <D.24863>;
      <D.24862>:
      field.86 = field;
      D.24864 = field.86->type;
      D.24865 = D.24864->attrs;
      D.24866 = (int) D.24865;
      D.24867 = D.24866 & 32;
      if (D.24867 != 0) goto <D.24868>; else goto <D.24869>;
      <D.24868>:
      field.86 = field;
      D.24839 = field.86->parent;
      D.24870 = ctx->method;
      D.24871 = D.24870->klass;
      if (D.24839 != D.24871) goto <D.24860>; else goto <D.24872>;
      <D.24872>:
      D.24870 = ctx->method;
      D.24873 = mono_method_is_constructor (D.24870);
      if (D.24873 == 0) goto <D.24860>; else goto <D.24861>;
      <D.24860>:
      D.24849 = ctx->verifiable;
      if (D.24849 != 0) goto <D.24874>; else goto <D.24876>;
      <D.24876>:
      D.24851 = ctx->level;
      D.24852 = D.24851 & 128;
      if (D.24852 != 0) goto <D.24874>; else goto <D.24875>;
      <D.24874>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24853 = ctx->ip_offset;
        D.24877 = monoeg_g_strdup_printf ("Cannot take the address of a init-only field at 0x%04x", D.24853);
        vinfo->info.message = D.24877;
        vinfo->exception_type = 4;
        D.24855 = ctx->list;
        D.24878 = monoeg_g_slist_prepend (D.24855, vinfo);
        ctx->list = D.24878;
      }
      ctx->verifiable = 0;
      D.24851 = ctx->level;
      D.24857 = D.24851 & 16;
      if (D.24857 != 0) goto <D.24879>; else goto <D.24880>;
      <D.24879>:
      ctx->valid = 0;
      <D.24880>:
      <D.24875>:
      <D.24861>:
      <D.24869>:
      <D.24863>:
      D.24881 = stack_push (ctx);
      field.86 = field;
      D.24864 = field.86->type;
      set_stack_value (ctx, D.24881, D.24864, take_addr);
    }
  finally
    {
      field = {CLOBBER};
    }
}


check_is_valid_type_for_field_ops (struct VerifyContext * ctx, int token, struct ILStackDesc * obj, struct MonoClassField * * ret_field, const char * opcode)
{
  gboolean D.24887;
  int iftmp.87;
  int D.24892;
  int D.24894;
  struct MonoClass * D.24896;
  struct MonoType * D.24897;
  int D.24898;
  struct MonoType * D.24899;
  unsigned char D.24900;
  unsigned int D.24903;
  gchar * D.24904;
  struct GSList * D.24905;
  struct GSList * D.24906;
  struct MonoType * D.24907;
  _Bool D.24908;
  long int D.24909;
  long int D.24910;
  int D.24915;
  int D.24920;
  int D.24922;
  int D.24923;
  gchar * D.24924;
  struct GSList * D.24925;
  int D.24926;
  int D.24929;
  struct MonoMethod * D.24932;
  int D.24933;
  gchar * D.24939;
  struct GSList * D.24940;
  long unsigned int D.24944;
  long unsigned int D.24945;
  int D.24948;
  gchar * D.24954;
  struct GSList * D.24955;
  int D.24960;
  gchar * D.24966;
  struct GSList * D.24967;
  int D.24970;
  int D.24973;
  gchar * D.24979;
  struct GSList * D.24980;
  struct MonoClass * D.24985;
  int D.24986;
  gchar * D.24992;
  struct GSList * D.24993;
  struct MonoClassField * field;
  struct MonoClass * klass;
  gboolean is_pointer;

  try
    {
      field = verifier_load_field (ctx, token, &klass, opcode);
      if (field == 0B) goto <D.24885>; else goto <D.24886>;
      <D.24885>:
      D.24887 = 0;
      return D.24887;
      <D.24886>:
      *ret_field = field;
      D.24892 = stack_slot_get_type (obj);
      if (D.24892 == 5) goto <D.24889>; else goto <D.24893>;
      <D.24893>:
      D.24894 = stack_slot_get_type (obj);
      if (D.24894 == 3) goto <D.24895>; else goto <D.24890>;
      <D.24895>:
      D.24896 = field->parent;
      D.24897 = &D.24896->byval_arg;
      D.24898 = get_stack_type (D.24897);
      if (D.24898 == 0) goto <D.24889>; else goto <D.24890>;
      <D.24889>:
      iftmp.87 = 1;
      goto <D.24891>;
      <D.24890>:
      iftmp.87 = 0;
      <D.24891>:
      is_pointer = iftmp.87;
      D.24899 = field->type;
      D.24900 = D.24899->type;
      if (D.24900 == 22) goto <D.24901>; else goto <D.24902>;
      <D.24901>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24903 = ctx->ip_offset;
        D.24904 = monoeg_g_strdup_printf ("Typedbyref field is an unverfiable type at 0x%04x", D.24903);
        vinfo->info.message = D.24904;
        vinfo->exception_type = 3;
        D.24905 = ctx->list;
        D.24906 = monoeg_g_slist_prepend (D.24905, vinfo);
        ctx->list = D.24906;
      }
      ctx->valid = 0;
      D.24887 = 0;
      return D.24887;
      <D.24902>:
      D.24907 = obj->type;
      D.24908 = D.24907 == 0B;
      D.24909 = (long int) D.24908;
      D.24910 = __builtin_expect (D.24909, 0);
      if (D.24910 != 0) goto <D.24911>; else goto <D.24912>;
      <D.24911>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 3369, "obj->type");
      <D.24912>:
      if (is_pointer != 0) goto <D.24913>; else goto <D.24914>;
      <D.24913>:
      D.24915 = stack_slot_get_underlying_type (obj);
      if (D.24915 == 3) goto <D.24916>; else goto <D.24917>;
      <D.24916>:
      D.24920 = ctx->verifiable;
      if (D.24920 != 0) goto <D.24918>; else goto <D.24921>;
      <D.24921>:
      D.24922 = ctx->level;
      D.24923 = D.24922 & 128;
      if (D.24923 != 0) goto <D.24918>; else goto <D.24919>;
      <D.24918>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24903 = ctx->ip_offset;
        D.24924 = monoeg_g_strdup_printf ("Native int is not a verifiable type to reference a field at 0x%04x", D.24903);
        vinfo->info.message = D.24924;
        vinfo->exception_type = 4;
        D.24905 = ctx->list;
        D.24925 = monoeg_g_slist_prepend (D.24905, vinfo);
        ctx->list = D.24925;
      }
      ctx->verifiable = 0;
      D.24922 = ctx->level;
      D.24926 = D.24922 & 16;
      if (D.24926 != 0) goto <D.24927>; else goto <D.24928>;
      <D.24927>:
      ctx->valid = 0;
      <D.24928>:
      <D.24919>:
      <D.24917>:
      D.24922 = ctx->level;
      D.24929 = D.24922 & 64;
      if (D.24929 == 0) goto <D.24930>; else goto <D.24931>;
      <D.24930>:
      D.24932 = ctx->method;
      D.24933 = mono_method_can_access_field_full (D.24932, field, 0B);
      if (D.24933 == 0) goto <D.24934>; else goto <D.24935>;
      <D.24934>:
      D.24920 = ctx->verifiable;
      if (D.24920 != 0) goto <D.24936>; else goto <D.24938>;
      <D.24938>:
      D.24922 = ctx->level;
      D.24923 = D.24922 & 128;
      if (D.24923 != 0) goto <D.24936>; else goto <D.24937>;
      <D.24936>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24903 = ctx->ip_offset;
        D.24939 = monoeg_g_strdup_printf ("Type at stack is not accessible at 0x%04x", D.24903);
        vinfo->info.message = D.24939;
        vinfo->exception_type = 10;
        D.24905 = ctx->list;
        D.24940 = monoeg_g_slist_prepend (D.24905, vinfo);
        ctx->list = D.24940;
      }
      ctx->verifiable = 0;
      D.24922 = ctx->level;
      D.24926 = D.24922 & 16;
      if (D.24926 != 0) goto <D.24941>; else goto <D.24942>;
      <D.24941>:
      ctx->valid = 0;
      <D.24942>:
      <D.24937>:
      <D.24935>:
      <D.24931>:
      goto <D.24943>;
      <D.24914>:
      D.24896 = field->parent;
      D.24944 = BIT_FIELD_REF <*D.24896, 64, 256>;
      D.24945 = D.24944 & 8;
      if (D.24945 == 0) goto <D.24946>; else goto <D.24947>;
      <D.24946>:
      D.24948 = stack_slot_is_managed_pointer (obj);
      if (D.24948 != 0) goto <D.24949>; else goto <D.24950>;
      <D.24949>:
      D.24920 = ctx->verifiable;
      if (D.24920 != 0) goto <D.24951>; else goto <D.24953>;
      <D.24953>:
      D.24922 = ctx->level;
      D.24923 = D.24922 & 128;
      if (D.24923 != 0) goto <D.24951>; else goto <D.24952>;
      <D.24951>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24903 = ctx->ip_offset;
        D.24954 = monoeg_g_strdup_printf ("Type at stack is a managed pointer to a reference type and is not compatible to reference the field at 0x%04x", D.24903);
        vinfo->info.message = D.24954;
        vinfo->exception_type = 4;
        D.24905 = ctx->list;
        D.24955 = monoeg_g_slist_prepend (D.24905, vinfo);
        ctx->list = D.24955;
      }
      ctx->verifiable = 0;
      D.24922 = ctx->level;
      D.24926 = D.24922 & 16;
      if (D.24926 != 0) goto <D.24956>; else goto <D.24957>;
      <D.24956>:
      ctx->valid = 0;
      <D.24957>:
      <D.24952>:
      <D.24950>:
      <D.24947>:
      D.24896 = field->parent;
      D.24944 = BIT_FIELD_REF <*D.24896, 64, 256>;
      D.24945 = D.24944 & 8;
      if (D.24945 != 0) goto <D.24958>; else goto <D.24959>;
      <D.24958>:
      D.24960 = stack_slot_is_boxed_value (obj);
      if (D.24960 != 0) goto <D.24961>; else goto <D.24962>;
      <D.24961>:
      D.24920 = ctx->verifiable;
      if (D.24920 != 0) goto <D.24963>; else goto <D.24965>;
      <D.24965>:
      D.24922 = ctx->level;
      D.24923 = D.24922 & 128;
      if (D.24923 != 0) goto <D.24963>; else goto <D.24964>;
      <D.24963>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24903 = ctx->ip_offset;
        D.24966 = monoeg_g_strdup_printf ("Type at stack is a boxed valuetype and is not compatible to reference the field at 0x%04x", D.24903);
        vinfo->info.message = D.24966;
        vinfo->exception_type = 4;
        D.24905 = ctx->list;
        D.24967 = monoeg_g_slist_prepend (D.24905, vinfo);
        ctx->list = D.24967;
      }
      ctx->verifiable = 0;
      D.24922 = ctx->level;
      D.24926 = D.24922 & 16;
      if (D.24926 != 0) goto <D.24968>; else goto <D.24969>;
      <D.24968>:
      ctx->valid = 0;
      <D.24969>:
      <D.24964>:
      <D.24962>:
      <D.24959>:
      D.24970 = stack_slot_is_null_literal (obj);
      if (D.24970 == 0) goto <D.24971>; else goto <D.24972>;
      <D.24971>:
      D.24896 = field->parent;
      D.24897 = &D.24896->byval_arg;
      D.24973 = verify_stack_type_compatibility_full (ctx, D.24897, obj, 1, 0);
      if (D.24973 == 0) goto <D.24974>; else goto <D.24975>;
      <D.24974>:
      {
        char * found;
        char * expected;

        found = stack_slot_full_name (obj);
        D.24896 = field->parent;
        D.24897 = &D.24896->byval_arg;
        expected = mono_type_full_name (D.24897);
        D.24920 = ctx->verifiable;
        if (D.24920 != 0) goto <D.24976>; else goto <D.24978>;
        <D.24978>:
        D.24922 = ctx->level;
        D.24923 = D.24922 & 128;
        if (D.24923 != 0) goto <D.24976>; else goto <D.24977>;
        <D.24976>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.24903 = ctx->ip_offset;
          D.24979 = monoeg_g_strdup_printf ("Expected type \'%s\' but found \'%s\' referencing the \'this\' argument at 0x%04x", expected, found, D.24903);
          vinfo->info.message = D.24979;
          vinfo->exception_type = 4;
          D.24905 = ctx->list;
          D.24980 = monoeg_g_slist_prepend (D.24905, vinfo);
          ctx->list = D.24980;
        }
        ctx->verifiable = 0;
        D.24922 = ctx->level;
        D.24926 = D.24922 & 16;
        if (D.24926 != 0) goto <D.24981>; else goto <D.24982>;
        <D.24981>:
        ctx->valid = 0;
        <D.24982>:
        <D.24977>:
        monoeg_g_free (found);
        monoeg_g_free (expected);
      }
      <D.24975>:
      <D.24972>:
      D.24922 = ctx->level;
      D.24929 = D.24922 & 64;
      if (D.24929 == 0) goto <D.24983>; else goto <D.24984>;
      <D.24983>:
      D.24932 = ctx->method;
      D.24907 = obj->type;
      D.24985 = mono_class_from_mono_type (D.24907);
      D.24986 = mono_method_can_access_field_full (D.24932, field, D.24985);
      if (D.24986 == 0) goto <D.24987>; else goto <D.24988>;
      <D.24987>:
      D.24920 = ctx->verifiable;
      if (D.24920 != 0) goto <D.24989>; else goto <D.24991>;
      <D.24991>:
      D.24922 = ctx->level;
      D.24923 = D.24922 & 128;
      if (D.24923 != 0) goto <D.24989>; else goto <D.24990>;
      <D.24989>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.24903 = ctx->ip_offset;
        D.24992 = monoeg_g_strdup_printf ("Type at stack is not accessible at 0x%04x", D.24903);
        vinfo->info.message = D.24992;
        vinfo->exception_type = 10;
        D.24905 = ctx->list;
        D.24993 = monoeg_g_slist_prepend (D.24905, vinfo);
        ctx->list = D.24993;
      }
      ctx->verifiable = 0;
      D.24922 = ctx->level;
      D.24926 = D.24922 & 16;
      if (D.24926 != 0) goto <D.24994>; else goto <D.24995>;
      <D.24994>:
      ctx->valid = 0;
      <D.24995>:
      <D.24990>:
      <D.24988>:
      <D.24984>:
      <D.24943>:
      check_unmanaged_pointer (ctx, obj);
      D.24887 = 1;
      return D.24887;
    }
  finally
    {
      klass = {CLOBBER};
    }
}


verifier_load_field (struct VerifyContext * ctx, int token, struct MonoClass * * out_klass, const char * opcode)
{
  struct MonoMethod * D.24998;
  long unsigned int D.24999;
  long unsigned int D.25000;
  unsigned int token.88;
  struct MonoClass * iftmp.89;
  int D.25012;
  struct MonoImage * D.25014;
  unsigned int token.90;
  int D.25016;
  unsigned int D.25017;
  gchar * D.25018;
  struct GSList * D.25019;
  struct GSList * D.25020;
  struct MonoClassField * D.25021;
  unsigned int token.91;
  struct MonoGenericContext * D.25023;
  struct MonoClass * D.25027;
  struct MonoClass * klass.92;
  struct MonoLoaderError * D.25031;
  gchar * D.25032;
  struct GSList * D.25033;
  struct MonoType * D.25034;
  int D.25035;
  unsigned int D.25038;
  unsigned int D.25039;
  const char * D.25042;
  gchar * D.25043;
  struct GSList * D.25044;
  struct MonoClassField * field;
  struct MonoClass * klass;

  try
    {
      klass = 0B;
      D.24998 = ctx->method;
      D.24999 = BIT_FIELD_REF <*D.24998, 64, 256>;
      D.25000 = D.24999 & 124;
      if (D.25000 != 0) goto <D.25001>; else goto <D.25002>;
      <D.25001>:
      D.24998 = ctx->method;
      token.88 = (unsigned int) token;
      field = mono_method_get_wrapper_data (D.24998, token.88);
      if (field != 0B) goto <D.25005>; else goto <D.25006>;
      <D.25005>:
      iftmp.89 = field->parent;
      goto <D.25007>;
      <D.25006>:
      iftmp.89 = 0B;
      <D.25007>:
      klass = iftmp.89;
      goto <D.25008>;
      <D.25002>:
      D.25012 = token >> 24;
      if (D.25012 != 4) goto <D.25013>; else goto <D.25009>;
      <D.25013>:
      D.25012 = token >> 24;
      if (D.25012 != 10) goto <D.25010>; else goto <D.25009>;
      <D.25009>:
      D.25014 = ctx->image;
      token.90 = (unsigned int) token;
      D.25016 = token_bounds_check (D.25014, token.90);
      if (D.25016 == 0) goto <D.25010>; else goto <D.25011>;
      <D.25010>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.25017 = ctx->ip_offset;
        D.25018 = monoeg_g_strdup_printf ("Invalid field token 0x%08x for %s at 0x%04x", token, opcode, D.25017);
        vinfo->info.message = D.25018;
        vinfo->exception_type = 12;
        D.25019 = ctx->list;
        D.25020 = monoeg_g_slist_prepend (D.25019, vinfo);
        ctx->list = D.25020;
      }
      ctx->valid = 0;
      D.25021 = 0B;
      return D.25021;
      <D.25011>:
      D.25014 = ctx->image;
      token.91 = (unsigned int) token;
      D.25023 = ctx->generic_context;
      field = mono_field_from_token (D.25014, token.91, &klass, D.25023);
      <D.25008>:
      if (field == 0B) goto <D.25024>; else goto <D.25026>;
      <D.25026>:
      D.25027 = field->parent;
      if (D.25027 == 0B) goto <D.25024>; else goto <D.25028>;
      <D.25028>:
      klass.92 = klass;
      if (klass.92 == 0B) goto <D.25024>; else goto <D.25030>;
      <D.25030>:
      D.25031 = mono_loader_get_last_error ();
      if (D.25031 != 0B) goto <D.25024>; else goto <D.25025>;
      <D.25024>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.25017 = ctx->ip_offset;
        D.25032 = monoeg_g_strdup_printf ("Cannot load field from token 0x%08x for %s at 0x%04x", token, opcode, D.25017);
        vinfo->info.message = D.25032;
        vinfo->exception_type = 12;
        D.25019 = ctx->list;
        D.25033 = monoeg_g_slist_prepend (D.25019, vinfo);
        ctx->list = D.25033;
      }
      ctx->valid = 0;
      mono_loader_clear_error ();
      D.25021 = 0B;
      return D.25021;
      <D.25025>:
      klass.92 = klass;
      D.25034 = &klass.92->byval_arg;
      D.25035 = mono_type_is_valid_in_context (ctx, D.25034);
      if (D.25035 == 0) goto <D.25036>; else goto <D.25037>;
      <D.25036>:
      D.25021 = 0B;
      return D.25021;
      <D.25037>:
      D.25038 = mono_field_get_flags (field);
      D.25039 = D.25038 & 64;
      if (D.25039 != 0) goto <D.25040>; else goto <D.25041>;
      <D.25040>:
      {
        char * type_name;

        D.25027 = field->parent;
        type_name = mono_type_get_full_name (D.25027);
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.25042 = field->name;
          D.25017 = ctx->ip_offset;
          D.25043 = monoeg_g_strdup_printf ("Cannot reference literal field %s::%s at 0x%04x", type_name, D.25042, D.25017);
          vinfo->info.message = D.25043;
          vinfo->exception_type = 3;
          D.25019 = ctx->list;
          D.25044 = monoeg_g_slist_prepend (D.25019, vinfo);
          ctx->list = D.25044;
        }
        ctx->valid = 0;
        monoeg_g_free (type_name);
        D.25021 = 0B;
        return D.25021;
      }
      <D.25041>:
      klass.92 = klass;
      *out_klass = klass.92;
      D.25021 = field;
      return D.25021;
    }
  finally
    {
      klass = {CLOBBER};
    }
}


do_push_static_field (struct VerifyContext * ctx, int token, gboolean take_addr)
{
  int D.25047;
  unsigned int D.25052;
  unsigned int D.25053;
  const char * iftmp.93;
  struct MonoType * D.25060;
  short unsigned int D.25061;
  int D.25062;
  int D.25063;
  unsigned int D.25066;
  gchar * D.25067;
  struct GSList * D.25068;
  struct GSList * D.25069;
  int D.25074;
  struct MonoClass * D.25077;
  struct MonoMethod * D.25078;
  struct MonoClass * D.25079;
  short unsigned int D.25081;
  int D.25082;
  int D.25083;
  int D.19404;
  int iftmp.94;
  int D.19400;
  const char[7] * D.25088;
  unsigned char D.25089;
  int D.25090;
  unsigned char D.25091;
  int D.25092;
  const unsigned char * D.25097;
  unsigned char D.25098;
  int D.25099;
  const unsigned char * D.25100;
  unsigned char D.25101;
  int D.25102;
  const unsigned char * D.25107;
  unsigned char D.25108;
  int D.25109;
  const unsigned char * D.25110;
  unsigned char D.25111;
  int D.25112;
  const unsigned char * D.25117;
  unsigned char D.25118;
  int D.25119;
  const unsigned char * D.25120;
  unsigned char D.25121;
  int D.25122;
  const char * D.25124;
  int D.25127;
  int D.25129;
  int D.25130;
  gchar * D.25131;
  struct GSList * D.25132;
  int D.25133;
  int D.25136;
  int D.25139;
  gchar * D.25145;
  struct GSList * D.25146;
  struct ILStackDesc * D.25149;
  struct MonoClassField * field;
  struct MonoClass * klass;

  try
    {
      D.25047 = check_overflow (ctx);
      if (D.25047 == 0) goto <D.25048>; else goto <D.25049>;
      <D.25048>:
      return;
      <D.25049>:
      if (take_addr == 0) goto <D.25050>; else goto <D.25051>;
      <D.25050>:
      D.25052 = ctx->prefix_set;
      D.25053 = D.25052 & 4294967293;
      ctx->prefix_set = D.25053;
      <D.25051>:
      if (take_addr != 0) goto <D.25055>; else goto <D.25056>;
      <D.25055>:
      iftmp.93 = "ldsflda";
      goto <D.25057>;
      <D.25056>:
      iftmp.93 = "ldsfld";
      <D.25057>:
      field = verifier_load_field (ctx, token, &klass, iftmp.93);
      if (field == 0B) goto <D.25058>; else goto <D.25059>;
      <D.25058>:
      return;
      <D.25059>:
      D.25060 = field->type;
      D.25061 = D.25060->attrs;
      D.25062 = (int) D.25061;
      D.25063 = D.25062 & 16;
      if (D.25063 == 0) goto <D.25064>; else goto <D.25065>;
      <D.25064>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.25066 = ctx->ip_offset;
        D.25067 = monoeg_g_strdup_printf ("Cannot load non static field at 0x%04x", D.25066);
        vinfo->info.message = D.25067;
        vinfo->exception_type = 3;
        D.25068 = ctx->list;
        D.25069 = monoeg_g_slist_prepend (D.25068, vinfo);
        ctx->list = D.25069;
      }
      ctx->valid = 0;
      return;
      <D.25065>:
      if (take_addr != 0) goto <D.25072>; else goto <D.25073>;
      <D.25072>:
      D.25060 = field->type;
      D.25061 = D.25060->attrs;
      D.25062 = (int) D.25061;
      D.25074 = D.25062 & 32;
      if (D.25074 != 0) goto <D.25075>; else goto <D.25076>;
      <D.25075>:
      D.25077 = field->parent;
      D.25078 = ctx->method;
      D.25079 = D.25078->klass;
      if (D.25077 != D.25079) goto <D.25070>; else goto <D.25080>;
      <D.25080>:
      D.25078 = ctx->method;
      D.25081 = D.25078->flags;
      D.25082 = (int) D.25081;
      D.25083 = D.25082 & 2064;
      if (D.25083 == 0) goto <D.25070>; else goto <D.25084>;
      <D.25084>:
      {
        size_t __s1_len;
        size_t __s2_len;

        __s1_len = 6;
        if (__s1_len <= 3) goto <D.25086>; else goto <D.25087>;
        <D.25086>:
        {
          const unsigned char * __s2;
          int __result;

          D.25078 = ctx->method;
          __s2 = D.25078->name;
          D.25088 = ".cctor";
          D.25089 = MEM[(const unsigned char *)D.25088];
          D.25090 = (int) D.25089;
          D.25091 = *__s2;
          D.25092 = (int) D.25091;
          __result = D.25090 - D.25092;
          {
            if (__s1_len != 0) goto <D.25093>; else goto <D.25094>;
            <D.25093>:
            if (__result == 0) goto <D.25095>; else goto <D.25096>;
            <D.25095>:
            D.25097 = &MEM[(void *)".cctor" + 1B];
            D.25098 = *D.25097;
            D.25099 = (int) D.25098;
            D.25100 = __s2 + 1;
            D.25101 = *D.25100;
            D.25102 = (int) D.25101;
            __result = D.25099 - D.25102;
            if (__s1_len > 1) goto <D.25103>; else goto <D.25104>;
            <D.25103>:
            if (__result == 0) goto <D.25105>; else goto <D.25106>;
            <D.25105>:
            D.25107 = &MEM[(void *)".cctor" + 2B];
            D.25108 = *D.25107;
            D.25109 = (int) D.25108;
            D.25110 = __s2 + 2;
            D.25111 = *D.25110;
            D.25112 = (int) D.25111;
            __result = D.25109 - D.25112;
            if (__s1_len > 2) goto <D.25113>; else goto <D.25114>;
            <D.25113>:
            if (__result == 0) goto <D.25115>; else goto <D.25116>;
            <D.25115>:
            D.25117 = &MEM[(void *)".cctor" + 3B];
            D.25118 = *D.25117;
            D.25119 = (int) D.25118;
            D.25120 = __s2 + 3;
            D.25121 = *D.25120;
            D.25122 = (int) D.25121;
            __result = D.25119 - D.25122;
            <D.25116>:
            <D.25114>:
            <D.25106>:
            <D.25104>:
            <D.25096>:
            <D.25094>:
          }
          D.19400 = __result;
        }
        iftmp.94 = D.19400;
        goto <D.25123>;
        <D.25087>:
        D.25078 = ctx->method;
        D.25124 = D.25078->name;
        iftmp.94 = __builtin_strcmp (".cctor", D.25124);
        <D.25123>:
        D.19404 = iftmp.94;
      }
      if (D.19404 != 0) goto <D.25070>; else goto <D.25071>;
      <D.25070>:
      D.25127 = ctx->verifiable;
      if (D.25127 != 0) goto <D.25125>; else goto <D.25128>;
      <D.25128>:
      D.25129 = ctx->level;
      D.25130 = D.25129 & 128;
      if (D.25130 != 0) goto <D.25125>; else goto <D.25126>;
      <D.25125>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.25066 = ctx->ip_offset;
        D.25131 = monoeg_g_strdup_printf ("Cannot take the address of a init-only field at 0x%04x", D.25066);
        vinfo->info.message = D.25131;
        vinfo->exception_type = 4;
        D.25068 = ctx->list;
        D.25132 = monoeg_g_slist_prepend (D.25068, vinfo);
        ctx->list = D.25132;
      }
      ctx->verifiable = 0;
      D.25129 = ctx->level;
      D.25133 = D.25129 & 16;
      if (D.25133 != 0) goto <D.25134>; else goto <D.25135>;
      <D.25134>:
      ctx->valid = 0;
      <D.25135>:
      <D.25126>:
      <D.25071>:
      <D.25076>:
      <D.25073>:
      D.25129 = ctx->level;
      D.25136 = D.25129 & 64;
      if (D.25136 == 0) goto <D.25137>; else goto <D.25138>;
      <D.25137>:
      D.25078 = ctx->method;
      D.25139 = mono_method_can_access_field_full (D.25078, field, 0B);
      if (D.25139 == 0) goto <D.25140>; else goto <D.25141>;
      <D.25140>:
      D.25127 = ctx->verifiable;
      if (D.25127 != 0) goto <D.25142>; else goto <D.25144>;
      <D.25144>:
      D.25129 = ctx->level;
      D.25130 = D.25129 & 128;
      if (D.25130 != 0) goto <D.25142>; else goto <D.25143>;
      <D.25142>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.25066 = ctx->ip_offset;
        D.25145 = monoeg_g_strdup_printf ("Type at stack is not accessible at 0x%04x", D.25066);
        vinfo->info.message = D.25145;
        vinfo->exception_type = 10;
        D.25068 = ctx->list;
        D.25146 = monoeg_g_slist_prepend (D.25068, vinfo);
        ctx->list = D.25146;
      }
      ctx->verifiable = 0;
      D.25129 = ctx->level;
      D.25133 = D.25129 & 16;
      if (D.25133 != 0) goto <D.25147>; else goto <D.25148>;
      <D.25147>:
      ctx->valid = 0;
      <D.25148>:
      <D.25143>:
      <D.25141>:
      <D.25138>:
      D.25149 = stack_push (ctx);
      D.25060 = field->type;
      set_stack_value (ctx, D.25149, D.25060, take_addr);
    }
  finally
    {
      klass = {CLOBBER};
    }
}


do_store_field (struct VerifyContext * ctx, int token)
{
  unsigned int D.25153;
  unsigned int D.25154;
  int D.25155;
  int D.25158;
  struct MonoClassField * field.95;
  struct MonoType * D.25162;
  int D.25163;
  int D.25168;
  int D.25170;
  int D.25171;
  const char * D.25172;
  unsigned int D.25173;
  gchar * D.25174;
  struct GSList * D.25175;
  struct GSList * D.25176;
  int D.25177;
  struct ILStackDesc * value;
  struct ILStackDesc * obj;
  struct MonoClassField * field;

  try
    {
      D.25153 = ctx->prefix_set;
      D.25154 = D.25153 & 4294967292;
      ctx->prefix_set = D.25154;
      D.25155 = check_underflow (ctx, 2);
      if (D.25155 == 0) goto <D.25156>; else goto <D.25157>;
      <D.25156>:
      return;
      <D.25157>:
      value = stack_pop (ctx);
      obj = stack_pop_safe (ctx);
      D.25158 = check_is_valid_type_for_field_ops (ctx, token, obj, &field, "stfld");
      if (D.25158 == 0) goto <D.25159>; else goto <D.25160>;
      <D.25159>:
      return;
      <D.25160>:
      field.95 = field;
      D.25162 = field.95->type;
      D.25163 = verify_stack_type_compatibility (ctx, D.25162, value);
      if (D.25163 == 0) goto <D.25164>; else goto <D.25165>;
      <D.25164>:
      D.25168 = ctx->verifiable;
      if (D.25168 != 0) goto <D.25166>; else goto <D.25169>;
      <D.25169>:
      D.25170 = ctx->level;
      D.25171 = D.25170 & 128;
      if (D.25171 != 0) goto <D.25166>; else goto <D.25167>;
      <D.25166>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.25172 = stack_slot_get_name (value);
        D.25173 = ctx->ip_offset;
        D.25174 = monoeg_g_strdup_printf ("Incompatible type %s in field store at 0x%04x", D.25172, D.25173);
        vinfo->info.message = D.25174;
        vinfo->exception_type = 4;
        D.25175 = ctx->list;
        D.25176 = monoeg_g_slist_prepend (D.25175, vinfo);
        ctx->list = D.25176;
      }
      ctx->verifiable = 0;
      D.25170 = ctx->level;
      D.25177 = D.25170 & 16;
      if (D.25177 != 0) goto <D.25178>; else goto <D.25179>;
      <D.25178>:
      ctx->valid = 0;
      <D.25179>:
      <D.25167>:
      <D.25165>:
    }
  finally
    {
      field = {CLOBBER};
    }
}


do_store_static_field (struct VerifyContext * ctx, int token)
{
  unsigned int D.25183;
  unsigned int D.25184;
  int D.25185;
  struct MonoType * D.25190;
  short unsigned int D.25191;
  int D.25192;
  int D.25193;
  unsigned int D.25196;
  gchar * D.25197;
  struct GSList * D.25198;
  struct GSList * D.25199;
  unsigned char D.25200;
  gchar * D.25203;
  struct GSList * D.25204;
  int D.25205;
  int D.25206;
  struct MonoMethod * D.25209;
  int D.25210;
  int D.25215;
  int D.25217;
  gchar * D.25218;
  struct GSList * D.25219;
  int D.25220;
  int D.25223;
  gchar * D.25229;
  struct GSList * D.25230;
  struct MonoClassField * field;
  struct MonoClass * klass;
  struct ILStackDesc * value;

  try
    {
      D.25183 = ctx->prefix_set;
      D.25184 = D.25183 & 4294967293;
      ctx->prefix_set = D.25184;
      D.25185 = check_underflow (ctx, 1);
      if (D.25185 == 0) goto <D.25186>; else goto <D.25187>;
      <D.25186>:
      return;
      <D.25187>:
      value = stack_pop (ctx);
      field = verifier_load_field (ctx, token, &klass, "stsfld");
      if (field == 0B) goto <D.25188>; else goto <D.25189>;
      <D.25188>:
      return;
      <D.25189>:
      D.25190 = field->type;
      D.25191 = D.25190->attrs;
      D.25192 = (int) D.25191;
      D.25193 = D.25192 & 16;
      if (D.25193 == 0) goto <D.25194>; else goto <D.25195>;
      <D.25194>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.25196 = ctx->ip_offset;
        D.25197 = monoeg_g_strdup_printf ("Cannot store non static field at 0x%04x", D.25196);
        vinfo->info.message = D.25197;
        vinfo->exception_type = 3;
        D.25198 = ctx->list;
        D.25199 = monoeg_g_slist_prepend (D.25198, vinfo);
        ctx->list = D.25199;
      }
      ctx->valid = 0;
      return;
      <D.25195>:
      D.25190 = field->type;
      D.25200 = D.25190->type;
      if (D.25200 == 22) goto <D.25201>; else goto <D.25202>;
      <D.25201>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.25196 = ctx->ip_offset;
        D.25203 = monoeg_g_strdup_printf ("Typedbyref field is an unverfiable type in store static field at 0x%04x", D.25196);
        vinfo->info.message = D.25203;
        vinfo->exception_type = 3;
        D.25198 = ctx->list;
        D.25204 = monoeg_g_slist_prepend (D.25198, vinfo);
        ctx->list = D.25204;
      }
      ctx->valid = 0;
      return;
      <D.25202>:
      D.25205 = ctx->level;
      D.25206 = D.25205 & 64;
      if (D.25206 == 0) goto <D.25207>; else goto <D.25208>;
      <D.25207>:
      D.25209 = ctx->method;
      D.25210 = mono_method_can_access_field_full (D.25209, field, 0B);
      if (D.25210 == 0) goto <D.25211>; else goto <D.25212>;
      <D.25211>:
      D.25215 = ctx->verifiable;
      if (D.25215 != 0) goto <D.25213>; else goto <D.25216>;
      <D.25216>:
      D.25205 = ctx->level;
      D.25217 = D.25205 & 128;
      if (D.25217 != 0) goto <D.25213>; else goto <D.25214>;
      <D.25213>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.25196 = ctx->ip_offset;
        D.25218 = monoeg_g_strdup_printf ("Type at stack is not accessible at 0x%04x", D.25196);
        vinfo->info.message = D.25218;
        vinfo->exception_type = 10;
        D.25198 = ctx->list;
        D.25219 = monoeg_g_slist_prepend (D.25198, vinfo);
        ctx->list = D.25219;
      }
      ctx->verifiable = 0;
      D.25205 = ctx->level;
      D.25220 = D.25205 & 16;
      if (D.25220 != 0) goto <D.25221>; else goto <D.25222>;
      <D.25221>:
      ctx->valid = 0;
      <D.25222>:
      <D.25214>:
      <D.25212>:
      <D.25208>:
      D.25190 = field->type;
      D.25223 = verify_stack_type_compatibility (ctx, D.25190, value);
      if (D.25223 == 0) goto <D.25224>; else goto <D.25225>;
      <D.25224>:
      {
        char * stack_name;
        char * field_name;

        stack_name = stack_slot_full_name (value);
        D.25190 = field->type;
        field_name = mono_type_full_name (D.25190);
        D.25215 = ctx->verifiable;
        if (D.25215 != 0) goto <D.25226>; else goto <D.25228>;
        <D.25228>:
        D.25205 = ctx->level;
        D.25217 = D.25205 & 128;
        if (D.25217 != 0) goto <D.25226>; else goto <D.25227>;
        <D.25226>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 8;
          D.25196 = ctx->ip_offset;
          D.25229 = monoeg_g_strdup_printf ("Incompatible type in static field store expected \'%s\' but found \'%s\' at 0x%04x", field_name, stack_name, D.25196);
          vinfo->info.message = D.25229;
          vinfo->exception_type = 4;
          D.25198 = ctx->list;
          D.25230 = monoeg_g_slist_prepend (D.25198, vinfo);
          ctx->list = D.25230;
        }
        ctx->verifiable = 0;
        D.25205 = ctx->level;
        D.25220 = D.25205 & 16;
        if (D.25220 != 0) goto <D.25231>; else goto <D.25232>;
        <D.25231>:
        ctx->valid = 0;
        <D.25232>:
        <D.25227>:
        monoeg_g_free (field_name);
        monoeg_g_free (stack_name);
      }
      <D.25225>:
    }
  finally
    {
      klass = {CLOBBER};
    }
}


do_stobj (struct VerifyContext * ctx, int token)
{
  unsigned int D.25236;
  unsigned int D.25237;
  int D.25240;
  int D.25243;
  int D.25248;
  int D.25250;
  int D.25251;
  unsigned int D.25252;
  gchar * D.25253;
  struct GSList * D.25254;
  struct GSList * D.25255;
  int D.25256;
  int D.25259;
  gchar * D.25265;
  struct GSList * D.25266;
  int D.25269;
  struct MonoType * D.25272;
  int D.25273;
  int D.25276;
  gchar * D.25282;
  struct GSList * D.25283;
  int D.25286;
  gchar * D.25292;
  struct GSList * D.25293;
  struct MonoType * D.25296;
  struct MonoType * D.25297;
  int D.25298;
  gchar * D.25304;
  struct GSList * D.25305;
  struct ILStackDesc * dest;
  struct ILStackDesc * src;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, token, "stobj");
  D.25236 = ctx->prefix_set;
  D.25237 = D.25236 & 4294967292;
  ctx->prefix_set = D.25237;
  if (type == 0B) goto <D.25238>; else goto <D.25239>;
  <D.25238>:
  return;
  <D.25239>:
  D.25240 = check_underflow (ctx, 2);
  if (D.25240 == 0) goto <D.25241>; else goto <D.25242>;
  <D.25241>:
  return;
  <D.25242>:
  src = stack_pop (ctx);
  dest = stack_pop (ctx);
  D.25243 = stack_slot_is_managed_mutability_pointer (dest);
  if (D.25243 != 0) goto <D.25244>; else goto <D.25245>;
  <D.25244>:
  D.25248 = ctx->verifiable;
  if (D.25248 != 0) goto <D.25246>; else goto <D.25249>;
  <D.25249>:
  D.25250 = ctx->level;
  D.25251 = D.25250 & 128;
  if (D.25251 != 0) goto <D.25246>; else goto <D.25247>;
  <D.25246>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25252 = ctx->ip_offset;
    D.25253 = monoeg_g_strdup_printf ("Cannot use a readonly pointer with stobj at 0x%04x", D.25252);
    vinfo->info.message = D.25253;
    vinfo->exception_type = 4;
    D.25254 = ctx->list;
    D.25255 = monoeg_g_slist_prepend (D.25254, vinfo);
    ctx->list = D.25255;
  }
  ctx->verifiable = 0;
  D.25250 = ctx->level;
  D.25256 = D.25250 & 16;
  if (D.25256 != 0) goto <D.25257>; else goto <D.25258>;
  <D.25257>:
  ctx->valid = 0;
  <D.25258>:
  <D.25247>:
  <D.25245>:
  D.25259 = stack_slot_is_managed_pointer (dest);
  if (D.25259 == 0) goto <D.25260>; else goto <D.25261>;
  <D.25260>:
  D.25248 = ctx->verifiable;
  if (D.25248 != 0) goto <D.25262>; else goto <D.25264>;
  <D.25264>:
  D.25250 = ctx->level;
  D.25251 = D.25250 & 128;
  if (D.25251 != 0) goto <D.25262>; else goto <D.25263>;
  <D.25262>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25252 = ctx->ip_offset;
    D.25265 = monoeg_g_strdup_printf ("Invalid destination of stobj operation at 0x%04x", D.25252);
    vinfo->info.message = D.25265;
    vinfo->exception_type = 4;
    D.25254 = ctx->list;
    D.25266 = monoeg_g_slist_prepend (D.25254, vinfo);
    ctx->list = D.25266;
  }
  ctx->verifiable = 0;
  D.25250 = ctx->level;
  D.25256 = D.25250 & 16;
  if (D.25256 != 0) goto <D.25267>; else goto <D.25268>;
  <D.25267>:
  ctx->valid = 0;
  <D.25268>:
  <D.25263>:
  <D.25261>:
  D.25269 = stack_slot_is_boxed_value (src);
  if (D.25269 != 0) goto <D.25270>; else goto <D.25271>;
  <D.25270>:
  D.25272 = src->type;
  D.25273 = mono_type_is_reference (D.25272);
  if (D.25273 == 0) goto <D.25274>; else goto <D.25275>;
  <D.25274>:
  D.25276 = mono_type_is_reference (type);
  if (D.25276 == 0) goto <D.25277>; else goto <D.25278>;
  <D.25277>:
  D.25248 = ctx->verifiable;
  if (D.25248 != 0) goto <D.25279>; else goto <D.25281>;
  <D.25281>:
  D.25250 = ctx->level;
  D.25251 = D.25250 & 128;
  if (D.25251 != 0) goto <D.25279>; else goto <D.25280>;
  <D.25279>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25252 = ctx->ip_offset;
    D.25282 = monoeg_g_strdup_printf ("Cannot use stobj with a boxed source value that is not a reference type at 0x%04x", D.25252);
    vinfo->info.message = D.25282;
    vinfo->exception_type = 4;
    D.25254 = ctx->list;
    D.25283 = monoeg_g_slist_prepend (D.25254, vinfo);
    ctx->list = D.25283;
  }
  ctx->verifiable = 0;
  D.25250 = ctx->level;
  D.25256 = D.25250 & 16;
  if (D.25256 != 0) goto <D.25284>; else goto <D.25285>;
  <D.25284>:
  ctx->valid = 0;
  <D.25285>:
  <D.25280>:
  <D.25278>:
  <D.25275>:
  <D.25271>:
  D.25286 = verify_stack_type_compatibility (ctx, type, src);
  if (D.25286 == 0) goto <D.25287>; else goto <D.25288>;
  <D.25287>:
  {
    char * type_name;
    char * src_name;

    type_name = mono_type_full_name (type);
    src_name = stack_slot_full_name (src);
    D.25248 = ctx->verifiable;
    if (D.25248 != 0) goto <D.25289>; else goto <D.25291>;
    <D.25291>:
    D.25250 = ctx->level;
    D.25251 = D.25250 & 128;
    if (D.25251 != 0) goto <D.25289>; else goto <D.25290>;
    <D.25289>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.25252 = ctx->ip_offset;
      D.25292 = monoeg_g_strdup_printf ("Token \'%s\' and source \'%s\' of stobj don\'t match \' at 0x%04x", type_name, src_name, D.25252);
      vinfo->info.message = D.25292;
      vinfo->exception_type = 4;
      D.25254 = ctx->list;
      D.25293 = monoeg_g_slist_prepend (D.25254, vinfo);
      ctx->list = D.25293;
    }
    ctx->verifiable = 0;
    D.25250 = ctx->level;
    D.25256 = D.25250 & 16;
    if (D.25256 != 0) goto <D.25294>; else goto <D.25295>;
    <D.25294>:
    ctx->valid = 0;
    <D.25295>:
    <D.25290>:
    monoeg_g_free (type_name);
    monoeg_g_free (src_name);
  }
  <D.25288>:
  D.25296 = dest->type;
  D.25297 = mono_type_get_type_byval (D.25296);
  D.25298 = verify_type_compatibility (ctx, D.25297, type);
  if (D.25298 == 0) goto <D.25299>; else goto <D.25300>;
  <D.25299>:
  D.25248 = ctx->verifiable;
  if (D.25248 != 0) goto <D.25301>; else goto <D.25303>;
  <D.25303>:
  D.25250 = ctx->level;
  D.25251 = D.25250 & 128;
  if (D.25251 != 0) goto <D.25301>; else goto <D.25302>;
  <D.25301>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25252 = ctx->ip_offset;
    D.25304 = monoeg_g_strdup_printf ("Destination and token types of stobj don\'t match at 0x%04x", D.25252);
    vinfo->info.message = D.25304;
    vinfo->exception_type = 4;
    D.25254 = ctx->list;
    D.25305 = monoeg_g_slist_prepend (D.25254, vinfo);
    ctx->list = D.25305;
  }
  ctx->verifiable = 0;
  D.25250 = ctx->level;
  D.25256 = D.25250 & 16;
  if (D.25256 != 0) goto <D.25306>; else goto <D.25307>;
  <D.25306>:
  ctx->valid = 0;
  <D.25307>:
  <D.25302>:
  <D.25300>:
}


do_box_value (struct VerifyContext * ctx, int klass_token)
{
  int D.25311;
  int D.25314;
  struct MonoType * D.25317;
  int D.25318;
  int D.25321;
  struct ILStackDesc * D.25324;
  int D.25325;
  int D.25326;
  int D.25327;
  int D.25332;
  int D.25334;
  int D.25335;
  unsigned int D.25336;
  gchar * D.25337;
  struct GSList * D.25338;
  struct GSList * D.25339;
  int D.25340;
  int D.25343;
  struct MonoClass * D.25346;
  struct ILStackDesc * value;
  struct MonoType * type;
  struct MonoClass * klass;

  type = get_boxable_mono_type (ctx, klass_token, "box");
  if (type == 0B) goto <D.25309>; else goto <D.25310>;
  <D.25309>:
  return;
  <D.25310>:
  D.25311 = check_underflow (ctx, 1);
  if (D.25311 == 0) goto <D.25312>; else goto <D.25313>;
  <D.25312>:
  return;
  <D.25313>:
  value = stack_pop (ctx);
  D.25314 = stack_slot_get_underlying_type (value);
  if (D.25314 == 6) goto <D.25315>; else goto <D.25316>;
  <D.25315>:
  D.25317 = value->type;
  D.25318 = mono_type_is_reference (D.25317);
  if (D.25318 != 0) goto <D.25319>; else goto <D.25320>;
  <D.25319>:
  D.25321 = mono_type_is_reference (type);
  if (D.25321 != 0) goto <D.25322>; else goto <D.25323>;
  <D.25322>:
  D.25324 = stack_push_stack_val (ctx, value);
  D.25325 = D.25324->stype;
  D.25326 = D.25325 | 4096;
  D.25324->stype = D.25326;
  return;
  <D.25323>:
  <D.25320>:
  <D.25316>:
  D.25327 = verify_stack_type_compatibility (ctx, type, value);
  if (D.25327 == 0) goto <D.25328>; else goto <D.25329>;
  <D.25328>:
  D.25332 = ctx->verifiable;
  if (D.25332 != 0) goto <D.25330>; else goto <D.25333>;
  <D.25333>:
  D.25334 = ctx->level;
  D.25335 = D.25334 & 128;
  if (D.25335 != 0) goto <D.25330>; else goto <D.25331>;
  <D.25330>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25336 = ctx->ip_offset;
    D.25337 = monoeg_g_strdup_printf ("Invalid type at stack for boxing operation at 0x%04x", D.25336);
    vinfo->info.message = D.25337;
    vinfo->exception_type = 4;
    D.25338 = ctx->list;
    D.25339 = monoeg_g_slist_prepend (D.25338, vinfo);
    ctx->list = D.25339;
  }
  ctx->verifiable = 0;
  D.25334 = ctx->level;
  D.25340 = D.25334 & 16;
  if (D.25340 != 0) goto <D.25341>; else goto <D.25342>;
  <D.25341>:
  ctx->valid = 0;
  <D.25342>:
  <D.25331>:
  <D.25329>:
  klass = mono_class_from_mono_type (type);
  D.25343 = mono_class_is_nullable (klass);
  if (D.25343 != 0) goto <D.25344>; else goto <D.25345>;
  <D.25344>:
  D.25346 = mono_class_get_nullable_param (klass);
  type = &D.25346->byval_arg;
  <D.25345>:
  stack_push_val (ctx, 4102, type);
}


do_newarr (struct VerifyContext * ctx, int token)
{
  int D.25350;
  int D.25353;
  int D.25356;
  int D.25361;
  int D.25363;
  int D.25364;
  const char * D.25365;
  unsigned int D.25366;
  gchar * D.25367;
  struct GSList * D.25368;
  struct GSList * D.25369;
  int D.25370;
  struct ILStackDesc * D.25373;
  struct MonoClass * D.25374;
  struct MonoClass * D.25375;
  struct MonoType * D.25376;
  struct ILStackDesc * value;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, token, "newarr");
  if (type == 0B) goto <D.25348>; else goto <D.25349>;
  <D.25348>:
  return;
  <D.25349>:
  D.25350 = check_underflow (ctx, 1);
  if (D.25350 == 0) goto <D.25351>; else goto <D.25352>;
  <D.25351>:
  return;
  <D.25352>:
  value = stack_pop (ctx);
  D.25353 = stack_slot_get_type (value);
  if (D.25353 != 1) goto <D.25354>; else goto <D.25355>;
  <D.25354>:
  D.25356 = stack_slot_get_type (value);
  if (D.25356 != 3) goto <D.25357>; else goto <D.25358>;
  <D.25357>:
  D.25361 = ctx->verifiable;
  if (D.25361 != 0) goto <D.25359>; else goto <D.25362>;
  <D.25362>:
  D.25363 = ctx->level;
  D.25364 = D.25363 & 128;
  if (D.25364 != 0) goto <D.25359>; else goto <D.25360>;
  <D.25359>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25365 = stack_slot_get_name (value);
    D.25366 = ctx->ip_offset;
    D.25367 = monoeg_g_strdup_printf ("Array size type on stack (%s) is not a verifiable type at 0x%04x", D.25365, D.25366);
    vinfo->info.message = D.25367;
    vinfo->exception_type = 4;
    D.25368 = ctx->list;
    D.25369 = monoeg_g_slist_prepend (D.25368, vinfo);
    ctx->list = D.25369;
  }
  ctx->verifiable = 0;
  D.25363 = ctx->level;
  D.25370 = D.25363 & 16;
  if (D.25370 != 0) goto <D.25371>; else goto <D.25372>;
  <D.25371>:
  ctx->valid = 0;
  <D.25372>:
  <D.25360>:
  <D.25358>:
  <D.25355>:
  D.25373 = stack_push (ctx);
  D.25374 = mono_class_from_mono_type (type);
  D.25375 = mono_array_class_get (D.25374, 1);
  D.25376 = mono_class_get_type (D.25375);
  set_stack_value (ctx, D.25373, D.25376, 0);
}


do_ldlen (struct VerifyContext * ctx)
{
  int D.25378;
  int D.25383;
  struct MonoType * D.25385;
  unsigned char D.25386;
  int D.25389;
  int D.25391;
  int D.25392;
  unsigned int D.25393;
  gchar * D.25394;
  struct GSList * D.25395;
  struct GSList * D.25396;
  int D.25397;
  struct MonoClass * D.25400;
  struct MonoType * D.25401;
  struct ILStackDesc * value;

  D.25378 = check_underflow (ctx, 1);
  if (D.25378 == 0) goto <D.25379>; else goto <D.25380>;
  <D.25379>:
  return;
  <D.25380>:
  value = stack_pop (ctx);
  D.25383 = stack_slot_get_type (value);
  if (D.25383 != 6) goto <D.25381>; else goto <D.25384>;
  <D.25384>:
  D.25385 = value->type;
  D.25386 = D.25385->type;
  if (D.25386 != 29) goto <D.25381>; else goto <D.25382>;
  <D.25381>:
  D.25389 = ctx->verifiable;
  if (D.25389 != 0) goto <D.25387>; else goto <D.25390>;
  <D.25390>:
  D.25391 = ctx->level;
  D.25392 = D.25391 & 128;
  if (D.25392 != 0) goto <D.25387>; else goto <D.25388>;
  <D.25387>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25393 = ctx->ip_offset;
    D.25394 = monoeg_g_strdup_printf ("Invalid array type for ldlen at 0x%04x", D.25393);
    vinfo->info.message = D.25394;
    vinfo->exception_type = 4;
    D.25395 = ctx->list;
    D.25396 = monoeg_g_slist_prepend (D.25395, vinfo);
    ctx->list = D.25396;
  }
  ctx->verifiable = 0;
  D.25391 = ctx->level;
  D.25397 = D.25391 & 16;
  if (D.25397 != 0) goto <D.25398>; else goto <D.25399>;
  <D.25398>:
  ctx->valid = 0;
  <D.25399>:
  <D.25388>:
  <D.25382>:
  D.25400 = mono_defaults.int_class;
  D.25401 = &D.25400->byval_arg;
  stack_push_val (ctx, 3, D.25401);
}


do_ldelema (struct VerifyContext * ctx, int klass_token)
{
  int D.25405;
  int D.25408;
  int D.25411;
  int D.25416;
  int D.25418;
  int D.25419;
  const char * D.25420;
  unsigned int D.25421;
  gchar * D.25422;
  struct GSList * D.25423;
  struct GSList * D.25424;
  int D.25425;
  int D.25428;
  int D.25434;
  struct MonoType * D.25436;
  unsigned char D.25437;
  const char * D.25441;
  gchar * D.25442;
  struct GSList * D.25443;
  int D.25449;
  int D.25451;
  struct MonoClass * D.25452;
  struct MonoType * D.25453;
  gchar * D.25459;
  struct GSList * D.25460;
  unsigned int D.25463;
  unsigned int D.25464;
  unsigned int D.25467;
  int D.25468;
  int D.25469;
  struct ILStackDesc * index;
  struct ILStackDesc * array;
  struct ILStackDesc * res;
  struct MonoType * type;
  gboolean valid;

  type = get_boxable_mono_type (ctx, klass_token, "ldelema");
  if (type == 0B) goto <D.25403>; else goto <D.25404>;
  <D.25403>:
  return;
  <D.25404>:
  D.25405 = check_underflow (ctx, 2);
  if (D.25405 == 0) goto <D.25406>; else goto <D.25407>;
  <D.25406>:
  return;
  <D.25407>:
  index = stack_pop (ctx);
  array = stack_pop (ctx);
  D.25408 = stack_slot_get_type (index);
  if (D.25408 != 1) goto <D.25409>; else goto <D.25410>;
  <D.25409>:
  D.25411 = stack_slot_get_type (index);
  if (D.25411 != 3) goto <D.25412>; else goto <D.25413>;
  <D.25412>:
  D.25416 = ctx->verifiable;
  if (D.25416 != 0) goto <D.25414>; else goto <D.25417>;
  <D.25417>:
  D.25418 = ctx->level;
  D.25419 = D.25418 & 128;
  if (D.25419 != 0) goto <D.25414>; else goto <D.25415>;
  <D.25414>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25420 = stack_slot_get_name (index);
    D.25421 = ctx->ip_offset;
    D.25422 = monoeg_g_strdup_printf ("Index type(%s) for ldelema is not an int or a native int at 0x%04x", D.25420, D.25421);
    vinfo->info.message = D.25422;
    vinfo->exception_type = 4;
    D.25423 = ctx->list;
    D.25424 = monoeg_g_slist_prepend (D.25423, vinfo);
    ctx->list = D.25424;
  }
  ctx->verifiable = 0;
  D.25418 = ctx->level;
  D.25425 = D.25418 & 16;
  if (D.25425 != 0) goto <D.25426>; else goto <D.25427>;
  <D.25426>:
  ctx->valid = 0;
  <D.25427>:
  <D.25415>:
  <D.25413>:
  <D.25410>:
  D.25428 = stack_slot_is_null_literal (array);
  if (D.25428 == 0) goto <D.25429>; else goto <D.25430>;
  <D.25429>:
  D.25434 = stack_slot_get_type (array);
  if (D.25434 != 6) goto <D.25431>; else goto <D.25435>;
  <D.25435>:
  D.25436 = array->type;
  D.25437 = D.25436->type;
  if (D.25437 != 29) goto <D.25431>; else goto <D.25432>;
  <D.25431>:
  D.25416 = ctx->verifiable;
  if (D.25416 != 0) goto <D.25438>; else goto <D.25440>;
  <D.25440>:
  D.25418 = ctx->level;
  D.25419 = D.25418 & 128;
  if (D.25419 != 0) goto <D.25438>; else goto <D.25439>;
  <D.25438>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25441 = stack_slot_get_name (array);
    D.25421 = ctx->ip_offset;
    D.25442 = monoeg_g_strdup_printf ("Invalid array type(%s) for ldelema at 0x%04x", D.25441, D.25421);
    vinfo->info.message = D.25442;
    vinfo->exception_type = 4;
    D.25423 = ctx->list;
    D.25443 = monoeg_g_slist_prepend (D.25423, vinfo);
    ctx->list = D.25443;
  }
  ctx->verifiable = 0;
  D.25418 = ctx->level;
  D.25425 = D.25418 & 16;
  if (D.25425 != 0) goto <D.25444>; else goto <D.25445>;
  <D.25444>:
  ctx->valid = 0;
  <D.25445>:
  <D.25439>:
  goto <D.25433>;
  <D.25432>:
  D.25449 = get_stack_type (type);
  if (D.25449 == 1) goto <D.25446>; else goto <D.25450>;
  <D.25450>:
  D.25451 = get_stack_type (type);
  if (D.25451 == 3) goto <D.25446>; else goto <D.25447>;
  <D.25446>:
  D.25436 = array->type;
  D.25452 = D.25436->data.klass;
  D.25453 = &D.25452->byval_arg;
  valid = verify_type_compatibility_full (ctx, type, D.25453, 1);
  goto <D.25448>;
  <D.25447>:
  D.25436 = array->type;
  D.25452 = D.25436->data.klass;
  D.25453 = &D.25452->byval_arg;
  valid = mono_metadata_type_equal (type, D.25453);
  <D.25448>:
  if (valid == 0) goto <D.25454>; else goto <D.25455>;
  <D.25454>:
  D.25416 = ctx->verifiable;
  if (D.25416 != 0) goto <D.25456>; else goto <D.25458>;
  <D.25458>:
  D.25418 = ctx->level;
  D.25419 = D.25418 & 128;
  if (D.25419 != 0) goto <D.25456>; else goto <D.25457>;
  <D.25456>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25421 = ctx->ip_offset;
    D.25459 = monoeg_g_strdup_printf ("Invalid array type on stack for ldelema at 0x%04x", D.25421);
    vinfo->info.message = D.25459;
    vinfo->exception_type = 4;
    D.25423 = ctx->list;
    D.25460 = monoeg_g_slist_prepend (D.25423, vinfo);
    ctx->list = D.25460;
  }
  ctx->verifiable = 0;
  D.25418 = ctx->level;
  D.25425 = D.25418 & 16;
  if (D.25425 != 0) goto <D.25461>; else goto <D.25462>;
  <D.25461>:
  ctx->valid = 0;
  <D.25462>:
  <D.25457>:
  <D.25455>:
  <D.25433>:
  <D.25430>:
  res = stack_push (ctx);
  set_stack_value (ctx, res, type, 1);
  D.25463 = ctx->prefix_set;
  D.25464 = D.25463 & 16;
  if (D.25464 != 0) goto <D.25465>; else goto <D.25466>;
  <D.25465>:
  D.25463 = ctx->prefix_set;
  D.25467 = D.25463 & 4294967279;
  ctx->prefix_set = D.25467;
  D.25468 = res->stype;
  D.25469 = D.25468 | 512;
  res->stype = D.25469;
  <D.25466>:
}


do_ldelem (struct VerifyContext * ctx, int opcode, int token)
{
  int D.25471;
  unsigned int D.25478;
  gchar * D.25479;
  struct GSList * D.25480;
  struct GSList * D.25481;
  int D.25483;
  int D.25486;
  int D.25491;
  int D.25493;
  int D.25494;
  const char * D.25495;
  gchar * D.25496;
  struct GSList * D.25497;
  int D.25498;
  int D.25501;
  int D.25507;
  struct MonoType * D.25509;
  unsigned char D.25510;
  const char * D.25514;
  gchar * D.25515;
  struct GSList * D.25516;
  struct MonoClass * D.25521;
  long unsigned int D.25522;
  long unsigned int D.25523;
  gchar * D.25529;
  struct GSList * D.25530;
  int D.25534;
  unsigned char D.25540;
  unsigned char D.25541;
  unsigned char D.25543;
  unsigned char D.25544;
  unsigned char D.25545;
  unsigned char D.25547;
  gchar * D.25551;
  struct GSList * D.25552;
  int D.25555;
  gchar * D.25561;
  struct GSList * D.25562;
  struct ILStackDesc * D.25565;
  struct ILStackDesc * index;
  struct ILStackDesc * array;
  struct MonoType * type;

  D.25471 = check_underflow (ctx, 2);
  if (D.25471 == 0) goto <D.25472>; else goto <D.25473>;
  <D.25472>:
  return;
  <D.25473>:
  if (opcode == 163) goto <D.25474>; else goto <D.25475>;
  <D.25474>:
  type = verifier_load_type (ctx, token, "ldelem.any");
  if (type == 0B) goto <D.25476>; else goto <D.25477>;
  <D.25476>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25478 = ctx->ip_offset;
    D.25479 = monoeg_g_strdup_printf ("Type (0x%08x) not found at 0x%04x", token, D.25478);
    vinfo->info.message = D.25479;
    vinfo->exception_type = 3;
    D.25480 = ctx->list;
    D.25481 = monoeg_g_slist_prepend (D.25480, vinfo);
    ctx->list = D.25481;
  }
  ctx->valid = 0;
  return;
  <D.25477>:
  goto <D.25482>;
  <D.25475>:
  type = mono_type_from_opcode (opcode);
  <D.25482>:
  index = stack_pop (ctx);
  array = stack_pop (ctx);
  D.25483 = stack_slot_get_type (index);
  if (D.25483 != 1) goto <D.25484>; else goto <D.25485>;
  <D.25484>:
  D.25486 = stack_slot_get_type (index);
  if (D.25486 != 3) goto <D.25487>; else goto <D.25488>;
  <D.25487>:
  D.25491 = ctx->verifiable;
  if (D.25491 != 0) goto <D.25489>; else goto <D.25492>;
  <D.25492>:
  D.25493 = ctx->level;
  D.25494 = D.25493 & 128;
  if (D.25494 != 0) goto <D.25489>; else goto <D.25490>;
  <D.25489>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25495 = stack_slot_get_name (index);
    D.25478 = ctx->ip_offset;
    D.25496 = monoeg_g_strdup_printf ("Index type(%s) for ldelem.X is not an int or a native int at 0x%04x", D.25495, D.25478);
    vinfo->info.message = D.25496;
    vinfo->exception_type = 4;
    D.25480 = ctx->list;
    D.25497 = monoeg_g_slist_prepend (D.25480, vinfo);
    ctx->list = D.25497;
  }
  ctx->verifiable = 0;
  D.25493 = ctx->level;
  D.25498 = D.25493 & 16;
  if (D.25498 != 0) goto <D.25499>; else goto <D.25500>;
  <D.25499>:
  ctx->valid = 0;
  <D.25500>:
  <D.25490>:
  <D.25488>:
  <D.25485>:
  D.25501 = stack_slot_is_null_literal (array);
  if (D.25501 == 0) goto <D.25502>; else goto <D.25503>;
  <D.25502>:
  D.25507 = stack_slot_get_type (array);
  if (D.25507 != 6) goto <D.25504>; else goto <D.25508>;
  <D.25508>:
  D.25509 = array->type;
  D.25510 = D.25509->type;
  if (D.25510 != 29) goto <D.25504>; else goto <D.25505>;
  <D.25504>:
  D.25491 = ctx->verifiable;
  if (D.25491 != 0) goto <D.25511>; else goto <D.25513>;
  <D.25513>:
  D.25493 = ctx->level;
  D.25494 = D.25493 & 128;
  if (D.25494 != 0) goto <D.25511>; else goto <D.25512>;
  <D.25511>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25514 = stack_slot_get_name (array);
    D.25478 = ctx->ip_offset;
    D.25515 = monoeg_g_strdup_printf ("Invalid array type(%s) for ldelem.X at 0x%04x", D.25514, D.25478);
    vinfo->info.message = D.25515;
    vinfo->exception_type = 4;
    D.25480 = ctx->list;
    D.25516 = monoeg_g_slist_prepend (D.25480, vinfo);
    ctx->list = D.25516;
  }
  ctx->verifiable = 0;
  D.25493 = ctx->level;
  D.25498 = D.25493 & 16;
  if (D.25498 != 0) goto <D.25517>; else goto <D.25518>;
  <D.25517>:
  ctx->valid = 0;
  <D.25518>:
  <D.25512>:
  goto <D.25506>;
  <D.25505>:
  if (opcode == 154) goto <D.25519>; else goto <D.25520>;
  <D.25519>:
  D.25509 = array->type;
  D.25521 = D.25509->data.klass;
  D.25522 = BIT_FIELD_REF <*D.25521, 64, 256>;
  D.25523 = D.25522 & 8;
  if (D.25523 != 0) goto <D.25524>; else goto <D.25525>;
  <D.25524>:
  D.25491 = ctx->verifiable;
  if (D.25491 != 0) goto <D.25526>; else goto <D.25528>;
  <D.25528>:
  D.25493 = ctx->level;
  D.25494 = D.25493 & 128;
  if (D.25494 != 0) goto <D.25526>; else goto <D.25527>;
  <D.25526>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25478 = ctx->ip_offset;
    D.25529 = monoeg_g_strdup_printf ("Invalid array type is not a reference type for ldelem.ref 0x%04x", D.25478);
    vinfo->info.message = D.25529;
    vinfo->exception_type = 4;
    D.25480 = ctx->list;
    D.25530 = monoeg_g_slist_prepend (D.25480, vinfo);
    ctx->list = D.25530;
  }
  ctx->verifiable = 0;
  D.25493 = ctx->level;
  D.25498 = D.25493 & 16;
  if (D.25498 != 0) goto <D.25531>; else goto <D.25532>;
  <D.25531>:
  ctx->valid = 0;
  <D.25532>:
  <D.25527>:
  <D.25525>:
  D.25509 = array->type;
  D.25521 = D.25509->data.klass;
  type = &D.25521->byval_arg;
  goto <D.25533>;
  <D.25520>:
  {
    struct MonoType * candidate;

    D.25509 = array->type;
    D.25521 = D.25509->data.klass;
    candidate = &D.25521->byval_arg;
    D.25493 = ctx->level;
    D.25534 = D.25493 & 32;
    if (D.25534 == 0) goto <D.25535>; else goto <D.25536>;
    <D.25535>:
    {
      struct MonoType * underlying_type;
      struct MonoType * underlying_candidate;

      underlying_type = mono_type_get_underlying_type_any (type);
      underlying_candidate = mono_type_get_underlying_type_any (candidate);
      D.25540 = underlying_type->type;
      D.25541 = D.25540 + 248;
      if (D.25541 <= 1) goto <D.25542>; else goto <D.25537>;
      <D.25542>:
      D.25543 = underlying_candidate->type;
      D.25544 = D.25543 + 232;
      if (D.25544 <= 1) goto <D.25538>; else goto <D.25537>;
      <D.25537>:
      D.25543 = underlying_candidate->type;
      D.25545 = D.25543 + 248;
      if (D.25545 <= 1) goto <D.25546>; else goto <D.25539>;
      <D.25546>:
      D.25540 = underlying_type->type;
      D.25547 = D.25540 + 232;
      if (D.25547 <= 1) goto <D.25538>; else goto <D.25539>;
      <D.25538>:
      D.25491 = ctx->verifiable;
      if (D.25491 != 0) goto <D.25548>; else goto <D.25550>;
      <D.25550>:
      D.25493 = ctx->level;
      D.25494 = D.25493 & 128;
      if (D.25494 != 0) goto <D.25548>; else goto <D.25549>;
      <D.25548>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 8;
        D.25478 = ctx->ip_offset;
        D.25551 = monoeg_g_strdup_printf ("Invalid array type on stack for ldelem.X at 0x%04x", D.25478);
        vinfo->info.message = D.25551;
        vinfo->exception_type = 4;
        D.25480 = ctx->list;
        D.25552 = monoeg_g_slist_prepend (D.25480, vinfo);
        ctx->list = D.25552;
      }
      ctx->verifiable = 0;
      D.25493 = ctx->level;
      D.25498 = D.25493 & 16;
      if (D.25498 != 0) goto <D.25553>; else goto <D.25554>;
      <D.25553>:
      ctx->valid = 0;
      <D.25554>:
      <D.25549>:
      <D.25539>:
    }
    <D.25536>:
    D.25555 = verify_type_compatibility_full (ctx, type, candidate, 1);
    if (D.25555 == 0) goto <D.25556>; else goto <D.25557>;
    <D.25556>:
    D.25491 = ctx->verifiable;
    if (D.25491 != 0) goto <D.25558>; else goto <D.25560>;
    <D.25560>:
    D.25493 = ctx->level;
    D.25494 = D.25493 & 128;
    if (D.25494 != 0) goto <D.25558>; else goto <D.25559>;
    <D.25558>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.25478 = ctx->ip_offset;
      D.25561 = monoeg_g_strdup_printf ("Invalid array type on stack for ldelem.X at 0x%04x", D.25478);
      vinfo->info.message = D.25561;
      vinfo->exception_type = 4;
      D.25480 = ctx->list;
      D.25562 = monoeg_g_slist_prepend (D.25480, vinfo);
      ctx->list = D.25562;
    }
    ctx->verifiable = 0;
    D.25493 = ctx->level;
    D.25498 = D.25493 & 16;
    if (D.25498 != 0) goto <D.25563>; else goto <D.25564>;
    <D.25563>:
    ctx->valid = 0;
    <D.25564>:
    <D.25559>:
    <D.25557>:
  }
  <D.25533>:
  <D.25506>:
  <D.25503>:
  D.25565 = stack_push (ctx);
  set_stack_value (ctx, D.25565, type, 0);
}


verifier_load_type (struct VerifyContext * ctx, int token, const char * opcode)
{
  struct MonoMethod * D.25567;
  long unsigned int D.25568;
  long unsigned int D.25569;
  unsigned int token.96;
  struct MonoType * iftmp.97;
  int D.25581;
  unsigned int D.25582;
  unsigned int D.25583;
  struct MonoImage * D.25585;
  unsigned int token.98;
  int D.25587;
  unsigned int D.25588;
  gchar * D.25589;
  struct GSList * D.25590;
  struct GSList * D.25591;
  struct MonoType * D.25592;
  struct MonoGenericContext * D.25593;
  struct MonoLoaderError * D.25597;
  gchar * D.25598;
  struct GSList * D.25599;
  int D.25600;
  struct MonoType * type;

  D.25567 = ctx->method;
  D.25568 = BIT_FIELD_REF <*D.25567, 64, 256>;
  D.25569 = D.25568 & 124;
  if (D.25569 != 0) goto <D.25570>; else goto <D.25571>;
  <D.25570>:
  {
    struct MonoClass * class;

    D.25567 = ctx->method;
    token.96 = (unsigned int) token;
    class = mono_method_get_wrapper_data (D.25567, token.96);
    if (class != 0B) goto <D.25574>; else goto <D.25575>;
    <D.25574>:
    iftmp.97 = &class->byval_arg;
    goto <D.25576>;
    <D.25575>:
    iftmp.97 = 0B;
    <D.25576>:
    type = iftmp.97;
  }
  goto <D.25577>;
  <D.25571>:
  D.25581 = token >> 24;
  D.25582 = (unsigned int) D.25581;
  D.25583 = D.25582 + 4294967295;
  if (D.25583 > 1) goto <D.25584>; else goto <D.25578>;
  <D.25584>:
  D.25581 = token >> 24;
  if (D.25581 != 27) goto <D.25579>; else goto <D.25578>;
  <D.25578>:
  D.25585 = ctx->image;
  token.98 = (unsigned int) token;
  D.25587 = token_bounds_check (D.25585, token.98);
  if (D.25587 == 0) goto <D.25579>; else goto <D.25580>;
  <D.25579>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25588 = ctx->ip_offset;
    D.25589 = monoeg_g_strdup_printf ("Invalid type token 0x%08x at 0x%04x", token, D.25588);
    vinfo->info.message = D.25589;
    vinfo->exception_type = 12;
    D.25590 = ctx->list;
    D.25591 = monoeg_g_slist_prepend (D.25590, vinfo);
    ctx->list = D.25591;
  }
  ctx->valid = 0;
  D.25592 = 0B;
  return D.25592;
  <D.25580>:
  D.25585 = ctx->image;
  token.98 = (unsigned int) token;
  D.25593 = ctx->generic_context;
  type = mono_type_get_full (D.25585, token.98, D.25593);
  <D.25577>:
  if (type == 0B) goto <D.25594>; else goto <D.25596>;
  <D.25596>:
  D.25597 = mono_loader_get_last_error ();
  if (D.25597 != 0B) goto <D.25594>; else goto <D.25595>;
  <D.25594>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25588 = ctx->ip_offset;
    D.25598 = monoeg_g_strdup_printf ("Cannot load type from token 0x%08x for %s at 0x%04x", token, opcode, D.25588);
    vinfo->info.message = D.25598;
    vinfo->exception_type = 12;
    D.25590 = ctx->list;
    D.25599 = monoeg_g_slist_prepend (D.25590, vinfo);
    ctx->list = D.25599;
  }
  ctx->valid = 0;
  mono_loader_clear_error ();
  D.25592 = 0B;
  return D.25592;
  <D.25595>:
  D.25600 = mono_type_is_valid_in_context (ctx, type);
  if (D.25600 == 0) goto <D.25601>; else goto <D.25602>;
  <D.25601>:
  D.25592 = 0B;
  return D.25592;
  <D.25602>:
  D.25592 = type;
  return D.25592;
}


do_stelem (struct VerifyContext * ctx, int opcode, int token)
{
  int D.25604;
  unsigned int D.25611;
  gchar * D.25612;
  struct GSList * D.25613;
  struct GSList * D.25614;
  int D.25616;
  int D.25619;
  int D.25624;
  int D.25626;
  int D.25627;
  const char * D.25628;
  gchar * D.25629;
  struct GSList * D.25630;
  int D.25631;
  int D.25634;
  int D.25640;
  struct MonoType * D.25642;
  unsigned char D.25643;
  const char * D.25647;
  gchar * D.25648;
  struct GSList * D.25649;
  struct MonoClass * D.25654;
  long unsigned int D.25655;
  long unsigned int D.25656;
  gchar * D.25662;
  struct GSList * D.25663;
  struct MonoType * D.25667;
  int D.25668;
  gchar * D.25674;
  struct GSList * D.25675;
  int D.25680;
  struct MonoType * D.25683;
  struct MonoClass * D.25684;
  long unsigned int D.25685;
  long unsigned int D.25686;
  gchar * D.25692;
  struct GSList * D.25693;
  int D.25699;
  gchar * D.25705;
  struct GSList * D.25706;
  int D.25709;
  int D.25712;
  int D.25715;
  gchar * D.25721;
  struct GSList * D.25722;
  struct ILStackDesc * index;
  struct ILStackDesc * array;
  struct ILStackDesc * value;
  struct MonoType * type;

  D.25604 = check_underflow (ctx, 3);
  if (D.25604 == 0) goto <D.25605>; else goto <D.25606>;
  <D.25605>:
  return;
  <D.25606>:
  if (opcode == 164) goto <D.25607>; else goto <D.25608>;
  <D.25607>:
  type = verifier_load_type (ctx, token, "stelem.any");
  if (type == 0B) goto <D.25609>; else goto <D.25610>;
  <D.25609>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25611 = ctx->ip_offset;
    D.25612 = monoeg_g_strdup_printf ("Type (0x%08x) not found at 0x%04x", token, D.25611);
    vinfo->info.message = D.25612;
    vinfo->exception_type = 3;
    D.25613 = ctx->list;
    D.25614 = monoeg_g_slist_prepend (D.25613, vinfo);
    ctx->list = D.25614;
  }
  ctx->valid = 0;
  return;
  <D.25610>:
  goto <D.25615>;
  <D.25608>:
  type = mono_type_from_opcode (opcode);
  <D.25615>:
  value = stack_pop (ctx);
  index = stack_pop (ctx);
  array = stack_pop (ctx);
  D.25616 = stack_slot_get_type (index);
  if (D.25616 != 1) goto <D.25617>; else goto <D.25618>;
  <D.25617>:
  D.25619 = stack_slot_get_type (index);
  if (D.25619 != 3) goto <D.25620>; else goto <D.25621>;
  <D.25620>:
  D.25624 = ctx->verifiable;
  if (D.25624 != 0) goto <D.25622>; else goto <D.25625>;
  <D.25625>:
  D.25626 = ctx->level;
  D.25627 = D.25626 & 128;
  if (D.25627 != 0) goto <D.25622>; else goto <D.25623>;
  <D.25622>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25628 = stack_slot_get_name (index);
    D.25611 = ctx->ip_offset;
    D.25629 = monoeg_g_strdup_printf ("Index type(%s) for stdelem.X is not an int or a native int at 0x%04x", D.25628, D.25611);
    vinfo->info.message = D.25629;
    vinfo->exception_type = 4;
    D.25613 = ctx->list;
    D.25630 = monoeg_g_slist_prepend (D.25613, vinfo);
    ctx->list = D.25630;
  }
  ctx->verifiable = 0;
  D.25626 = ctx->level;
  D.25631 = D.25626 & 16;
  if (D.25631 != 0) goto <D.25632>; else goto <D.25633>;
  <D.25632>:
  ctx->valid = 0;
  <D.25633>:
  <D.25623>:
  <D.25621>:
  <D.25618>:
  D.25634 = stack_slot_is_null_literal (array);
  if (D.25634 == 0) goto <D.25635>; else goto <D.25636>;
  <D.25635>:
  D.25640 = stack_slot_get_type (array);
  if (D.25640 != 6) goto <D.25637>; else goto <D.25641>;
  <D.25641>:
  D.25642 = array->type;
  D.25643 = D.25642->type;
  if (D.25643 != 29) goto <D.25637>; else goto <D.25638>;
  <D.25637>:
  D.25624 = ctx->verifiable;
  if (D.25624 != 0) goto <D.25644>; else goto <D.25646>;
  <D.25646>:
  D.25626 = ctx->level;
  D.25627 = D.25626 & 128;
  if (D.25627 != 0) goto <D.25644>; else goto <D.25645>;
  <D.25644>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25647 = stack_slot_get_name (array);
    D.25611 = ctx->ip_offset;
    D.25648 = monoeg_g_strdup_printf ("Invalid array type(%s) for stelem.X at 0x%04x", D.25647, D.25611);
    vinfo->info.message = D.25648;
    vinfo->exception_type = 4;
    D.25613 = ctx->list;
    D.25649 = monoeg_g_slist_prepend (D.25613, vinfo);
    ctx->list = D.25649;
  }
  ctx->verifiable = 0;
  D.25626 = ctx->level;
  D.25631 = D.25626 & 16;
  if (D.25631 != 0) goto <D.25650>; else goto <D.25651>;
  <D.25650>:
  ctx->valid = 0;
  <D.25651>:
  <D.25645>:
  goto <D.25639>;
  <D.25638>:
  if (opcode == 162) goto <D.25652>; else goto <D.25653>;
  <D.25652>:
  D.25642 = array->type;
  D.25654 = D.25642->data.klass;
  D.25655 = BIT_FIELD_REF <*D.25654, 64, 256>;
  D.25656 = D.25655 & 8;
  if (D.25656 != 0) goto <D.25657>; else goto <D.25658>;
  <D.25657>:
  D.25624 = ctx->verifiable;
  if (D.25624 != 0) goto <D.25659>; else goto <D.25661>;
  <D.25661>:
  D.25626 = ctx->level;
  D.25627 = D.25626 & 128;
  if (D.25627 != 0) goto <D.25659>; else goto <D.25660>;
  <D.25659>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25611 = ctx->ip_offset;
    D.25662 = monoeg_g_strdup_printf ("Invalid array type is not a reference type for stelem.ref 0x%04x", D.25611);
    vinfo->info.message = D.25662;
    vinfo->exception_type = 4;
    D.25613 = ctx->list;
    D.25663 = monoeg_g_slist_prepend (D.25613, vinfo);
    ctx->list = D.25663;
  }
  ctx->verifiable = 0;
  D.25626 = ctx->level;
  D.25631 = D.25626 & 16;
  if (D.25631 != 0) goto <D.25664>; else goto <D.25665>;
  <D.25664>:
  ctx->valid = 0;
  <D.25665>:
  <D.25660>:
  <D.25658>:
  goto <D.25666>;
  <D.25653>:
  D.25642 = array->type;
  D.25654 = D.25642->data.klass;
  D.25667 = &D.25654->byval_arg;
  D.25668 = verify_type_compatibility_full (ctx, D.25667, type, 1);
  if (D.25668 == 0) goto <D.25669>; else goto <D.25670>;
  <D.25669>:
  D.25624 = ctx->verifiable;
  if (D.25624 != 0) goto <D.25671>; else goto <D.25673>;
  <D.25673>:
  D.25626 = ctx->level;
  D.25627 = D.25626 & 128;
  if (D.25627 != 0) goto <D.25671>; else goto <D.25672>;
  <D.25671>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25611 = ctx->ip_offset;
    D.25674 = monoeg_g_strdup_printf ("Invalid array type on stack for stdelem.X at 0x%04x", D.25611);
    vinfo->info.message = D.25674;
    vinfo->exception_type = 4;
    D.25613 = ctx->list;
    D.25675 = monoeg_g_slist_prepend (D.25613, vinfo);
    ctx->list = D.25675;
  }
  ctx->verifiable = 0;
  D.25626 = ctx->level;
  D.25631 = D.25626 & 16;
  if (D.25631 != 0) goto <D.25676>; else goto <D.25677>;
  <D.25676>:
  ctx->valid = 0;
  <D.25677>:
  <D.25672>:
  <D.25670>:
  <D.25666>:
  <D.25639>:
  <D.25636>:
  if (opcode == 162) goto <D.25678>; else goto <D.25679>;
  <D.25678>:
  D.25680 = stack_slot_is_boxed_value (value);
  if (D.25680 == 0) goto <D.25681>; else goto <D.25682>;
  <D.25681>:
  D.25683 = value->type;
  D.25684 = mono_class_from_mono_type (D.25683);
  D.25685 = BIT_FIELD_REF <*D.25684, 64, 256>;
  D.25686 = D.25685 & 8;
  if (D.25686 != 0) goto <D.25687>; else goto <D.25688>;
  <D.25687>:
  D.25624 = ctx->verifiable;
  if (D.25624 != 0) goto <D.25689>; else goto <D.25691>;
  <D.25691>:
  D.25626 = ctx->level;
  D.25627 = D.25626 & 128;
  if (D.25627 != 0) goto <D.25689>; else goto <D.25690>;
  <D.25689>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25611 = ctx->ip_offset;
    D.25692 = monoeg_g_strdup_printf ("Invalid value is not a reference type for stelem.ref 0x%04x", D.25611);
    vinfo->info.message = D.25692;
    vinfo->exception_type = 4;
    D.25613 = ctx->list;
    D.25693 = monoeg_g_slist_prepend (D.25613, vinfo);
    ctx->list = D.25693;
  }
  ctx->verifiable = 0;
  D.25626 = ctx->level;
  D.25631 = D.25626 & 16;
  if (D.25631 != 0) goto <D.25694>; else goto <D.25695>;
  <D.25694>:
  ctx->valid = 0;
  <D.25695>:
  <D.25690>:
  <D.25688>:
  <D.25682>:
  goto <D.25696>;
  <D.25679>:
  if (opcode != 162) goto <D.25697>; else goto <D.25698>;
  <D.25697>:
  D.25699 = verify_stack_type_compatibility (ctx, type, value);
  if (D.25699 == 0) goto <D.25700>; else goto <D.25701>;
  <D.25700>:
  D.25624 = ctx->verifiable;
  if (D.25624 != 0) goto <D.25702>; else goto <D.25704>;
  <D.25704>:
  D.25626 = ctx->level;
  D.25627 = D.25626 & 128;
  if (D.25627 != 0) goto <D.25702>; else goto <D.25703>;
  <D.25702>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25611 = ctx->ip_offset;
    D.25705 = monoeg_g_strdup_printf ("Invalid value on stack for stdelem.X at 0x%04x", D.25611);
    vinfo->info.message = D.25705;
    vinfo->exception_type = 4;
    D.25613 = ctx->list;
    D.25706 = monoeg_g_slist_prepend (D.25613, vinfo);
    ctx->list = D.25706;
  }
  ctx->verifiable = 0;
  D.25626 = ctx->level;
  D.25631 = D.25626 & 16;
  if (D.25631 != 0) goto <D.25707>; else goto <D.25708>;
  <D.25707>:
  ctx->valid = 0;
  <D.25708>:
  <D.25703>:
  <D.25701>:
  D.25709 = stack_slot_is_boxed_value (value);
  if (D.25709 != 0) goto <D.25710>; else goto <D.25711>;
  <D.25710>:
  D.25683 = value->type;
  D.25712 = mono_type_is_reference (D.25683);
  if (D.25712 == 0) goto <D.25713>; else goto <D.25714>;
  <D.25713>:
  D.25715 = mono_type_is_reference (type);
  if (D.25715 == 0) goto <D.25716>; else goto <D.25717>;
  <D.25716>:
  D.25624 = ctx->verifiable;
  if (D.25624 != 0) goto <D.25718>; else goto <D.25720>;
  <D.25720>:
  D.25626 = ctx->level;
  D.25627 = D.25626 & 128;
  if (D.25627 != 0) goto <D.25718>; else goto <D.25719>;
  <D.25718>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25611 = ctx->ip_offset;
    D.25721 = monoeg_g_strdup_printf ("Cannot use stobj with a boxed source value that is not a reference type at 0x%04x", D.25611);
    vinfo->info.message = D.25721;
    vinfo->exception_type = 4;
    D.25613 = ctx->list;
    D.25722 = monoeg_g_slist_prepend (D.25613, vinfo);
    ctx->list = D.25722;
  }
  ctx->verifiable = 0;
  D.25626 = ctx->level;
  D.25631 = D.25626 & 16;
  if (D.25631 != 0) goto <D.25723>; else goto <D.25724>;
  <D.25723>:
  ctx->valid = 0;
  <D.25724>:
  <D.25719>:
  <D.25717>:
  <D.25714>:
  <D.25711>:
  <D.25698>:
  <D.25696>:
}


do_unbox_any (struct VerifyContext * ctx, int klass_token)
{
  int D.25728;
  int D.25733;
  int D.25735;
  struct MonoType * D.25737;
  struct MonoClass * D.25738;
  long unsigned int D.25739;
  long unsigned int D.25740;
  int D.25743;
  int D.25745;
  int D.25746;
  const char * D.25747;
  unsigned int D.25748;
  gchar * D.25749;
  struct GSList * D.25750;
  struct GSList * D.25751;
  int D.25752;
  struct ILStackDesc * D.25755;
  struct ILStackDesc * value;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, klass_token, "unbox.any");
  if (type == 0B) goto <D.25726>; else goto <D.25727>;
  <D.25726>:
  return;
  <D.25727>:
  D.25728 = check_underflow (ctx, 1);
  if (D.25728 == 0) goto <D.25729>; else goto <D.25730>;
  <D.25729>:
  return;
  <D.25730>:
  value = stack_pop (ctx);
  D.25733 = stack_slot_get_type (value);
  if (D.25733 != 6) goto <D.25731>; else goto <D.25734>;
  <D.25734>:
  D.25735 = stack_slot_is_boxed_value (value);
  if (D.25735 == 0) goto <D.25736>; else goto <D.25732>;
  <D.25736>:
  D.25737 = value->type;
  D.25738 = mono_class_from_mono_type (D.25737);
  D.25739 = BIT_FIELD_REF <*D.25738, 64, 256>;
  D.25740 = D.25739 & 8;
  if (D.25740 != 0) goto <D.25731>; else goto <D.25732>;
  <D.25731>:
  D.25743 = ctx->verifiable;
  if (D.25743 != 0) goto <D.25741>; else goto <D.25744>;
  <D.25744>:
  D.25745 = ctx->level;
  D.25746 = D.25745 & 128;
  if (D.25746 != 0) goto <D.25741>; else goto <D.25742>;
  <D.25741>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25747 = stack_slot_get_name (value);
    D.25748 = ctx->ip_offset;
    D.25749 = monoeg_g_strdup_printf ("Invalid type %s at stack for unbox.any operation at 0x%04x", D.25747, D.25748);
    vinfo->info.message = D.25749;
    vinfo->exception_type = 4;
    D.25750 = ctx->list;
    D.25751 = monoeg_g_slist_prepend (D.25750, vinfo);
    ctx->list = D.25751;
  }
  ctx->verifiable = 0;
  D.25745 = ctx->level;
  D.25752 = D.25745 & 16;
  if (D.25752 != 0) goto <D.25753>; else goto <D.25754>;
  <D.25753>:
  ctx->valid = 0;
  <D.25754>:
  <D.25742>:
  <D.25732>:
  D.25755 = stack_push (ctx);
  set_stack_value (ctx, D.25755, type, 0);
}


do_conversion (struct VerifyContext * ctx, int kind)
{
  int D.25757;
  int D.25760;
  int D.25763;
  int D.25765;
  int D.25766;
  const char * D.25767;
  unsigned int D.25768;
  gchar * D.25769;
  struct GSList * D.25770;
  struct GSList * D.25771;
  int D.25772;
  struct MonoClass * D.25775;
  struct MonoType * D.25776;
  struct MonoClass * D.25777;
  struct MonoType * D.25778;
  struct MonoClass * D.25779;
  struct MonoType * D.25780;
  struct MonoClass * D.25781;
  struct MonoType * D.25782;
  struct ILStackDesc * value;

  D.25757 = check_underflow (ctx, 1);
  if (D.25757 == 0) goto <D.25758>; else goto <D.25759>;
  <D.25758>:
  return;
  <D.25759>:
  value = stack_pop (ctx);
  D.25760 = stack_slot_get_type (value);
  switch (D.25760) <default: <D.19502>, case 1: <D.19497>, case 2: <D.19498>, case 3: <D.19499>, case 4: <D.19500>>
  <D.19497>:
  <D.19498>:
  <D.19499>:
  <D.19500>:
  goto <D.19501>;
  <D.19502>:
  D.25763 = ctx->verifiable;
  if (D.25763 != 0) goto <D.25761>; else goto <D.25764>;
  <D.25764>:
  D.25765 = ctx->level;
  D.25766 = D.25765 & 128;
  if (D.25766 != 0) goto <D.25761>; else goto <D.25762>;
  <D.25761>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25767 = stack_slot_get_name (value);
    D.25768 = ctx->ip_offset;
    D.25769 = monoeg_g_strdup_printf ("Invalid type (%s) at stack for conversion operation. Numeric type expected at 0x%04x", D.25767, D.25768);
    vinfo->info.message = D.25769;
    vinfo->exception_type = 4;
    D.25770 = ctx->list;
    D.25771 = monoeg_g_slist_prepend (D.25770, vinfo);
    ctx->list = D.25771;
  }
  ctx->verifiable = 0;
  D.25765 = ctx->level;
  D.25772 = D.25765 & 16;
  if (D.25772 != 0) goto <D.25773>; else goto <D.25774>;
  <D.25773>:
  ctx->valid = 0;
  <D.25774>:
  <D.25762>:
  <D.19501>:
  switch (kind) <default: <D.19509>, case 1: <D.19504>, case 2: <D.19506>, case 3: <D.19508>, case 4: <D.19507>>
  <D.19504>:
  D.25775 = mono_defaults.int32_class;
  D.25776 = &D.25775->byval_arg;
  stack_push_val (ctx, 1, D.25776);
  goto <D.19505>;
  <D.19506>:
  D.25777 = mono_defaults.int64_class;
  D.25778 = &D.25777->byval_arg;
  stack_push_val (ctx, 2, D.25778);
  goto <D.19505>;
  <D.19507>:
  D.25779 = mono_defaults.double_class;
  D.25780 = &D.25779->byval_arg;
  stack_push_val (ctx, 4, D.25780);
  goto <D.19505>;
  <D.19508>:
  D.25781 = mono_defaults.int_class;
  D.25782 = &D.25781->byval_arg;
  stack_push_val (ctx, 3, D.25782);
  goto <D.19505>;
  <D.19509>:
  monoeg_g_log (0B, 4, "unknown type %02x in conversion", kind);
  <D.19510>:
  goto <D.19510>;
  <D.19505>:
}


do_refanyval (struct VerifyContext * ctx, int token)
{
  int D.25785;
  int D.25792;
  struct MonoType * D.25794;
  unsigned char D.25795;
  const char * D.25796;
  unsigned int D.25797;
  gchar * D.25798;
  struct GSList * D.25799;
  struct GSList * D.25800;
  struct ILStackDesc * D.25801;
  struct ILStackDesc * top;
  struct MonoType * type;

  D.25785 = check_underflow (ctx, 1);
  if (D.25785 == 0) goto <D.25786>; else goto <D.25787>;
  <D.25786>:
  return;
  <D.25787>:
  type = get_boxable_mono_type (ctx, token, "refanyval");
  if (type == 0B) goto <D.25788>; else goto <D.25789>;
  <D.25788>:
  return;
  <D.25789>:
  top = stack_pop (ctx);
  D.25792 = top->stype;
  if (D.25792 != 5) goto <D.25790>; else goto <D.25793>;
  <D.25793>:
  D.25794 = top->type;
  D.25795 = D.25794->type;
  if (D.25795 != 22) goto <D.25790>; else goto <D.25791>;
  <D.25790>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25796 = stack_slot_get_name (top);
    D.25797 = ctx->ip_offset;
    D.25798 = monoeg_g_strdup_printf ("Expected a typedref as argument for refanyval, but found %s at 0x%04x", D.25796, D.25797);
    vinfo->info.message = D.25798;
    vinfo->exception_type = 3;
    D.25799 = ctx->list;
    D.25800 = monoeg_g_slist_prepend (D.25799, vinfo);
    ctx->list = D.25800;
  }
  ctx->valid = 0;
  <D.25791>:
  D.25801 = stack_push (ctx);
  set_stack_value (ctx, D.25801, type, 1);
}


do_ckfinite (struct VerifyContext * ctx)
{
  int D.25803;
  int D.25806;
  const char * D.25809;
  unsigned int D.25810;
  gchar * D.25811;
  struct GSList * D.25812;
  struct GSList * D.25813;
  struct ILStackDesc * top;

  D.25803 = check_underflow (ctx, 1);
  if (D.25803 == 0) goto <D.25804>; else goto <D.25805>;
  <D.25804>:
  return;
  <D.25805>:
  top = stack_pop (ctx);
  D.25806 = stack_slot_get_underlying_type (top);
  if (D.25806 != 4) goto <D.25807>; else goto <D.25808>;
  <D.25807>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25809 = stack_slot_get_name (top);
    D.25810 = ctx->ip_offset;
    D.25811 = monoeg_g_strdup_printf ("Expected float32 or float64 on stack for ckfinit but found %s at 0x%04x", D.25809, D.25810);
    vinfo->info.message = D.25811;
    vinfo->exception_type = 3;
    D.25812 = ctx->list;
    D.25813 = monoeg_g_slist_prepend (D.25812, vinfo);
    ctx->list = D.25813;
  }
  ctx->valid = 0;
  <D.25808>:
  stack_push_stack_val (ctx, top);
}


do_mkrefany (struct VerifyContext * ctx, int token)
{
  int D.25815;
  int D.25820;
  int D.25825;
  int D.25827;
  int D.25828;
  unsigned int D.25829;
  gchar * D.25830;
  struct GSList * D.25831;
  struct GSList * D.25832;
  int D.25833;
  int D.25836;
  const char * D.25842;
  gchar * D.25843;
  struct GSList * D.25844;
  struct MonoType * D.25848;
  int D.25849;
  int D.25852;
  gchar * D.25858;
  struct GSList * D.25859;
  int D.25862;
  int D.25865;
  gchar * D.25871;
  struct GSList * D.25872;
  struct ILStackDesc * D.25875;
  struct MonoClass * D.25876;
  struct MonoType * D.25877;
  struct ILStackDesc * top;
  struct MonoType * type;

  D.25815 = check_underflow (ctx, 1);
  if (D.25815 == 0) goto <D.25816>; else goto <D.25817>;
  <D.25816>:
  return;
  <D.25817>:
  type = get_boxable_mono_type (ctx, token, "refanyval");
  if (type == 0B) goto <D.25818>; else goto <D.25819>;
  <D.25818>:
  return;
  <D.25819>:
  top = stack_pop (ctx);
  D.25820 = stack_slot_is_managed_mutability_pointer (top);
  if (D.25820 != 0) goto <D.25821>; else goto <D.25822>;
  <D.25821>:
  D.25825 = ctx->verifiable;
  if (D.25825 != 0) goto <D.25823>; else goto <D.25826>;
  <D.25826>:
  D.25827 = ctx->level;
  D.25828 = D.25827 & 128;
  if (D.25828 != 0) goto <D.25823>; else goto <D.25824>;
  <D.25823>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25829 = ctx->ip_offset;
    D.25830 = monoeg_g_strdup_printf ("Cannot use a readonly pointer with mkrefany at 0x%04x", D.25829);
    vinfo->info.message = D.25830;
    vinfo->exception_type = 4;
    D.25831 = ctx->list;
    D.25832 = monoeg_g_slist_prepend (D.25831, vinfo);
    ctx->list = D.25832;
  }
  ctx->verifiable = 0;
  D.25827 = ctx->level;
  D.25833 = D.25827 & 16;
  if (D.25833 != 0) goto <D.25834>; else goto <D.25835>;
  <D.25834>:
  ctx->valid = 0;
  <D.25835>:
  <D.25824>:
  <D.25822>:
  D.25836 = stack_slot_is_managed_pointer (top);
  if (D.25836 == 0) goto <D.25837>; else goto <D.25838>;
  <D.25837>:
  D.25825 = ctx->verifiable;
  if (D.25825 != 0) goto <D.25839>; else goto <D.25841>;
  <D.25841>:
  D.25827 = ctx->level;
  D.25828 = D.25827 & 128;
  if (D.25828 != 0) goto <D.25839>; else goto <D.25840>;
  <D.25839>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25842 = stack_slot_get_name (top);
    D.25829 = ctx->ip_offset;
    D.25843 = monoeg_g_strdup_printf ("Expected a managed pointer for mkrefany, but found %s at 0x%04x", D.25842, D.25829);
    vinfo->info.message = D.25843;
    vinfo->exception_type = 4;
    D.25831 = ctx->list;
    D.25844 = monoeg_g_slist_prepend (D.25831, vinfo);
    ctx->list = D.25844;
  }
  ctx->verifiable = 0;
  D.25827 = ctx->level;
  D.25833 = D.25827 & 16;
  if (D.25833 != 0) goto <D.25845>; else goto <D.25846>;
  <D.25845>:
  ctx->valid = 0;
  <D.25846>:
  <D.25840>:
  goto <D.25847>;
  <D.25838>:
  {
    struct MonoType * stack_type;

    D.25848 = top->type;
    stack_type = mono_type_get_type_byval (D.25848);
    D.25849 = mono_type_is_reference (type);
    if (D.25849 != 0) goto <D.25850>; else goto <D.25851>;
    <D.25850>:
    D.25852 = mono_metadata_type_equal (type, stack_type);
    if (D.25852 == 0) goto <D.25853>; else goto <D.25854>;
    <D.25853>:
    D.25825 = ctx->verifiable;
    if (D.25825 != 0) goto <D.25855>; else goto <D.25857>;
    <D.25857>:
    D.25827 = ctx->level;
    D.25828 = D.25827 & 128;
    if (D.25828 != 0) goto <D.25855>; else goto <D.25856>;
    <D.25855>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.25829 = ctx->ip_offset;
      D.25858 = monoeg_g_strdup_printf ("Type not compatible for mkrefany at 0x%04x", D.25829);
      vinfo->info.message = D.25858;
      vinfo->exception_type = 4;
      D.25831 = ctx->list;
      D.25859 = monoeg_g_slist_prepend (D.25831, vinfo);
      ctx->list = D.25859;
    }
    ctx->verifiable = 0;
    D.25827 = ctx->level;
    D.25833 = D.25827 & 16;
    if (D.25833 != 0) goto <D.25860>; else goto <D.25861>;
    <D.25860>:
    ctx->valid = 0;
    <D.25861>:
    <D.25856>:
    <D.25854>:
    <D.25851>:
    D.25862 = mono_type_is_reference (type);
    if (D.25862 == 0) goto <D.25863>; else goto <D.25864>;
    <D.25863>:
    D.25865 = verify_type_compatibility_full (ctx, type, stack_type, 1);
    if (D.25865 == 0) goto <D.25866>; else goto <D.25867>;
    <D.25866>:
    D.25825 = ctx->verifiable;
    if (D.25825 != 0) goto <D.25868>; else goto <D.25870>;
    <D.25870>:
    D.25827 = ctx->level;
    D.25828 = D.25827 & 128;
    if (D.25828 != 0) goto <D.25868>; else goto <D.25869>;
    <D.25868>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.25829 = ctx->ip_offset;
      D.25871 = monoeg_g_strdup_printf ("Type not compatible for mkrefany at 0x%04x", D.25829);
      vinfo->info.message = D.25871;
      vinfo->exception_type = 4;
      D.25831 = ctx->list;
      D.25872 = monoeg_g_slist_prepend (D.25831, vinfo);
      ctx->list = D.25872;
    }
    ctx->verifiable = 0;
    D.25827 = ctx->level;
    D.25833 = D.25827 & 16;
    if (D.25833 != 0) goto <D.25873>; else goto <D.25874>;
    <D.25873>:
    ctx->valid = 0;
    <D.25874>:
    <D.25869>:
    <D.25867>:
    <D.25864>:
  }
  <D.25847>:
  D.25875 = stack_push (ctx);
  D.25876 = mono_defaults.typed_reference_class;
  D.25877 = &D.25876->byval_arg;
  set_stack_value (ctx, D.25875, D.25877, 0);
}


do_load_token (struct VerifyContext * ctx, int token)
{
  int D.25879;
  struct MonoMethod * D.25882;
  long unsigned int D.25883;
  long unsigned int D.25884;
  unsigned int token.99;
  int D.25888;
  unsigned int D.25889;
  void * handle_class.100;
  struct MonoClass * D.25891;
  struct MonoClass * handle_class.101;
  unsigned int token.102;
  unsigned int D.25897;
  struct MonoImage * D.25898;
  int D.25899;
  int D.25902;
  unsigned int D.25903;
  gchar * D.25904;
  struct GSList * D.25905;
  struct GSList * D.25906;
  int D.25907;
  gchar * D.25908;
  struct GSList * D.25909;
  unsigned int token.103;
  struct MonoGenericContext * D.25911;
  gchar * D.25914;
  struct GSList * D.25915;
  struct MonoClass * D.25919;
  struct MonoClass * D.25923;
  struct MonoClass * D.25926;
  struct MonoType * D.25927;
  gchar * D.25929;
  struct GSList * D.25930;
  struct MonoType * D.25931;
  void * handle;
  struct MonoClass * handle_class;

  try
    {
      D.25879 = check_overflow (ctx);
      if (D.25879 == 0) goto <D.25880>; else goto <D.25881>;
      <D.25880>:
      return;
      <D.25881>:
      D.25882 = ctx->method;
      D.25883 = BIT_FIELD_REF <*D.25882, 64, 256>;
      D.25884 = D.25883 & 124;
      if (D.25884 != 0) goto <D.25885>; else goto <D.25886>;
      <D.25885>:
      D.25882 = ctx->method;
      token.99 = (unsigned int) token;
      handle = mono_method_get_wrapper_data (D.25882, token.99);
      D.25882 = ctx->method;
      D.25888 = token + 1;
      D.25889 = (unsigned int) D.25888;
      handle_class.100 = mono_method_get_wrapper_data (D.25882, D.25889);
      handle_class = handle_class.100;
      D.25891 = mono_defaults.typehandle_class;
      handle_class.101 = handle_class;
      if (D.25891 == handle_class.101) goto <D.25893>; else goto <D.25894>;
      <D.25893>:
      handle = &MEM[(struct MonoClass *)handle].byval_arg;
      <D.25894>:
      goto <D.25895>;
      <D.25886>:
      token.102 = (unsigned int) token;
      D.25897 = token.102 & 4278190080;
      switch (D.25897) <default: <D.19526>, case 16777216: <D.19518>, case 33554432: <D.19517>, case 67108864: <D.19520>, case 100663296: <D.19521>, case 167772160: <D.19523>, case 452984832: <D.19519>, case 721420288: <D.19522>>
      <D.19517>:
      <D.19518>:
      <D.19519>:
      <D.19520>:
      <D.19521>:
      <D.19522>:
      <D.19523>:
      D.25898 = ctx->image;
      token.99 = (unsigned int) token;
      D.25899 = token_bounds_check (D.25898, token.99);
      if (D.25899 == 0) goto <D.25900>; else goto <D.25901>;
      <D.25900>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.25902 = token & 16777215;
        D.25903 = ctx->ip_offset;
        D.25904 = monoeg_g_strdup_printf ("Table index out of range 0x%x for token %x for ldtoken at 0x%04x", D.25902, token, D.25903);
        vinfo->info.message = D.25904;
        vinfo->exception_type = 3;
        D.25905 = ctx->list;
        D.25906 = monoeg_g_slist_prepend (D.25905, vinfo);
        ctx->list = D.25906;
      }
      ctx->valid = 0;
      return;
      <D.25901>:
      goto <D.19525>;
      <D.19526>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.25907 = token >> 24;
        D.25903 = ctx->ip_offset;
        D.25908 = monoeg_g_strdup_printf ("Invalid table 0x%x for token 0x%x for ldtoken at 0x%04x", D.25907, token, D.25903);
        vinfo->info.message = D.25908;
        vinfo->exception_type = 3;
        D.25905 = ctx->list;
        D.25909 = monoeg_g_slist_prepend (D.25905, vinfo);
        ctx->list = D.25909;
      }
      ctx->valid = 0;
      return;
      <D.19525>:
      D.25898 = ctx->image;
      token.103 = (unsigned int) token;
      D.25911 = ctx->generic_context;
      handle = mono_ldtoken (D.25898, token.103, &handle_class, D.25911);
      <D.25895>:
      if (handle == 0B) goto <D.25912>; else goto <D.25913>;
      <D.25912>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.25903 = ctx->ip_offset;
        D.25914 = monoeg_g_strdup_printf ("Invalid token 0x%x for ldtoken at 0x%04x", token, D.25903);
        vinfo->info.message = D.25914;
        vinfo->exception_type = 3;
        D.25905 = ctx->list;
        D.25915 = monoeg_g_slist_prepend (D.25905, vinfo);
        ctx->list = D.25915;
      }
      ctx->valid = 0;
      return;
      <D.25913>:
      D.25891 = mono_defaults.typehandle_class;
      handle_class.101 = handle_class;
      if (D.25891 == handle_class.101) goto <D.25916>; else goto <D.25917>;
      <D.25916>:
      mono_type_is_valid_in_context (ctx, handle);
      goto <D.25918>;
      <D.25917>:
      D.25919 = mono_defaults.methodhandle_class;
      handle_class.101 = handle_class;
      if (D.25919 == handle_class.101) goto <D.25920>; else goto <D.25921>;
      <D.25920>:
      mono_method_is_valid_in_context (ctx, handle);
      goto <D.25922>;
      <D.25921>:
      D.25923 = mono_defaults.fieldhandle_class;
      handle_class.101 = handle_class;
      if (D.25923 == handle_class.101) goto <D.25924>; else goto <D.25925>;
      <D.25924>:
      D.25926 = MEM[(struct MonoClassField *)handle].parent;
      D.25927 = &D.25926->byval_arg;
      mono_type_is_valid_in_context (ctx, D.25927);
      goto <D.25928>;
      <D.25925>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.25903 = ctx->ip_offset;
        D.25929 = monoeg_g_strdup_printf ("Invalid ldtoken type %x at 0x%04x", token, D.25903);
        vinfo->info.message = D.25929;
        vinfo->exception_type = 12;
        D.25905 = ctx->list;
        D.25930 = monoeg_g_slist_prepend (D.25905, vinfo);
        ctx->list = D.25930;
      }
      ctx->valid = 0;
      <D.25928>:
      <D.25922>:
      <D.25918>:
      handle_class.101 = handle_class;
      D.25931 = mono_class_get_type (handle_class.101);
      stack_push_val (ctx, 6, D.25931);
    }
  finally
    {
      handle_class = {CLOBBER};
    }
}


is_correct_endfinally (struct MonoMethodHeader * header, guint offset)
{
  struct MonoExceptionClause * D.25935;
  long unsigned int D.25936;
  long unsigned int D.25937;
  unsigned int D.25940;
  unsigned int D.25943;
  unsigned int D.25944;
  unsigned int D.25947;
  int D.25949;
  <unnamed-unsigned:15> D.25950;
  int D.25951;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.18770>;
  <D.18769>:
  D.25935 = header->clauses;
  D.25936 = (long unsigned int) i;
  D.25937 = D.25936 * 32;
  clause = D.25935 + D.25937;
  D.25940 = clause->handler_offset;
  if (D.25940 <= offset) goto <D.25941>; else goto <D.25942>;
  <D.25941>:
  D.25940 = clause->handler_offset;
  D.25943 = clause->handler_len;
  D.25944 = D.25940 + D.25943;
  if (D.25944 > offset) goto <D.25945>; else goto <D.25946>;
  <D.25945>:
  D.25947 = clause->flags;
  if (D.25947 == 4) goto <D.25938>; else goto <D.25948>;
  <D.25948>:
  D.25947 = clause->flags;
  if (D.25947 == 2) goto <D.25938>; else goto <D.25939>;
  <D.25938>:
  D.25949 = 1;
  return D.25949;
  <D.25939>:
  <D.25946>:
  <D.25942>:
  i = i + 1;
  <D.18770>:
  D.25950 = header->num_clauses;
  D.25951 = (int) D.25950;
  if (D.25951 > i) goto <D.18769>; else goto <D.18771>;
  <D.18771>:
  D.25949 = 0;
  return D.25949;
}


do_leave (struct VerifyContext * ctx, int delta)
{
  unsigned int D.25953;
  int D.25954;
  int D.25957;
  gchar * D.25959;
  struct GSList * D.25960;
  struct GSList * D.25961;
  struct MonoMethodHeader * D.25962;
  unsigned int target.104;
  int D.25964;
  int D.25969;
  int D.25971;
  int D.25972;
  gchar * D.25973;
  struct GSList * D.25974;
  int D.25975;
  int target;

  D.25953 = ctx->ip_offset;
  D.25954 = (int) D.25953;
  target = D.25954 + delta;
  D.25957 = ctx->code_size;
  if (D.25957 <= target) goto <D.25955>; else goto <D.25958>;
  <D.25958>:
  if (target < 0) goto <D.25955>; else goto <D.25956>;
  <D.25955>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25953 = ctx->ip_offset;
    D.25959 = monoeg_g_strdup_printf ("Branch target out of code at 0x%04x", D.25953);
    vinfo->info.message = D.25959;
    vinfo->exception_type = 3;
    D.25960 = ctx->list;
    D.25961 = monoeg_g_slist_prepend (D.25960, vinfo);
    ctx->list = D.25961;
  }
  ctx->valid = 0;
  <D.25956>:
  D.25962 = ctx->header;
  D.25953 = ctx->ip_offset;
  target.104 = (unsigned int) target;
  D.25964 = is_correct_leave (D.25962, D.25953, target.104);
  if (D.25964 == 0) goto <D.25965>; else goto <D.25966>;
  <D.25965>:
  D.25969 = ctx->verifiable;
  if (D.25969 != 0) goto <D.25967>; else goto <D.25970>;
  <D.25970>:
  D.25971 = ctx->level;
  D.25972 = D.25971 & 128;
  if (D.25972 != 0) goto <D.25967>; else goto <D.25968>;
  <D.25967>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.25953 = ctx->ip_offset;
    D.25973 = monoeg_g_strdup_printf ("Leave not allowed in finally block at 0x%04x", D.25953);
    vinfo->info.message = D.25973;
    vinfo->exception_type = 4;
    D.25960 = ctx->list;
    D.25974 = monoeg_g_slist_prepend (D.25960, vinfo);
    ctx->list = D.25974;
  }
  ctx->verifiable = 0;
  D.25971 = ctx->level;
  D.25975 = D.25971 & 16;
  if (D.25975 != 0) goto <D.25976>; else goto <D.25977>;
  <D.25976>:
  ctx->valid = 0;
  <D.25977>:
  <D.25968>:
  <D.25966>:
  ctx->eval.size = 0;
  ctx->target = target;
}


is_correct_leave (struct MonoMethodHeader * header, guint offset, guint target)
{
  struct MonoExceptionClause * D.25978;
  long unsigned int D.25979;
  long unsigned int D.25980;
  unsigned int D.25983;
  unsigned int D.25986;
  unsigned int D.25989;
  unsigned int D.25990;
  int D.25994;
  unsigned int D.25997;
  <unnamed-unsigned:15> D.26002;
  int D.26003;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.18752>;
  <D.18751>:
  D.25978 = header->clauses;
  D.25979 = (long unsigned int) i;
  D.25980 = D.25979 * 32;
  clause = D.25978 + D.25980;
  D.25983 = clause->flags;
  if (D.25983 == 2) goto <D.25984>; else goto <D.25985>;
  <D.25984>:
  D.25986 = clause->handler_offset;
  if (D.25986 <= offset) goto <D.25987>; else goto <D.25988>;
  <D.25987>:
  D.25986 = clause->handler_offset;
  D.25989 = clause->handler_len;
  D.25990 = D.25986 + D.25989;
  if (D.25990 > offset) goto <D.25991>; else goto <D.25992>;
  <D.25991>:
  D.25986 = clause->handler_offset;
  if (D.25986 > target) goto <D.25981>; else goto <D.25993>;
  <D.25993>:
  D.25986 = clause->handler_offset;
  D.25989 = clause->handler_len;
  D.25990 = D.25986 + D.25989;
  if (D.25990 <= target) goto <D.25981>; else goto <D.25982>;
  <D.25981>:
  D.25994 = 0;
  return D.25994;
  <D.25982>:
  <D.25992>:
  <D.25988>:
  <D.25985>:
  D.25983 = clause->flags;
  if (D.25983 == 1) goto <D.25995>; else goto <D.25996>;
  <D.25995>:
  D.25997 = clause->data.filter_offset;
  if (D.25997 <= offset) goto <D.25998>; else goto <D.25999>;
  <D.25998>:
  D.25986 = clause->handler_offset;
  if (D.25986 > offset) goto <D.26000>; else goto <D.26001>;
  <D.26000>:
  D.25994 = 0;
  return D.25994;
  <D.26001>:
  <D.25999>:
  <D.25996>:
  i = i + 1;
  <D.18752>:
  D.26002 = header->num_clauses;
  D.26003 = (int) D.26002;
  if (D.26003 > i) goto <D.18751>; else goto <D.18753>;
  <D.18753>:
  D.25994 = 1;
  return D.25994;
}


store_local (struct VerifyContext * ctx, guint32 arg)
{
  int D.26005;
  unsigned int D.26006;
  unsigned int D.26009;
  unsigned int D.26010;
  gchar * D.26011;
  struct GSList * D.26012;
  struct GSList * D.26013;
  int D.26014;
  struct MonoType * * D.26017;
  long unsigned int D.26018;
  long unsigned int D.26019;
  struct MonoType * * D.26020;
  struct MonoType * D.26021;
  long unsigned int D.26022;
  long unsigned int D.26023;
  int D.26026;
  int D.26031;
  int D.26033;
  int D.26034;
  gchar * D.26035;
  struct GSList * D.26036;
  int D.26037;
  int D.26040;
  gchar * D.26046;
  struct GSList * D.26047;
  struct ILStackDesc * value;

  D.26005 = ctx->num_locals;
  D.26006 = (unsigned int) D.26005;
  if (D.26006 <= arg) goto <D.26007>; else goto <D.26008>;
  <D.26007>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26009 = arg + 1;
    D.26010 = ctx->ip_offset;
    D.26011 = monoeg_g_strdup_printf ("Method doesn\'t have local var %d at 0x%04x", D.26009, D.26010);
    vinfo->info.message = D.26011;
    vinfo->exception_type = 3;
    D.26012 = ctx->list;
    D.26013 = monoeg_g_slist_prepend (D.26012, vinfo);
    ctx->list = D.26013;
  }
  ctx->valid = 0;
  return;
  <D.26008>:
  D.26014 = check_underflow (ctx, 1);
  if (D.26014 == 0) goto <D.26015>; else goto <D.26016>;
  <D.26015>:
  return;
  <D.26016>:
  value = stack_pop (ctx);
  D.26017 = ctx->locals;
  D.26018 = (long unsigned int) arg;
  D.26019 = D.26018 * 8;
  D.26020 = D.26017 + D.26019;
  D.26021 = *D.26020;
  D.26022 = BIT_FIELD_REF <*D.26021, 64, 64>;
  D.26023 = D.26022 & 1073741824;
  if (D.26023 != 0) goto <D.26024>; else goto <D.26025>;
  <D.26024>:
  D.26026 = stack_slot_is_managed_mutability_pointer (value);
  if (D.26026 != 0) goto <D.26027>; else goto <D.26028>;
  <D.26027>:
  D.26031 = ctx->verifiable;
  if (D.26031 != 0) goto <D.26029>; else goto <D.26032>;
  <D.26032>:
  D.26033 = ctx->level;
  D.26034 = D.26033 & 128;
  if (D.26034 != 0) goto <D.26029>; else goto <D.26030>;
  <D.26029>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26010 = ctx->ip_offset;
    D.26035 = monoeg_g_strdup_printf ("Cannot use a readonly managed reference when storing on a local variable at 0x%04x", D.26010);
    vinfo->info.message = D.26035;
    vinfo->exception_type = 4;
    D.26012 = ctx->list;
    D.26036 = monoeg_g_slist_prepend (D.26012, vinfo);
    ctx->list = D.26036;
  }
  ctx->verifiable = 0;
  D.26033 = ctx->level;
  D.26037 = D.26033 & 16;
  if (D.26037 != 0) goto <D.26038>; else goto <D.26039>;
  <D.26038>:
  ctx->valid = 0;
  <D.26039>:
  <D.26030>:
  <D.26028>:
  <D.26025>:
  D.26017 = ctx->locals;
  D.26018 = (long unsigned int) arg;
  D.26019 = D.26018 * 8;
  D.26020 = D.26017 + D.26019;
  D.26021 = *D.26020;
  D.26040 = verify_stack_type_compatibility (ctx, D.26021, value);
  if (D.26040 == 0) goto <D.26041>; else goto <D.26042>;
  <D.26041>:
  {
    char * expected;
    char * found;

    D.26017 = ctx->locals;
    D.26018 = (long unsigned int) arg;
    D.26019 = D.26018 * 8;
    D.26020 = D.26017 + D.26019;
    D.26021 = *D.26020;
    expected = mono_type_full_name (D.26021);
    found = stack_slot_full_name (value);
    D.26031 = ctx->verifiable;
    if (D.26031 != 0) goto <D.26043>; else goto <D.26045>;
    <D.26045>:
    D.26033 = ctx->level;
    D.26034 = D.26033 & 128;
    if (D.26034 != 0) goto <D.26043>; else goto <D.26044>;
    <D.26043>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.26010 = ctx->ip_offset;
      D.26046 = monoeg_g_strdup_printf ("Incompatible type \'%s\' on stack cannot be stored to local %d with type \'%s\' at 0x%04x", found, arg, expected, D.26010);
      vinfo->info.message = D.26046;
      vinfo->exception_type = 4;
      D.26012 = ctx->list;
      D.26047 = monoeg_g_slist_prepend (D.26012, vinfo);
      ctx->list = D.26047;
    }
    ctx->verifiable = 0;
    D.26033 = ctx->level;
    D.26037 = D.26033 & 16;
    if (D.26037 != 0) goto <D.26048>; else goto <D.26049>;
    <D.26048>:
    ctx->valid = 0;
    <D.26049>:
    <D.26044>:
    monoeg_g_free (expected);
    monoeg_g_free (found);
  }
  <D.26042>:
}


do_cmp_op (struct VerifyContext * ctx, const unsigned char[6] * table, guint32 opcode)
{
  int D.26051;
  int D.26056;
  int D.26059;
  struct MonoClass * D.26062;
  struct MonoType * D.26063;
  int D.26064;
  int D.26067;
  int D.26073;
  int D.26075;
  long unsigned int D.26076;
  long unsigned int D.26077;
  const unsigned char[6] * D.26078;
  int D.26083;
  int D.26085;
  int D.26086;
  const char * D.26087;
  const char * D.26088;
  unsigned int D.26089;
  gchar * D.26090;
  struct GSList * D.26091;
  struct GSList * D.26092;
  int D.26093;
  signed char res.105;
  const char * D.26103;
  const char * D.26104;
  gchar * D.26105;
  struct GSList * D.26106;
  struct ILStackDesc * a;
  struct ILStackDesc * b;
  int idxa;
  int idxb;
  unsigned char res;

  D.26051 = check_underflow (ctx, 2);
  if (D.26051 == 0) goto <D.26052>; else goto <D.26053>;
  <D.26052>:
  return;
  <D.26053>:
  b = stack_pop (ctx);
  a = stack_pop (ctx);
  if (opcode == 3) goto <D.26054>; else goto <D.26055>;
  <D.26054>:
  D.26056 = stack_slot_get_type (a);
  if (D.26056 == 6) goto <D.26057>; else goto <D.26058>;
  <D.26057>:
  D.26059 = stack_slot_get_type (b);
  if (D.26059 == 6) goto <D.26060>; else goto <D.26061>;
  <D.26060>:
  D.26062 = mono_defaults.int32_class;
  D.26063 = &D.26062->byval_arg;
  stack_push_val (ctx, 1, D.26063);
  return;
  <D.26061>:
  <D.26058>:
  <D.26055>:
  idxa = stack_slot_get_underlying_type (a);
  D.26064 = stack_slot_is_managed_pointer (a);
  if (D.26064 != 0) goto <D.26065>; else goto <D.26066>;
  <D.26065>:
  idxa = 5;
  <D.26066>:
  idxb = stack_slot_get_underlying_type (b);
  D.26067 = stack_slot_is_managed_pointer (b);
  if (D.26067 != 0) goto <D.26068>; else goto <D.26069>;
  <D.26068>:
  idxb = 5;
  <D.26069>:
  D.26073 = stack_slot_is_complex_type_not_reference_type (a);
  if (D.26073 != 0) goto <D.26070>; else goto <D.26074>;
  <D.26074>:
  D.26075 = stack_slot_is_complex_type_not_reference_type (b);
  if (D.26075 != 0) goto <D.26070>; else goto <D.26071>;
  <D.26070>:
  res = 0;
  goto <D.26072>;
  <D.26071>:
  idxa = idxa + -1;
  idxb = idxb + -1;
  D.26076 = (long unsigned int) idxa;
  D.26077 = D.26076 * 6;
  D.26078 = table + D.26077;
  res = *D.26078[idxb];
  <D.26072>:
  if (res == 0) goto <D.26079>; else goto <D.26080>;
  <D.26079>:
  D.26083 = ctx->verifiable;
  if (D.26083 != 0) goto <D.26081>; else goto <D.26084>;
  <D.26084>:
  D.26085 = ctx->level;
  D.26086 = D.26085 & 128;
  if (D.26086 != 0) goto <D.26081>; else goto <D.26082>;
  <D.26081>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26087 = stack_slot_get_name (a);
    D.26088 = stack_slot_get_name (b);
    D.26089 = ctx->ip_offset;
    D.26090 = monoeg_g_strdup_printf ("Compare instruction applyed to ill formed stack (%s x %s) at 0x%04x", D.26087, D.26088, D.26089);
    vinfo->info.message = D.26090;
    vinfo->exception_type = 4;
    D.26091 = ctx->list;
    D.26092 = monoeg_g_slist_prepend (D.26091, vinfo);
    ctx->list = D.26092;
  }
  ctx->verifiable = 0;
  D.26085 = ctx->level;
  D.26093 = D.26085 & 16;
  if (D.26093 != 0) goto <D.26094>; else goto <D.26095>;
  <D.26094>:
  ctx->valid = 0;
  <D.26095>:
  <D.26082>:
  goto <D.26096>;
  <D.26080>:
  res.105 = (signed char) res;
  if (res.105 < 0) goto <D.26098>; else goto <D.26099>;
  <D.26098>:
  D.26083 = ctx->verifiable;
  if (D.26083 != 0) goto <D.26100>; else goto <D.26102>;
  <D.26102>:
  D.26085 = ctx->level;
  D.26086 = D.26085 & 128;
  if (D.26086 != 0) goto <D.26100>; else goto <D.26101>;
  <D.26100>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26103 = stack_slot_get_name (a);
    D.26104 = stack_slot_get_name (b);
    D.26089 = ctx->ip_offset;
    D.26105 = monoeg_g_strdup_printf ("Compare instruction is not verifiable (%s x %s) at 0x%04x", D.26103, D.26104, D.26089);
    vinfo->info.message = D.26105;
    vinfo->exception_type = 4;
    D.26091 = ctx->list;
    D.26106 = monoeg_g_slist_prepend (D.26091, vinfo);
    ctx->list = D.26106;
  }
  ctx->verifiable = 0;
  D.26085 = ctx->level;
  D.26093 = D.26085 & 16;
  if (D.26093 != 0) goto <D.26107>; else goto <D.26108>;
  <D.26107>:
  ctx->valid = 0;
  <D.26108>:
  <D.26101>:
  res = res & 127;
  <D.26099>:
  <D.26096>:
  D.26062 = mono_defaults.int32_class;
  D.26063 = &D.26062->byval_arg;
  stack_push_val (ctx, 1, D.26063);
}


store_arg (struct VerifyContext * ctx, guint32 arg)
{
  int D.26110;
  unsigned int D.26111;
  int D.26116;
  int D.26118;
  int D.26119;
  unsigned int D.26120;
  unsigned int D.26121;
  gchar * D.26122;
  struct GSList * D.26123;
  struct GSList * D.26124;
  int D.26125;
  int D.26128;
  int D.26131;
  struct MonoType * * D.26134;
  long unsigned int D.26135;
  long unsigned int D.26136;
  struct MonoType * * D.26137;
  struct MonoType * D.26138;
  int D.26139;
  const char * D.26145;
  gchar * D.26146;
  struct GSList * D.26147;
  struct MonoMethod * D.26152;
  short unsigned int D.26153;
  int D.26154;
  int D.26155;
  struct ILStackDesc * value;

  D.26110 = ctx->max_args;
  D.26111 = (unsigned int) D.26110;
  if (D.26111 <= arg) goto <D.26112>; else goto <D.26113>;
  <D.26112>:
  D.26116 = ctx->verifiable;
  if (D.26116 != 0) goto <D.26114>; else goto <D.26117>;
  <D.26117>:
  D.26118 = ctx->level;
  D.26119 = D.26118 & 128;
  if (D.26119 != 0) goto <D.26114>; else goto <D.26115>;
  <D.26114>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26120 = arg + 1;
    D.26121 = ctx->ip_offset;
    D.26122 = monoeg_g_strdup_printf ("Method doesn\'t have argument %d at 0x%04x", D.26120, D.26121);
    vinfo->info.message = D.26122;
    vinfo->exception_type = 4;
    D.26123 = ctx->list;
    D.26124 = monoeg_g_slist_prepend (D.26123, vinfo);
    ctx->list = D.26124;
  }
  ctx->verifiable = 0;
  D.26118 = ctx->level;
  D.26125 = D.26118 & 16;
  if (D.26125 != 0) goto <D.26126>; else goto <D.26127>;
  <D.26126>:
  ctx->valid = 0;
  <D.26127>:
  <D.26115>:
  D.26128 = check_underflow (ctx, 1);
  if (D.26128 != 0) goto <D.26129>; else goto <D.26130>;
  <D.26129>:
  stack_pop (ctx);
  <D.26130>:
  return;
  <D.26113>:
  D.26131 = check_underflow (ctx, 1);
  if (D.26131 != 0) goto <D.26132>; else goto <D.26133>;
  <D.26132>:
  value = stack_pop (ctx);
  D.26134 = ctx->params;
  D.26135 = (long unsigned int) arg;
  D.26136 = D.26135 * 8;
  D.26137 = D.26134 + D.26136;
  D.26138 = *D.26137;
  D.26139 = verify_stack_type_compatibility (ctx, D.26138, value);
  if (D.26139 == 0) goto <D.26140>; else goto <D.26141>;
  <D.26140>:
  D.26116 = ctx->verifiable;
  if (D.26116 != 0) goto <D.26142>; else goto <D.26144>;
  <D.26144>:
  D.26118 = ctx->level;
  D.26119 = D.26118 & 128;
  if (D.26119 != 0) goto <D.26142>; else goto <D.26143>;
  <D.26142>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26145 = stack_slot_get_name (value);
    D.26121 = ctx->ip_offset;
    D.26146 = monoeg_g_strdup_printf ("Incompatible type %s in argument store at 0x%04x", D.26145, D.26121);
    vinfo->info.message = D.26146;
    vinfo->exception_type = 4;
    D.26123 = ctx->list;
    D.26147 = monoeg_g_slist_prepend (D.26123, vinfo);
    ctx->list = D.26147;
  }
  ctx->verifiable = 0;
  D.26118 = ctx->level;
  D.26125 = D.26118 & 16;
  if (D.26125 != 0) goto <D.26148>; else goto <D.26149>;
  <D.26148>:
  ctx->valid = 0;
  <D.26149>:
  <D.26143>:
  <D.26141>:
  <D.26133>:
  if (arg == 0) goto <D.26150>; else goto <D.26151>;
  <D.26150>:
  D.26152 = ctx->method;
  D.26153 = D.26152->flags;
  D.26154 = (int) D.26153;
  D.26155 = D.26154 & 16;
  if (D.26155 == 0) goto <D.26156>; else goto <D.26157>;
  <D.26156>:
  ctx->has_this_store = 1;
  <D.26157>:
  <D.26151>:
}


check_overflow (struct VerifyContext * ctx)
{
  short unsigned int D.26159;
  int D.26160;
  int D.26161;
  int D.26164;
  unsigned int D.26165;
  gchar * D.26166;
  struct GSList * D.26167;
  struct GSList * D.26168;
  int D.26169;

  D.26159 = ctx->eval.size;
  D.26160 = (int) D.26159;
  D.26161 = ctx->max_stack;
  if (D.26160 >= D.26161) goto <D.26162>; else goto <D.26163>;
  <D.26162>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26159 = ctx->eval.size;
    D.26160 = (int) D.26159;
    D.26164 = D.26160 + 1;
    D.26165 = ctx->ip_offset;
    D.26166 = monoeg_g_strdup_printf ("Method doesn\'t have stack-depth %d at 0x%04x", D.26164, D.26165);
    vinfo->info.message = D.26166;
    vinfo->exception_type = 3;
    D.26167 = ctx->list;
    D.26168 = monoeg_g_slist_prepend (D.26167, vinfo);
    ctx->list = D.26168;
  }
  ctx->valid = 0;
  D.26169 = 0;
  return D.26169;
  <D.26163>:
  D.26169 = 1;
  return D.26169;
}


stack_push (struct VerifyContext * ctx)
{
  short unsigned int D.26171;
  int D.26172;
  int D.26173;
  _Bool D.26174;
  long int D.26175;
  long int D.26176;
  short unsigned int D.26179;
  _Bool D.26180;
  long int D.26181;
  long int D.26182;
  struct ILCodeDesc * D.26185;
  int D.26186;
  struct ILStackDesc * D.26187;
  struct ILStackDesc * D.26188;
  short unsigned int D.26189;
  short unsigned int D.26190;
  long unsigned int D.26191;
  long unsigned int D.26192;

  D.26171 = ctx->eval.size;
  D.26172 = (int) D.26171;
  D.26173 = ctx->max_stack;
  D.26174 = D.26172 >= D.26173;
  D.26175 = (long int) D.26174;
  D.26176 = __builtin_expect (D.26175, 0);
  if (D.26176 != 0) goto <D.26177>; else goto <D.26178>;
  <D.26177>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1589, "ctx->eval.size < ctx->max_stack");
  <D.26178>:
  D.26171 = ctx->eval.size;
  D.26179 = ctx->eval.max_size;
  D.26180 = D.26171 > D.26179;
  D.26181 = (long int) D.26180;
  D.26182 = __builtin_expect (D.26181, 0);
  if (D.26182 != 0) goto <D.26183>; else goto <D.26184>;
  <D.26183>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1590, "ctx->eval.size <= ctx->eval.max_size");
  <D.26184>:
  D.26185 = &ctx->eval;
  D.26171 = ctx->eval.size;
  D.26172 = (int) D.26171;
  D.26186 = D.26172 + 1;
  ensure_stack_size (D.26185, D.26186);
  D.26188 = ctx->eval.stack;
  D.26171 = ctx->eval.size;
  D.26189 = D.26171;
  D.26190 = D.26189 + 1;
  ctx->eval.size = D.26190;
  D.26191 = (long unsigned int) D.26189;
  D.26192 = D.26191 * 24;
  D.26187 = D.26188 + D.26192;
  return D.26187;
}


set_stack_value (struct VerifyContext * ctx, struct ILStackDesc * stack, struct MonoType * type, int take_addr)
{
  unsigned char D.26194;
  long unsigned int D.26197;
  long unsigned int D.26198;
  int D.26200;
  int D.26201;
  int D.26202;
  int D.26203;
  int D.26204;
  int D.26205;
  int D.26206;
  int D.26211;
  unsigned int D.26212;
  gchar * D.26213;
  struct GSList * D.26214;
  struct GSList * D.26215;
  gboolean D.26216;
  gchar * D.26217;
  struct GSList * D.26218;
  int mask;
  int type_kind;
  void handle_enum = <<< error >>>;

  mask = 0;
  D.26194 = type->type;
  type_kind = (int) D.26194;
  D.26197 = BIT_FIELD_REF <*type, 64, 64>;
  D.26198 = D.26197 & 1073741824;
  if (D.26198 != 0) goto <D.26195>; else goto <D.26199>;
  <D.26199>:
  if (take_addr != 0) goto <D.26195>; else goto <D.26196>;
  <D.26195>:
  mask = 256;
  <D.26196>:
  handle_enum:
  stack->type = type;
  switch (type_kind) <default: <D.18979>, case 2: <D.18952>, case 3: <D.18955>, case 4: <D.18950>, case 5: <D.18951>, case 6: <D.18953>, case 7: <D.18954>, case 8: <D.18956>, case 9: <D.18957>, case 10: <D.18971>, case 11: <D.18972>, case 12: <D.18973>, case 13: <D.18974>, case 14: <D.18965>, case 15: <D.18962>, case 17: <D.18976>, case 18: <D.18964>, case 19: <D.18969>, case 20: <D.18968>, case 21: <D.18975>, case 22: <D.18963>, case 24: <D.18959>, case 25: <D.18960>, case 27: <D.18961>, case 28: <D.18966>, case 29: <D.18967>, case 30: <D.18970>>
  <D.18950>:
  <D.18951>:
  <D.18952>:
  <D.18953>:
  <D.18954>:
  <D.18955>:
  <D.18956>:
  <D.18957>:
  D.26200 = mask | 1;
  stack->stype = D.26200;
  goto <D.18958>;
  <D.18959>:
  <D.18960>:
  D.26201 = mask | 3;
  stack->stype = D.26201;
  goto <D.18958>;
  <D.18961>:
  <D.18962>:
  <D.18963>:
  D.26202 = mask | 5;
  stack->stype = D.26202;
  goto <D.18958>;
  <D.18964>:
  <D.18965>:
  <D.18966>:
  <D.18967>:
  <D.18968>:
  <D.18969>:
  <D.18970>:
  D.26203 = mask | 6;
  stack->stype = D.26203;
  goto <D.18958>;
  <D.18971>:
  <D.18972>:
  D.26204 = mask | 2;
  stack->stype = D.26204;
  goto <D.18958>;
  <D.18973>:
  <D.18974>:
  D.26205 = mask | 4;
  stack->stype = D.26205;
  goto <D.18958>;
  <D.18975>:
  <D.18976>:
  D.26206 = mono_type_is_enum_type (type);
  if (D.26206 != 0) goto <D.26207>; else goto <D.26208>;
  <D.26207>:
  {
    struct MonoType * utype;

    utype = mono_type_get_underlying_type_any (type);
    if (utype == 0B) goto <D.26209>; else goto <D.26210>;
    <D.26209>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.26194 = type->type;
      D.26211 = (int) D.26194;
      D.26212 = ctx->ip_offset;
      D.26213 = monoeg_g_strdup_printf ("Could not resolve underlying type of %x at %d", D.26211, D.26212);
      vinfo->info.message = D.26213;
      vinfo->exception_type = 3;
      D.26214 = ctx->list;
      D.26215 = monoeg_g_slist_prepend (D.26214, vinfo);
      ctx->list = D.26215;
    }
    ctx->valid = 0;
    D.26216 = 0;
    return D.26216;
    <D.26210>:
    type = utype;
    D.26194 = type->type;
    type_kind = (int) D.26194;
    goto handle_enum;
  }
  <D.26208>:
  D.26203 = mask | 6;
  stack->stype = D.26203;
  goto <D.18958>;
  <D.18979>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26194 = type->type;
    D.26211 = (int) D.26194;
    D.26212 = ctx->ip_offset;
    D.26217 = monoeg_g_strdup_printf ("Illegal value set on stack 0x%02x at %d", D.26211, D.26212);
    vinfo->info.message = D.26217;
    vinfo->exception_type = 3;
    D.26214 = ctx->list;
    D.26218 = monoeg_g_slist_prepend (D.26214, vinfo);
    ctx->list = D.26218;
  }
  ctx->valid = 0;
  D.26216 = 0;
  return D.26216;
  <D.18958>:
  D.26216 = 1;
  return D.26216;
}


do_load_function_ptr (struct VerifyContext * ctx, guint32 token, gboolean virtual)
{
  int D.26222;
  int D.26227;
  struct MonoMethod * D.26230;
  long unsigned int D.26231;
  long unsigned int D.26232;
  unsigned int D.26237;
  gchar * D.26238;
  struct GSList * D.26239;
  struct GSList * D.26240;
  unsigned int D.26245;
  struct MonoImage * D.26248;
  int D.26249;
  gchar * D.26250;
  struct GSList * D.26251;
  int token.106;
  const char * iftmp.107;
  int D.26259;
  int D.26264;
  int D.26266;
  int D.26267;
  gchar * D.26268;
  struct GSList * D.26269;
  int D.26270;
  int D.26277;
  struct MonoType * D.26279;
  unsigned char D.26280;
  gchar * D.26284;
  struct GSList * D.26285;
  short unsigned int D.26288;
  int D.26289;
  int D.26290;
  gchar * D.26296;
  struct GSList * D.26297;
  struct MonoClass * D.26300;
  struct MonoType * D.26301;
  int D.26302;
  gchar * D.26308;
  struct GSList * D.26309;
  int D.26312;
  int D.26315;
  gchar * D.26321;
  struct GSList * D.26322;
  struct MonoType * D.26325;
  struct ILStackDesc * top;
  struct MonoMethod * method;

  if (virtual != 0) goto <D.26220>; else goto <D.26221>;
  <D.26220>:
  D.26222 = check_underflow (ctx, 1);
  if (D.26222 == 0) goto <D.26223>; else goto <D.26224>;
  <D.26223>:
  return;
  <D.26224>:
  <D.26221>:
  if (virtual == 0) goto <D.26225>; else goto <D.26226>;
  <D.26225>:
  D.26227 = check_overflow (ctx);
  if (D.26227 == 0) goto <D.26228>; else goto <D.26229>;
  <D.26228>:
  return;
  <D.26229>:
  <D.26226>:
  D.26230 = ctx->method;
  D.26231 = BIT_FIELD_REF <*D.26230, 64, 256>;
  D.26232 = D.26231 & 124;
  if (D.26232 != 0) goto <D.26233>; else goto <D.26234>;
  <D.26233>:
  D.26230 = ctx->method;
  method = mono_method_get_wrapper_data (D.26230, token);
  if (method == 0B) goto <D.26235>; else goto <D.26236>;
  <D.26235>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26237 = ctx->ip_offset;
    D.26238 = monoeg_g_strdup_printf ("Invalid token %x for ldftn  at 0x%04x", token, D.26237);
    vinfo->info.message = D.26238;
    vinfo->exception_type = 12;
    D.26239 = ctx->list;
    D.26240 = monoeg_g_slist_prepend (D.26239, vinfo);
    ctx->list = D.26240;
  }
  ctx->valid = 0;
  return;
  <D.26236>:
  goto <D.26241>;
  <D.26234>:
  D.26245 = token >> 24;
  if (D.26245 != 6) goto <D.26246>; else goto <D.26242>;
  <D.26246>:
  D.26245 = token >> 24;
  if (D.26245 != 10) goto <D.26247>; else goto <D.26242>;
  <D.26247>:
  D.26245 = token >> 24;
  if (D.26245 != 43) goto <D.26243>; else goto <D.26242>;
  <D.26242>:
  D.26248 = ctx->image;
  D.26249 = token_bounds_check (D.26248, token);
  if (D.26249 == 0) goto <D.26243>; else goto <D.26244>;
  <D.26243>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26237 = ctx->ip_offset;
    D.26250 = monoeg_g_strdup_printf ("Invalid token %x for ldftn  at 0x%04x", token, D.26237);
    vinfo->info.message = D.26250;
    vinfo->exception_type = 12;
    D.26239 = ctx->list;
    D.26251 = monoeg_g_slist_prepend (D.26239, vinfo);
    ctx->list = D.26251;
  }
  ctx->valid = 0;
  return;
  <D.26244>:
  token.106 = (int) token;
  if (virtual != 0) goto <D.26254>; else goto <D.26255>;
  <D.26254>:
  iftmp.107 = "ldvirtfrn";
  goto <D.26256>;
  <D.26255>:
  iftmp.107 = "ldftn";
  <D.26256>:
  method = verifier_load_method (ctx, token.106, iftmp.107);
  if (method == 0B) goto <D.26257>; else goto <D.26258>;
  <D.26257>:
  return;
  <D.26258>:
  <D.26241>:
  D.26259 = mono_method_is_constructor (method);
  if (D.26259 != 0) goto <D.26260>; else goto <D.26261>;
  <D.26260>:
  D.26264 = ctx->verifiable;
  if (D.26264 != 0) goto <D.26262>; else goto <D.26265>;
  <D.26265>:
  D.26266 = ctx->level;
  D.26267 = D.26266 & 128;
  if (D.26267 != 0) goto <D.26262>; else goto <D.26263>;
  <D.26262>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26237 = ctx->ip_offset;
    D.26268 = monoeg_g_strdup_printf ("Cannot use ldftn with a constructor at 0x%04x", D.26237);
    vinfo->info.message = D.26268;
    vinfo->exception_type = 4;
    D.26239 = ctx->list;
    D.26269 = monoeg_g_slist_prepend (D.26239, vinfo);
    ctx->list = D.26269;
  }
  ctx->verifiable = 0;
  D.26266 = ctx->level;
  D.26270 = D.26266 & 16;
  if (D.26270 != 0) goto <D.26271>; else goto <D.26272>;
  <D.26271>:
  ctx->valid = 0;
  <D.26272>:
  <D.26263>:
  <D.26261>:
  if (virtual != 0) goto <D.26273>; else goto <D.26274>;
  <D.26273>:
  {
    struct ILStackDesc * top;

    top = stack_pop (ctx);
    D.26277 = stack_slot_get_type (top);
    if (D.26277 != 6) goto <D.26275>; else goto <D.26278>;
    <D.26278>:
    D.26279 = top->type;
    D.26280 = D.26279->type;
    if (D.26280 == 17) goto <D.26275>; else goto <D.26276>;
    <D.26275>:
    D.26264 = ctx->verifiable;
    if (D.26264 != 0) goto <D.26281>; else goto <D.26283>;
    <D.26283>:
    D.26266 = ctx->level;
    D.26267 = D.26266 & 128;
    if (D.26267 != 0) goto <D.26281>; else goto <D.26282>;
    <D.26281>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.26237 = ctx->ip_offset;
      D.26284 = monoeg_g_strdup_printf ("Invalid argument to ldvirtftn at 0x%04x", D.26237);
      vinfo->info.message = D.26284;
      vinfo->exception_type = 4;
      D.26239 = ctx->list;
      D.26285 = monoeg_g_slist_prepend (D.26239, vinfo);
      ctx->list = D.26285;
    }
    ctx->verifiable = 0;
    D.26266 = ctx->level;
    D.26270 = D.26266 & 16;
    if (D.26270 != 0) goto <D.26286>; else goto <D.26287>;
    <D.26286>:
    ctx->valid = 0;
    <D.26287>:
    <D.26282>:
    <D.26276>:
    D.26288 = method->flags;
    D.26289 = (int) D.26288;
    D.26290 = D.26289 & 16;
    if (D.26290 != 0) goto <D.26291>; else goto <D.26292>;
    <D.26291>:
    D.26264 = ctx->verifiable;
    if (D.26264 != 0) goto <D.26293>; else goto <D.26295>;
    <D.26295>:
    D.26266 = ctx->level;
    D.26267 = D.26266 & 128;
    if (D.26267 != 0) goto <D.26293>; else goto <D.26294>;
    <D.26293>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.26237 = ctx->ip_offset;
      D.26296 = monoeg_g_strdup_printf ("Cannot use ldvirtftn with a constructor at 0x%04x", D.26237);
      vinfo->info.message = D.26296;
      vinfo->exception_type = 4;
      D.26239 = ctx->list;
      D.26297 = monoeg_g_slist_prepend (D.26239, vinfo);
      ctx->list = D.26297;
    }
    ctx->verifiable = 0;
    D.26266 = ctx->level;
    D.26270 = D.26266 & 16;
    if (D.26270 != 0) goto <D.26298>; else goto <D.26299>;
    <D.26298>:
    ctx->valid = 0;
    <D.26299>:
    <D.26294>:
    <D.26292>:
    D.26300 = method->klass;
    D.26301 = &D.26300->byval_arg;
    D.26302 = verify_stack_type_compatibility (ctx, D.26301, top);
    if (D.26302 == 0) goto <D.26303>; else goto <D.26304>;
    <D.26303>:
    D.26264 = ctx->verifiable;
    if (D.26264 != 0) goto <D.26305>; else goto <D.26307>;
    <D.26307>:
    D.26266 = ctx->level;
    D.26267 = D.26266 & 128;
    if (D.26267 != 0) goto <D.26305>; else goto <D.26306>;
    <D.26305>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.26237 = ctx->ip_offset;
      D.26308 = monoeg_g_strdup_printf ("Unexpected object for ldvirtftn at 0x%04x", D.26237);
      vinfo->info.message = D.26308;
      vinfo->exception_type = 4;
      D.26239 = ctx->list;
      D.26309 = monoeg_g_slist_prepend (D.26239, vinfo);
      ctx->list = D.26309;
    }
    ctx->verifiable = 0;
    D.26266 = ctx->level;
    D.26270 = D.26266 & 16;
    if (D.26270 != 0) goto <D.26310>; else goto <D.26311>;
    <D.26310>:
    ctx->valid = 0;
    <D.26311>:
    <D.26306>:
    <D.26304>:
  }
  <D.26274>:
  D.26266 = ctx->level;
  D.26312 = D.26266 & 64;
  if (D.26312 == 0) goto <D.26313>; else goto <D.26314>;
  <D.26313>:
  D.26230 = ctx->method;
  D.26315 = mono_method_can_access_method_full (D.26230, method, 0B);
  if (D.26315 == 0) goto <D.26316>; else goto <D.26317>;
  <D.26316>:
  D.26264 = ctx->verifiable;
  if (D.26264 != 0) goto <D.26318>; else goto <D.26320>;
  <D.26320>:
  D.26266 = ctx->level;
  D.26267 = D.26266 & 128;
  if (D.26267 != 0) goto <D.26318>; else goto <D.26319>;
  <D.26318>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26237 = ctx->ip_offset;
    D.26321 = monoeg_g_strdup_printf ("Loaded method is not visible for ldftn/ldvirtftn at 0x%04x", D.26237);
    vinfo->info.message = D.26321;
    vinfo->exception_type = 9;
    D.26239 = ctx->list;
    D.26322 = monoeg_g_slist_prepend (D.26239, vinfo);
    ctx->list = D.26322;
  }
  ctx->verifiable = 0;
  D.26266 = ctx->level;
  D.26270 = D.26266 & 16;
  if (D.26270 != 0) goto <D.26323>; else goto <D.26324>;
  <D.26323>:
  ctx->valid = 0;
  <D.26324>:
  <D.26319>:
  <D.26317>:
  <D.26314>:
  D.26325 = mono_type_create_fnptr_from_mono_method (ctx, method);
  top = stack_push_val (ctx, 5, D.26325);
  top->method = method;
}


mono_type_create_fnptr_from_mono_method (struct VerifyContext * ctx, struct MonoMethod * method)
{
  struct MonoMethodSignature * D.26327;
  struct GSList * D.26328;
  struct GSList * D.26329;
  struct MonoType * D.26330;
  struct MonoType * res;

  res = monoeg_malloc0 (16);
  D.26327 = mono_method_signature (method);
  res->data.method = D.26327;
  res->type = 27;
  D.26328 = ctx->funptrs;
  D.26329 = monoeg_g_slist_prepend (D.26328, res);
  ctx->funptrs = D.26329;
  D.26330 = res;
  return D.26330;
}


push_arg (struct VerifyContext * ctx, unsigned int arg, int take_addr)
{
  int D.26332;
  unsigned int D.26333;
  unsigned int D.26338;
  gchar * D.26339;
  struct GSList * D.26340;
  struct GSList * D.26341;
  int D.26345;
  int D.26347;
  int D.26348;
  gchar * D.26349;
  struct GSList * D.26350;
  int D.26351;
  int D.26354;
  struct MonoClass * D.26357;
  struct MonoType * D.26358;
  int D.26360;
  struct MonoType * * D.26363;
  long unsigned int D.26364;
  long unsigned int D.26365;
  struct MonoType * * D.26366;
  struct MonoType * D.26367;
  long unsigned int D.26368;
  long unsigned int D.26369;
  unsigned int D.26377;
  gchar * D.26378;
  struct GSList * D.26379;
  int D.26382;
  struct MonoMethod * D.26387;
  short unsigned int D.26388;
  int D.26389;
  int D.26390;
  int D.26396;
  int D.26397;
  int D.26398;
  int D.26401;
  struct MonoClass * D.26404;
  long unsigned int D.26405;
  long unsigned int D.26406;
  int D.26409;
  struct ILStackDesc * top;

  D.26332 = ctx->max_args;
  D.26333 = (unsigned int) D.26332;
  if (D.26333 <= arg) goto <D.26334>; else goto <D.26335>;
  <D.26334>:
  if (take_addr != 0) goto <D.26336>; else goto <D.26337>;
  <D.26336>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26338 = arg + 1;
    D.26339 = monoeg_g_strdup_printf ("Method doesn\'t have argument %d", D.26338);
    vinfo->info.message = D.26339;
    vinfo->exception_type = 3;
    D.26340 = ctx->list;
    D.26341 = monoeg_g_slist_prepend (D.26340, vinfo);
    ctx->list = D.26341;
  }
  ctx->valid = 0;
  goto <D.26342>;
  <D.26337>:
  D.26345 = ctx->verifiable;
  if (D.26345 != 0) goto <D.26343>; else goto <D.26346>;
  <D.26346>:
  D.26347 = ctx->level;
  D.26348 = D.26347 & 128;
  if (D.26348 != 0) goto <D.26343>; else goto <D.26344>;
  <D.26343>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26338 = arg + 1;
    D.26349 = monoeg_g_strdup_printf ("Method doesn\'t have argument %d", D.26338);
    vinfo->info.message = D.26349;
    vinfo->exception_type = 4;
    D.26340 = ctx->list;
    D.26350 = monoeg_g_slist_prepend (D.26340, vinfo);
    ctx->list = D.26350;
  }
  ctx->verifiable = 0;
  D.26347 = ctx->level;
  D.26351 = D.26347 & 16;
  if (D.26351 != 0) goto <D.26352>; else goto <D.26353>;
  <D.26352>:
  ctx->valid = 0;
  <D.26353>:
  <D.26344>:
  D.26354 = check_overflow (ctx);
  if (D.26354 != 0) goto <D.26355>; else goto <D.26356>;
  <D.26355>:
  D.26357 = mono_defaults.int32_class;
  D.26358 = &D.26357->byval_arg;
  stack_push_val (ctx, 1, D.26358);
  <D.26356>:
  <D.26342>:
  goto <D.26359>;
  <D.26335>:
  D.26360 = check_overflow (ctx);
  if (D.26360 != 0) goto <D.26361>; else goto <D.26362>;
  <D.26361>:
  D.26363 = ctx->params;
  D.26364 = (long unsigned int) arg;
  D.26365 = D.26364 * 8;
  D.26366 = D.26363 + D.26365;
  D.26367 = *D.26366;
  check_unverifiable_type (ctx, D.26367);
  D.26363 = ctx->params;
  D.26364 = (long unsigned int) arg;
  D.26365 = D.26364 * 8;
  D.26366 = D.26363 + D.26365;
  D.26367 = *D.26366;
  D.26368 = BIT_FIELD_REF <*D.26367, 64, 64>;
  D.26369 = D.26368 & 1073741824;
  if (D.26369 != 0) goto <D.26370>; else goto <D.26371>;
  <D.26370>:
  if (take_addr != 0) goto <D.26372>; else goto <D.26373>;
  <D.26372>:
  D.26345 = ctx->verifiable;
  if (D.26345 != 0) goto <D.26374>; else goto <D.26376>;
  <D.26376>:
  D.26347 = ctx->level;
  D.26348 = D.26347 & 128;
  if (D.26348 != 0) goto <D.26374>; else goto <D.26375>;
  <D.26374>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26377 = ctx->ip_offset;
    D.26378 = monoeg_g_strdup_printf ("ByRef of ByRef at 0x%04x", D.26377);
    vinfo->info.message = D.26378;
    vinfo->exception_type = 4;
    D.26340 = ctx->list;
    D.26379 = monoeg_g_slist_prepend (D.26340, vinfo);
    ctx->list = D.26379;
  }
  ctx->verifiable = 0;
  D.26347 = ctx->level;
  D.26351 = D.26347 & 16;
  if (D.26351 != 0) goto <D.26380>; else goto <D.26381>;
  <D.26380>:
  ctx->valid = 0;
  <D.26381>:
  <D.26375>:
  <D.26373>:
  <D.26371>:
  top = stack_push (ctx);
  D.26363 = ctx->params;
  D.26364 = (long unsigned int) arg;
  D.26365 = D.26364 * 8;
  D.26366 = D.26363 + D.26365;
  D.26367 = *D.26366;
  D.26382 = set_stack_value (ctx, top, D.26367, take_addr);
  if (D.26382 == 0) goto <D.26383>; else goto <D.26384>;
  <D.26383>:
  return;
  <D.26384>:
  if (arg == 0) goto <D.26385>; else goto <D.26386>;
  <D.26385>:
  D.26387 = ctx->method;
  D.26388 = D.26387->flags;
  D.26389 = (int) D.26388;
  D.26390 = D.26389 & 16;
  if (D.26390 == 0) goto <D.26391>; else goto <D.26392>;
  <D.26391>:
  if (take_addr != 0) goto <D.26393>; else goto <D.26394>;
  <D.26393>:
  ctx->has_this_store = 1;
  goto <D.26395>;
  <D.26394>:
  D.26396 = top->stype;
  D.26397 = D.26396 | 2048;
  top->stype = D.26397;
  <D.26395>:
  D.26387 = ctx->method;
  D.26398 = mono_method_is_constructor (D.26387);
  if (D.26398 != 0) goto <D.26399>; else goto <D.26400>;
  <D.26399>:
  D.26401 = ctx->super_ctor_called;
  if (D.26401 == 0) goto <D.26402>; else goto <D.26403>;
  <D.26402>:
  D.26387 = ctx->method;
  D.26404 = D.26387->klass;
  D.26405 = BIT_FIELD_REF <*D.26404, 64, 256>;
  D.26406 = D.26405 & 8;
  if (D.26406 == 0) goto <D.26407>; else goto <D.26408>;
  <D.26407>:
  D.26396 = top->stype;
  D.26409 = D.26396 | 8192;
  top->stype = D.26409;
  <D.26408>:
  <D.26403>:
  <D.26400>:
  <D.26392>:
  <D.26386>:
  <D.26362>:
  <D.26359>:
}


check_unverifiable_type (struct VerifyContext * ctx, struct MonoType * type)
{
  unsigned char D.26413;
  int D.26417;
  int D.26419;
  int D.26420;
  unsigned int D.26421;
  gchar * D.26422;
  struct GSList * D.26423;
  struct GSList * D.26424;
  int D.26425;
  gboolean D.26428;

  D.26413 = type->type;
  if (D.26413 == 15) goto <D.26411>; else goto <D.26414>;
  <D.26414>:
  D.26413 = type->type;
  if (D.26413 == 27) goto <D.26411>; else goto <D.26412>;
  <D.26411>:
  D.26417 = ctx->verifiable;
  if (D.26417 != 0) goto <D.26415>; else goto <D.26418>;
  <D.26418>:
  D.26419 = ctx->level;
  D.26420 = D.26419 & 128;
  if (D.26420 != 0) goto <D.26415>; else goto <D.26416>;
  <D.26415>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26421 = ctx->ip_offset;
    D.26422 = monoeg_g_strdup_printf ("Unmanaged pointer is not a verifiable type at 0x%04x", D.26421);
    vinfo->info.message = D.26422;
    vinfo->exception_type = 4;
    D.26423 = ctx->list;
    D.26424 = monoeg_g_slist_prepend (D.26423, vinfo);
    ctx->list = D.26424;
  }
  ctx->verifiable = 0;
  D.26419 = ctx->level;
  D.26425 = D.26419 & 16;
  if (D.26425 != 0) goto <D.26426>; else goto <D.26427>;
  <D.26426>:
  ctx->valid = 0;
  <D.26427>:
  <D.26416>:
  D.26428 = 0;
  return D.26428;
  <D.26412>:
  D.26428 = 1;
  return D.26428;
}


push_local (struct VerifyContext * ctx, guint32 arg, int take_addr)
{
  int D.26430;
  unsigned int D.26431;
  unsigned int D.26434;
  gchar * D.26435;
  struct GSList * D.26436;
  struct GSList * D.26437;
  int D.26439;
  struct MonoType * * D.26442;
  long unsigned int D.26443;
  long unsigned int D.26444;
  struct MonoType * * D.26445;
  struct MonoType * D.26446;
  long unsigned int D.26447;
  long unsigned int D.26448;
  int D.26455;
  int D.26457;
  int D.26458;
  unsigned int D.26459;
  gchar * D.26460;
  struct GSList * D.26461;
  int D.26462;
  struct ILStackDesc * D.26465;

  D.26430 = ctx->num_locals;
  D.26431 = (unsigned int) D.26430;
  if (D.26431 <= arg) goto <D.26432>; else goto <D.26433>;
  <D.26432>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26434 = arg + 1;
    D.26435 = monoeg_g_strdup_printf ("Method doesn\'t have local %d", D.26434);
    vinfo->info.message = D.26435;
    vinfo->exception_type = 3;
    D.26436 = ctx->list;
    D.26437 = monoeg_g_slist_prepend (D.26436, vinfo);
    ctx->list = D.26437;
  }
  ctx->valid = 0;
  goto <D.26438>;
  <D.26433>:
  D.26439 = check_overflow (ctx);
  if (D.26439 != 0) goto <D.26440>; else goto <D.26441>;
  <D.26440>:
  D.26442 = ctx->locals;
  D.26443 = (long unsigned int) arg;
  D.26444 = D.26443 * 8;
  D.26445 = D.26442 + D.26444;
  D.26446 = *D.26445;
  check_unverifiable_type (ctx, D.26446);
  D.26442 = ctx->locals;
  D.26443 = (long unsigned int) arg;
  D.26444 = D.26443 * 8;
  D.26445 = D.26442 + D.26444;
  D.26446 = *D.26445;
  D.26447 = BIT_FIELD_REF <*D.26446, 64, 64>;
  D.26448 = D.26447 & 1073741824;
  if (D.26448 != 0) goto <D.26449>; else goto <D.26450>;
  <D.26449>:
  if (take_addr != 0) goto <D.26451>; else goto <D.26452>;
  <D.26451>:
  D.26455 = ctx->verifiable;
  if (D.26455 != 0) goto <D.26453>; else goto <D.26456>;
  <D.26456>:
  D.26457 = ctx->level;
  D.26458 = D.26457 & 128;
  if (D.26458 != 0) goto <D.26453>; else goto <D.26454>;
  <D.26453>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26459 = ctx->ip_offset;
    D.26460 = monoeg_g_strdup_printf ("ByRef of ByRef at 0x%04x", D.26459);
    vinfo->info.message = D.26460;
    vinfo->exception_type = 4;
    D.26436 = ctx->list;
    D.26461 = monoeg_g_slist_prepend (D.26436, vinfo);
    ctx->list = D.26461;
  }
  ctx->verifiable = 0;
  D.26457 = ctx->level;
  D.26462 = D.26457 & 16;
  if (D.26462 != 0) goto <D.26463>; else goto <D.26464>;
  <D.26463>:
  ctx->valid = 0;
  <D.26464>:
  <D.26454>:
  <D.26452>:
  <D.26450>:
  D.26465 = stack_push (ctx);
  D.26442 = ctx->locals;
  D.26443 = (long unsigned int) arg;
  D.26444 = D.26443 * 8;
  D.26445 = D.26442 + D.26444;
  D.26446 = *D.26445;
  set_stack_value (ctx, D.26465, D.26446, take_addr);
  <D.26441>:
  <D.26438>:
}


do_localloc (struct VerifyContext * ctx)
{
  short unsigned int D.26466;
  unsigned int D.26469;
  gchar * D.26470;
  struct GSList * D.26471;
  struct GSList * D.26472;
  struct MonoMethodHeader * D.26473;
  int D.26474;
  gchar * D.26477;
  struct GSList * D.26478;
  struct ILStackDesc * D.26479;
  struct MonoClass * D.26480;
  struct MonoType * D.26481;
  int D.26484;
  int D.26486;
  int D.26487;
  gchar * D.26488;
  struct GSList * D.26489;
  int D.26490;
  struct ILStackDesc * top;

  D.26466 = ctx->eval.size;
  if (D.26466 != 1) goto <D.26467>; else goto <D.26468>;
  <D.26467>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26469 = ctx->ip_offset;
    D.26470 = monoeg_g_strdup_printf ("Stack must have only size item in localloc at 0x%04x", D.26469);
    vinfo->info.message = D.26470;
    vinfo->exception_type = 3;
    D.26471 = ctx->list;
    D.26472 = monoeg_g_slist_prepend (D.26471, vinfo);
    ctx->list = D.26472;
  }
  ctx->valid = 0;
  return;
  <D.26468>:
  D.26473 = ctx->header;
  D.26469 = ctx->ip_offset;
  D.26474 = in_any_exception_block (D.26473, D.26469);
  if (D.26474 != 0) goto <D.26475>; else goto <D.26476>;
  <D.26475>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26469 = ctx->ip_offset;
    D.26477 = monoeg_g_strdup_printf ("Stack must have only size item in localloc at 0x%04x", D.26469);
    vinfo->info.message = D.26477;
    vinfo->exception_type = 3;
    D.26471 = ctx->list;
    D.26478 = monoeg_g_slist_prepend (D.26471, vinfo);
    ctx->list = D.26478;
  }
  ctx->valid = 0;
  return;
  <D.26476>:
  top = stack_pop (ctx);
  D.26479 = stack_push (ctx);
  D.26480 = mono_defaults.int_class;
  D.26481 = &D.26480->byval_arg;
  set_stack_value (ctx, D.26479, D.26481, 0);
  D.26484 = ctx->verifiable;
  if (D.26484 != 0) goto <D.26482>; else goto <D.26485>;
  <D.26485>:
  D.26486 = ctx->level;
  D.26487 = D.26486 & 128;
  if (D.26487 != 0) goto <D.26482>; else goto <D.26483>;
  <D.26482>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26469 = ctx->ip_offset;
    D.26488 = monoeg_g_strdup_printf ("Instruction localloc in never verifiable at 0x%04x", D.26469);
    vinfo->info.message = D.26488;
    vinfo->exception_type = 4;
    D.26471 = ctx->list;
    D.26489 = monoeg_g_slist_prepend (D.26471, vinfo);
    ctx->list = D.26489;
  }
  ctx->verifiable = 0;
  D.26486 = ctx->level;
  D.26490 = D.26486 & 16;
  if (D.26490 != 0) goto <D.26491>; else goto <D.26492>;
  <D.26491>:
  ctx->valid = 0;
  <D.26492>:
  <D.26483>:
}


in_any_exception_block (struct MonoMethodHeader * header, guint offset)
{
  struct MonoExceptionClause * D.26494;
  long unsigned int D.26495;
  long unsigned int D.26496;
  unsigned int D.26497;
  unsigned int D.26500;
  unsigned int D.26501;
  gboolean D.26504;
  unsigned int D.26505;
  unsigned int D.26508;
  <unnamed-unsigned:15> D.26513;
  int D.26514;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.18722>;
  <D.18721>:
  D.26494 = header->clauses;
  D.26495 = (long unsigned int) i;
  D.26496 = D.26495 * 32;
  clause = D.26494 + D.26496;
  D.26497 = clause->handler_offset;
  if (D.26497 <= offset) goto <D.26498>; else goto <D.26499>;
  <D.26498>:
  D.26497 = clause->handler_offset;
  D.26500 = clause->handler_len;
  D.26501 = D.26497 + D.26500;
  if (D.26501 > offset) goto <D.26502>; else goto <D.26503>;
  <D.26502>:
  D.26504 = 1;
  return D.26504;
  <D.26503>:
  <D.26499>:
  D.26505 = clause->flags;
  if (D.26505 == 1) goto <D.26506>; else goto <D.26507>;
  <D.26506>:
  D.26508 = clause->data.filter_offset;
  if (D.26508 <= offset) goto <D.26509>; else goto <D.26510>;
  <D.26509>:
  D.26497 = clause->handler_offset;
  if (D.26497 > offset) goto <D.26511>; else goto <D.26512>;
  <D.26511>:
  D.26504 = 1;
  return D.26504;
  <D.26512>:
  <D.26510>:
  <D.26507>:
  i = i + 1;
  <D.18722>:
  D.26513 = header->num_clauses;
  D.26514 = (int) D.26513;
  if (D.26514 > i) goto <D.18721>; else goto <D.18723>;
  <D.18723>:
  D.26504 = 0;
  return D.26504;
}


do_endfilter (struct VerifyContext * ctx)
{
  int D.26516;
  int D.26517;
  short unsigned int D.26520;
  int D.26525;
  int D.26527;
  unsigned int D.26528;
  gchar * D.26529;
  struct GSList * D.26530;
  struct GSList * D.26531;
  int D.26532;
  struct ILStackDesc * D.26537;
  int D.26538;
  gchar * D.26544;
  struct GSList * D.26545;
  unsigned int D.26552;
  unsigned int D.26553;
  gchar * D.26556;
  struct GSList * D.26557;
  unsigned int D.26564;
  unsigned int D.26565;
  gchar * D.26566;
  struct GSList * D.26567;
  int D.26572;
  gchar * D.26574;
  struct GSList * D.26575;
  gchar * D.26579;
  struct GSList * D.26580;
  struct MonoExceptionClause * clause;

  D.26516 = ctx->level;
  D.26517 = D.26516 & 32;
  if (D.26517 == 0) goto <D.26518>; else goto <D.26519>;
  <D.26518>:
  D.26520 = ctx->eval.size;
  if (D.26520 != 1) goto <D.26521>; else goto <D.26522>;
  <D.26521>:
  D.26525 = ctx->verifiable;
  if (D.26525 != 0) goto <D.26523>; else goto <D.26526>;
  <D.26526>:
  D.26516 = ctx->level;
  D.26527 = D.26516 & 128;
  if (D.26527 != 0) goto <D.26523>; else goto <D.26524>;
  <D.26523>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26528 = ctx->ip_offset;
    D.26529 = monoeg_g_strdup_printf ("Stack size must have one item for endfilter at 0x%04x", D.26528);
    vinfo->info.message = D.26529;
    vinfo->exception_type = 4;
    D.26530 = ctx->list;
    D.26531 = monoeg_g_slist_prepend (D.26530, vinfo);
    ctx->list = D.26531;
  }
  ctx->verifiable = 0;
  D.26516 = ctx->level;
  D.26532 = D.26516 & 16;
  if (D.26532 != 0) goto <D.26533>; else goto <D.26534>;
  <D.26533>:
  ctx->valid = 0;
  <D.26534>:
  <D.26524>:
  <D.26522>:
  D.26520 = ctx->eval.size;
  if (D.26520 != 0) goto <D.26535>; else goto <D.26536>;
  <D.26535>:
  D.26537 = stack_pop (ctx);
  D.26538 = stack_slot_get_type (D.26537);
  if (D.26538 != 1) goto <D.26539>; else goto <D.26540>;
  <D.26539>:
  D.26525 = ctx->verifiable;
  if (D.26525 != 0) goto <D.26541>; else goto <D.26543>;
  <D.26543>:
  D.26516 = ctx->level;
  D.26527 = D.26516 & 128;
  if (D.26527 != 0) goto <D.26541>; else goto <D.26542>;
  <D.26541>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26528 = ctx->ip_offset;
    D.26544 = monoeg_g_strdup_printf ("Stack item type is not an int32 for endfilter at 0x%04x", D.26528);
    vinfo->info.message = D.26544;
    vinfo->exception_type = 4;
    D.26530 = ctx->list;
    D.26545 = monoeg_g_slist_prepend (D.26530, vinfo);
    ctx->list = D.26545;
  }
  ctx->verifiable = 0;
  D.26516 = ctx->level;
  D.26532 = D.26516 & 16;
  if (D.26532 != 0) goto <D.26546>; else goto <D.26547>;
  <D.26546>:
  ctx->valid = 0;
  <D.26547>:
  <D.26542>:
  <D.26540>:
  <D.26536>:
  <D.26519>:
  D.26528 = ctx->ip_offset;
  clause = is_correct_endfilter (ctx, D.26528);
  if (clause != 0B) goto <D.26548>; else goto <D.26549>;
  <D.26548>:
  D.26516 = ctx->level;
  D.26517 = D.26516 & 32;
  if (D.26517 == 0) goto <D.26550>; else goto <D.26551>;
  <D.26550>:
  D.26528 = ctx->ip_offset;
  D.26552 = clause->handler_offset;
  D.26553 = D.26552 + 4294967294;
  if (D.26528 != D.26553) goto <D.26554>; else goto <D.26555>;
  <D.26554>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26528 = ctx->ip_offset;
    D.26556 = monoeg_g_strdup_printf ("endfilter is not the last instruction of the filter clause at 0x%04x", D.26528);
    vinfo->info.message = D.26556;
    vinfo->exception_type = 3;
    D.26530 = ctx->list;
    D.26557 = monoeg_g_slist_prepend (D.26530, vinfo);
    ctx->list = D.26557;
  }
  ctx->valid = 0;
  <D.26555>:
  goto <D.26558>;
  <D.26551>:
  D.26528 = ctx->ip_offset;
  D.26552 = clause->handler_offset;
  D.26553 = D.26552 + 4294967294;
  if (D.26528 != D.26553) goto <D.26561>; else goto <D.26562>;
  <D.26561>:
  D.26552 = clause->handler_offset;
  D.26528 = ctx->ip_offset;
  if (D.26552 > D.26528) goto <D.26559>; else goto <D.26563>;
  <D.26563>:
  D.26528 = ctx->ip_offset;
  D.26552 = clause->handler_offset;
  D.26564 = clause->handler_len;
  D.26565 = D.26552 + D.26564;
  if (D.26528 >= D.26565) goto <D.26559>; else goto <D.26560>;
  <D.26559>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26528 = ctx->ip_offset;
    D.26566 = monoeg_g_strdup_printf ("endfilter is not the last instruction of the filter clause at 0x%04x", D.26528);
    vinfo->info.message = D.26566;
    vinfo->exception_type = 3;
    D.26530 = ctx->list;
    D.26567 = monoeg_g_slist_prepend (D.26530, vinfo);
    ctx->list = D.26567;
  }
  ctx->valid = 0;
  <D.26560>:
  <D.26562>:
  <D.26558>:
  goto <D.26568>;
  <D.26549>:
  D.26516 = ctx->level;
  D.26517 = D.26516 & 32;
  if (D.26517 == 0) goto <D.26571>; else goto <D.26569>;
  <D.26571>:
  D.26528 = ctx->ip_offset;
  D.26572 = is_unverifiable_endfilter (ctx, D.26528);
  if (D.26572 == 0) goto <D.26573>; else goto <D.26569>;
  <D.26573>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26528 = ctx->ip_offset;
    D.26574 = monoeg_g_strdup_printf ("endfilter outside filter clause at 0x%04x", D.26528);
    vinfo->info.message = D.26574;
    vinfo->exception_type = 3;
    D.26530 = ctx->list;
    D.26575 = monoeg_g_slist_prepend (D.26530, vinfo);
    ctx->list = D.26575;
  }
  ctx->valid = 0;
  goto <D.26570>;
  <D.26569>:
  D.26525 = ctx->verifiable;
  if (D.26525 != 0) goto <D.26576>; else goto <D.26578>;
  <D.26578>:
  D.26516 = ctx->level;
  D.26527 = D.26516 & 128;
  if (D.26527 != 0) goto <D.26576>; else goto <D.26577>;
  <D.26576>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26528 = ctx->ip_offset;
    D.26579 = monoeg_g_strdup_printf ("endfilter outside filter clause at 0x%04x", D.26528);
    vinfo->info.message = D.26579;
    vinfo->exception_type = 4;
    D.26530 = ctx->list;
    D.26580 = monoeg_g_slist_prepend (D.26530, vinfo);
    ctx->list = D.26580;
  }
  ctx->verifiable = 0;
  D.26516 = ctx->level;
  D.26532 = D.26516 & 16;
  if (D.26532 != 0) goto <D.26581>; else goto <D.26582>;
  <D.26581>:
  ctx->valid = 0;
  <D.26582>:
  <D.26577>:
  <D.26570>:
  <D.26568>:
  ctx->eval.size = 0;
}


is_correct_endfilter (struct VerifyContext * ctx, guint offset)
{
  struct MonoMethodHeader * D.26583;
  struct MonoExceptionClause * D.26584;
  long unsigned int D.26585;
  long unsigned int D.26586;
  unsigned int D.26587;
  unsigned int D.26592;
  unsigned int D.26595;
  struct MonoExceptionClause * D.26598;
  int D.26599;
  int D.26600;
  unsigned int D.26605;
  unsigned int D.26606;
  <unnamed-unsigned:15> D.26609;
  int D.26610;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.18780>;
  <D.18779>:
  D.26583 = ctx->header;
  D.26584 = D.26583->clauses;
  D.26585 = (long unsigned int) i;
  D.26586 = D.26585 * 32;
  clause = D.26584 + D.26586;
  D.26587 = clause->flags;
  if (D.26587 != 1) goto <D.26588>; else goto <D.26589>;
  <D.26588>:
  // predicted unlikely by continue predictor.
  goto <D.18778>;
  <D.26589>:
  D.26587 = clause->flags;
  if (D.26587 == 1) goto <D.26590>; else goto <D.26591>;
  <D.26590>:
  D.26592 = clause->data.filter_offset;
  if (D.26592 <= offset) goto <D.26593>; else goto <D.26594>;
  <D.26593>:
  D.26595 = clause->handler_offset;
  if (D.26595 > offset) goto <D.26596>; else goto <D.26597>;
  <D.26596>:
  D.26598 = clause;
  return D.26598;
  <D.26597>:
  <D.26594>:
  <D.26591>:
  D.26599 = ctx->level;
  D.26600 = D.26599 & 32;
  if (D.26600 != 0) goto <D.26601>; else goto <D.26602>;
  <D.26601>:
  D.26595 = clause->handler_offset;
  if (D.26595 <= offset) goto <D.26603>; else goto <D.26604>;
  <D.26603>:
  D.26595 = clause->handler_offset;
  D.26605 = clause->handler_len;
  D.26606 = D.26595 + D.26605;
  if (D.26606 > offset) goto <D.26607>; else goto <D.26608>;
  <D.26607>:
  D.26598 = clause;
  return D.26598;
  <D.26608>:
  <D.26604>:
  <D.26602>:
  <D.18778>:
  i = i + 1;
  <D.18780>:
  D.26583 = ctx->header;
  D.26609 = D.26583->num_clauses;
  D.26610 = (int) D.26609;
  if (D.26610 > i) goto <D.18779>; else goto <D.18781>;
  <D.18781>:
  D.26598 = 0B;
  return D.26598;
}


is_unverifiable_endfilter (struct VerifyContext * ctx, guint offset)
{
  struct MonoMethodHeader * D.26612;
  struct MonoExceptionClause * D.26613;
  long unsigned int D.26614;
  long unsigned int D.26615;
  unsigned int D.26616;
  unsigned int D.26619;
  unsigned int D.26620;
  int D.26623;
  <unnamed-unsigned:15> D.26624;
  int D.26625;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.18789>;
  <D.18788>:
  D.26612 = ctx->header;
  D.26613 = D.26612->clauses;
  D.26614 = (long unsigned int) i;
  D.26615 = D.26614 * 32;
  clause = D.26613 + D.26615;
  D.26616 = clause->try_offset;
  if (D.26616 <= offset) goto <D.26617>; else goto <D.26618>;
  <D.26617>:
  D.26616 = clause->try_offset;
  D.26619 = clause->try_len;
  D.26620 = D.26616 + D.26619;
  if (D.26620 > offset) goto <D.26621>; else goto <D.26622>;
  <D.26621>:
  D.26623 = 1;
  return D.26623;
  <D.26622>:
  <D.26618>:
  i = i + 1;
  <D.18789>:
  D.26612 = ctx->header;
  D.26624 = D.26612->num_clauses;
  D.26625 = (int) D.26624;
  if (D.26625 > i) goto <D.18788>; else goto <D.18790>;
  <D.18790>:
  D.26623 = 0;
  return D.26623;
}


do_initobj (struct VerifyContext * ctx, int token)
{
  int D.26629;
  int D.26632;
  int D.26637;
  int D.26639;
  int D.26640;
  unsigned int D.26641;
  gchar * D.26642;
  struct GSList * D.26643;
  struct GSList * D.26644;
  int D.26645;
  int D.26648;
  gchar * D.26654;
  struct GSList * D.26655;
  struct MonoType * D.26658;
  int D.26659;
  int D.26662;
  gchar * D.26668;
  struct GSList * D.26669;
  int D.26673;
  int D.26676;
  gchar * D.26682;
  struct GSList * D.26683;
  int D.26687;
  gchar * D.26693;
  struct GSList * D.26694;
  struct ILStackDesc * obj;
  struct MonoType * stack;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, token, "initobj");
  if (type == 0B) goto <D.26627>; else goto <D.26628>;
  <D.26627>:
  return;
  <D.26628>:
  D.26629 = check_underflow (ctx, 1);
  if (D.26629 == 0) goto <D.26630>; else goto <D.26631>;
  <D.26630>:
  return;
  <D.26631>:
  obj = stack_pop (ctx);
  D.26632 = stack_slot_is_managed_pointer (obj);
  if (D.26632 == 0) goto <D.26633>; else goto <D.26634>;
  <D.26633>:
  D.26637 = ctx->verifiable;
  if (D.26637 != 0) goto <D.26635>; else goto <D.26638>;
  <D.26638>:
  D.26639 = ctx->level;
  D.26640 = D.26639 & 128;
  if (D.26640 != 0) goto <D.26635>; else goto <D.26636>;
  <D.26635>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26641 = ctx->ip_offset;
    D.26642 = monoeg_g_strdup_printf ("Invalid object address for initobj at 0x%04x", D.26641);
    vinfo->info.message = D.26642;
    vinfo->exception_type = 4;
    D.26643 = ctx->list;
    D.26644 = monoeg_g_slist_prepend (D.26643, vinfo);
    ctx->list = D.26644;
  }
  ctx->verifiable = 0;
  D.26639 = ctx->level;
  D.26645 = D.26639 & 16;
  if (D.26645 != 0) goto <D.26646>; else goto <D.26647>;
  <D.26646>:
  ctx->valid = 0;
  <D.26647>:
  <D.26636>:
  <D.26634>:
  D.26648 = stack_slot_is_managed_mutability_pointer (obj);
  if (D.26648 != 0) goto <D.26649>; else goto <D.26650>;
  <D.26649>:
  D.26637 = ctx->verifiable;
  if (D.26637 != 0) goto <D.26651>; else goto <D.26653>;
  <D.26653>:
  D.26639 = ctx->level;
  D.26640 = D.26639 & 128;
  if (D.26640 != 0) goto <D.26651>; else goto <D.26652>;
  <D.26651>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26641 = ctx->ip_offset;
    D.26654 = monoeg_g_strdup_printf ("Cannot use a readonly pointer with initobj at 0x%04x", D.26641);
    vinfo->info.message = D.26654;
    vinfo->exception_type = 4;
    D.26643 = ctx->list;
    D.26655 = monoeg_g_slist_prepend (D.26643, vinfo);
    ctx->list = D.26655;
  }
  ctx->verifiable = 0;
  D.26639 = ctx->level;
  D.26645 = D.26639 & 16;
  if (D.26645 != 0) goto <D.26656>; else goto <D.26657>;
  <D.26656>:
  ctx->valid = 0;
  <D.26657>:
  <D.26652>:
  <D.26650>:
  D.26658 = obj->type;
  stack = mono_type_get_type_byval (D.26658);
  D.26659 = mono_type_is_reference (stack);
  if (D.26659 != 0) goto <D.26660>; else goto <D.26661>;
  <D.26660>:
  D.26662 = verify_type_compatibility (ctx, stack, type);
  if (D.26662 == 0) goto <D.26663>; else goto <D.26664>;
  <D.26663>:
  D.26637 = ctx->verifiable;
  if (D.26637 != 0) goto <D.26665>; else goto <D.26667>;
  <D.26667>:
  D.26639 = ctx->level;
  D.26640 = D.26639 & 128;
  if (D.26640 != 0) goto <D.26665>; else goto <D.26666>;
  <D.26665>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26641 = ctx->ip_offset;
    D.26668 = monoeg_g_strdup_printf ("Type token of initobj not compatible with value on stack at 0x%04x", D.26641);
    vinfo->info.message = D.26668;
    vinfo->exception_type = 4;
    D.26643 = ctx->list;
    D.26669 = monoeg_g_slist_prepend (D.26643, vinfo);
    ctx->list = D.26669;
  }
  ctx->verifiable = 0;
  D.26639 = ctx->level;
  D.26645 = D.26639 & 16;
  if (D.26645 != 0) goto <D.26670>; else goto <D.26671>;
  <D.26670>:
  ctx->valid = 0;
  <D.26671>:
  <D.26666>:
  goto <D.26672>;
  <D.26664>:
  D.26639 = ctx->level;
  D.26673 = D.26639 & 32;
  if (D.26673 == 0) goto <D.26674>; else goto <D.26675>;
  <D.26674>:
  D.26676 = mono_metadata_type_equal (type, stack);
  if (D.26676 == 0) goto <D.26677>; else goto <D.26678>;
  <D.26677>:
  D.26637 = ctx->verifiable;
  if (D.26637 != 0) goto <D.26679>; else goto <D.26681>;
  <D.26681>:
  D.26639 = ctx->level;
  D.26640 = D.26639 & 128;
  if (D.26640 != 0) goto <D.26679>; else goto <D.26680>;
  <D.26679>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26641 = ctx->ip_offset;
    D.26682 = monoeg_g_strdup_printf ("Type token of initobj not compatible with value on stack at 0x%04x", D.26641);
    vinfo->info.message = D.26682;
    vinfo->exception_type = 4;
    D.26643 = ctx->list;
    D.26683 = monoeg_g_slist_prepend (D.26643, vinfo);
    ctx->list = D.26683;
  }
  ctx->verifiable = 0;
  D.26639 = ctx->level;
  D.26645 = D.26639 & 16;
  if (D.26645 != 0) goto <D.26684>; else goto <D.26685>;
  <D.26684>:
  ctx->valid = 0;
  <D.26685>:
  <D.26680>:
  <D.26678>:
  <D.26675>:
  <D.26672>:
  goto <D.26686>;
  <D.26661>:
  D.26687 = verify_type_compatibility (ctx, stack, type);
  if (D.26687 == 0) goto <D.26688>; else goto <D.26689>;
  <D.26688>:
  {
    char * expected_name;
    char * stack_name;

    expected_name = mono_type_full_name (type);
    stack_name = mono_type_full_name (stack);
    D.26637 = ctx->verifiable;
    if (D.26637 != 0) goto <D.26690>; else goto <D.26692>;
    <D.26692>:
    D.26639 = ctx->level;
    D.26640 = D.26639 & 128;
    if (D.26640 != 0) goto <D.26690>; else goto <D.26691>;
    <D.26690>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 8;
      D.26641 = ctx->ip_offset;
      D.26693 = monoeg_g_strdup_printf ("Initobj %s not compatible with value on stack %s at 0x%04x", expected_name, stack_name, D.26641);
      vinfo->info.message = D.26693;
      vinfo->exception_type = 4;
      D.26643 = ctx->list;
      D.26694 = monoeg_g_slist_prepend (D.26643, vinfo);
      ctx->list = D.26694;
    }
    ctx->verifiable = 0;
    D.26639 = ctx->level;
    D.26645 = D.26639 & 16;
    if (D.26645 != 0) goto <D.26695>; else goto <D.26696>;
    <D.26695>:
    ctx->valid = 0;
    <D.26696>:
    <D.26691>:
    monoeg_g_free (expected_name);
    monoeg_g_free (stack_name);
  }
  <D.26689>:
  <D.26686>:
}


get_boxable_mono_type (struct VerifyContext * ctx, int token, const char * opcode)
{
  struct MonoType * D.26700;
  long unsigned int D.26701;
  long unsigned int D.26702;
  unsigned char D.26705;
  unsigned int D.26708;
  gchar * D.26709;
  struct GSList * D.26710;
  struct GSList * D.26711;
  gchar * D.26714;
  struct GSList * D.26715;
  int D.26720;
  int D.26722;
  int D.26723;
  gchar * D.26724;
  struct GSList * D.26725;
  int D.26726;
  gchar * D.26731;
  struct GSList * D.26732;
  struct MonoGenericContainer * D.26733;
  gchar * D.26741;
  struct GSList * D.26742;
  struct MonoType * type;
  struct MonoClass * class;

  type = verifier_load_type (ctx, token, opcode);
  if (type == 0B) goto <D.26698>; else goto <D.26699>;
  <D.26698>:
  D.26700 = 0B;
  return D.26700;
  <D.26699>:
  D.26701 = BIT_FIELD_REF <*type, 64, 64>;
  D.26702 = D.26701 & 1073741824;
  if (D.26702 != 0) goto <D.26703>; else goto <D.26704>;
  <D.26703>:
  D.26705 = type->type;
  if (D.26705 != 22) goto <D.26706>; else goto <D.26707>;
  <D.26706>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26708 = ctx->ip_offset;
    D.26709 = monoeg_g_strdup_printf ("Invalid use of byref type for %s at 0x%04x", opcode, D.26708);
    vinfo->info.message = D.26709;
    vinfo->exception_type = 3;
    D.26710 = ctx->list;
    D.26711 = monoeg_g_slist_prepend (D.26710, vinfo);
    ctx->list = D.26711;
  }
  ctx->valid = 0;
  D.26700 = 0B;
  return D.26700;
  <D.26707>:
  <D.26704>:
  D.26705 = type->type;
  if (D.26705 == 1) goto <D.26712>; else goto <D.26713>;
  <D.26712>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26708 = ctx->ip_offset;
    D.26714 = monoeg_g_strdup_printf ("Invalid use of void type for %s at 0x%04x", opcode, D.26708);
    vinfo->info.message = D.26714;
    vinfo->exception_type = 3;
    D.26710 = ctx->list;
    D.26715 = monoeg_g_slist_prepend (D.26710, vinfo);
    ctx->list = D.26715;
  }
  ctx->valid = 0;
  D.26700 = 0B;
  return D.26700;
  <D.26713>:
  D.26705 = type->type;
  if (D.26705 == 22) goto <D.26716>; else goto <D.26717>;
  <D.26716>:
  D.26720 = ctx->verifiable;
  if (D.26720 != 0) goto <D.26718>; else goto <D.26721>;
  <D.26721>:
  D.26722 = ctx->level;
  D.26723 = D.26722 & 128;
  if (D.26723 != 0) goto <D.26718>; else goto <D.26719>;
  <D.26718>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26708 = ctx->ip_offset;
    D.26724 = monoeg_g_strdup_printf ("Invalid use of typedbyref for %s at 0x%04x", opcode, D.26708);
    vinfo->info.message = D.26724;
    vinfo->exception_type = 4;
    D.26710 = ctx->list;
    D.26725 = monoeg_g_slist_prepend (D.26710, vinfo);
    ctx->list = D.26725;
  }
  ctx->verifiable = 0;
  D.26722 = ctx->level;
  D.26726 = D.26722 & 16;
  if (D.26726 != 0) goto <D.26727>; else goto <D.26728>;
  <D.26727>:
  ctx->valid = 0;
  <D.26728>:
  <D.26719>:
  <D.26717>:
  class = mono_class_from_mono_type (type);
  if (class == 0B) goto <D.26729>; else goto <D.26730>;
  <D.26729>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26708 = ctx->ip_offset;
    D.26731 = monoeg_g_strdup_printf ("Could not retrieve type token for %s at 0x%04x", opcode, D.26708);
    vinfo->info.message = D.26731;
    vinfo->exception_type = 3;
    D.26710 = ctx->list;
    D.26732 = monoeg_g_slist_prepend (D.26710, vinfo);
    ctx->list = D.26732;
  }
  ctx->valid = 0;
  <D.26730>:
  D.26733 = class->generic_container;
  if (D.26733 != 0B) goto <D.26734>; else goto <D.26735>;
  <D.26734>:
  D.26705 = type->type;
  if (D.26705 != 21) goto <D.26736>; else goto <D.26737>;
  <D.26736>:
  D.26720 = ctx->verifiable;
  if (D.26720 != 0) goto <D.26738>; else goto <D.26740>;
  <D.26740>:
  D.26722 = ctx->level;
  D.26723 = D.26722 & 128;
  if (D.26723 != 0) goto <D.26738>; else goto <D.26739>;
  <D.26738>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 8;
    D.26708 = ctx->ip_offset;
    D.26741 = monoeg_g_strdup_printf ("Cannot use the generic type definition in a boxable type position for %s at 0x%04x", opcode, D.26708);
    vinfo->info.message = D.26741;
    vinfo->exception_type = 4;
    D.26710 = ctx->list;
    D.26742 = monoeg_g_slist_prepend (D.26710, vinfo);
    ctx->list = D.26742;
  }
  ctx->verifiable = 0;
  D.26722 = ctx->level;
  D.26726 = D.26722 & 16;
  if (D.26726 != 0) goto <D.26743>; else goto <D.26744>;
  <D.26743>:
  ctx->valid = 0;
  <D.26744>:
  <D.26739>:
  <D.26737>:
  <D.26735>:
  check_unverifiable_type (ctx, type);
  D.26700 = type;
  return D.26700;
}


check_underflow (struct VerifyContext * ctx, int size)
{
  short unsigned int D.26746;
  int D.26747;
  unsigned int D.26750;
  gchar * D.26751;
  struct GSList * D.26752;
  struct GSList * D.26753;
  int D.26754;

  D.26746 = ctx->eval.size;
  D.26747 = (int) D.26746;
  if (D.26747 < size) goto <D.26748>; else goto <D.26749>;
  <D.26748>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26746 = ctx->eval.size;
    D.26747 = (int) D.26746;
    D.26750 = ctx->ip_offset;
    D.26751 = monoeg_g_strdup_printf ("Stack underflow, required %d, but have %d at 0x%04x", size, D.26747, D.26750);
    vinfo->info.message = D.26751;
    vinfo->exception_type = 3;
    D.26752 = ctx->list;
    D.26753 = monoeg_g_slist_prepend (D.26752, vinfo);
    ctx->list = D.26753;
  }
  ctx->valid = 0;
  D.26754 = 0;
  return D.26754;
  <D.26749>:
  D.26754 = 1;
  return D.26754;
}


is_correct_rethrow (struct MonoMethodHeader * header, guint offset)
{
  struct MonoExceptionClause * D.26756;
  long unsigned int D.26757;
  long unsigned int D.26758;
  unsigned int D.26759;
  unsigned int D.26762;
  unsigned int D.26763;
  int D.26766;
  unsigned int D.26767;
  unsigned int D.26770;
  <unnamed-unsigned:15> D.26775;
  int D.26776;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.18761>;
  <D.18760>:
  D.26756 = header->clauses;
  D.26757 = (long unsigned int) i;
  D.26758 = D.26757 * 32;
  clause = D.26756 + D.26758;
  D.26759 = clause->handler_offset;
  if (D.26759 <= offset) goto <D.26760>; else goto <D.26761>;
  <D.26760>:
  D.26759 = clause->handler_offset;
  D.26762 = clause->handler_len;
  D.26763 = D.26759 + D.26762;
  if (D.26763 > offset) goto <D.26764>; else goto <D.26765>;
  <D.26764>:
  D.26766 = 1;
  return D.26766;
  <D.26765>:
  <D.26761>:
  D.26767 = clause->flags;
  if (D.26767 == 1) goto <D.26768>; else goto <D.26769>;
  <D.26768>:
  D.26770 = clause->data.filter_offset;
  if (D.26770 <= offset) goto <D.26771>; else goto <D.26772>;
  <D.26771>:
  D.26759 = clause->handler_offset;
  if (D.26759 > offset) goto <D.26773>; else goto <D.26774>;
  <D.26773>:
  D.26766 = 1;
  return D.26766;
  <D.26774>:
  <D.26772>:
  <D.26769>:
  i = i + 1;
  <D.18761>:
  D.26775 = header->num_clauses;
  D.26776 = (int) D.26775;
  if (D.26776 > i) goto <D.18760>; else goto <D.18762>;
  <D.18762>:
  D.26766 = 0;
  return D.26766;
}


do_sizeof (struct VerifyContext * ctx, int token)
{
  long unsigned int D.26780;
  long unsigned int D.26781;
  unsigned char D.26784;
  unsigned int D.26787;
  gchar * D.26788;
  struct GSList * D.26789;
  struct GSList * D.26790;
  gchar * D.26793;
  struct GSList * D.26794;
  int D.26795;
  struct ILStackDesc * D.26798;
  struct MonoClass * D.26799;
  struct MonoType * D.26800;
  struct MonoType * type;

  type = verifier_load_type (ctx, token, "sizeof");
  if (type == 0B) goto <D.26778>; else goto <D.26779>;
  <D.26778>:
  return;
  <D.26779>:
  D.26780 = BIT_FIELD_REF <*type, 64, 64>;
  D.26781 = D.26780 & 1073741824;
  if (D.26781 != 0) goto <D.26782>; else goto <D.26783>;
  <D.26782>:
  D.26784 = type->type;
  if (D.26784 != 22) goto <D.26785>; else goto <D.26786>;
  <D.26785>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26787 = ctx->ip_offset;
    D.26788 = monoeg_g_strdup_printf ("Invalid use of byref type at 0x%04x", D.26787);
    vinfo->info.message = D.26788;
    vinfo->exception_type = 3;
    D.26789 = ctx->list;
    D.26790 = monoeg_g_slist_prepend (D.26789, vinfo);
    ctx->list = D.26790;
  }
  ctx->valid = 0;
  return;
  <D.26786>:
  <D.26783>:
  D.26784 = type->type;
  if (D.26784 == 1) goto <D.26791>; else goto <D.26792>;
  <D.26791>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26787 = ctx->ip_offset;
    D.26793 = monoeg_g_strdup_printf ("Invalid use of void type at 0x%04x", D.26787);
    vinfo->info.message = D.26793;
    vinfo->exception_type = 3;
    D.26789 = ctx->list;
    D.26794 = monoeg_g_slist_prepend (D.26789, vinfo);
    ctx->list = D.26794;
  }
  ctx->valid = 0;
  return;
  <D.26792>:
  D.26795 = check_overflow (ctx);
  if (D.26795 != 0) goto <D.26796>; else goto <D.26797>;
  <D.26796>:
  D.26798 = stack_push (ctx);
  D.26799 = mono_defaults.uint32_class;
  D.26800 = &D.26799->byval_arg;
  set_stack_value (ctx, D.26798, D.26800, 0);
  <D.26797>:
}


do_refanytype (struct VerifyContext * ctx)
{
  int D.26802;
  int D.26807;
  struct MonoType * D.26809;
  unsigned char D.26810;
  const char * D.26811;
  unsigned int D.26812;
  gchar * D.26813;
  struct GSList * D.26814;
  struct GSList * D.26815;
  struct ILStackDesc * D.26816;
  struct MonoClass * D.26817;
  struct MonoType * D.26818;
  struct ILStackDesc * top;

  D.26802 = check_underflow (ctx, 1);
  if (D.26802 == 0) goto <D.26803>; else goto <D.26804>;
  <D.26803>:
  return;
  <D.26804>:
  top = stack_pop (ctx);
  D.26807 = top->stype;
  if (D.26807 != 5) goto <D.26805>; else goto <D.26808>;
  <D.26808>:
  D.26809 = top->type;
  D.26810 = D.26809->type;
  if (D.26810 != 22) goto <D.26805>; else goto <D.26806>;
  <D.26805>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.26811 = stack_slot_get_name (top);
    D.26812 = ctx->ip_offset;
    D.26813 = monoeg_g_strdup_printf ("Expected a typedref as argument for refanytype, but found %s at 0x%04x", D.26811, D.26812);
    vinfo->info.message = D.26813;
    vinfo->exception_type = 3;
    D.26814 = ctx->list;
    D.26815 = monoeg_g_slist_prepend (D.26814, vinfo);
    ctx->list = D.26815;
  }
  ctx->valid = 0;
  <D.26806>:
  D.26816 = stack_push (ctx);
  D.26817 = mono_defaults.typehandle_class;
  D.26818 = &D.26817->byval_arg;
  set_stack_value (ctx, D.26816, D.26818, 0);
}


mono_method_is_constructor (struct MonoMethod * method)
{
  gboolean D.26820;
  int iftmp.108;
  short unsigned int D.26824;
  unsigned int D.26825;
  unsigned int D.26826;
  int D.18456;
  int iftmp.109;
  int D.18452;
  const char[6] * D.26831;
  unsigned char D.26832;
  int D.26833;
  unsigned char D.26834;
  int D.26835;
  const unsigned char * D.26840;
  unsigned char D.26841;
  int D.26842;
  const unsigned char * D.26843;
  unsigned char D.26844;
  int D.26845;
  const unsigned char * D.26850;
  unsigned char D.26851;
  int D.26852;
  const unsigned char * D.26853;
  unsigned char D.26854;
  int D.26855;
  const unsigned char * D.26860;
  unsigned char D.26861;
  int D.26862;
  const unsigned char * D.26863;
  unsigned char D.26864;
  int D.26865;
  const char * D.26867;

  D.26824 = method->flags;
  D.26825 = (unsigned int) D.26824;
  D.26826 = D.26825 & 6160;
  if (D.26826 == 6144) goto <D.26827>; else goto <D.26822>;
  <D.26827>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s1_len = 5;
    if (__s1_len <= 3) goto <D.26829>; else goto <D.26830>;
    <D.26829>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = method->name;
      D.26831 = ".ctor";
      D.26832 = MEM[(const unsigned char *)D.26831];
      D.26833 = (int) D.26832;
      D.26834 = *__s2;
      D.26835 = (int) D.26834;
      __result = D.26833 - D.26835;
      {
        if (__s1_len != 0) goto <D.26836>; else goto <D.26837>;
        <D.26836>:
        if (__result == 0) goto <D.26838>; else goto <D.26839>;
        <D.26838>:
        D.26840 = &MEM[(void *)".ctor" + 1B];
        D.26841 = *D.26840;
        D.26842 = (int) D.26841;
        D.26843 = __s2 + 1;
        D.26844 = *D.26843;
        D.26845 = (int) D.26844;
        __result = D.26842 - D.26845;
        if (__s1_len > 1) goto <D.26846>; else goto <D.26847>;
        <D.26846>:
        if (__result == 0) goto <D.26848>; else goto <D.26849>;
        <D.26848>:
        D.26850 = &MEM[(void *)".ctor" + 2B];
        D.26851 = *D.26850;
        D.26852 = (int) D.26851;
        D.26853 = __s2 + 2;
        D.26854 = *D.26853;
        D.26855 = (int) D.26854;
        __result = D.26852 - D.26855;
        if (__s1_len > 2) goto <D.26856>; else goto <D.26857>;
        <D.26856>:
        if (__result == 0) goto <D.26858>; else goto <D.26859>;
        <D.26858>:
        D.26860 = &MEM[(void *)".ctor" + 3B];
        D.26861 = *D.26860;
        D.26862 = (int) D.26861;
        D.26863 = __s2 + 3;
        D.26864 = *D.26863;
        D.26865 = (int) D.26864;
        __result = D.26862 - D.26865;
        <D.26859>:
        <D.26857>:
        <D.26849>:
        <D.26847>:
        <D.26839>:
        <D.26837>:
      }
      D.18452 = __result;
    }
    iftmp.109 = D.18452;
    goto <D.26866>;
    <D.26830>:
    D.26867 = method->name;
    iftmp.109 = __builtin_strcmp (".ctor", D.26867);
    <D.26866>:
    D.18456 = iftmp.109;
  }
  if (D.18456 == 0) goto <D.26868>; else goto <D.26822>;
  <D.26868>:
  iftmp.108 = 1;
  goto <D.26823>;
  <D.26822>:
  iftmp.108 = 0;
  <D.26823>:
  D.26820 = iftmp.108;
  return D.26820;
}


mono_verify_corlib ()
{
  char * D.26870;

  D.26870 = 0B;
  return D.26870;
}


mono_verifier_is_enabled_for_method (struct MonoMethod * method)
{
  gboolean D.26872;
  int iftmp.110;
  struct MonoClass * D.26877;
  int D.26878;
  long unsigned int D.26880;
  long unsigned int D.26881;

  D.26877 = method->klass;
  D.26878 = mono_verifier_is_enabled_for_class (D.26877);
  if (D.26878 != 0) goto <D.26879>; else goto <D.26874>;
  <D.26879>:
  D.26880 = BIT_FIELD_REF <*method, 64, 256>;
  D.26881 = D.26880 & 124;
  if (D.26881 == 0) goto <D.26875>; else goto <D.26882>;
  <D.26882>:
  D.26880 = BIT_FIELD_REF <*method, 64, 256>;
  D.26881 = D.26880 & 124;
  if (D.26881 == 68) goto <D.26875>; else goto <D.26874>;
  <D.26875>:
  iftmp.110 = 1;
  goto <D.26876>;
  <D.26874>:
  iftmp.110 = 0;
  <D.26876>:
  D.26872 = iftmp.110;
  return D.26872;
}


mono_verifier_is_enabled_for_class (struct MonoClass * klass)
{
  gboolean D.26884;
  int iftmp.111;
  int verify_all.112;
  <unnamed type> verifier_mode.113;
  struct MonoImage * D.26894;
  struct MonoAssembly * D.26895;
  unsigned char D.26897;
  struct MonoImage * D.26898;

  verify_all.112 = verify_all;
  if (verify_all.112 != 0) goto <D.26886>; else goto <D.26891>;
  <D.26891>:
  verifier_mode.113 = verifier_mode;
  if (verifier_mode.113 != 0) goto <D.26893>; else goto <D.26887>;
  <D.26893>:
  D.26894 = klass->image;
  D.26895 = D.26894->assembly;
  if (D.26895 == 0B) goto <D.26888>; else goto <D.26896>;
  <D.26896>:
  D.26894 = klass->image;
  D.26895 = D.26894->assembly;
  D.26897 = D.26895->in_gac;
  if (D.26897 == 0) goto <D.26888>; else goto <D.26887>;
  <D.26888>:
  D.26894 = klass->image;
  D.26898 = mono_defaults.corlib;
  if (D.26894 != D.26898) goto <D.26886>; else goto <D.26887>;
  <D.26886>:
  iftmp.111 = 1;
  goto <D.26889>;
  <D.26887>:
  iftmp.111 = 0;
  <D.26889>:
  D.26884 = iftmp.111;
  return D.26884;
}


mono_verifier_is_enabled_for_image (struct MonoImage * image)
{
  gboolean D.26900;
  int iftmp.114;
  int verify_all.115;
  <unnamed type> verifier_mode.116;

  verify_all.115 = verify_all;
  if (verify_all.115 != 0) goto <D.26902>; else goto <D.26906>;
  <D.26906>:
  verifier_mode.116 = verifier_mode;
  if (verifier_mode.116 != 0) goto <D.26902>; else goto <D.26903>;
  <D.26902>:
  iftmp.114 = 1;
  goto <D.26904>;
  <D.26903>:
  iftmp.114 = 0;
  <D.26904>:
  D.26900 = iftmp.114;
  return D.26900;
}


mono_verifier_is_method_full_trust (struct MonoMethod * method)
{
  gboolean D.26909;
  int iftmp.117;
  struct MonoClass * D.26913;
  int D.26914;
  long unsigned int D.26916;
  long unsigned int D.26917;

  D.26913 = method->klass;
  D.26914 = mono_verifier_is_class_full_trust (D.26913);
  if (D.26914 != 0) goto <D.26915>; else goto <D.26911>;
  <D.26915>:
  D.26916 = BIT_FIELD_REF <*method, 64, 256>;
  D.26917 = D.26916 & 512;
  if (D.26917 == 0) goto <D.26918>; else goto <D.26911>;
  <D.26918>:
  iftmp.117 = 1;
  goto <D.26912>;
  <D.26911>:
  iftmp.117 = 0;
  <D.26912>:
  D.26909 = iftmp.117;
  return D.26909;
}


mono_verifier_is_class_full_trust (struct MonoClass * klass)
{
  int iftmp.118;
  <unnamed type> D.26921;
  int iftmp.119;
  struct MonoImage * D.26927;
  struct MonoAssembly * D.26928;
  unsigned char D.26930;
  int verify_all.120;
  <unnamed type> verifier_mode.121;
  gboolean D.26939;
  int iftmp.122;
  struct MonoImage * D.26945;
  int iftmp.123;
  gboolean trusted_location;

  D.26921 = mono_security_get_mode ();
  if (D.26921 != 1) goto <D.26922>; else goto <D.26923>;
  <D.26922>:
  D.26927 = klass->image;
  D.26928 = D.26927->assembly;
  if (D.26928 != 0B) goto <D.26929>; else goto <D.26925>;
  <D.26929>:
  D.26927 = klass->image;
  D.26928 = D.26927->assembly;
  D.26930 = D.26928->in_gac;
  if (D.26930 != 0) goto <D.26931>; else goto <D.26925>;
  <D.26931>:
  iftmp.119 = 1;
  goto <D.26926>;
  <D.26925>:
  iftmp.119 = 0;
  <D.26926>:
  iftmp.118 = iftmp.119;
  goto <D.26932>;
  <D.26923>:
  D.26927 = klass->image;
  iftmp.118 = mono_security_core_clr_is_platform_image (D.26927);
  <D.26932>:
  trusted_location = iftmp.118;
  verify_all.120 = verify_all;
  if (verify_all.120 != 0) goto <D.26934>; else goto <D.26935>;
  <D.26934>:
  verifier_mode.121 = verifier_mode;
  if (verifier_mode.121 == 0) goto <D.26937>; else goto <D.26938>;
  <D.26937>:
  if (trusted_location != 0) goto <D.26941>; else goto <D.26944>;
  <D.26944>:
  D.26927 = klass->image;
  D.26945 = mono_defaults.corlib;
  if (D.26927 == D.26945) goto <D.26941>; else goto <D.26942>;
  <D.26941>:
  iftmp.122 = 1;
  goto <D.26943>;
  <D.26942>:
  iftmp.122 = 0;
  <D.26943>:
  D.26939 = iftmp.122;
  return D.26939;
  <D.26938>:
  <D.26935>:
  verifier_mode.121 = verifier_mode;
  if (verifier_mode.121 <= 1) goto <D.26947>; else goto <D.26950>;
  <D.26950>:
  if (trusted_location != 0) goto <D.26947>; else goto <D.26951>;
  <D.26951>:
  D.26927 = klass->image;
  D.26945 = mono_defaults.corlib;
  if (D.26927 == D.26945) goto <D.26947>; else goto <D.26948>;
  <D.26947>:
  iftmp.123 = 1;
  goto <D.26949>;
  <D.26948>:
  iftmp.123 = 0;
  <D.26949>:
  D.26939 = iftmp.123;
  return D.26939;
}


mono_method_verify_with_current_settings (struct MonoMethod * method, gboolean skip_visibility, gboolean is_fulltrust)
{
  struct GSList * D.26953;
  int iftmp.124;
  <unnamed type> verifier_mode.125;
  int iftmp.126;
  int D.26963;
  int D.26965;
  int iftmp.127;
  int D.26970;

  verifier_mode.125 = verifier_mode;
  if (verifier_mode.125 != 3) goto <D.26956>; else goto <D.26957>;
  <D.26956>:
  iftmp.124 = 32;
  goto <D.26958>;
  <D.26957>:
  iftmp.124 = 0;
  <D.26958>:
  if (is_fulltrust == 0) goto <D.26962>; else goto <D.26960>;
  <D.26962>:
  D.26963 = mono_verifier_is_method_full_trust (method);
  if (D.26963 == 0) goto <D.26964>; else goto <D.26960>;
  <D.26964>:
  iftmp.126 = 16;
  goto <D.26961>;
  <D.26960>:
  iftmp.126 = 0;
  <D.26961>:
  D.26965 = iftmp.124 | iftmp.126;
  if (skip_visibility != 0) goto <D.26967>; else goto <D.26968>;
  <D.26967>:
  iftmp.127 = 64;
  goto <D.26969>;
  <D.26968>:
  iftmp.127 = 0;
  <D.26969>:
  D.26970 = D.26965 | iftmp.127;
  D.26953 = mono_method_verify (method, D.26970);
  return D.26953;
}


mono_verifier_verify_class (struct MonoClass * class)
{
  struct MonoClass * D.26972;
  struct MonoClass * D.26975;
  unsigned int D.26978;
  unsigned int D.26979;
  unsigned char D.26982;
  struct MonoImage * D.26987;
  long unsigned int D.26988;
  long unsigned int D.26989;
  unsigned int D.26992;
  gboolean D.26995;
  unsigned int D.27000;
  unsigned int D.27001;
  unsigned char D.27003;
  struct MonoGenericClass * D.27005;
  struct MonoGenericContainer * D.27008;
  struct MonoGenericClass * D.27011;
  struct MonoGenericContainer * D.27016;
  struct MonoType * D.27019;
  int D.27020;
  unsigned int D.27025;
  int D.27030;
  int D.27033;
  int D.27038;
  int D.27043;
  long unsigned int D.27046;
  long unsigned int D.27047;
  int D.27050;
  int D.27053;

  D.26972 = class->parent;
  if (D.26972 == 0B) goto <D.26973>; else goto <D.26974>;
  <D.26973>:
  D.26975 = mono_defaults.object_class;
  if (D.26975 != class) goto <D.26976>; else goto <D.26977>;
  <D.26976>:
  D.26978 = class->flags;
  D.26979 = D.26978 & 32;
  if (D.26979 == 0) goto <D.26980>; else goto <D.26981>;
  <D.26980>:
  D.26982 = class->byval_arg.type;
  if (D.26982 != 19) goto <D.26983>; else goto <D.26984>;
  <D.26983>:
  D.26982 = class->byval_arg.type;
  if (D.26982 != 30) goto <D.26985>; else goto <D.26986>;
  <D.26985>:
  D.26987 = class->image;
  D.26988 = BIT_FIELD_REF <*D.26987, 64, 192>;
  D.26989 = D.26988 & 34359738368;
  if (D.26989 == 0) goto <D.26990>; else goto <D.26991>;
  <D.26990>:
  D.26992 = class->type_token;
  if (D.26992 != 33554433) goto <D.26993>; else goto <D.26994>;
  <D.26993>:
  D.26995 = 0;
  return D.26995;
  <D.26994>:
  <D.26991>:
  <D.26986>:
  <D.26984>:
  <D.26981>:
  <D.26977>:
  <D.26974>:
  D.26972 = class->parent;
  if (D.26972 != 0B) goto <D.26996>; else goto <D.26997>;
  <D.26996>:
  D.26972 = class->parent;
  D.27000 = D.26972->flags;
  D.27001 = D.27000 & 32;
  if (D.27001 != 0) goto <D.26998>; else goto <D.27002>;
  <D.27002>:
  D.26972 = class->parent;
  D.27003 = D.26972->byval_arg.type;
  if (D.27003 == 19) goto <D.26998>; else goto <D.27004>;
  <D.27004>:
  D.26972 = class->parent;
  D.27003 = D.26972->byval_arg.type;
  if (D.27003 == 30) goto <D.26998>; else goto <D.26999>;
  <D.26998>:
  D.26995 = 0;
  return D.26995;
  <D.26999>:
  D.27005 = class->generic_class;
  if (D.27005 == 0B) goto <D.27006>; else goto <D.27007>;
  <D.27006>:
  D.26972 = class->parent;
  D.27008 = D.26972->generic_container;
  if (D.27008 != 0B) goto <D.27009>; else goto <D.27010>;
  <D.27009>:
  D.26995 = 0;
  return D.26995;
  <D.27010>:
  <D.27007>:
  D.26972 = class->parent;
  D.27011 = D.26972->generic_class;
  if (D.27011 != 0B) goto <D.27012>; else goto <D.27013>;
  <D.27012>:
  D.27005 = class->generic_class;
  if (D.27005 == 0B) goto <D.27014>; else goto <D.27015>;
  <D.27014>:
  {
    struct MonoGenericContext * context;

    context = mono_class_get_context (class);
    D.27016 = class->generic_container;
    if (D.27016 != 0B) goto <D.27017>; else goto <D.27018>;
    <D.27017>:
    D.27016 = class->generic_container;
    context = &D.27016->context;
    <D.27018>:
    D.26972 = class->parent;
    D.27019 = &D.26972->byval_arg;
    D.27020 = mono_type_is_valid_type_in_context (D.27019, context);
    if (D.27020 == 0) goto <D.27021>; else goto <D.27022>;
    <D.27021>:
    D.26995 = 0;
    return D.26995;
    <D.27022>:
  }
  <D.27015>:
  <D.27013>:
  <D.26997>:
  D.27016 = class->generic_container;
  if (D.27016 != 0B) goto <D.27023>; else goto <D.27024>;
  <D.27023>:
  D.26978 = class->flags;
  D.27025 = D.26978 & 24;
  if (D.27025 == 16) goto <D.27026>; else goto <D.27027>;
  <D.27026>:
  D.26995 = 0;
  return D.26995;
  <D.27027>:
  <D.27024>:
  D.27016 = class->generic_container;
  if (D.27016 != 0B) goto <D.27028>; else goto <D.27029>;
  <D.27028>:
  D.27030 = verify_generic_parameters (class);
  if (D.27030 == 0) goto <D.27031>; else goto <D.27032>;
  <D.27031>:
  D.26995 = 0;
  return D.26995;
  <D.27032>:
  <D.27029>:
  D.27033 = verify_class_for_overlapping_reference_fields (class);
  if (D.27033 == 0) goto <D.27034>; else goto <D.27035>;
  <D.27034>:
  D.26995 = 0;
  return D.26995;
  <D.27035>:
  D.27005 = class->generic_class;
  if (D.27005 != 0B) goto <D.27036>; else goto <D.27037>;
  <D.27036>:
  D.27038 = mono_class_is_valid_generic_instantiation (0B, class);
  if (D.27038 == 0) goto <D.27039>; else goto <D.27040>;
  <D.27039>:
  D.26995 = 0;
  return D.26995;
  <D.27040>:
  <D.27037>:
  D.27005 = class->generic_class;
  if (D.27005 == 0B) goto <D.27041>; else goto <D.27042>;
  <D.27041>:
  D.27043 = verify_class_fields (class);
  if (D.27043 == 0) goto <D.27044>; else goto <D.27045>;
  <D.27044>:
  D.26995 = 0;
  return D.26995;
  <D.27045>:
  <D.27042>:
  D.27046 = BIT_FIELD_REF <*class, 64, 256>;
  D.27047 = D.27046 & 8;
  if (D.27047 != 0) goto <D.27048>; else goto <D.27049>;
  <D.27048>:
  D.27050 = verify_valuetype_layout (class);
  if (D.27050 == 0) goto <D.27051>; else goto <D.27052>;
  <D.27051>:
  D.26995 = 0;
  return D.26995;
  <D.27052>:
  <D.27049>:
  D.27053 = verify_interfaces (class);
  if (D.27053 == 0) goto <D.27054>; else goto <D.27055>;
  <D.27054>:
  D.26995 = 0;
  return D.26995;
  <D.27055>:
  D.26995 = 1;
  return D.26995;
}


verify_generic_parameters (struct MonoClass * class)
{
  <unnamed-signed:31> D.27057;
  unsigned int D.27058;
  struct MonoGenericParamFull * D.27059;
  long unsigned int D.27060;
  long unsigned int D.27061;
  struct MonoGenericParamFull * D.27062;
  struct MonoClass * * D.27063;
  long unsigned int D.27066;
  long unsigned int D.27067;
  int D.27068;
  long unsigned int D.27069;
  long unsigned int D.27070;
  int D.27071;
  struct MonoGenericContext * D.27073;
  int D.27074;
  int D.27076;
  int D.27079;
  struct MonoGenericClass * D.27081;
  int D.27084;
  struct MonoClass * D.27086;
  int D.27087;
  gboolean D.27088;
  int i;
  struct MonoGenericContainer * gc;
  struct MonoBitSet * used_args;
  void fail = <<< error >>>;

  gc = class->generic_container;
  D.27057 = gc->type_argc;
  D.27058 = (unsigned int) D.27057;
  used_args = mono_bitset_new (D.27058, 0);
  i = 0;
  goto <D.20496>;
  <D.20495>:
  {
    struct MonoGenericParamInfo * param_info;
    struct MonoClass * * constraints;

    D.27059 = gc->type_params;
    D.27060 = (long unsigned int) i;
    D.27061 = D.27060 * 56;
    D.27062 = D.27059 + D.27061;
    param_info = &D.27062->info;
    D.27063 = param_info->constraints;
    if (D.27063 == 0B) goto <D.27064>; else goto <D.27065>;
    <D.27064>:
    // predicted unlikely by continue predictor.
    goto <D.20488>;
    <D.27065>:
    mono_bitset_clear_all (used_args);
    D.27060 = (long unsigned int) i;
    D.27066 = D.27060 / 64;
    D.27067 = used_args->data[D.27066];
    D.27068 = i & 63;
    D.27069 = 1 << D.27068;
    D.27070 = D.27067 | D.27069;
    used_args->data[D.27066] = D.27070;
    constraints = param_info->constraints;
    goto <D.20493>;
    <D.20492>:
    {
      struct MonoClass * ctr;
      struct MonoType * constraint_type;

      ctr = *constraints;
      constraint_type = &ctr->byval_arg;
      D.27071 = mono_class_can_access_class (class, ctr);
      if (D.27071 == 0) goto fail; else goto <D.27072>;
      <D.27072>:
      D.27073 = &gc->context;
      D.27074 = mono_type_is_valid_type_in_context (constraint_type, D.27073);
      if (D.27074 == 0) goto fail; else goto <D.27075>;
      <D.27075>:
      D.27076 = mono_type_is_generic_argument (constraint_type);
      if (D.27076 != 0) goto <D.27077>; else goto <D.27078>;
      <D.27077>:
      D.27079 = recursive_mark_constraint_args (used_args, gc, constraint_type);
      if (D.27079 == 0) goto fail; else goto <D.27080>;
      <D.27080>:
      <D.27078>:
      D.27081 = ctr->generic_class;
      if (D.27081 != 0B) goto <D.27082>; else goto <D.27083>;
      <D.27082>:
      D.27084 = mono_class_is_valid_generic_instantiation (0B, ctr);
      if (D.27084 == 0) goto fail; else goto <D.27085>;
      <D.27085>:
      <D.27083>:
    }
    constraints = constraints + 8;
    <D.20493>:
    D.27086 = *constraints;
    if (D.27086 != 0B) goto <D.20492>; else goto <D.20494>;
    <D.20494>:
  }
  <D.20488>:
  i = i + 1;
  <D.20496>:
  D.27057 = gc->type_argc;
  D.27087 = (int) D.27057;
  if (D.27087 > i) goto <D.20495>; else goto <D.20497>;
  <D.20497>:
  mono_bitset_free (used_args);
  D.27088 = 1;
  return D.27088;
  fail:
  mono_bitset_free (used_args);
  D.27088 = 0;
  return D.27088;
}


recursive_mark_constraint_args (struct MonoBitSet * used_args, struct MonoGenericContainer * gc, struct MonoType * type)
{
  int D.27090;
  _Bool D.27091;
  long int D.27092;
  long int D.27093;
  struct MonoGenericParam * D.27096;
  short unsigned int D.27097;
  long unsigned int D.27098;
  long unsigned int D.27099;
  long unsigned int D.27100;
  int D.27101;
  long unsigned int D.27102;
  long unsigned int D.27103;
  gboolean D.27106;
  long unsigned int D.27107;
  long unsigned int D.27108;
  long unsigned int D.27109;
  long unsigned int D.27110;
  struct MonoGenericParamFull * D.27111;
  long unsigned int D.27112;
  struct MonoGenericParamFull * D.27113;
  struct MonoClass * * D.27114;
  int D.27117;
  int D.27120;
  struct MonoClass * D.27123;
  int idx;
  struct MonoClass * * constraints;
  struct MonoGenericParamInfo * param_info;

  D.27090 = mono_type_is_generic_argument (type);
  D.27091 = D.27090 == 0;
  D.27092 = (long int) D.27091;
  D.27093 = __builtin_expect (D.27092, 0);
  if (D.27093 != 0) goto <D.27094>; else goto <D.27095>;
  <D.27094>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 6206, "mono_type_is_generic_argument (type)");
  <D.27095>:
  D.27096 = type->data.generic_param;
  D.27097 = D.27096->num;
  idx = (int) D.27097;
  D.27098 = (long unsigned int) idx;
  D.27099 = D.27098 / 64;
  D.27100 = used_args->data[D.27099];
  D.27101 = idx & 63;
  D.27102 = D.27100 >> D.27101;
  D.27103 = D.27102 & 1;
  if (D.27103 != 0) goto <D.27104>; else goto <D.27105>;
  <D.27104>:
  D.27106 = 0;
  return D.27106;
  <D.27105>:
  D.27098 = (long unsigned int) idx;
  D.27107 = D.27098 / 64;
  D.27108 = used_args->data[D.27107];
  D.27101 = idx & 63;
  D.27109 = 1 << D.27101;
  D.27110 = D.27108 | D.27109;
  used_args->data[D.27107] = D.27110;
  D.27111 = gc->type_params;
  D.27098 = (long unsigned int) idx;
  D.27112 = D.27098 * 56;
  D.27113 = D.27111 + D.27112;
  param_info = &D.27113->info;
  D.27114 = param_info->constraints;
  if (D.27114 == 0B) goto <D.27115>; else goto <D.27116>;
  <D.27115>:
  D.27106 = 1;
  return D.27106;
  <D.27116>:
  constraints = param_info->constraints;
  goto <D.20478>;
  <D.20477>:
  {
    struct MonoClass * ctr;
    struct MonoType * constraint_type;

    ctr = *constraints;
    constraint_type = &ctr->byval_arg;
    D.27117 = mono_type_is_generic_argument (constraint_type);
    if (D.27117 != 0) goto <D.27118>; else goto <D.27119>;
    <D.27118>:
    D.27120 = recursive_mark_constraint_args (used_args, gc, constraint_type);
    if (D.27120 == 0) goto <D.27121>; else goto <D.27122>;
    <D.27121>:
    D.27106 = 0;
    return D.27106;
    <D.27122>:
    <D.27119>:
  }
  constraints = constraints + 8;
  <D.20478>:
  D.27123 = *constraints;
  if (D.27123 != 0B) goto <D.20477>; else goto <D.20479>;
  <D.20479>:
  D.27106 = 1;
  return D.27106;
}


verify_class_for_overlapping_reference_fields (struct MonoClass * class)
{
  unsigned int D.27125;
  unsigned int D.27126;
  gboolean D.27129;
  struct MonoType * D.27130;
  int D.27131;
  _Bool D.27132;
  short unsigned int D.27136;
  int D.27137;
  int D.27138;
  int D.20396;
  int iftmp.128;
  int D.20395;
  const char[9] * D.27143;
  unsigned char D.27144;
  int D.27145;
  unsigned char D.27146;
  int D.27147;
  const unsigned char * D.27152;
  unsigned char D.27153;
  int D.27154;
  const unsigned char * D.27155;
  unsigned char D.27156;
  int D.27157;
  const unsigned char * D.27162;
  unsigned char D.27163;
  int D.27164;
  const unsigned char * D.27165;
  unsigned char D.27166;
  int D.27167;
  const unsigned char * D.27172;
  unsigned char D.27173;
  int D.27174;
  const unsigned char * D.27175;
  unsigned char D.27176;
  int D.27177;
  const char * D.27179;
  int D.27180;
  struct MonoClassField * D.27181;
  long unsigned int D.27182;
  long unsigned int D.27183;
  struct MonoType * D.27188;
  short unsigned int D.27189;
  int D.27190;
  int D.27191;
  int D.20408;
  int iftmp.129;
  int D.20407;
  unsigned char D.27196;
  int D.27197;
  const unsigned char * D.27202;
  unsigned char D.27203;
  int D.27204;
  const unsigned char * D.27209;
  unsigned char D.27210;
  int D.27211;
  const unsigned char * D.27216;
  unsigned char D.27217;
  int D.27218;
  const char * D.27220;
  int D.27222;
  int D.27223;
  int D.27226;
  int D.27229;
  int D.27230;
  unsigned int j.130;
  unsigned int D.27241;
  int i;
  int j;
  void * iter;
  struct MonoClassField * field;
  gboolean is_fulltrust;

  try
    {
      i = 0;
      iter = 0B;
      is_fulltrust = mono_verifier_is_class_full_trust (class);
      D.27125 = class->flags;
      D.27126 = D.27125 & 24;
      if (D.27126 != 16) goto <D.27127>; else goto <D.27128>;
      <D.27127>:
      D.27129 = 1;
      return D.27129;
      <D.27128>:
      goto <D.20397>;
      <D.20413>:
      {
        int fieldEnd;
        gboolean is_valuetype;

        fieldEnd = get_field_end (field);
        D.27130 = field->type;
        D.27131 = mono_type_is_reference (D.27130);
        D.27132 = D.27131 == 0;
        is_valuetype = (gboolean) D.27132;
        i = i + 1;
        D.27130 = field->type;
        D.27136 = D.27130->attrs;
        D.27137 = (int) D.27136;
        D.27138 = D.27137 & 1536;
        if (D.27138 != 0) goto <D.27139>; else goto <D.27133>;
        <D.27139>:
        {
          size_t __s1_len;
          size_t __s2_len;

          __s2_len = 8;
          if (__s2_len <= 3) goto <D.27141>; else goto <D.27142>;
          <D.27141>:
          {
            const unsigned char * __s2;
            int __result;

            __s2 = mono_field_get_name (field);
            D.27143 = "_Deleted";
            D.27144 = MEM[(const unsigned char *)D.27143];
            D.27145 = (int) D.27144;
            D.27146 = *__s2;
            D.27147 = (int) D.27146;
            __result = D.27145 - D.27147;
            {
              if (__s2_len != 0) goto <D.27148>; else goto <D.27149>;
              <D.27148>:
              if (__result == 0) goto <D.27150>; else goto <D.27151>;
              <D.27150>:
              D.27152 = &MEM[(void *)"_Deleted" + 1B];
              D.27153 = *D.27152;
              D.27154 = (int) D.27153;
              D.27155 = __s2 + 1;
              D.27156 = *D.27155;
              D.27157 = (int) D.27156;
              __result = D.27154 - D.27157;
              if (__s2_len > 1) goto <D.27158>; else goto <D.27159>;
              <D.27158>:
              if (__result == 0) goto <D.27160>; else goto <D.27161>;
              <D.27160>:
              D.27162 = &MEM[(void *)"_Deleted" + 2B];
              D.27163 = *D.27162;
              D.27164 = (int) D.27163;
              D.27165 = __s2 + 2;
              D.27166 = *D.27165;
              D.27167 = (int) D.27166;
              __result = D.27164 - D.27167;
              if (__s2_len > 2) goto <D.27168>; else goto <D.27169>;
              <D.27168>:
              if (__result == 0) goto <D.27170>; else goto <D.27171>;
              <D.27170>:
              D.27172 = &MEM[(void *)"_Deleted" + 3B];
              D.27173 = *D.27172;
              D.27174 = (int) D.27173;
              D.27175 = __s2 + 3;
              D.27176 = *D.27175;
              D.27177 = (int) D.27176;
              __result = D.27174 - D.27177;
              <D.27171>:
              <D.27169>:
              <D.27161>:
              <D.27159>:
              <D.27151>:
              <D.27149>:
            }
            D.20395 = __result;
          }
          iftmp.128 = -D.20395;
          goto <D.27178>;
          <D.27142>:
          D.27179 = mono_field_get_name (field);
          iftmp.128 = __builtin_strcmp (D.27179, "_Deleted");
          <D.27178>:
          D.20396 = iftmp.128;
        }
        if (D.20396 == 0) goto <D.27134>; else goto <D.27133>;
        <D.27133>:
        D.27130 = field->type;
        D.27136 = D.27130->attrs;
        D.27137 = (int) D.27136;
        D.27180 = D.27137 & 16;
        if (D.27180 != 0) goto <D.27134>; else goto <D.27135>;
        <D.27134>:
        // predicted unlikely by continue predictor.
        goto <D.20397>;
        <D.27135>:
        j = i;
        goto <D.20411>;
        <D.20410>:
        {
          struct MonoClassField * other;
          int otherEnd;

          D.27181 = class->fields;
          D.27182 = (long unsigned int) j;
          D.27183 = D.27182 * 32;
          other = D.27181 + D.27183;
          otherEnd = get_field_end (other);
          D.27188 = other->type;
          D.27189 = D.27188->attrs;
          D.27190 = (int) D.27189;
          D.27191 = D.27190 & 1536;
          if (D.27191 != 0) goto <D.27192>; else goto <D.27184>;
          <D.27192>:
          {
            size_t __s1_len;
            size_t __s2_len;

            __s2_len = 8;
            if (__s2_len <= 3) goto <D.27194>; else goto <D.27195>;
            <D.27194>:
            {
              const unsigned char * __s2;
              int __result;

              __s2 = mono_field_get_name (other);
              D.27143 = "_Deleted";
              D.27144 = MEM[(const unsigned char *)D.27143];
              D.27145 = (int) D.27144;
              D.27196 = *__s2;
              D.27197 = (int) D.27196;
              __result = D.27145 - D.27197;
              {
                if (__s2_len != 0) goto <D.27198>; else goto <D.27199>;
                <D.27198>:
                if (__result == 0) goto <D.27200>; else goto <D.27201>;
                <D.27200>:
                D.27152 = &MEM[(void *)"_Deleted" + 1B];
                D.27153 = *D.27152;
                D.27154 = (int) D.27153;
                D.27202 = __s2 + 1;
                D.27203 = *D.27202;
                D.27204 = (int) D.27203;
                __result = D.27154 - D.27204;
                if (__s2_len > 1) goto <D.27205>; else goto <D.27206>;
                <D.27205>:
                if (__result == 0) goto <D.27207>; else goto <D.27208>;
                <D.27207>:
                D.27162 = &MEM[(void *)"_Deleted" + 2B];
                D.27163 = *D.27162;
                D.27164 = (int) D.27163;
                D.27209 = __s2 + 2;
                D.27210 = *D.27209;
                D.27211 = (int) D.27210;
                __result = D.27164 - D.27211;
                if (__s2_len > 2) goto <D.27212>; else goto <D.27213>;
                <D.27212>:
                if (__result == 0) goto <D.27214>; else goto <D.27215>;
                <D.27214>:
                D.27172 = &MEM[(void *)"_Deleted" + 3B];
                D.27173 = *D.27172;
                D.27174 = (int) D.27173;
                D.27216 = __s2 + 3;
                D.27217 = *D.27216;
                D.27218 = (int) D.27217;
                __result = D.27174 - D.27218;
                <D.27215>:
                <D.27213>:
                <D.27208>:
                <D.27206>:
                <D.27201>:
                <D.27199>:
              }
              D.20407 = __result;
            }
            iftmp.129 = -D.20407;
            goto <D.27219>;
            <D.27195>:
            D.27220 = mono_field_get_name (other);
            iftmp.129 = __builtin_strcmp (D.27220, "_Deleted");
            <D.27219>:
            D.20408 = iftmp.129;
          }
          if (D.20408 == 0) goto <D.27185>; else goto <D.27184>;
          <D.27184>:
          if (is_valuetype != 0) goto <D.27221>; else goto <D.27186>;
          <D.27221>:
          D.27188 = other->type;
          D.27222 = mono_type_is_reference (D.27188);
          if (D.27222 == 0) goto <D.27185>; else goto <D.27186>;
          <D.27186>:
          D.27188 = other->type;
          D.27189 = D.27188->attrs;
          D.27190 = (int) D.27189;
          D.27223 = D.27190 & 16;
          if (D.27223 != 0) goto <D.27185>; else goto <D.27187>;
          <D.27185>:
          // predicted unlikely by continue predictor.
          goto <D.20409>;
          <D.27187>:
          if (is_valuetype == 0) goto <D.27224>; else goto <D.27225>;
          <D.27224>:
          D.27188 = other->type;
          D.27226 = mono_type_is_reference (D.27188);
          if (D.27226 != 0) goto <D.27227>; else goto <D.27228>;
          <D.27227>:
          D.27229 = field->offset;
          D.27230 = other->offset;
          if (D.27229 == D.27230) goto <D.27231>; else goto <D.27232>;
          <D.27231>:
          if (is_fulltrust != 0) goto <D.27233>; else goto <D.27234>;
          <D.27233>:
          // predicted unlikely by continue predictor.
          goto <D.20409>;
          <D.27234>:
          <D.27232>:
          <D.27228>:
          <D.27225>:
          D.27229 = field->offset;
          if (D.27229 < otherEnd) goto <D.27238>; else goto <D.27235>;
          <D.27238>:
          if (otherEnd <= fieldEnd) goto <D.27236>; else goto <D.27235>;
          <D.27235>:
          D.27230 = other->offset;
          D.27229 = field->offset;
          if (D.27230 >= D.27229) goto <D.27239>; else goto <D.27237>;
          <D.27239>:
          D.27230 = other->offset;
          if (D.27230 < fieldEnd) goto <D.27236>; else goto <D.27237>;
          <D.27236>:
          D.27129 = 0;
          return D.27129;
          <D.27237>:
        }
        <D.20409>:
        j = j + 1;
        <D.20411>:
        j.130 = (unsigned int) j;
        D.27241 = class->field.count;
        if (j.130 < D.27241) goto <D.20410>; else goto <D.20412>;
        <D.20412>:
      }
      <D.20397>:
      field = mono_class_get_fields (class, &iter);
      if (field != 0B) goto <D.20413>; else goto <D.20414>;
      <D.20414>:
      D.27129 = 1;
      return D.27129;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


get_field_end (struct MonoClassField * field)
{
  struct MonoType * D.27244;
  int D.27247;
  int D.27248;
  int align;
  int size;

  try
    {
      D.27244 = field->type;
      size = mono_type_size (D.27244, &align);
      if (size == 0) goto <D.27245>; else goto <D.27246>;
      <D.27245>:
      size = 4;
      <D.27246>:
      D.27248 = field->offset;
      D.27247 = D.27248 + size;
      return D.27247;
    }
  finally
    {
      align = {CLOBBER};
    }
}


verify_class_fields (struct MonoClass * class)
{
  struct MonoGenericContainer * D.27251;
  struct MonoType * D.27254;
  int D.27255;
  gboolean D.27258;
  void * D.27259;
  void * iter;
  struct MonoClassField * field;
  struct MonoGenericContext * context;
  struct GHashTable * unique_fields;

  try
    {
      iter = 0B;
      context = mono_class_get_context (class);
      unique_fields = monoeg_g_hash_table_new_full (field_hash, field_equals, 0B, 0B);
      D.27251 = class->generic_container;
      if (D.27251 != 0B) goto <D.27252>; else goto <D.27253>;
      <D.27252>:
      D.27251 = class->generic_container;
      context = &D.27251->context;
      <D.27253>:
      goto <D.20442>;
      <D.20441>:
      D.27254 = field->type;
      D.27255 = mono_type_is_valid_type_in_context (D.27254, context);
      if (D.27255 == 0) goto <D.27256>; else goto <D.27257>;
      <D.27256>:
      monoeg_g_hash_table_destroy (unique_fields);
      D.27258 = 0;
      return D.27258;
      <D.27257>:
      D.27259 = monoeg_g_hash_table_lookup (unique_fields, field);
      if (D.27259 != 0B) goto <D.27260>; else goto <D.27261>;
      <D.27260>:
      monoeg_g_hash_table_destroy (unique_fields);
      D.27258 = 0;
      return D.27258;
      <D.27261>:
      monoeg_g_hash_table_insert_replace (unique_fields, field, field, 0);
      <D.20442>:
      field = mono_class_get_fields (class, &iter);
      if (field != 0B) goto <D.20441>; else goto <D.20443>;
      <D.20443>:
      monoeg_g_hash_table_destroy (unique_fields);
      D.27258 = 1;
      return D.27258;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


field_equals (const void * _a, const void * _b)
{
  gboolean D.27264;
  int iftmp.131;
  int D.20433;
  const char * D.27268;
  const char * D.27269;
  struct MonoType * D.27271;
  struct MonoType * D.27272;
  int D.27273;
  const struct MonoClassField * a;
  const struct MonoClassField * b;

  a = _a;
  b = _b;
  {
    size_t __s1_len;
    size_t __s2_len;

    D.27268 = a->name;
    D.27269 = b->name;
    D.20433 = __builtin_strcmp (D.27268, D.27269);
  }
  if (D.20433 == 0) goto <D.27270>; else goto <D.27266>;
  <D.27270>:
  D.27271 = a->type;
  D.27272 = b->type;
  D.27273 = mono_metadata_type_equal (D.27271, D.27272);
  if (D.27273 != 0) goto <D.27274>; else goto <D.27266>;
  <D.27274>:
  iftmp.131 = 1;
  goto <D.27267>;
  <D.27266>:
  iftmp.131 = 0;
  <D.27267>:
  D.27264 = iftmp.131;
  return D.27264;
}


field_hash (const void * key)
{
  guint D.27276;
  const char * D.27277;
  unsigned int D.27278;
  struct MonoType * D.27279;
  unsigned int D.27280;
  const struct MonoClassField * field;

  field = key;
  D.27277 = field->name;
  D.27278 = monoeg_g_str_hash (D.27277);
  D.27279 = field->type;
  D.27280 = mono_metadata_type_hash (D.27279);
  D.27276 = D.27278 ^ D.27280;
  return D.27276;
}


verify_valuetype_layout (struct MonoClass * class)
{
  gboolean D.27282;
  gboolean res;

  res = verify_valuetype_layout_with_target (class, class);
  D.27282 = res;
  return D.27282;
}


verify_valuetype_layout_with_target (struct MonoClass * class, struct MonoClass * target_class)
{
  long unsigned int D.27284;
  long unsigned int D.27285;
  gboolean D.27288;
  unsigned char D.27289;
  unsigned int type.132;
  unsigned int D.27293;
  unsigned int D.27295;
  struct MonoType * D.27296;
  short unsigned int D.27299;
  int D.27300;
  int D.27301;
  struct MonoClass * D.27304;
  int D.27309;
  int type;
  void * iter;
  struct MonoClassField * field;
  struct MonoClass * field_class;

  try
    {
      iter = 0B;
      D.27284 = BIT_FIELD_REF <*class, 64, 256>;
      D.27285 = D.27284 & 8;
      if (D.27285 == 0) goto <D.27286>; else goto <D.27287>;
      <D.27286>:
      D.27288 = 1;
      return D.27288;
      <D.27287>:
      D.27289 = class->byval_arg.type;
      type = (int) D.27289;
      type.132 = (unsigned int) type;
      D.27293 = type.132 + 4294967294;
      if (D.27293 <= 11) goto <D.27290>; else goto <D.27294>;
      <D.27294>:
      type.132 = (unsigned int) type;
      D.27295 = type.132 + 4294967272;
      if (D.27295 <= 1) goto <D.27290>; else goto <D.27291>;
      <D.27290>:
      D.27288 = 1;
      return D.27288;
      <D.27291>:
      goto <D.20460>;
      <D.20461>:
      D.27296 = field->type;
      if (D.27296 == 0B) goto <D.27297>; else goto <D.27298>;
      <D.27297>:
      D.27288 = 0;
      return D.27288;
      <D.27298>:
      D.27296 = field->type;
      D.27299 = D.27296->attrs;
      D.27300 = (int) D.27299;
      D.27301 = D.27300 & 272;
      if (D.27301 != 0) goto <D.27302>; else goto <D.27303>;
      <D.27302>:
      // predicted unlikely by continue predictor.
      goto <D.20460>;
      <D.27303>:
      D.27296 = field->type;
      D.27304 = mono_class_from_mono_type (D.27296);
      field_class = mono_class_get_generic_type_definition (D.27304);
      if (field_class == target_class) goto <D.27305>; else goto <D.27307>;
      <D.27307>:
      if (class == field_class) goto <D.27305>; else goto <D.27308>;
      <D.27308>:
      D.27309 = verify_valuetype_layout_with_target (field_class, target_class);
      if (D.27309 == 0) goto <D.27305>; else goto <D.27306>;
      <D.27305>:
      D.27288 = 0;
      return D.27288;
      <D.27306>:
      <D.20460>:
      field = mono_class_get_fields (class, &iter);
      if (field != 0B) goto <D.20461>; else goto <D.20462>;
      <D.20462>:
      D.27288 = 1;
      return D.27288;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


verify_interfaces (struct MonoClass * class)
{
  struct MonoClass * * D.27312;
  long unsigned int D.27313;
  long unsigned int D.27314;
  struct MonoClass * * D.27315;
  unsigned int D.27316;
  unsigned int D.27317;
  gboolean D.27320;
  short unsigned int D.27321;
  int D.27322;
  int i;

  i = 0;
  goto <D.20450>;
  <D.20449>:
  {
    struct MonoClass * iface;

    D.27312 = class->interfaces;
    D.27313 = (long unsigned int) i;
    D.27314 = D.27313 * 8;
    D.27315 = D.27312 + D.27314;
    iface = *D.27315;
    D.27316 = iface->flags;
    D.27317 = D.27316 & 32;
    if (D.27317 == 0) goto <D.27318>; else goto <D.27319>;
    <D.27318>:
    D.27320 = 0;
    return D.27320;
    <D.27319>:
  }
  i = i + 1;
  <D.20450>:
  D.27321 = class->interface_count;
  D.27322 = (int) D.27321;
  if (D.27322 > i) goto <D.20449>; else goto <D.20451>;
  <D.20451>:
  D.27320 = 1;
  return D.27320;
}


mono_verifier_class_is_valid_generic_instantiation (struct MonoClass * class)
{
  gboolean D.27324;

  D.27324 = mono_class_is_valid_generic_instantiation (0B, class);
  return D.27324;
}


mono_verifier_is_method_valid_generic_instantiation (struct MonoMethod * method)
{
  long unsigned int D.27326;
  long unsigned int D.27327;
  gboolean D.27330;

  D.27326 = BIT_FIELD_REF <*method, 64, 256>;
  D.27327 = D.27326 & 4096;
  if (D.27327 == 0) goto <D.27328>; else goto <D.27329>;
  <D.27328>:
  D.27330 = 1;
  return D.27330;
  <D.27329>:
  D.27330 = mono_method_is_valid_generic_instantiation (0B, method);
  return D.27330;
}


