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.19615;
  struct MonoVerifyInfoExtended * info;
  struct GSList * tmp;

  tmp = list;
  goto <D.17810>;
  <D.17809>:
  info = tmp->data;
  D.19615 = info->info.message;
  monoeg_g_free (D.19615);
  monoeg_g_free (info);
  tmp = tmp->next;
  <D.17810>:
  if (tmp != 0B) goto <D.17809>; else goto <D.17811>;
  <D.17811>:
  monoeg_g_slist_free (list);
}


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

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


mono_delegate_signature_equal (struct MonoMethodSignature * delegate_sig, struct MonoMethodSignature * method_sig, gboolean is_static_ldftn)
{
  _Bool D.19618;
  short unsigned int D.19619;
  int D.19620;
  int D.19621;
  short unsigned int D.19622;
  int D.19623;
  gboolean D.19626;
  unsigned char D.19627;
  unsigned char D.19628;
  unsigned char D.19629;
  unsigned char D.19630;
  int D.19633;
  int D.19634;
  struct MonoType * D.19637;
  struct MonoType * D.19638;
  int D.19639;
  int i;
  int method_offset;

  D.19618 = is_static_ldftn != 0;
  method_offset = (int) D.19618;
  D.19619 = delegate_sig->param_count;
  D.19620 = (int) D.19619;
  D.19621 = D.19620 + method_offset;
  D.19622 = method_sig->param_count;
  D.19623 = (int) D.19622;
  if (D.19621 != D.19623) goto <D.19624>; else goto <D.19625>;
  <D.19624>:
  D.19626 = 0;
  return D.19626;
  <D.19625>:
  D.19627 = BIT_FIELD_REF <*delegate_sig, 8, 80>;
  D.19628 = BIT_FIELD_REF <*method_sig, 8, 80>;
  D.19629 = D.19627 ^ D.19628;
  D.19630 = D.19629 & 63;
  if (D.19630 != 0) goto <D.19631>; else goto <D.19632>;
  <D.19631>:
  D.19626 = 0;
  return D.19626;
  <D.19632>:
  i = 0;
  goto <D.18292>;
  <D.18291>:
  {
    struct MonoType * p1;
    struct MonoType * p2;

    p1 = delegate_sig->params[i];
    D.19633 = i + method_offset;
    p2 = method_sig->params[D.19633];
    D.19634 = mono_delegate_param_equal (p1, p2);
    if (D.19634 == 0) goto <D.19635>; else goto <D.19636>;
    <D.19635>:
    D.19626 = 0;
    return D.19626;
    <D.19636>:
  }
  i = i + 1;
  <D.18292>:
  D.19619 = delegate_sig->param_count;
  D.19620 = (int) D.19619;
  if (D.19620 > i) goto <D.18291>; else goto <D.18293>;
  <D.18293>:
  D.19637 = method_sig->ret;
  D.19638 = delegate_sig->ret;
  D.19639 = mono_delegate_ret_equal (D.19638, D.19637);
  if (D.19639 == 0) goto <D.19640>; else goto <D.19641>;
  <D.19640>:
  D.19626 = 0;
  return D.19626;
  <D.19641>:
  D.19626 = 1;
  return D.19626;
}


mono_delegate_param_equal (struct MonoType * delegate, struct MonoType * method)
{
  int D.19643;
  gboolean D.19646;

  D.19643 = mono_metadata_type_equal_full (delegate, method, 1);
  if (D.19643 != 0) goto <D.19644>; else goto <D.19645>;
  <D.19644>:
  D.19646 = 1;
  return D.19646;
  <D.19645>:
  D.19646 = mono_delegate_type_equal (method, delegate);
  return D.19646;
}


mono_delegate_type_equal (struct MonoType * target, struct MonoType * candidate)
{
  unsigned char D.19648;
  unsigned char D.19649;
  unsigned char D.19650;
  unsigned char D.19651;
  gboolean D.19654;
  unsigned char D.19655;
  int D.19656;
  unsigned char D.19657;
  _Bool D.19658;
  struct MonoType * D.19661;
  struct MonoType * D.19662;
  struct MonoMethodSignature * D.19665;
  struct MonoMethodSignature * D.19666;
  struct MonoClass * D.19667;
  struct MonoClass * D.19668;
  struct MonoClass * D.19671;
  struct MonoClass * D.19672;
  struct MonoClass * D.19673;
  struct MonoClass * D.19674;
  struct MonoClass * D.19677;
  struct MonoClass * D.19678;
  _Bool D.19679;
  int iftmp.0;
  struct MonoGenericParam * D.19684;
  short unsigned int D.19685;
  struct MonoGenericParam * D.19686;
  short unsigned int D.19687;
  int iftmp.1;

  D.19648 = BIT_FIELD_REF <*candidate, 8, 56>;
  D.19649 = BIT_FIELD_REF <*target, 8, 56>;
  D.19650 = D.19648 ^ D.19649;
  D.19651 = D.19650 & 64;
  if (D.19651 != 0) goto <D.19652>; else goto <D.19653>;
  <D.19652>:
  D.19654 = 0;
  return D.19654;
  <D.19653>:
  D.19655 = target->type;
  D.19656 = (int) D.19655;
  switch (D.19656) <default: <D.18273>, case 1: <D.18244>, case 2: <D.18247>, case 3: <D.18250>, case 4: <D.18245>, case 5: <D.18246>, case 6: <D.18248>, case 7: <D.18249>, case 8: <D.18251>, case 9: <D.18252>, case 10: <D.18253>, case 11: <D.18254>, case 12: <D.18255>, case 13: <D.18256>, case 14: <D.18259>, case 15: <D.18261>, case 17: <D.18270>, case 18: <D.18267>, case 19: <D.18271>, case 20: <D.18269>, case 21: <D.18263>, case 22: <D.18260>, case 24: <D.18257>, case 25: <D.18258>, case 27: <D.18262>, case 28: <D.18266>, case 29: <D.18268>, case 30: <D.18272>>
  <D.18244>:
  <D.18245>:
  <D.18246>:
  <D.18247>:
  <D.18248>:
  <D.18249>:
  <D.18250>:
  <D.18251>:
  <D.18252>:
  <D.18253>:
  <D.18254>:
  <D.18255>:
  <D.18256>:
  <D.18257>:
  <D.18258>:
  <D.18259>:
  <D.18260>:
  D.19657 = candidate->type;
  D.19655 = target->type;
  D.19658 = D.19657 == D.19655;
  D.19654 = (gboolean) D.19658;
  return D.19654;
  <D.18261>:
  D.19657 = candidate->type;
  if (D.19657 != 15) goto <D.19659>; else goto <D.19660>;
  <D.19659>:
  D.19654 = 0;
  return D.19654;
  <D.19660>:
  D.19661 = candidate->data.type;
  D.19662 = target->data.type;
  D.19654 = mono_delegate_type_equal (D.19662, D.19661);
  return D.19654;
  <D.18262>:
  D.19657 = candidate->type;
  if (D.19657 != 27) goto <D.19663>; else goto <D.19664>;
  <D.19663>:
  D.19654 = 0;
  return D.19654;
  <D.19664>:
  D.19665 = mono_type_get_signature (candidate);
  D.19666 = mono_type_get_signature (target);
  D.19654 = mono_delegate_signature_equal (D.19666, D.19665, 0);
  return D.19654;
  <D.18263>:
  {
    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.19654 = verifier_class_is_assignable_from (target_klass, candidate_klass);
    return D.19654;
  }
  <D.18266>:
  D.19654 = mono_type_is_reference (candidate);
  return D.19654;
  <D.18267>:
  D.19667 = mono_class_from_mono_type (candidate);
  D.19668 = target->data.klass;
  D.19654 = verifier_class_is_assignable_from (D.19668, D.19667);
  return D.19654;
  <D.18268>:
  D.19657 = candidate->type;
  if (D.19657 != 29) goto <D.19669>; else goto <D.19670>;
  <D.19669>:
  D.19654 = 0;
  return D.19654;
  <D.19670>:
  D.19671 = mono_class_from_mono_type (candidate);
  D.19672 = D.19671->element_class;
  D.19673 = mono_class_from_mono_type (target);
  D.19674 = D.19673->element_class;
  D.19654 = verifier_class_is_assignable_from (D.19674, D.19672);
  return D.19654;
  <D.18269>:
  D.19657 = candidate->type;
  if (D.19657 != 20) goto <D.19675>; else goto <D.19676>;
  <D.19675>:
  D.19654 = 0;
  return D.19654;
  <D.19676>:
  D.19654 = is_array_type_compatible (target, candidate);
  return D.19654;
  <D.18270>:
  D.19677 = mono_class_from_mono_type (candidate);
  D.19678 = mono_class_from_mono_type (target);
  D.19679 = D.19677 == D.19678;
  D.19654 = (gboolean) D.19679;
  return D.19654;
  <D.18271>:
  D.19657 = candidate->type;
  if (D.19657 == 19) goto <D.19683>; else goto <D.19681>;
  <D.19683>:
  D.19684 = target->data.generic_param;
  D.19685 = D.19684->num;
  D.19686 = candidate->data.generic_param;
  D.19687 = D.19686->num;
  if (D.19685 == D.19687) goto <D.19688>; else goto <D.19681>;
  <D.19688>:
  iftmp.0 = 1;
  goto <D.19682>;
  <D.19681>:
  iftmp.0 = 0;
  <D.19682>:
  D.19654 = iftmp.0;
  return D.19654;
  D.19654 = 0;
  return D.19654;
  <D.18272>:
  D.19657 = candidate->type;
  if (D.19657 == 30) goto <D.19692>; else goto <D.19690>;
  <D.19692>:
  D.19684 = target->data.generic_param;
  D.19685 = D.19684->num;
  D.19686 = candidate->data.generic_param;
  D.19687 = D.19686->num;
  if (D.19685 == D.19687) goto <D.19693>; else goto <D.19690>;
  <D.19693>:
  iftmp.1 = 1;
  goto <D.19691>;
  <D.19690>:
  iftmp.1 = 0;
  <D.19691>:
  D.19654 = iftmp.1;
  return D.19654;
  D.19654 = 0;
  return D.19654;
  <D.18273>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "verify.c", 2594);
  D.19654 = 0;
  return D.19654;
}


verifier_class_is_assignable_from (struct MonoClass * target, struct MonoClass * candidate)
{
  gboolean D.19697;
  int D.19698;
  unsigned int D.19704;
  unsigned int D.19705;
  unsigned char D.19707;
  unsigned int D.19711;
  unsigned int D.19712;
  unsigned char D.19714;
  int D.19716;
  unsigned char D.19719;
  struct MonoClass * D.19722;
  struct MonoClass * D.19723;
  int D.19724;
  struct MonoClass * D.19727;
  int D.19728;
  struct MonoClass * D.19731;
  int D.19732;
  struct MonoClass * D.19735;
  int D.19736;
  struct MonoClass * D.19739;
  int D.19740;
  int D.19744;
  struct MonoClass * * D.19747;
  unsigned int i.2;
  unsigned int D.19749;
  struct MonoClass * * D.19750;
  int D.19751;
  short unsigned int D.19754;
  int D.19755;
  struct MonoClass * * D.19756;
  struct MonoClass * * D.19757;
  int D.19758;
  short unsigned int D.19761;
  int D.19762;
  struct MonoClass * D.19764;
  unsigned char D.19765;
  unsigned char D.19766;
  int D.19769;
  int D.19772;
  struct MonoGenericClass * D.19780;
  struct MonoClass * D.19784;
  struct MonoClass * D.19787;
  struct MonoGenericInst * D.19790;
  struct MonoType * D.19791;
  struct MonoClass * iface_gtd;

  if (target == candidate) goto <D.19695>; else goto <D.19696>;
  <D.19695>:
  D.19697 = 1;
  return D.19697;
  <D.19696>:
  D.19698 = mono_class_has_variant_generic_params (target);
  if (D.19698 != 0) goto <D.19699>; else goto <D.19700>;
  <D.19699>:
  D.19704 = target->flags;
  D.19705 = D.19704 & 32;
  if (D.19705 != 0) goto <D.19701>; else goto <D.19706>;
  <D.19706>:
  D.19707 = target->byval_arg.type;
  if (D.19707 == 19) goto <D.19701>; else goto <D.19708>;
  <D.19708>:
  D.19707 = target->byval_arg.type;
  if (D.19707 == 30) goto <D.19701>; else goto <D.19702>;
  <D.19701>:
  D.19711 = candidate->flags;
  D.19712 = D.19711 & 32;
  if (D.19712 != 0) goto <D.19709>; else goto <D.19713>;
  <D.19713>:
  D.19714 = candidate->byval_arg.type;
  if (D.19714 == 19) goto <D.19709>; else goto <D.19715>;
  <D.19715>:
  D.19714 = candidate->byval_arg.type;
  if (D.19714 == 30) goto <D.19709>; else goto <D.19710>;
  <D.19709>:
  D.19716 = mono_class_is_variant_compatible (target, candidate, 1);
  if (D.19716 != 0) goto <D.19717>; else goto <D.19718>;
  <D.19717>:
  D.19697 = 1;
  return D.19697;
  <D.19718>:
  <D.19710>:
  D.19719 = candidate->rank;
  if (D.19719 == 1) goto <D.19720>; else goto <D.19721>;
  <D.19720>:
  D.19722 = candidate->element_class;
  D.19723 = mono_defaults.generic_ilist_class;
  D.19724 = verifier_inflate_and_check_compat (target, D.19723, D.19722);
  if (D.19724 != 0) goto <D.19725>; else goto <D.19726>;
  <D.19725>:
  D.19697 = 1;
  return D.19697;
  <D.19726>:
  D.19722 = candidate->element_class;
  D.19727 = get_icollection_class ();
  D.19728 = verifier_inflate_and_check_compat (target, D.19727, D.19722);
  if (D.19728 != 0) goto <D.19729>; else goto <D.19730>;
  <D.19729>:
  D.19697 = 1;
  return D.19697;
  <D.19730>:
  D.19722 = candidate->element_class;
  D.19731 = get_ienumerable_class ();
  D.19732 = verifier_inflate_and_check_compat (target, D.19731, D.19722);
  if (D.19732 != 0) goto <D.19733>; else goto <D.19734>;
  <D.19733>:
  D.19697 = 1;
  return D.19697;
  <D.19734>:
  D.19722 = candidate->element_class;
  D.19735 = get_ireadonlylist_class ();
  D.19736 = verifier_inflate_and_check_compat (target, D.19735, D.19722);
  if (D.19736 != 0) goto <D.19737>; else goto <D.19738>;
  <D.19737>:
  D.19697 = 1;
  return D.19697;
  <D.19738>:
  D.19722 = candidate->element_class;
  D.19739 = get_ireadonlycollection_class ();
  D.19740 = verifier_inflate_and_check_compat (target, D.19739, D.19722);
  if (D.19740 != 0) goto <D.19741>; else goto <D.19742>;
  <D.19741>:
  D.19697 = 1;
  return D.19697;
  <D.19742>:
  goto <D.19743>;
  <D.19721>:
  {
    struct MonoError error;
    int i;

    try
      {
        goto <D.18140>;
        <D.18139>:
        mono_class_setup_interfaces (candidate, &error);
        D.19744 = mono_error_ok (&error);
        if (D.19744 == 0) goto <D.19745>; else goto <D.19746>;
        <D.19745>:
        mono_error_cleanup (&error);
        D.19697 = 0;
        return D.19697;
        <D.19746>:
        i = 0;
        goto <D.18133>;
        <D.18132>:
        {
          struct MonoClass * iface;

          D.19747 = candidate->interfaces_packed;
          i.2 = (unsigned int) i;
          D.19749 = i.2 * 4;
          D.19750 = D.19747 + D.19749;
          iface = *D.19750;
          D.19751 = mono_class_is_variant_compatible (target, iface, 1);
          if (D.19751 != 0) goto <D.19752>; else goto <D.19753>;
          <D.19752>:
          D.19697 = 1;
          return D.19697;
          <D.19753>:
        }
        i = i + 1;
        <D.18133>:
        D.19754 = candidate->interface_offsets_count;
        D.19755 = (int) D.19754;
        if (D.19755 > i) goto <D.18132>; else goto <D.18134>;
        <D.18134>:
        i = 0;
        goto <D.18137>;
        <D.18136>:
        {
          struct MonoClass * iface;

          D.19756 = candidate->interfaces;
          i.2 = (unsigned int) i;
          D.19749 = i.2 * 4;
          D.19757 = D.19756 + D.19749;
          iface = *D.19757;
          D.19758 = mono_class_is_variant_compatible (target, iface, 1);
          if (D.19758 != 0) goto <D.19759>; else goto <D.19760>;
          <D.19759>:
          D.19697 = 1;
          return D.19697;
          <D.19760>:
        }
        i = i + 1;
        <D.18137>:
        D.19761 = candidate->interface_count;
        D.19762 = (int) D.19761;
        if (D.19762 > i) goto <D.18136>; else goto <D.18138>;
        <D.18138>:
        candidate = candidate->parent;
        <D.18140>:
        if (candidate != 0B) goto <D.19763>; else goto <D.18141>;
        <D.19763>:
        D.19764 = mono_defaults.object_class;
        if (D.19764 != candidate) goto <D.18139>; else goto <D.18141>;
        <D.18141>:
      }
    finally
      {
        error = {CLOBBER};
      }
  }
  <D.19743>:
  goto <D.19703>;
  <D.19702>:
  D.19765 = BIT_FIELD_REF <*target, 8, 184>;
  D.19766 = D.19765 & 1;
  if (D.19766 != 0) goto <D.19767>; else goto <D.19768>;
  <D.19767>:
  D.19769 = mono_class_is_variant_compatible (target, candidate, 1);
  if (D.19769 != 0) goto <D.19770>; else goto <D.19771>;
  <D.19770>:
  D.19697 = 1;
  return D.19697;
  <D.19771>:
  <D.19768>:
  <D.19703>:
  D.19697 = 0;
  return D.19697;
  <D.19700>:
  D.19772 = mono_class_is_assignable_from (target, candidate);
  if (D.19772 != 0) goto <D.19773>; else goto <D.19774>;
  <D.19773>:
  D.19697 = 1;
  return D.19697;
  <D.19774>:
  D.19704 = target->flags;
  D.19705 = D.19704 & 32;
  if (D.19705 == 0) goto <D.19778>; else goto <D.19775>;
  <D.19778>:
  D.19707 = target->byval_arg.type;
  if (D.19707 != 19) goto <D.19779>; else goto <D.19775>;
  <D.19779>:
  D.19707 = target->byval_arg.type;
  if (D.19707 != 30) goto <D.19776>; else goto <D.19775>;
  <D.19775>:
  D.19780 = target->generic_class;
  if (D.19780 == 0B) goto <D.19776>; else goto <D.19781>;
  <D.19781>:
  D.19719 = candidate->rank;
  if (D.19719 != 1) goto <D.19776>; else goto <D.19777>;
  <D.19776>:
  D.19697 = 0;
  return D.19697;
  <D.19777>:
  D.19780 = target->generic_class;
  iface_gtd = D.19780->container_class;
  D.19723 = mono_defaults.generic_ilist_class;
  if (D.19723 != iface_gtd) goto <D.19782>; else goto <D.19783>;
  <D.19782>:
  D.19784 = get_icollection_class ();
  if (D.19784 != iface_gtd) goto <D.19785>; else goto <D.19786>;
  <D.19785>:
  D.19787 = get_ienumerable_class ();
  if (D.19787 != iface_gtd) goto <D.19788>; else goto <D.19789>;
  <D.19788>:
  D.19697 = 0;
  return D.19697;
  <D.19789>:
  <D.19786>:
  <D.19783>:
  D.19780 = target->generic_class;
  D.19790 = D.19780->context.class_inst;
  D.19791 = D.19790->type_argv[0];
  target = mono_class_from_mono_type (D.19791);
  candidate = candidate->element_class;
  D.19697 = 1;
  return D.19697;
}


get_ireadonlylist_class ()
{
  struct MonoClass * generic_ireadonlylist_class.3;
  struct MonoImage * D.19798;
  struct MonoClass * generic_ireadonlylist_class.4;
  struct MonoClass * D.19800;
  static struct MonoClass * generic_ireadonlylist_class = 0B;

  generic_ireadonlylist_class.3 = generic_ireadonlylist_class;
  if (generic_ireadonlylist_class.3 == 0B) goto <D.19796>; else goto <D.19797>;
  <D.19796>:
  D.19798 = mono_defaults.corlib;
  generic_ireadonlylist_class.4 = mono_class_from_name (D.19798, "System.Collections.Generic", "IReadOnlyList`1");
  generic_ireadonlylist_class = generic_ireadonlylist_class.4;
  <D.19797>:
  D.19800 = generic_ireadonlylist_class;
  return D.19800;
}


get_ireadonlycollection_class ()
{
  struct MonoClass * generic_ireadonlycollection_class.5;
  struct MonoImage * D.19805;
  struct MonoClass * generic_ireadonlycollection_class.6;
  struct MonoClass * D.19807;
  static struct MonoClass * generic_ireadonlycollection_class = 0B;

  generic_ireadonlycollection_class.5 = generic_ireadonlycollection_class;
  if (generic_ireadonlycollection_class.5 == 0B) goto <D.19803>; else goto <D.19804>;
  <D.19803>:
  D.19805 = mono_defaults.corlib;
  generic_ireadonlycollection_class.6 = mono_class_from_name (D.19805, "System.Collections.Generic", "IReadOnlyCollection`1");
  generic_ireadonlycollection_class = generic_ireadonlycollection_class.6;
  <D.19804>:
  D.19807 = generic_ireadonlycollection_class;
  return D.19807;
}


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

  tmp = inflate_class_one_arg (gtd, arg);
  if (tmp == 0B) goto <D.19809>; else goto <D.19810>;
  <D.19809>:
  D.19811 = 0;
  return D.19811;
  <D.19810>:
  D.19812 = mono_class_is_variant_compatible (target, tmp, 1);
  if (D.19812 != 0) goto <D.19813>; else goto <D.19814>;
  <D.19813>:
  D.19811 = 1;
  return D.19811;
  <D.19814>:
  D.19811 = 0;
  return D.19811;
}


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

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


get_icollection_class ()
{
  struct MonoClass * generic_icollection_class.7;
  struct MonoImage * D.19823;
  struct MonoClass * generic_icollection_class.8;
  struct MonoClass * D.19825;
  static struct MonoClass * generic_icollection_class = 0B;

  generic_icollection_class.7 = generic_icollection_class;
  if (generic_icollection_class.7 == 0B) goto <D.19821>; else goto <D.19822>;
  <D.19821>:
  D.19823 = mono_defaults.corlib;
  generic_icollection_class.8 = mono_class_from_name (D.19823, "System.Collections.Generic", "ICollection`1");
  generic_icollection_class = generic_icollection_class.8;
  <D.19822>:
  D.19825 = generic_icollection_class;
  return D.19825;
}


get_ienumerable_class ()
{
  struct MonoClass * generic_ienumerable_class.9;
  struct MonoImage * D.19830;
  struct MonoClass * generic_ienumerable_class.10;
  struct MonoClass * D.19832;
  static struct MonoClass * generic_ienumerable_class = 0B;

  generic_ienumerable_class.9 = generic_ienumerable_class;
  if (generic_ienumerable_class.9 == 0B) goto <D.19828>; else goto <D.19829>;
  <D.19828>:
  D.19830 = mono_defaults.corlib;
  generic_ienumerable_class.10 = mono_class_from_name (D.19830, "System.Collections.Generic", "IEnumerable`1");
  generic_ienumerable_class = generic_ienumerable_class.10;
  <D.19829>:
  D.19832 = generic_ienumerable_class;
  return D.19832;
}


is_array_type_compatible (struct MonoType * target, struct MonoType * candidate)
{
  unsigned char D.19834;
  _Bool D.19835;
  long int D.19836;
  long int D.19837;
  unsigned char D.19840;
  _Bool D.19841;
  long int D.19842;
  long int D.19843;
  unsigned char D.19846;
  unsigned char D.19847;
  gboolean D.19850;
  struct MonoClass * D.19851;
  struct MonoClass * D.19852;
  struct MonoArrayType * left;
  struct MonoArrayType * right;

  left = target->data.array;
  right = candidate->data.array;
  D.19834 = target->type;
  D.19835 = D.19834 != 20;
  D.19836 = (long int) D.19835;
  D.19837 = __builtin_expect (D.19836, 0);
  if (D.19837 != 0) goto <D.19838>; else goto <D.19839>;
  <D.19838>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1880, "target->type == MONO_TYPE_ARRAY");
  <D.19839>:
  D.19840 = candidate->type;
  D.19841 = D.19840 != 20;
  D.19842 = (long int) D.19841;
  D.19843 = __builtin_expect (D.19842, 0);
  if (D.19843 != 0) goto <D.19844>; else goto <D.19845>;
  <D.19844>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1881, "candidate->type == MONO_TYPE_ARRAY");
  <D.19845>:
  D.19846 = left->rank;
  D.19847 = right->rank;
  if (D.19846 != D.19847) goto <D.19848>; else goto <D.19849>;
  <D.19848>:
  D.19850 = 0;
  return D.19850;
  <D.19849>:
  D.19851 = right->eklass;
  D.19852 = left->eklass;
  D.19850 = verifier_class_is_assignable_from (D.19852, D.19851);
  return D.19850;
}


mono_delegate_ret_equal (struct MonoType * delegate, struct MonoType * method)
{
  int D.19854;
  gboolean D.19857;

  D.19854 = mono_metadata_type_equal_full (delegate, method, 1);
  if (D.19854 != 0) goto <D.19855>; else goto <D.19856>;
  <D.19855>:
  D.19857 = 1;
  return D.19857;
  <D.19856>:
  D.19857 = mono_delegate_type_equal (delegate, method);
  return D.19857;
}


mono_method_verify (struct MonoMethod * method, int level)
{
  short unsigned int D.19861;
  int D.19862;
  int D.19863;
  short unsigned int D.19865;
  int D.19866;
  int D.19867;
  struct GSList * D.19868;
  struct MonoMethodSignature * D.19869;
  struct MonoMethodSignature * D.19870;
  gchar * D.19873;
  struct GSList * D.19874;
  struct GSList * D.19875;
  unsigned char D.19876;
  unsigned char D.19877;
  struct MonoClass * D.19880;
  unsigned char D.19881;
  unsigned char D.19882;
  unsigned char D.19885;
  unsigned char D.19886;
  gchar * D.19889;
  struct GSList * D.19890;
  struct MonoMethodHeader * D.19891;
  struct MonoMethodHeader * D.19892;
  gchar * D.19895;
  struct GSList * D.19896;
  unsigned int D.19897;
  short unsigned int D.19898;
  int D.19899;
  <unnamed-unsigned:1> D.19900;
  int D.19901;
  int D.19902;
  <unnamed-unsigned:15> D.19903;
  int D.19904;
  int D.19905;
  unsigned int D.19906;
  void * D.19907;
  int D.19908;
  struct ILCodeDesc * D.19909;
  short unsigned int D.19910;
  int D.19911;
  unsigned int D.19912;
  unsigned int D.19913;
  struct MonoType *[0:] * D.19914;
  void * D.19915;
  int D.19916;
  unsigned char D.19919;
  unsigned char D.19920;
  int D.19925;
  int D.19927;
  int D.19928;
  gchar * D.19929;
  struct GSList * D.19930;
  int D.19931;
  int D.19934;
  unsigned int D.19935;
  unsigned int D.19936;
  void * D.19937;
  unsigned char D.19938;
  unsigned char D.19939;
  struct MonoType * * D.19942;
  struct MonoType * iftmp.11;
  unsigned char D.19944;
  unsigned char D.19945;
  unsigned int D.19949;
  unsigned int D.19950;
  struct MonoType *[0:] * D.19951;
  unsigned int D.19952;
  unsigned int D.19953;
  struct MonoType * * D.19954;
  unsigned char D.19955;
  struct MonoGenericContainer * D.19962;
  struct MonoGenericContainer * D.19966;
  struct MonoType * * D.19968;
  unsigned int i.12;
  unsigned int D.19970;
  struct MonoType * * D.19971;
  struct MonoGenericContext * D.19972;
  struct MonoType * D.19973;
  struct MonoType * D.19974;
  int D.19975;
  struct MonoType * iftmp.13;
  gchar * D.19982;
  struct GSList * D.19983;
  struct MonoType * * D.19984;
  struct MonoType * D.19985;
  struct MonoType * D.19986;
  int D.19987;
  struct MonoType * iftmp.14;
  gchar * D.19994;
  struct GSList * D.19995;
  int D.19996;
  int D.19998;
  gchar * D.20001;
  struct GSList * D.20002;
  int D.20003;
  int D.20005;
  gchar * D.20008;
  struct GSList * D.20009;
  struct MonoExceptionClause * D.20011;
  unsigned int D.20012;
  unsigned int D.20015;
  int D.20016;
  unsigned int D.20017;
  unsigned int D.20019;
  unsigned int D.20020;
  unsigned int D.20022;
  gchar * D.20023;
  struct GSList * D.20024;
  gchar * D.20027;
  struct GSList * D.20028;
  unsigned int D.20031;
  unsigned int D.20033;
  unsigned int D.20034;
  unsigned int D.20036;
  gchar * D.20037;
  struct GSList * D.20038;
  gchar * D.20041;
  struct GSList * D.20042;
  uint32_t iftmp.15;
  unsigned int D.20048;
  gchar * D.20053;
  struct GSList * D.20054;
  unsigned int D.20057;
  gchar * D.20060;
  struct GSList * D.20061;
  gchar * D.20064;
  struct GSList * D.20065;
  unsigned int n.16;
  unsigned int D.20067;
  struct MonoExceptionClause * D.20068;
  <unnamed-unsigned:15> D.20069;
  int D.20070;
  unsigned int D.20073;
  struct ILCodeDesc * D.20074;
  short unsigned int D.20075;
  short unsigned int D.20076;
  unsigned int D.20079;
  struct ILCodeDesc * D.20080;
  short unsigned int D.20081;
  short unsigned int D.20082;
  unsigned int D.20085;
  struct ILCodeDesc * D.20086;
  short unsigned int D.20087;
  short unsigned int D.20088;
  struct MonoClass * D.20091;
  gchar * D.20094;
  struct GSList * D.20095;
  struct MonoType * D.20096;
  int D.20097;
  unsigned int D.20099;
  struct ILCodeDesc * D.20100;
  struct MonoClass * D.20104;
  unsigned int D.20105;
  struct ILCodeDesc * D.20106;
  int D.20109;
  const char * D.20112;
  gchar * D.20113;
  struct GSList * D.20114;
  _Bool D.20115;
  long int D.20116;
  long int D.20117;
  int ip.17;
  int code_start.18;
  int D.20122;
  int D.20123;
  unsigned int D.20124;
  gchar * D.20127;
  struct GSList * D.20128;
  unsigned char D.20133;
  int D.20134;
  gchar * D.20135;
  struct GSList * D.20136;
  unsigned int op_size.19;
  unsigned int D.20140;
  unsigned int op_size.20;
  unsigned int D.20143;
  gchar * D.20144;
  struct GSList * D.20145;
  int op.21;
  int D.20149;
  const char * D.20152;
  gchar * D.20153;
  struct GSList * D.20154;
  unsigned int D.20155;
  unsigned int D.20156;
  unsigned int D.20157;
  gchar * D.20165;
  struct GSList * D.20166;
  unsigned int D.20169;
  unsigned int D.20170;
  unsigned int D.20171;
  unsigned int D.20176;
  gchar * D.20179;
  struct GSList * D.20180;
  gchar * D.20185;
  struct GSList * D.20186;
  gchar * D.20195;
  struct GSList * D.20196;
  gchar * D.20204;
  struct GSList * D.20205;
  short unsigned int D.20210;
  gchar * D.20215;
  struct GSList * D.20216;
  unsigned char D.20218;
  unsigned char D.20219;
  unsigned int D.20222;
  struct ILCodeDesc * D.20223;
  short unsigned int D.20224;
  short unsigned int D.20225;
  sizetype op_size.22;
  int D.20230;
  unsigned int D.20231;
  unsigned int D.20232;
  struct ILCodeDesc * D.20233;
  int D.20234;
  unsigned int D.20235;
  const unsigned char * D.20238;
  unsigned int ip.23;
  unsigned int D.20241;
  gchar * D.20242;
  struct GSList * D.20243;
  _Bool D.20244;
  int D.20245;
  const unsigned char * D.20246;
  unsigned char D.20247;
  unsigned int D.20248;
  unsigned int D.20249;
  int D.20250;
  int D.20252;
  unsigned int D.20253;
  int D.20254;
  unsigned int D.20255;
  gchar * D.20259;
  struct GSList * D.20260;
  unsigned int D.20261;
  gchar * D.20265;
  struct GSList * D.20266;
  int D.20267;
  struct MonoClass * D.20270;
  struct MonoType * D.20271;
  gchar * D.20275;
  struct GSList * D.20276;
  int D.20277;
  const unsigned char * D.20282;
  gchar * D.20284;
  struct GSList * D.20285;
  int D.20286;
  const unsigned char * D.20291;
  gchar * D.20293;
  struct GSList * D.20294;
  int D.20295;
  struct MonoClass * D.20298;
  struct MonoType * D.20299;
  gchar * D.20303;
  struct GSList * D.20304;
  int D.20305;
  struct MonoClass * D.20308;
  struct MonoType * D.20309;
  gchar * D.20313;
  struct GSList * D.20314;
  int D.20315;
  int D.20318;
  struct MonoClass * D.20321;
  struct MonoType * D.20322;
  gchar * D.20326;
  struct GSList * D.20327;
  signed char D.20328;
  int D.20329;
  int D.20330;
  gchar * D.20334;
  struct GSList * D.20335;
  gchar * D.20339;
  struct GSList * D.20340;
  const guint32 * D.20341;
  unsigned int D.20342;
  int D.20343;
  int D.20344;
  gchar * D.20348;
  struct GSList * D.20349;
  gchar * D.20353;
  struct GSList * D.20354;
  _Bool D.20355;
  int D.20356;
  gchar * D.20357;
  struct GSList * D.20358;
  int D.20359;
  int D.20361;
  struct ILStackDesc * D.20363;
  gchar * D.20367;
  struct GSList * D.20368;
  gchar * D.20371;
  struct GSList * D.20372;
  int D.20373;
  gchar * D.20376;
  struct GSList * D.20377;
  gchar * D.20381;
  struct GSList * D.20382;
  gchar * D.20388;
  struct GSList * D.20389;
  _Bool D.20390;
  int D.20391;
  gchar * D.20395;
  struct GSList * D.20396;
  gchar * D.20400;
  struct GSList * D.20401;
  gchar * D.20407;
  struct GSList * D.20408;
  gchar * D.20412;
  struct GSList * D.20413;
  gchar * D.20417;
  struct GSList * D.20418;
  gchar * D.20422;
  struct GSList * D.20423;
  gchar * D.20427;
  struct GSList * D.20428;
  gchar * D.20431;
  struct GSList * D.20432;
  unsigned int D.20435;
  const unsigned char * D.20436;
  unsigned int D.20438;
  gchar * D.20439;
  struct GSList * D.20440;
  int entries.24;
  gchar * D.20445;
  struct GSList * D.20446;
  gchar * D.20450;
  struct GSList * D.20451;
  gchar * D.20455;
  struct GSList * D.20456;
  gchar * D.20460;
  struct GSList * D.20461;
  gchar * D.20465;
  struct GSList * D.20466;
  const char * iftmp.25;
  gchar * D.20471;
  struct GSList * D.20472;
  gchar * D.20476;
  struct GSList * D.20477;
  gchar * D.20481;
  struct GSList * D.20482;
  _Bool D.20483;
  int D.20484;
  gchar * D.20488;
  struct GSList * D.20489;
  _Bool D.20490;
  int D.20491;
  gchar * D.20495;
  struct GSList * D.20496;
  gchar * D.20500;
  struct GSList * D.20501;
  gchar * D.20505;
  struct GSList * D.20506;
  gchar * D.20510;
  struct GSList * D.20511;
  gchar * D.20515;
  struct GSList * D.20516;
  gchar * D.20520;
  struct GSList * D.20521;
  gchar * D.20525;
  struct GSList * D.20526;
  gchar * D.20530;
  struct GSList * D.20531;
  gchar * D.20535;
  struct GSList * D.20536;
  gchar * D.20540;
  struct GSList * D.20541;
  gchar * D.20545;
  struct GSList * D.20546;
  gchar * D.20550;
  struct GSList * D.20551;
  int D.20552;
  gchar * D.20555;
  struct GSList * D.20556;
  gchar * D.20560;
  struct GSList * D.20561;
  unsigned int D.20562;
  int D.20563;
  gchar * D.20567;
  struct GSList * D.20568;
  gchar * D.20572;
  struct GSList * D.20573;
  const unsigned char * D.20576;
  gchar * D.20578;
  struct GSList * D.20579;
  const guint16 * D.20580;
  short unsigned int D.20581;
  unsigned int D.20582;
  unsigned int D.20583;
  gchar * D.20587;
  struct GSList * D.20588;
  int D.20589;
  unsigned char D.20591;
  gchar * D.20594;
  struct GSList * D.20595;
  struct MonoClass * D.20596;
  struct MonoType * D.20597;
  struct ILStackDesc * D.20598;
  gchar * D.20602;
  struct GSList * D.20603;
  gchar * D.20607;
  struct GSList * D.20608;
  gchar * D.20612;
  struct GSList * D.20613;
  _Bool D.20614;
  int D.20615;
  unsigned int D.20616;
  gchar * D.20620;
  struct GSList * D.20621;
  _Bool D.20622;
  int D.20623;
  gchar * D.20624;
  struct GSList * D.20625;
  gchar * D.20629;
  struct GSList * D.20630;
  unsigned char D.20633;
  _Bool D.20634;
  _Bool D.20635;
  _Bool D.20636;
  gchar * D.20639;
  struct GSList * D.20640;
  gchar * D.20644;
  struct GSList * D.20645;
  gchar * D.20649;
  struct GSList * D.20650;
  struct MonoType * D.20651;
  unsigned int D.20652;
  unsigned int D.20653;
  int D.20654;
  gchar * D.20659;
  struct GSList * D.20660;
  int D.20663;
  gchar * D.20668;
  struct GSList * D.20669;
  int D.20672;
  gchar * D.20675;
  struct GSList * D.20676;
  gchar * D.20680;
  struct GSList * D.20681;
  gchar * D.20682;
  struct GSList * D.20683;
  gchar * D.20684;
  struct GSList * D.20685;
  unsigned int D.20690;
  struct ILCodeDesc * D.20691;
  short unsigned int D.20692;
  short unsigned int D.20693;
  unsigned int D.20694;
  int D.20696;
  unsigned int D.20699;
  gchar * D.20702;
  struct GSList * D.20703;
  unsigned int D.20704;
  gchar * D.20707;
  struct GSList * D.20708;
  unsigned int D.20709;
  gchar * D.20712;
  struct GSList * D.20713;
  unsigned int D.20714;
  gchar * D.20717;
  struct GSList * D.20718;
  _Bool D.20720;
  _Bool D.20721;
  _Bool D.20722;
  gchar * D.20729;
  struct GSList * D.20730;
  unsigned int D.20731;
  struct ILCodeDesc * D.20732;
  short unsigned int D.20733;
  int D.20734;
  int D.20735;
  int D.20738;
  gchar * D.20741;
  struct GSList * D.20742;
  int D.20743;
  gchar * D.20749;
  struct GSList * D.20750;
  int D.20753;
  int D.20756;
  gchar * D.20762;
  struct GSList * D.20763;
  int D.20766;
  gchar * D.20774;
  struct GSList * D.20775;
  unsigned int i.26;
  struct MonoMethod * D.20780;
  int D.20781;
  int D.20784;
  struct MonoClass * D.20787;
  unsigned char D.20788;
  unsigned char D.20789;
  struct MonoClass * D.20796;
  unsigned char D.20798;
  gchar * D.20803;
  struct GSList * D.20804;
  gchar * D.20810;
  struct GSList * D.20811;
  struct ILStackDesc * D.20816;
  unsigned int i.27;
  void * D.20820;
  struct GSList * D.20821;
  struct GSList * D.20822;
  struct ILStackDesc * D.20827;
  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.19861 = method->iflags;
      D.19862 = (int) D.19861;
      D.19863 = D.19862 & 4099;
      if (D.19863 != 0) goto <D.19859>; else goto <D.19864>;
      <D.19864>:
      D.19865 = method->flags;
      D.19866 = (int) D.19865;
      D.19867 = D.19866 & 9216;
      if (D.19867 != 0) goto <D.19859>; else goto <D.19860>;
      <D.19859>:
      D.19868 = 0B;
      return D.19868;
      <D.19860>:
      memset (&ctx, 0, 112);
      D.19869 = mono_method_signature (method);
      ctx.signature = D.19869;
      D.19870 = ctx.signature;
      if (D.19870 == 0B) goto <D.19871>; else goto <D.19872>;
      <D.19871>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.19873 = monoeg_g_strdup_printf ("Could not decode method signature");
        vinfo->info.message = D.19873;
        vinfo->exception_type = 3;
        D.19874 = ctx.list;
        D.19875 = monoeg_g_slist_prepend (D.19874, vinfo);
        ctx.list = D.19875;
      }
      ctx.valid = 0;
      D.19868 = ctx.list;
      return D.19868;
      <D.19872>:
      D.19876 = BIT_FIELD_REF <*method, 8, 168>;
      D.19877 = D.19876 & 8;
      if (D.19877 == 0) goto <D.19878>; else goto <D.19879>;
      <D.19878>:
      D.19880 = method->klass;
      D.19881 = BIT_FIELD_REF <*D.19880, 8, 192>;
      D.19882 = D.19881 & 4;
      if (D.19882 == 0) goto <D.19883>; else goto <D.19884>;
      <D.19883>:
      D.19870 = ctx.signature;
      D.19885 = BIT_FIELD_REF <*D.19870, 8, 88>;
      D.19886 = D.19885 & 4;
      if (D.19886 != 0) goto <D.19887>; else goto <D.19888>;
      <D.19887>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.19889 = monoeg_g_strdup_printf ("Method and signature don\'t match in terms of genericity");
        vinfo->info.message = D.19889;
        vinfo->exception_type = 3;
        D.19874 = ctx.list;
        D.19890 = monoeg_g_slist_prepend (D.19874, vinfo);
        ctx.list = D.19890;
      }
      ctx.valid = 0;
      D.19868 = ctx.list;
      return D.19868;
      <D.19888>:
      <D.19884>:
      <D.19879>:
      D.19891 = mono_method_get_header (method);
      ctx.header = D.19891;
      D.19892 = ctx.header;
      if (D.19892 == 0B) goto <D.19893>; else goto <D.19894>;
      <D.19893>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.19895 = monoeg_g_strdup_printf ("Could not decode method header");
        vinfo->info.message = D.19895;
        vinfo->exception_type = 3;
        D.19874 = ctx.list;
        D.19896 = monoeg_g_slist_prepend (D.19874, vinfo);
        ctx.list = D.19896;
      }
      ctx.valid = 0;
      D.19868 = ctx.list;
      return D.19868;
      <D.19894>:
      ctx.method = method;
      D.19892 = ctx.header;
      ip = D.19892->code;
      code_start = ip;
      D.19892 = ctx.header;
      D.19897 = D.19892->code_size;
      end = ip + D.19897;
      D.19880 = method->klass;
      image = D.19880->image;
      ctx.image = image;
      D.19870 = ctx.signature;
      D.19898 = D.19870->param_count;
      D.19899 = (int) D.19898;
      D.19870 = ctx.signature;
      D.19900 = D.19870->hasthis;
      D.19901 = (int) D.19900;
      D.19902 = D.19899 + D.19901;
      ctx.max_args = D.19902;
      D.19892 = ctx.header;
      D.19903 = D.19892->max_stack;
      D.19904 = (int) D.19903;
      ctx.max_stack = D.19904;
      ctx.valid = 1;
      D.19905 = ctx.valid;
      ctx.verifiable = D.19905;
      ctx.level = level;
      D.19892 = ctx.header;
      D.19897 = D.19892->code_size;
      D.19906 = D.19897 * 12;
      D.19907 = monoeg_malloc (D.19906);
      ctx.code = D.19907;
      D.19892 = ctx.header;
      D.19897 = D.19892->code_size;
      D.19908 = (int) D.19897;
      ctx.code_size = D.19908;
      D.19892 = ctx.header;
      D.19897 = D.19892->code_size;
      D.19906 = D.19897 * 12;
      D.19909 = ctx.code;
      memset (D.19909, 0, D.19906);
      D.19892 = ctx.header;
      D.19910 = D.19892->num_locals;
      D.19911 = (int) D.19910;
      ctx.num_locals = D.19911;
      D.19892 = ctx.header;
      D.19910 = D.19892->num_locals;
      D.19912 = (unsigned int) D.19910;
      D.19913 = D.19912 * 4;
      D.19892 = ctx.header;
      D.19914 = &D.19892->locals;
      D.19915 = monoeg_g_memdup (D.19914, D.19913);
      ctx.locals = D.19915;
      D.19916 = ctx.num_locals;
      if (D.19916 > 0) goto <D.19917>; else goto <D.19918>;
      <D.19917>:
      D.19892 = ctx.header;
      D.19919 = BIT_FIELD_REF <*D.19892, 8, 88>;
      D.19920 = D.19919 & 128;
      if (D.19920 == 0) goto <D.19921>; else goto <D.19922>;
      <D.19921>:
      D.19925 = ctx.verifiable;
      if (D.19925 != 0) goto <D.19923>; else goto <D.19926>;
      <D.19926>:
      D.19927 = ctx.level;
      D.19928 = D.19927 & 128;
      if (D.19928 != 0) goto <D.19923>; else goto <D.19924>;
      <D.19923>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.19929 = monoeg_g_strdup_printf ("Method with locals variable but without init locals set");
        vinfo->info.message = D.19929;
        vinfo->exception_type = 4;
        D.19874 = ctx.list;
        D.19930 = monoeg_g_slist_prepend (D.19874, vinfo);
        ctx.list = D.19930;
      }
      ctx.verifiable = 0;
      D.19927 = ctx.level;
      D.19931 = D.19927 & 16;
      if (D.19931 != 0) goto <D.19932>; else goto <D.19933>;
      <D.19932>:
      ctx.valid = 0;
      <D.19933>:
      <D.19924>:
      <D.19922>:
      <D.19918>:
      D.19934 = ctx.max_args;
      D.19935 = (unsigned int) D.19934;
      D.19936 = D.19935 * 4;
      D.19937 = monoeg_malloc (D.19936);
      ctx.params = D.19937;
      D.19870 = ctx.signature;
      D.19938 = BIT_FIELD_REF <*D.19870, 8, 80>;
      D.19939 = D.19938 & 64;
      if (D.19939 != 0) goto <D.19940>; else goto <D.19941>;
      <D.19940>:
      D.19942 = ctx.params;
      D.19880 = method->klass;
      D.19944 = BIT_FIELD_REF <*D.19880, 8, 160>;
      D.19945 = D.19944 & 8;
      if (D.19945 != 0) goto <D.19946>; else goto <D.19947>;
      <D.19946>:
      D.19880 = method->klass;
      iftmp.11 = &D.19880->this_arg;
      goto <D.19948>;
      <D.19947>:
      D.19880 = method->klass;
      iftmp.11 = &D.19880->byval_arg;
      <D.19948>:
      *D.19942 = iftmp.11;
      <D.19941>:
      D.19870 = ctx.signature;
      D.19898 = D.19870->param_count;
      D.19949 = (unsigned int) D.19898;
      D.19950 = D.19949 * 4;
      D.19870 = ctx.signature;
      D.19951 = &D.19870->params;
      D.19942 = ctx.params;
      D.19870 = ctx.signature;
      D.19900 = D.19870->hasthis;
      D.19952 = (unsigned int) D.19900;
      D.19953 = D.19952 * 4;
      D.19954 = D.19942 + D.19953;
      memcpy (D.19954, D.19951, D.19950);
      D.19870 = ctx.signature;
      D.19885 = BIT_FIELD_REF <*D.19870, 8, 88>;
      D.19955 = D.19885 & 2;
      if (D.19955 != 0) goto <D.19956>; else goto <D.19957>;
      <D.19956>:
      generic_context = mono_method_get_context (method);
      ctx.generic_context = generic_context;
      <D.19957>:
      if (generic_context == 0B) goto <D.19960>; else goto <D.19961>;
      <D.19960>:
      D.19880 = method->klass;
      D.19962 = D.19880->generic_container;
      if (D.19962 != 0B) goto <D.19958>; else goto <D.19963>;
      <D.19963>:
      D.19876 = BIT_FIELD_REF <*method, 8, 168>;
      D.19877 = D.19876 & 8;
      if (D.19877 != 0) goto <D.19958>; else goto <D.19959>;
      <D.19958>:
      D.19876 = BIT_FIELD_REF <*method, 8, 168>;
      D.19877 = D.19876 & 8;
      if (D.19877 != 0) goto <D.19964>; else goto <D.19965>;
      <D.19964>:
      D.19966 = mono_method_get_generic_container (method);
      generic_context = &D.19966->context;
      ctx.generic_context = generic_context;
      goto <D.19967>;
      <D.19965>:
      D.19880 = method->klass;
      D.19962 = D.19880->generic_container;
      generic_context = &D.19962->context;
      ctx.generic_context = generic_context;
      <D.19967>:
      <D.19959>:
      <D.19961>:
      i = 0;
      goto <D.19067>;
      <D.19066>:
      {
        struct MonoType * uninflated;

        D.19968 = ctx.locals;
        i.12 = (unsigned int) i;
        D.19970 = i.12 * 4;
        D.19971 = D.19968 + D.19970;
        uninflated = *D.19971;
        D.19968 = ctx.locals;
        i.12 = (unsigned int) i;
        D.19970 = i.12 * 4;
        D.19971 = D.19968 + D.19970;
        D.19972 = ctx.generic_context;
        D.19968 = ctx.locals;
        i.12 = (unsigned int) i;
        D.19970 = i.12 * 4;
        D.19971 = D.19968 + D.19970;
        D.19973 = *D.19971;
        D.19974 = mono_class_inflate_generic_type_checked (D.19973, D.19972, &error);
        *D.19971 = D.19974;
        D.19975 = mono_error_ok (&error);
        if (D.19975 == 0) goto <D.19976>; else goto <D.19977>;
        <D.19976>:
        {
          char * name;

          D.19968 = ctx.locals;
          i.12 = (unsigned int) i;
          D.19970 = i.12 * 4;
          D.19971 = D.19968 + D.19970;
          D.19973 = *D.19971;
          if (D.19973 != 0B) goto <D.19979>; else goto <D.19980>;
          <D.19979>:
          D.19968 = ctx.locals;
          i.12 = (unsigned int) i;
          D.19970 = i.12 * 4;
          D.19971 = D.19968 + D.19970;
          iftmp.13 = *D.19971;
          goto <D.19981>;
          <D.19980>:
          iftmp.13 = uninflated;
          <D.19981>:
          name = mono_type_full_name (iftmp.13);
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 1;
            D.19982 = monoeg_g_strdup_printf ("Invalid local %d of type %s", i, name);
            vinfo->info.message = D.19982;
            vinfo->exception_type = 3;
            D.19874 = ctx.list;
            D.19983 = monoeg_g_slist_prepend (D.19874, vinfo);
            ctx.list = D.19983;
          }
          ctx.valid = 0;
          monoeg_g_free (name);
          mono_error_cleanup (&error);
          ctx.num_locals = i;
          ctx.max_args = 0;
          goto cleanup;
        }
        <D.19977>:
      }
      i = i + 1;
      <D.19067>:
      D.19916 = ctx.num_locals;
      if (D.19916 > i) goto <D.19066>; else goto <D.19068>;
      <D.19068>:
      i = 0;
      goto <D.19073>;
      <D.19072>:
      {
        struct MonoType * uninflated;

        D.19942 = ctx.params;
        i.12 = (unsigned int) i;
        D.19970 = i.12 * 4;
        D.19984 = D.19942 + D.19970;
        uninflated = *D.19984;
        D.19942 = ctx.params;
        i.12 = (unsigned int) i;
        D.19970 = i.12 * 4;
        D.19984 = D.19942 + D.19970;
        D.19972 = ctx.generic_context;
        D.19942 = ctx.params;
        i.12 = (unsigned int) i;
        D.19970 = i.12 * 4;
        D.19984 = D.19942 + D.19970;
        D.19985 = *D.19984;
        D.19986 = mono_class_inflate_generic_type_checked (D.19985, D.19972, &error);
        *D.19984 = D.19986;
        D.19987 = mono_error_ok (&error);
        if (D.19987 == 0) goto <D.19988>; else goto <D.19989>;
        <D.19988>:
        {
          char * name;

          D.19942 = ctx.params;
          i.12 = (unsigned int) i;
          D.19970 = i.12 * 4;
          D.19984 = D.19942 + D.19970;
          D.19985 = *D.19984;
          if (D.19985 != 0B) goto <D.19991>; else goto <D.19992>;
          <D.19991>:
          D.19942 = ctx.params;
          i.12 = (unsigned int) i;
          D.19970 = i.12 * 4;
          D.19984 = D.19942 + D.19970;
          iftmp.14 = *D.19984;
          goto <D.19993>;
          <D.19992>:
          iftmp.14 = uninflated;
          <D.19993>:
          name = mono_type_full_name (iftmp.14);
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 1;
            D.19994 = monoeg_g_strdup_printf ("Invalid parameter %d of type %s", i, name);
            vinfo->info.message = D.19994;
            vinfo->exception_type = 3;
            D.19874 = ctx.list;
            D.19995 = monoeg_g_slist_prepend (D.19874, vinfo);
            ctx.list = D.19995;
          }
          ctx.valid = 0;
          monoeg_g_free (name);
          mono_error_cleanup (&error);
          ctx.max_args = i;
          goto cleanup;
        }
        <D.19989>:
      }
      i = i + 1;
      <D.19073>:
      D.19934 = ctx.max_args;
      if (D.19934 > i) goto <D.19072>; else goto <D.19074>;
      <D.19074>:
      stack_init (&ctx, &ctx.eval);
      i = 0;
      goto <D.19079>;
      <D.19078>:
      D.19968 = ctx.locals;
      i.12 = (unsigned int) i;
      D.19970 = i.12 * 4;
      D.19971 = D.19968 + D.19970;
      D.19973 = *D.19971;
      D.19996 = mono_type_is_valid_in_context (&ctx, D.19973);
      if (D.19996 == 0) goto <D.19075>; else goto <D.19997>;
      <D.19997>:
      D.19968 = ctx.locals;
      i.12 = (unsigned int) i;
      D.19970 = i.12 * 4;
      D.19971 = D.19968 + D.19970;
      D.19973 = *D.19971;
      D.19998 = get_stack_type (D.19973);
      if (D.19998 == 0) goto <D.19999>; else goto <D.20000>;
      <D.19999>:
      {
        char * name;

        D.19968 = ctx.locals;
        i.12 = (unsigned int) i;
        D.19970 = i.12 * 4;
        D.19971 = D.19968 + D.19970;
        D.19973 = *D.19971;
        name = mono_type_full_name (D.19973);
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20001 = monoeg_g_strdup_printf ("Invalid local %i of type %s", i, name);
          vinfo->info.message = D.20001;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20002 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20002;
        }
        ctx.valid = 0;
        monoeg_g_free (name);
        goto <D.19075>;
      }
      <D.20000>:
      i = i + 1;
      <D.19079>:
      D.19916 = ctx.num_locals;
      if (D.19916 > i) goto <D.19078>; else goto <D.19075>;
      <D.19075>:
      i = 0;
      goto <D.19084>;
      <D.19083>:
      D.19942 = ctx.params;
      i.12 = (unsigned int) i;
      D.19970 = i.12 * 4;
      D.19984 = D.19942 + D.19970;
      D.19985 = *D.19984;
      D.20003 = mono_type_is_valid_in_context (&ctx, D.19985);
      if (D.20003 == 0) goto <D.19080>; else goto <D.20004>;
      <D.20004>:
      D.19942 = ctx.params;
      i.12 = (unsigned int) i;
      D.19970 = i.12 * 4;
      D.19984 = D.19942 + D.19970;
      D.19985 = *D.19984;
      D.20005 = get_stack_type (D.19985);
      if (D.20005 == 0) goto <D.20006>; else goto <D.20007>;
      <D.20006>:
      {
        char * name;

        D.19942 = ctx.params;
        i.12 = (unsigned int) i;
        D.19970 = i.12 * 4;
        D.19984 = D.19942 + D.19970;
        D.19985 = *D.19984;
        name = mono_type_full_name (D.19985);
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20008 = monoeg_g_strdup_printf ("Invalid parameter %i of type %s", i, name);
          vinfo->info.message = D.20008;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20009 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20009;
        }
        ctx.valid = 0;
        monoeg_g_free (name);
        goto <D.19080>;
      }
      <D.20007>:
      i = i + 1;
      <D.19084>:
      D.19934 = ctx.max_args;
      if (D.19934 > i) goto <D.19083>; else goto <D.19080>;
      <D.19080>:
      D.19905 = ctx.valid;
      if (D.19905 == 0) goto cleanup; else goto <D.20010>;
      <D.20010>:
      i = 0;
      goto <D.19099>;
      <D.19098>:
      {
        struct MonoExceptionClause * clause;

        D.19892 = ctx.header;
        D.20011 = D.19892->clauses;
        i.12 = (unsigned int) i;
        D.20012 = i.12 * 24;
        clause = D.20011 + D.20012;
        D.20015 = clause->try_offset;
        D.20016 = ctx.code_size;
        D.20017 = (unsigned int) D.20016;
        if (D.20015 > D.20017) goto <D.20013>; else goto <D.20018>;
        <D.20018>:
        D.20015 = clause->try_offset;
        D.20019 = clause->try_len;
        D.20020 = D.20015 + D.20019;
        D.20016 = ctx.code_size;
        D.20017 = (unsigned int) D.20016;
        if (D.20020 > D.20017) goto <D.20013>; else goto <D.20021>;
        <D.20021>:
        D.20019 = clause->try_len;
        D.20022 = ~D.20019;
        D.20015 = clause->try_offset;
        if (D.20022 < D.20015) goto <D.20013>; else goto <D.20014>;
        <D.20013>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20015 = clause->try_offset;
          D.20023 = monoeg_g_strdup_printf ("try clause out of bounds at 0x%04x", D.20015);
          vinfo->info.message = D.20023;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20024 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20024;
        }
        ctx.valid = 0;
        <D.20014>:
        D.20019 = clause->try_len;
        if (D.20019 == 0) goto <D.20025>; else goto <D.20026>;
        <D.20025>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20015 = clause->try_offset;
          D.20027 = monoeg_g_strdup_printf ("try clause len <= 0 at 0x%04x", D.20015);
          vinfo->info.message = D.20027;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20028 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20028;
        }
        ctx.valid = 0;
        <D.20026>:
        D.20031 = clause->handler_offset;
        D.20016 = ctx.code_size;
        D.20017 = (unsigned int) D.20016;
        if (D.20031 > D.20017) goto <D.20029>; else goto <D.20032>;
        <D.20032>:
        D.20031 = clause->handler_offset;
        D.20033 = clause->handler_len;
        D.20034 = D.20031 + D.20033;
        D.20016 = ctx.code_size;
        D.20017 = (unsigned int) D.20016;
        if (D.20034 > D.20017) goto <D.20029>; else goto <D.20035>;
        <D.20035>:
        D.20033 = clause->handler_len;
        D.20036 = ~D.20033;
        D.20031 = clause->handler_offset;
        if (D.20036 < D.20031) goto <D.20029>; else goto <D.20030>;
        <D.20029>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20015 = clause->try_offset;
          D.20037 = monoeg_g_strdup_printf ("handler clause out of bounds at 0x%04x", D.20015);
          vinfo->info.message = D.20037;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20038 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20038;
        }
        ctx.valid = 0;
        <D.20030>:
        D.20033 = clause->handler_len;
        if (D.20033 == 0) goto <D.20039>; else goto <D.20040>;
        <D.20039>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20015 = clause->try_offset;
          D.20041 = monoeg_g_strdup_printf ("handler clause len <= 0 at 0x%04x", D.20015);
          vinfo->info.message = D.20041;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20042 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20042;
        }
        ctx.valid = 0;
        <D.20040>:
        D.20015 = clause->try_offset;
        D.20031 = clause->handler_offset;
        if (D.20015 < D.20031) goto <D.20045>; else goto <D.20046>;
        <D.20045>:
        D.20015 = clause->try_offset;
        D.20019 = clause->try_len;
        D.20020 = D.20015 + D.20019;
        D.20048 = clause->flags;
        if (D.20048 == 1) goto <D.20049>; else goto <D.20050>;
        <D.20049>:
        iftmp.15 = clause->data.filter_offset;
        goto <D.20051>;
        <D.20050>:
        iftmp.15 = clause->handler_offset;
        <D.20051>:
        if (D.20020 > iftmp.15) goto <D.20043>; else goto <D.20052>;
        <D.20052>:
        D.20019 = clause->try_len;
        D.20022 = ~D.20019;
        D.20015 = clause->try_offset;
        if (D.20022 < D.20015) goto <D.20043>; else goto <D.20044>;
        <D.20043>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20031 = clause->handler_offset;
          D.20015 = clause->try_offset;
          D.20053 = monoeg_g_strdup_printf ("try block (at 0x%04x) includes handler block (at 0x%04x)", D.20015, D.20031);
          vinfo->info.message = D.20053;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20054 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20054;
        }
        ctx.valid = 0;
        <D.20044>:
        <D.20046>:
        D.20048 = clause->flags;
        if (D.20048 == 1) goto <D.20055>; else goto <D.20056>;
        <D.20055>:
        D.20057 = clause->data.filter_offset;
        D.20016 = ctx.code_size;
        D.20017 = (unsigned int) D.20016;
        if (D.20057 > D.20017) goto <D.20058>; else goto <D.20059>;
        <D.20058>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20015 = clause->try_offset;
          D.20060 = monoeg_g_strdup_printf ("filter clause out of bounds at 0x%04x", D.20015);
          vinfo->info.message = D.20060;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20061 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20061;
        }
        ctx.valid = 0;
        <D.20059>:
        D.20057 = clause->data.filter_offset;
        D.20031 = clause->handler_offset;
        if (D.20057 >= D.20031) goto <D.20062>; else goto <D.20063>;
        <D.20062>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20057 = clause->data.filter_offset;
          D.20064 = monoeg_g_strdup_printf ("filter clause must come before the handler clause at 0x%04x", D.20057);
          vinfo->info.message = D.20064;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20065 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20065;
        }
        ctx.valid = 0;
        <D.20063>:
        <D.20056>:
        n = i + 1;
        goto <D.19094>;
        <D.19093>:
        D.19892 = ctx.header;
        D.20011 = D.19892->clauses;
        n.16 = (unsigned int) n;
        D.20067 = n.16 * 24;
        D.20068 = D.20011 + D.20067;
        verify_clause_relationship (&ctx, clause, D.20068);
        n = n + 1;
        <D.19094>:
        D.19892 = ctx.header;
        D.20069 = D.19892->num_clauses;
        D.20070 = (int) D.20069;
        if (D.20070 > n) goto <D.20071>; else goto <D.19095>;
        <D.20071>:
        D.19905 = ctx.valid;
        if (D.19905 != 0) goto <D.19093>; else goto <D.19095>;
        <D.19095>:
        D.19905 = ctx.valid;
        if (D.19905 == 0) goto <D.19096>; else goto <D.20072>;
        <D.20072>:
        D.19909 = ctx.code;
        D.20015 = clause->try_offset;
        D.20073 = D.20015 * 12;
        D.20074 = D.19909 + D.20073;
        D.19909 = ctx.code;
        D.20015 = clause->try_offset;
        D.20073 = D.20015 * 12;
        D.20074 = D.19909 + D.20073;
        D.20075 = D.20074->flags;
        D.20076 = D.20075 | 2;
        D.20074->flags = D.20076;
        D.20015 = clause->try_offset;
        D.20019 = clause->try_len;
        D.20020 = D.20015 + D.20019;
        D.20016 = ctx.code_size;
        D.20017 = (unsigned int) D.20016;
        if (D.20020 < D.20017) goto <D.20077>; else goto <D.20078>;
        <D.20077>:
        D.19909 = ctx.code;
        D.20015 = clause->try_offset;
        D.20019 = clause->try_len;
        D.20020 = D.20015 + D.20019;
        D.20079 = D.20020 * 12;
        D.20080 = D.19909 + D.20079;
        D.19909 = ctx.code;
        D.20015 = clause->try_offset;
        D.20019 = clause->try_len;
        D.20020 = D.20015 + D.20019;
        D.20079 = D.20020 * 12;
        D.20080 = D.19909 + D.20079;
        D.20081 = D.20080->flags;
        D.20082 = D.20081 | 2;
        D.20080->flags = D.20082;
        <D.20078>:
        D.20031 = clause->handler_offset;
        D.20033 = clause->handler_len;
        D.20034 = D.20031 + D.20033;
        D.20016 = ctx.code_size;
        D.20017 = (unsigned int) D.20016;
        if (D.20034 < D.20017) goto <D.20083>; else goto <D.20084>;
        <D.20083>:
        D.19909 = ctx.code;
        D.20031 = clause->handler_offset;
        D.20033 = clause->handler_len;
        D.20034 = D.20031 + D.20033;
        D.20085 = D.20034 * 12;
        D.20086 = D.19909 + D.20085;
        D.19909 = ctx.code;
        D.20031 = clause->handler_offset;
        D.20033 = clause->handler_len;
        D.20034 = D.20031 + D.20033;
        D.20085 = D.20034 * 12;
        D.20086 = D.19909 + D.20085;
        D.20087 = D.20086->flags;
        D.20088 = D.20087 | 2;
        D.20086->flags = D.20088;
        <D.20084>:
        D.20048 = clause->flags;
        if (D.20048 == 0) goto <D.20089>; else goto <D.20090>;
        <D.20089>:
        D.20091 = clause->data.catch_class;
        if (D.20091 == 0B) goto <D.20092>; else goto <D.20093>;
        <D.20092>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20094 = monoeg_g_strdup_printf ("Catch clause %d with invalid type", i);
          vinfo->info.message = D.20094;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20095 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20095;
        }
        ctx.valid = 0;
        goto <D.19096>;
        <D.20093>:
        D.20091 = clause->data.catch_class;
        D.20096 = &D.20091->byval_arg;
        D.20097 = mono_type_is_valid_in_context (&ctx, D.20096);
        if (D.20097 == 0) goto <D.19096>; else goto <D.20098>;
        <D.20098>:
        D.20091 = clause->data.catch_class;
        D.19909 = ctx.code;
        D.20031 = clause->handler_offset;
        D.20099 = D.20031 * 12;
        D.20100 = D.19909 + D.20099;
        init_stack_with_value_at_exception_boundary (&ctx, D.20100, D.20091);
        goto <D.20101>;
        <D.20090>:
        D.20048 = clause->flags;
        if (D.20048 == 1) goto <D.20102>; else goto <D.20103>;
        <D.20102>:
        D.20104 = mono_defaults.exception_class;
        D.19909 = ctx.code;
        D.20057 = clause->data.filter_offset;
        D.20105 = D.20057 * 12;
        D.20106 = D.19909 + D.20105;
        init_stack_with_value_at_exception_boundary (&ctx, D.20106, D.20104);
        D.20104 = mono_defaults.exception_class;
        D.19909 = ctx.code;
        D.20031 = clause->handler_offset;
        D.20099 = D.20031 * 12;
        D.20100 = D.19909 + D.20099;
        init_stack_with_value_at_exception_boundary (&ctx, D.20100, D.20104);
        <D.20103>:
        <D.20101>:
      }
      i = i + 1;
      <D.19099>:
      D.19892 = ctx.header;
      D.20069 = D.19892->num_clauses;
      D.20070 = (int) D.20069;
      if (D.20070 > i) goto <D.20107>; else goto <D.19096>;
      <D.20107>:
      D.19905 = ctx.valid;
      if (D.19905 != 0) goto <D.19098>; else goto <D.19096>;
      <D.19096>:
      D.19905 = ctx.valid;
      if (D.19905 == 0) goto cleanup; else goto <D.20108>;
      <D.20108>:
      bb = mono_basic_block_split (method, &error);
      original_bb = bb;
      D.20109 = mono_error_ok (&error);
      if (D.20109 == 0) goto <D.20110>; else goto <D.20111>;
      <D.20110>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.20112 = mono_error_get_message (&error);
        D.20113 = monoeg_g_strdup_printf ("Invalid branch target: %s", D.20112);
        vinfo->info.message = D.20113;
        vinfo->exception_type = 3;
        D.19874 = ctx.list;
        D.20114 = monoeg_g_slist_prepend (D.19874, vinfo);
        ctx.list = D.20114;
      }
      ctx.valid = 0;
      mono_error_cleanup (&error);
      goto cleanup;
      <D.20111>:
      D.20115 = bb == 0B;
      D.20116 = (long int) D.20115;
      D.20117 = __builtin_expect (D.20116, 0);
      if (D.20117 != 0) goto <D.20118>; else goto <D.20119>;
      <D.20118>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 5001, "bb");
      <D.20119>:
      goto <D.19118>;
      <D.19428>:
      {
        int op_size;

        ip.17 = (int) ip;
        code_start.18 = (int) code_start;
        D.20122 = ip.17 - code_start.18;
        ip_offset = (guint) D.20122;
        {
          const unsigned char * ip_copy;
          int op;

          try
            {
              ip_copy = ip;
              D.20123 = bb->end;
              D.20124 = (unsigned int) D.20123;
              if (D.20124 < ip_offset) goto <D.20125>; else goto <D.20126>;
              <D.20125>:
              {
                struct MonoVerifyInfoExtended * vinfo;

                vinfo = monoeg_malloc (12);
                vinfo->info.status = 1;
                D.20123 = bb->end;
                D.20127 = monoeg_g_strdup_printf ("Branch or EH block at [0x%04x] targets middle instruction at 0x%04x", D.20123, ip_offset);
                vinfo->info.message = D.20127;
                vinfo->exception_type = 3;
                D.19874 = ctx.list;
                D.20128 = monoeg_g_slist_prepend (D.19874, vinfo);
                ctx.list = D.20128;
              }
              ctx.valid = 0;
              goto cleanup;
              <D.20126>:
              D.20123 = bb->end;
              D.20124 = (unsigned int) D.20123;
              if (D.20124 == ip_offset) goto <D.20129>; else goto <D.20130>;
              <D.20129>:
              bb = bb->next;
              <D.20130>:
              op_size = mono_opcode_value_and_size (&ip_copy, end, &op);
              if (op_size == -1) goto <D.20131>; else goto <D.20132>;
              <D.20131>:
              {
                struct MonoVerifyInfoExtended * vinfo;

                vinfo = monoeg_malloc (12);
                vinfo->info.status = 1;
                D.20133 = *ip;
                D.20134 = (int) D.20133;
                D.20135 = monoeg_g_strdup_printf ("Invalid instruction %x at 0x%04x", D.20134, ip_offset);
                vinfo->info.message = D.20135;
                vinfo->exception_type = 3;
                D.19874 = ctx.list;
                D.20136 = monoeg_g_slist_prepend (D.19874, vinfo);
                ctx.list = D.20136;
              }
              ctx.valid = 0;
              goto cleanup;
              <D.20132>:
              op_size.19 = (unsigned int) op_size;
              D.20140 = ip_offset + op_size.19;
              D.20123 = bb->end;
              D.20124 = (unsigned int) D.20123;
              if (D.20140 > D.20124) goto <D.20137>; else goto <D.20141>;
              <D.20141>:
              op_size.20 = (unsigned int) op_size;
              D.20143 = ~op_size.20;
              if (D.20143 < ip_offset) goto <D.20137>; else goto <D.20138>;
              <D.20137>:
              {
                struct MonoVerifyInfoExtended * vinfo;

                vinfo = monoeg_malloc (12);
                vinfo->info.status = 1;
                D.20144 = monoeg_g_strdup_printf ("Branch or EH block targets middle of instruction at 0x%04x", ip_offset);
                vinfo->info.message = D.20144;
                vinfo->exception_type = 3;
                D.19874 = ctx.list;
                D.20145 = monoeg_g_slist_prepend (D.19874, vinfo);
                ctx.list = D.20145;
              }
              ctx.valid = 0;
              goto cleanup;
              <D.20138>:
              op_size.19 = (unsigned int) op_size;
              D.20140 = ip_offset + op_size.19;
              D.20123 = bb->end;
              D.20124 = (unsigned int) D.20123;
              if (D.20140 == D.20124) goto <D.20146>; else goto <D.20147>;
              <D.20146>:
              op.21 = op;
              D.20149 = mono_opcode_is_prefix (op.21);
              if (D.20149 != 0) goto <D.20150>; else goto <D.20151>;
              <D.20150>:
              {
                struct MonoVerifyInfoExtended * vinfo;

                vinfo = monoeg_malloc (12);
                vinfo->info.status = 1;
                op.21 = op;
                D.20152 = mono_opcode_name (op.21);
                D.20153 = monoeg_g_strdup_printf ("Branch or EH block targets between prefix \'%s\' and instruction at 0x%04x", D.20152, ip_offset);
                vinfo->info.message = D.20153;
                vinfo->exception_type = 3;
                D.19874 = ctx.list;
                D.20154 = monoeg_g_slist_prepend (D.19874, vinfo);
                ctx.list = D.20154;
              }
              ctx.valid = 0;
              goto cleanup;
              <D.20151>:
              <D.20147>:
            }
          finally
            {
              ip_copy = {CLOBBER};
              op = {CLOBBER};
            }
        }
        ip.17 = (int) ip;
        code_start.18 = (int) code_start;
        D.20122 = ip.17 - code_start.18;
        ip_offset = (guint) D.20122;
        ctx.ip_offset = ip_offset;
        i = 0;
        goto <D.19116>;
        <D.19115>:
        {
          struct MonoExceptionClause * clause;

          D.19892 = ctx.header;
          D.20011 = D.19892->clauses;
          i.12 = (unsigned int) i;
          D.20012 = i.12 * 24;
          clause = D.20011 + D.20012;
          D.20155 = clause->try_offset;
          D.20156 = clause->try_len;
          D.20157 = D.20155 + D.20156;
          if (D.20157 == ip_offset) goto <D.20158>; else goto <D.20159>;
          <D.20158>:
          if (start == 0) goto <D.20160>; else goto <D.20161>;
          <D.20160>:
          D.19925 = ctx.verifiable;
          if (D.19925 != 0) goto <D.20162>; else goto <D.20164>;
          <D.20164>:
          D.19927 = ctx.level;
          D.19928 = D.19927 & 128;
          if (D.19928 != 0) goto <D.20162>; else goto <D.20163>;
          <D.20162>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 8;
            D.20165 = monoeg_g_strdup_printf ("fallthru off try block at 0x%04x", ip_offset);
            vinfo->info.message = D.20165;
            vinfo->exception_type = 4;
            D.19874 = ctx.list;
            D.20166 = monoeg_g_slist_prepend (D.19874, vinfo);
            ctx.list = D.20166;
          }
          ctx.verifiable = 0;
          D.19927 = ctx.level;
          D.19931 = D.19927 & 16;
          if (D.19931 != 0) goto <D.20167>; else goto <D.20168>;
          <D.20167>:
          ctx.valid = 0;
          <D.20168>:
          <D.20163>:
          start = 1;
          <D.20161>:
          <D.20159>:
          D.20169 = clause->handler_offset;
          D.20170 = clause->handler_len;
          D.20171 = D.20169 + D.20170;
          if (D.20171 == ip_offset) goto <D.20172>; else goto <D.20173>;
          <D.20172>:
          if (start == 0) goto <D.20174>; else goto <D.20175>;
          <D.20174>:
          D.20176 = clause->flags;
          if (D.20176 == 1) goto <D.20177>; else goto <D.20178>;
          <D.20177>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 1;
            D.20179 = monoeg_g_strdup_printf ("fallout of handler block at 0x%04x", ip_offset);
            vinfo->info.message = D.20179;
            vinfo->exception_type = 3;
            D.19874 = ctx.list;
            D.20180 = monoeg_g_slist_prepend (D.19874, vinfo);
            ctx.list = D.20180;
          }
          ctx.valid = 0;
          goto <D.20181>;
          <D.20178>:
          D.19925 = ctx.verifiable;
          if (D.19925 != 0) goto <D.20182>; else goto <D.20184>;
          <D.20184>:
          D.19927 = ctx.level;
          D.19928 = D.19927 & 128;
          if (D.19928 != 0) goto <D.20182>; else goto <D.20183>;
          <D.20182>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 8;
            D.20185 = monoeg_g_strdup_printf ("fallout of handler block at 0x%04x", ip_offset);
            vinfo->info.message = D.20185;
            vinfo->exception_type = 4;
            D.19874 = ctx.list;
            D.20186 = monoeg_g_slist_prepend (D.19874, vinfo);
            ctx.list = D.20186;
          }
          ctx.verifiable = 0;
          D.19927 = ctx.level;
          D.19931 = D.19927 & 16;
          if (D.19931 != 0) goto <D.20187>; else goto <D.20188>;
          <D.20187>:
          ctx.valid = 0;
          <D.20188>:
          <D.20183>:
          <D.20181>:
          start = 1;
          <D.20175>:
          <D.20173>:
          D.20176 = clause->flags;
          if (D.20176 == 1) goto <D.20189>; else goto <D.20190>;
          <D.20189>:
          D.20169 = clause->handler_offset;
          if (D.20169 == ip_offset) goto <D.20191>; else goto <D.20192>;
          <D.20191>:
          if (start == 0) goto <D.20193>; else goto <D.20194>;
          <D.20193>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 1;
            D.20195 = monoeg_g_strdup_printf ("fallout of filter block at 0x%04x", ip_offset);
            vinfo->info.message = D.20195;
            vinfo->exception_type = 3;
            D.19874 = ctx.list;
            D.20196 = monoeg_g_slist_prepend (D.19874, vinfo);
            ctx.list = D.20196;
          }
          ctx.valid = 0;
          start = 1;
          <D.20194>:
          <D.20192>:
          <D.20190>:
          D.20169 = clause->handler_offset;
          if (D.20169 == ip_offset) goto <D.20197>; else goto <D.20198>;
          <D.20197>:
          if (start == 0) goto <D.20199>; else goto <D.20200>;
          <D.20199>:
          D.19925 = ctx.verifiable;
          if (D.19925 != 0) goto <D.20201>; else goto <D.20203>;
          <D.20203>:
          D.19927 = ctx.level;
          D.19928 = D.19927 & 128;
          if (D.19928 != 0) goto <D.20201>; else goto <D.20202>;
          <D.20201>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 8;
            D.20204 = monoeg_g_strdup_printf ("fallthru handler block at 0x%04x", ip_offset);
            vinfo->info.message = D.20204;
            vinfo->exception_type = 4;
            D.19874 = ctx.list;
            D.20205 = monoeg_g_slist_prepend (D.19874, vinfo);
            ctx.list = D.20205;
          }
          ctx.verifiable = 0;
          D.19927 = ctx.level;
          D.19931 = D.19927 & 16;
          if (D.19931 != 0) goto <D.20206>; else goto <D.20207>;
          <D.20206>:
          ctx.valid = 0;
          <D.20207>:
          <D.20202>:
          start = 1;
          <D.20200>:
          <D.20198>:
          D.20155 = clause->try_offset;
          if (D.20155 == ip_offset) goto <D.20208>; else goto <D.20209>;
          <D.20208>:
          D.20210 = ctx.eval.size;
          if (D.20210 != 0) goto <D.20211>; else goto <D.20212>;
          <D.20211>:
          if (start == 0) goto <D.20213>; else goto <D.20214>;
          <D.20213>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 1;
            D.20215 = monoeg_g_strdup_printf ("Try to enter try block with a non-empty stack at 0x%04x", ip_offset);
            vinfo->info.message = D.20215;
            vinfo->exception_type = 3;
            D.19874 = ctx.list;
            D.20216 = monoeg_g_slist_prepend (D.19874, vinfo);
            ctx.list = D.20216;
          }
          ctx.valid = 0;
          start = 1;
          <D.20214>:
          <D.20212>:
          <D.20209>:
        }
        i = i + 1;
        <D.19116>:
        D.19892 = ctx.header;
        D.20069 = D.19892->num_clauses;
        D.20070 = (int) D.20069;
        if (D.20070 > i) goto <D.20217>; else goto <D.19117>;
        <D.20217>:
        D.19905 = ctx.valid;
        if (D.19905 != 0) goto <D.19115>; else goto <D.19117>;
        <D.19117>:
        D.20218 = BIT_FIELD_REF <*bb, 8, 224>;
        D.20219 = D.20218 & 2;
        if (D.20219 != 0) goto <D.20220>; else goto <D.20221>;
        <D.20220>:
        D.19909 = ctx.code;
        D.20222 = ip_offset * 12;
        D.20223 = D.19909 + D.20222;
        D.19909 = ctx.code;
        D.20222 = ip_offset * 12;
        D.20223 = D.19909 + D.20222;
        D.20224 = D.20223->flags;
        D.20225 = D.20224 | 1;
        D.20223->flags = D.20225;
        op_size.22 = (sizetype) op_size;
        ip = ip + op_size.22;
        // predicted unlikely by continue predictor.
        goto <D.19118>;
        <D.20221>:
        D.19905 = ctx.valid;
        if (D.19905 == 0) goto <D.19119>; else goto <D.20227>;
        <D.20227>:
        if (need_merge != 0) goto <D.20228>; else goto <D.20229>;
        <D.20228>:
        D.19909 = ctx.code;
        D.20230 = ctx.target;
        D.20231 = (unsigned int) D.20230;
        D.20232 = D.20231 * 12;
        D.20233 = D.19909 + D.20232;
        merge_stacks (&ctx, &ctx.eval, D.20233, 0, 1);
        need_merge = 0;
        <D.20229>:
        D.19909 = ctx.code;
        D.20222 = ip_offset * 12;
        D.20223 = D.19909 + D.20222;
        merge_stacks (&ctx, &ctx.eval, D.20223, start, 0);
        start = 0;
        D.20133 = *ip;
        D.20134 = (int) D.20133;
        switch (D.20134) <default: <D.19422>, case 0: <D.19120>, case 1: <D.19121>, case 2: <D.19123>, case 3: <D.19124>, case 4: <D.19125>, case 5: <D.19126>, case 6: <D.19151>, case 7: <D.19152>, case 8: <D.19153>, case 9: <D.19154>, case 10: <D.19155>, case 11: <D.19156>, case 12: <D.19157>, case 13: <D.19158>, case 14: <D.19127>, case 15: <D.19128>, case 16: <D.19161>, case 17: <D.19208>, case 18: <D.19209>, case 19: <D.19159>, case 20: <D.19183>, case 21: <D.19163>, case 22: <D.19164>, case 23: <D.19165>, case 24: <D.19166>, case 25: <D.19167>, case 26: <D.19168>, case 27: <D.19169>, case 28: <D.19170>, case 29: <D.19171>, case 30: <D.19172>, case 31: <D.19173>, case 32: <D.19175>, case 33: <D.19177>, case 34: <D.19179>, case 35: <D.19181>, case 36: <D.19211>, case 37: <D.19213>, case 38: <D.19149>, case 39: <D.19215>, case 40: <D.19220>, case 41: <D.19223>, case 42: <D.19150>, case 43: <D.19226>, case 44: <D.19228>, case 45: <D.19229>, case 46: <D.19184>, case 47: <D.19187>, case 48: <D.19188>, case 49: <D.19189>, case 50: <D.19190>, case 51: <D.19185>, case 52: <D.19191>, case 53: <D.19192>, case 54: <D.19193>, case 55: <D.19194>, case 56: <D.19231>, case 57: <D.19233>, case 58: <D.19234>, case 59: <D.19196>, case 60: <D.19199>, case 61: <D.19200>, case 62: <D.19201>, case 63: <D.19202>, case 64: <D.19197>, case 65: <D.19203>, case 66: <D.19204>, case 67: <D.19205>, case 68: <D.19206>, case 69: <D.19236>, case 70: <D.19241>, case 71: <D.19242>, case 72: <D.19243>, case 73: <D.19244>, case 74: <D.19245>, case 75: <D.19246>, case 76: <D.19247>, case 77: <D.19248>, case 78: <D.19249>, case 79: <D.19250>, case 80: <D.19251>, case 81: <D.19252>, case 82: <D.19253>, case 83: <D.19254>, case 84: <D.19255>, case 85: <D.19256>, case 86: <D.19257>, case 87: <D.19258>, case 88: <D.19136>, case 89: <D.19137>, case 90: <D.19138>, case 91: <D.19139>, case 92: <D.19142>, case 93: <D.19140>, case 94: <D.19144>, case 95: <D.19141>, case 96: <D.19143>, case 97: <D.19145>, case 98: <D.19146>, case 99: <D.19147>, case 100: <D.19148>, case 101: <D.19261>, case 102: <D.19260>, case 103: <D.19262>, case 104: <D.19263>, case 105: <D.19264>, case 106: <D.19268>, case 107: <D.19270>, case 108: <D.19271>, case 109: <D.19267>, case 110: <D.19269>, case 111: <D.19221>, case 112: <D.19275>, case 113: <D.19277>, case 114: <D.19279>, case 115: <D.19281>, case 116: <D.19283>, case 117: <D.19284>, case 118: <D.19272>, case 119: <D.19286>, case 120: <D.19287>, case 121: <D.19289>, case 122: <D.19291>, case 123: <D.19292>, case 124: <D.19293>, case 125: <D.19298>, case 126: <D.19295>, case 127: <D.19296>, case 128: <D.19300>, case 129: <D.19302>, case 130: <D.19304>, case 131: <D.19305>, case 132: <D.19306>, case 133: <D.19310>, case 134: <D.19307>, case 135: <D.19308>, case 136: <D.19309>, case 137: <D.19311>, case 138: <D.19312>, case 139: <D.19313>, case 140: <D.19314>, case 141: <D.19316>, case 142: <D.19318>, case 143: <D.19319>, case 144: <D.19321>, case 145: <D.19322>, case 146: <D.19323>, case 147: <D.19324>, case 148: <D.19325>, case 149: <D.19326>, case 150: <D.19327>, case 151: <D.19328>, case 152: <D.19329>, case 153: <D.19330>, case 154: <D.19331>, case 155: <D.19332>, case 156: <D.19333>, case 157: <D.19334>, case 158: <D.19335>, case 159: <D.19336>, case 160: <D.19337>, case 161: <D.19338>, case 162: <D.19339>, case 163: <D.19340>, case 164: <D.19342>, case 165: <D.19344>, case 179: <D.19346>, case 180: <D.19347>, case 181: <D.19348>, case 182: <D.19349>, case 183: <D.19350>, case 184: <D.19351>, case 185: <D.19352>, case 186: <D.19353>, case 194: <D.19356>, case 195: <D.19358>, case 198: <D.19359>, case 208: <D.19361>, case 209: <D.19266>, case 210: <D.19265>, case 211: <D.19273>, case 212: <D.19354>, case 213: <D.19355>, case 214: <D.19132>, case 215: <D.19130>, case 216: <D.19134>, case 217: <D.19135>, case 218: <D.19133>, case 219: <D.19131>, case 220: <D.19363>, case 221: <D.19365>, case 222: <D.19367>, case 223: <D.19259>, case 224: <D.19274>, case 254: <D.19369>>
        <D.19120>:
        <D.19121>:
        ip = ip + 1;
        goto <D.19122>;
        <D.19123>:
        <D.19124>:
        <D.19125>:
        <D.19126>:
        D.20133 = *ip;
        D.20134 = (int) D.20133;
        D.20234 = D.20134 + -2;
        D.20235 = (unsigned int) D.20234;
        push_arg (&ctx, D.20235, 0);
        ip = ip + 1;
        goto <D.19122>;
        <D.19127>:
        <D.19128>:
        D.20238 = ip + 2;
        if (D.20238 > end) goto <D.20236>; else goto <D.20239>;
        <D.20239>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967293) goto <D.20236>; else goto <D.20237>;
        <D.20236>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20242 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20242;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20243 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20243;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20237>:
        D.20133 = *ip;
        D.20244 = D.20133 == 15;
        D.20245 = (int) D.20244;
        D.20246 = ip + 1;
        D.20247 = *D.20246;
        D.20248 = (unsigned int) D.20247;
        push_arg (&ctx, D.20248, D.20245);
        ip = ip + 2;
        goto <D.19122>;
        <D.19130>:
        D.20133 = *ip;
        D.20249 = (unsigned int) D.20133;
        do_binop (&ctx, D.20249, &add_ovf_un_table);
        ip = ip + 1;
        goto <D.19122>;
        <D.19131>:
        D.20133 = *ip;
        D.20249 = (unsigned int) D.20133;
        do_binop (&ctx, D.20249, &sub_ovf_un_table);
        ip = ip + 1;
        goto <D.19122>;
        <D.19132>:
        <D.19133>:
        <D.19134>:
        <D.19135>:
        D.20133 = *ip;
        D.20249 = (unsigned int) D.20133;
        do_binop (&ctx, D.20249, &bin_ovf_table);
        ip = ip + 1;
        goto <D.19122>;
        <D.19136>:
        D.20133 = *ip;
        D.20249 = (unsigned int) D.20133;
        do_binop (&ctx, D.20249, &add_table);
        ip = ip + 1;
        goto <D.19122>;
        <D.19137>:
        D.20133 = *ip;
        D.20249 = (unsigned int) D.20133;
        do_binop (&ctx, D.20249, &sub_table);
        ip = ip + 1;
        goto <D.19122>;
        <D.19138>:
        <D.19139>:
        <D.19140>:
        D.20133 = *ip;
        D.20249 = (unsigned int) D.20133;
        do_binop (&ctx, D.20249, &bin_op_table);
        ip = ip + 1;
        goto <D.19122>;
        <D.19141>:
        <D.19142>:
        <D.19143>:
        <D.19144>:
        <D.19145>:
        D.20133 = *ip;
        D.20249 = (unsigned int) D.20133;
        do_binop (&ctx, D.20249, &int_bin_op_table);
        ip = ip + 1;
        goto <D.19122>;
        <D.19146>:
        <D.19147>:
        <D.19148>:
        D.20133 = *ip;
        D.20249 = (unsigned int) D.20133;
        do_binop (&ctx, D.20249, &shift_op_table);
        ip = ip + 1;
        goto <D.19122>;
        <D.19149>:
        D.20250 = check_underflow (&ctx, 1);
        if (D.20250 == 0) goto <D.19122>; else goto <D.20251>;
        <D.20251>:
        stack_pop_safe (&ctx);
        ip = ip + 1;
        goto <D.19122>;
        <D.19150>:
        do_ret (&ctx);
        ip = ip + 1;
        start = 1;
        goto <D.19122>;
        <D.19151>:
        <D.19152>:
        <D.19153>:
        <D.19154>:
        D.20133 = *ip;
        D.20134 = (int) D.20133;
        D.20252 = D.20134 + -6;
        D.20253 = (unsigned int) D.20252;
        push_local (&ctx, D.20253, 0);
        ip = ip + 1;
        goto <D.19122>;
        <D.19155>:
        <D.19156>:
        <D.19157>:
        <D.19158>:
        D.20133 = *ip;
        D.20134 = (int) D.20133;
        D.20254 = D.20134 + -10;
        D.20255 = (unsigned int) D.20254;
        store_local (&ctx, D.20255);
        ip = ip + 1;
        goto <D.19122>;
        <D.19159>:
        D.20238 = ip + 2;
        if (D.20238 > end) goto <D.20256>; else goto <D.20258>;
        <D.20258>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967293) goto <D.20256>; else goto <D.20257>;
        <D.20256>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20259 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20259;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20260 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20260;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20257>:
        D.20246 = ip + 1;
        D.20247 = *D.20246;
        D.20261 = (unsigned int) D.20247;
        store_local (&ctx, D.20261);
        ip = ip + 2;
        goto <D.19122>;
        <D.19161>:
        D.20238 = ip + 2;
        if (D.20238 > end) goto <D.20262>; else goto <D.20264>;
        <D.20264>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967293) goto <D.20262>; else goto <D.20263>;
        <D.20262>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20265 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20265;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20266 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20266;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20263>:
        D.20246 = ip + 1;
        D.20247 = *D.20246;
        D.20261 = (unsigned int) D.20247;
        store_arg (&ctx, D.20261);
        ip = ip + 2;
        goto <D.19122>;
        <D.19163>:
        <D.19164>:
        <D.19165>:
        <D.19166>:
        <D.19167>:
        <D.19168>:
        <D.19169>:
        <D.19170>:
        <D.19171>:
        <D.19172>:
        D.20267 = check_overflow (&ctx);
        if (D.20267 != 0) goto <D.20268>; else goto <D.20269>;
        <D.20268>:
        D.20270 = mono_defaults.int32_class;
        D.20271 = &D.20270->byval_arg;
        stack_push_val (&ctx, 1, D.20271);
        <D.20269>:
        ip = ip + 1;
        goto <D.19122>;
        <D.19173>:
        D.20238 = ip + 2;
        if (D.20238 > end) goto <D.20272>; else goto <D.20274>;
        <D.20274>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967293) goto <D.20272>; else goto <D.20273>;
        <D.20272>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20275 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20275;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20276 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20276;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20273>:
        D.20277 = check_overflow (&ctx);
        if (D.20277 != 0) goto <D.20278>; else goto <D.20279>;
        <D.20278>:
        D.20270 = mono_defaults.int32_class;
        D.20271 = &D.20270->byval_arg;
        stack_push_val (&ctx, 1, D.20271);
        <D.20279>:
        ip = ip + 2;
        goto <D.19122>;
        <D.19175>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20280>; else goto <D.20283>;
        <D.20283>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20280>; else goto <D.20281>;
        <D.20280>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20284 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20284;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20285 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20285;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20281>:
        D.20286 = check_overflow (&ctx);
        if (D.20286 != 0) goto <D.20287>; else goto <D.20288>;
        <D.20287>:
        D.20270 = mono_defaults.int32_class;
        D.20271 = &D.20270->byval_arg;
        stack_push_val (&ctx, 1, D.20271);
        <D.20288>:
        ip = ip + 5;
        goto <D.19122>;
        <D.19177>:
        D.20291 = ip + 9;
        if (D.20291 > end) goto <D.20289>; else goto <D.20292>;
        <D.20292>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967286) goto <D.20289>; else goto <D.20290>;
        <D.20289>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20293 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20293;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20294 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20294;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20290>:
        D.20295 = check_overflow (&ctx);
        if (D.20295 != 0) goto <D.20296>; else goto <D.20297>;
        <D.20296>:
        D.20298 = mono_defaults.int64_class;
        D.20299 = &D.20298->byval_arg;
        stack_push_val (&ctx, 2, D.20299);
        <D.20297>:
        ip = ip + 9;
        goto <D.19122>;
        <D.19179>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20300>; else goto <D.20302>;
        <D.20302>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20300>; else goto <D.20301>;
        <D.20300>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20303 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20303;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20304 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20304;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20301>:
        D.20305 = check_overflow (&ctx);
        if (D.20305 != 0) goto <D.20306>; else goto <D.20307>;
        <D.20306>:
        D.20308 = mono_defaults.double_class;
        D.20309 = &D.20308->byval_arg;
        stack_push_val (&ctx, 4, D.20309);
        <D.20307>:
        ip = ip + 5;
        goto <D.19122>;
        <D.19181>:
        D.20291 = ip + 9;
        if (D.20291 > end) goto <D.20310>; else goto <D.20312>;
        <D.20312>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967286) goto <D.20310>; else goto <D.20311>;
        <D.20310>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20313 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20313;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20314 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20314;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20311>:
        D.20315 = check_overflow (&ctx);
        if (D.20315 != 0) goto <D.20316>; else goto <D.20317>;
        <D.20316>:
        D.20308 = mono_defaults.double_class;
        D.20309 = &D.20308->byval_arg;
        stack_push_val (&ctx, 4, D.20309);
        <D.20317>:
        ip = ip + 9;
        goto <D.19122>;
        <D.19183>:
        D.20318 = check_overflow (&ctx);
        if (D.20318 != 0) goto <D.20319>; else goto <D.20320>;
        <D.20319>:
        D.20321 = mono_defaults.object_class;
        D.20322 = &D.20321->byval_arg;
        stack_push_val (&ctx, 1030, D.20322);
        <D.20320>:
        ip = ip + 1;
        goto <D.19122>;
        <D.19184>:
        <D.19185>:
        D.20238 = ip + 2;
        if (D.20238 > end) goto <D.20323>; else goto <D.20325>;
        <D.20325>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967293) goto <D.20323>; else goto <D.20324>;
        <D.20323>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20326 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20326;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20327 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20327;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20324>:
        D.20246 = ip + 1;
        D.20247 = *D.20246;
        D.20328 = (signed char) D.20247;
        D.20329 = (int) D.20328;
        D.20330 = D.20329 + 2;
        do_branch_op (&ctx, D.20330, &cmp_br_eq_op);
        ip = ip + 2;
        need_merge = 1;
        goto <D.19122>;
        <D.19187>:
        <D.19188>:
        <D.19189>:
        <D.19190>:
        <D.19191>:
        <D.19192>:
        <D.19193>:
        <D.19194>:
        D.20238 = ip + 2;
        if (D.20238 > end) goto <D.20331>; else goto <D.20333>;
        <D.20333>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967293) goto <D.20331>; else goto <D.20332>;
        <D.20331>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20334 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20334;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20335 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20335;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20332>:
        D.20246 = ip + 1;
        D.20247 = *D.20246;
        D.20328 = (signed char) D.20247;
        D.20329 = (int) D.20328;
        D.20330 = D.20329 + 2;
        do_branch_op (&ctx, D.20330, &cmp_br_op);
        ip = ip + 2;
        need_merge = 1;
        goto <D.19122>;
        <D.19196>:
        <D.19197>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20336>; else goto <D.20338>;
        <D.20338>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20336>; else goto <D.20337>;
        <D.20336>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20339 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20339;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20340 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20340;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20337>:
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        D.20343 = (int) D.20342;
        D.20344 = D.20343 + 5;
        do_branch_op (&ctx, D.20344, &cmp_br_eq_op);
        ip = ip + 5;
        need_merge = 1;
        goto <D.19122>;
        <D.19199>:
        <D.19200>:
        <D.19201>:
        <D.19202>:
        <D.19203>:
        <D.19204>:
        <D.19205>:
        <D.19206>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20345>; else goto <D.20347>;
        <D.20347>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20345>; else goto <D.20346>;
        <D.20345>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20348 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20348;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20349 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20349;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20346>:
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        D.20343 = (int) D.20342;
        D.20344 = D.20343 + 5;
        do_branch_op (&ctx, D.20344, &cmp_br_op);
        ip = ip + 5;
        need_merge = 1;
        goto <D.19122>;
        <D.19208>:
        <D.19209>:
        D.20238 = ip + 2;
        if (D.20238 > end) goto <D.20350>; else goto <D.20352>;
        <D.20352>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967293) goto <D.20350>; else goto <D.20351>;
        <D.20350>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20353 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20353;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20354 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20354;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20351>:
        D.20133 = *ip;
        D.20355 = D.20133 == 18;
        D.20356 = (int) D.20355;
        D.20246 = ip + 1;
        D.20247 = *D.20246;
        D.20261 = (unsigned int) D.20247;
        push_local (&ctx, D.20261, D.20356);
        ip = ip + 2;
        goto <D.19122>;
        <D.19211>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20357 = monoeg_g_strdup_printf ("Use of the `unused\' opcode");
          vinfo->info.message = D.20357;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20358 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20358;
        }
        ctx.valid = 0;
        ip = ip + 1;
        goto <D.19122>;
        <D.19213>:
        {
          struct ILStackDesc * top;

          D.20359 = check_underflow (&ctx, 1);
          if (D.20359 == 0) goto <D.19122>; else goto <D.20360>;
          <D.20360>:
          D.20361 = check_overflow (&ctx);
          if (D.20361 == 0) goto <D.19122>; else goto <D.20362>;
          <D.20362>:
          top = stack_push (&ctx);
          D.20363 = stack_peek (&ctx, 1);
          copy_stack_value (top, D.20363);
          ip = ip + 1;
          goto <D.19122>;
        }
        <D.19215>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20364>; else goto <D.20366>;
        <D.20366>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20364>; else goto <D.20365>;
        <D.20364>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20367 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20367;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20368 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20368;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20365>:
        D.20210 = ctx.eval.size;
        if (D.20210 != 0) goto <D.20369>; else goto <D.20370>;
        <D.20369>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20371 = monoeg_g_strdup_printf ("Eval stack must be empty in jmp at 0x%04x", ip_offset);
          vinfo->info.message = D.20371;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20372 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20372;
        }
        ctx.valid = 0;
        <D.20370>:
        token = MEM[(const guint32 *)ip + 1B];
        D.19892 = ctx.header;
        D.20373 = in_any_block (D.19892, ip_offset);
        if (D.20373 != 0) goto <D.20374>; else goto <D.20375>;
        <D.20374>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20376 = monoeg_g_strdup_printf ("jmp cannot escape exception blocks at 0x%04x", ip_offset);
          vinfo->info.message = D.20376;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20377 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20377;
        }
        ctx.valid = 0;
        <D.20375>:
        D.19925 = ctx.verifiable;
        if (D.19925 != 0) goto <D.20378>; else goto <D.20380>;
        <D.20380>:
        D.19927 = ctx.level;
        D.19928 = D.19927 & 128;
        if (D.19928 != 0) goto <D.20378>; else goto <D.20379>;
        <D.20378>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.20241 = ctx.ip_offset;
          D.20381 = monoeg_g_strdup_printf ("Intruction jmp is not verifiable at 0x%04x", D.20241);
          vinfo->info.message = D.20381;
          vinfo->exception_type = 4;
          D.19874 = ctx.list;
          D.20382 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20382;
        }
        ctx.verifiable = 0;
        D.19927 = ctx.level;
        D.19931 = D.19927 & 16;
        if (D.19931 != 0) goto <D.20383>; else goto <D.20384>;
        <D.20383>:
        ctx.valid = 0;
        <D.20384>:
        <D.20379>:
        ip = ip + 5;
        goto <D.19122>;
        <D.19220>:
        <D.19221>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20385>; else goto <D.20387>;
        <D.20387>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20385>; else goto <D.20386>;
        <D.20385>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20388 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20388;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20389 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20389;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20386>:
        D.20133 = *ip;
        D.20390 = D.20133 == 111;
        D.20391 = (int) D.20390;
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        D.20343 = (int) D.20342;
        do_invoke_method (&ctx, D.20343, D.20391);
        ip = ip + 5;
        goto <D.19122>;
        <D.19223>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20392>; else goto <D.20394>;
        <D.20394>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20392>; else goto <D.20393>;
        <D.20392>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20395 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20395;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20396 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20396;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20393>:
        token = MEM[(const guint32 *)ip + 1B];
        D.19925 = ctx.verifiable;
        if (D.19925 != 0) goto <D.20397>; else goto <D.20399>;
        <D.20399>:
        D.19927 = ctx.level;
        D.19928 = D.19927 & 128;
        if (D.19928 != 0) goto <D.20397>; else goto <D.20398>;
        <D.20397>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.20241 = ctx.ip_offset;
          D.20400 = monoeg_g_strdup_printf ("Intruction calli is not verifiable at 0x%04x", D.20241);
          vinfo->info.message = D.20400;
          vinfo->exception_type = 4;
          D.19874 = ctx.list;
          D.20401 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20401;
        }
        ctx.verifiable = 0;
        D.19927 = ctx.level;
        D.19931 = D.19927 & 16;
        if (D.19931 != 0) goto <D.20402>; else goto <D.20403>;
        <D.20402>:
        ctx.valid = 0;
        <D.20403>:
        <D.20398>:
        ip = ip + 5;
        goto <D.19122>;
        <D.19226>:
        D.20238 = ip + 2;
        if (D.20238 > end) goto <D.20404>; else goto <D.20406>;
        <D.20406>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967293) goto <D.20404>; else goto <D.20405>;
        <D.20404>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20407 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20407;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20408 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20408;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20405>:
        D.20246 = ip + 1;
        D.20247 = *D.20246;
        D.20328 = (signed char) D.20247;
        D.20329 = (int) D.20328;
        D.20330 = D.20329 + 2;
        do_static_branch (&ctx, D.20330);
        need_merge = 1;
        ip = ip + 2;
        start = 1;
        goto <D.19122>;
        <D.19228>:
        <D.19229>:
        D.20238 = ip + 2;
        if (D.20238 > end) goto <D.20409>; else goto <D.20411>;
        <D.20411>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967293) goto <D.20409>; else goto <D.20410>;
        <D.20409>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20412 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20412;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20413 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20413;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20410>:
        D.20246 = ip + 1;
        D.20247 = *D.20246;
        D.20328 = (signed char) D.20247;
        D.20329 = (int) D.20328;
        D.20330 = D.20329 + 2;
        do_boolean_branch_op (&ctx, D.20330);
        ip = ip + 2;
        need_merge = 1;
        goto <D.19122>;
        <D.19231>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20414>; else goto <D.20416>;
        <D.20416>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20414>; else goto <D.20415>;
        <D.20414>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20417 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20417;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20418 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20418;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20415>:
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        D.20343 = (int) D.20342;
        D.20344 = D.20343 + 5;
        do_static_branch (&ctx, D.20344);
        need_merge = 1;
        ip = ip + 5;
        start = 1;
        goto <D.19122>;
        <D.19233>:
        <D.19234>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20419>; else goto <D.20421>;
        <D.20421>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20419>; else goto <D.20420>;
        <D.20419>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20422 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20422;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20423 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20423;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20420>:
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        D.20343 = (int) D.20342;
        D.20344 = D.20343 + 5;
        do_boolean_branch_op (&ctx, D.20344);
        ip = ip + 5;
        need_merge = 1;
        goto <D.19122>;
        <D.19236>:
        {
          guint32 entries;

          D.20282 = ip + 5;
          if (D.20282 > end) goto <D.20424>; else goto <D.20426>;
          <D.20426>:
          ip.23 = (unsigned int) ip;
          if (ip.23 > 4294967290) goto <D.20424>; else goto <D.20425>;
          <D.20424>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 1;
            D.20241 = ctx.ip_offset;
            D.20133 = *ip;
            D.20134 = (int) D.20133;
            D.20427 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
            vinfo->info.message = D.20427;
            vinfo->exception_type = 3;
            D.19874 = ctx.list;
            D.20428 = monoeg_g_slist_prepend (D.19874, vinfo);
            ctx.list = D.20428;
          }
          ctx.valid = 0;
          goto <D.19122>;
          <D.20425>:
          entries = MEM[(const guint32 *)ip + 1B];
          if (entries > 1073741823) goto <D.20429>; else goto <D.20430>;
          <D.20429>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 1;
            D.20241 = ctx.ip_offset;
            D.20431 = monoeg_g_strdup_printf ("Too many switch entries %x at 0x%04x", entries, D.20241);
            vinfo->info.message = D.20431;
            vinfo->exception_type = 3;
            D.19874 = ctx.list;
            D.20432 = monoeg_g_slist_prepend (D.19874, vinfo);
            ctx.list = D.20432;
          }
          ctx.valid = 0;
          <D.20430>:
          ip = ip + 5;
          D.20435 = entries * 4;
          D.20436 = ip + D.20435;
          if (D.20436 > end) goto <D.20433>; else goto <D.20437>;
          <D.20437>:
          D.20435 = entries * 4;
          D.20438 = ~D.20435;
          ip.23 = (unsigned int) ip;
          if (D.20438 < ip.23) goto <D.20433>; else goto <D.20434>;
          <D.20433>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 1;
            D.20241 = ctx.ip_offset;
            D.20133 = *ip;
            D.20134 = (int) D.20133;
            D.20439 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
            vinfo->info.message = D.20439;
            vinfo->exception_type = 3;
            D.19874 = ctx.list;
            D.20440 = monoeg_g_slist_prepend (D.19874, vinfo);
            ctx.list = D.20440;
          }
          ctx.valid = 0;
          goto <D.19122>;
          <D.20434>:
          entries.24 = (int) entries;
          do_switch (&ctx, entries.24, ip);
          D.20435 = entries * 4;
          ip = ip + D.20435;
          goto <D.19122>;
        }
        <D.19241>:
        <D.19242>:
        <D.19243>:
        <D.19244>:
        <D.19245>:
        <D.19246>:
        <D.19247>:
        <D.19248>:
        <D.19249>:
        <D.19250>:
        <D.19251>:
        D.20133 = *ip;
        D.20134 = (int) D.20133;
        do_load_indirect (&ctx, D.20134);
        ip = ip + 1;
        goto <D.19122>;
        <D.19252>:
        <D.19253>:
        <D.19254>:
        <D.19255>:
        <D.19256>:
        <D.19257>:
        <D.19258>:
        <D.19259>:
        D.20133 = *ip;
        D.20134 = (int) D.20133;
        do_store_indirect (&ctx, D.20134);
        ip = ip + 1;
        goto <D.19122>;
        <D.19260>:
        <D.19261>:
        D.20133 = *ip;
        D.20134 = (int) D.20133;
        do_unary_math_op (&ctx, D.20134);
        ip = ip + 1;
        goto <D.19122>;
        <D.19262>:
        <D.19263>:
        <D.19264>:
        <D.19265>:
        <D.19266>:
        <D.19267>:
        do_conversion (&ctx, 1);
        ip = ip + 1;
        goto <D.19122>;
        <D.19268>:
        <D.19269>:
        do_conversion (&ctx, 2);
        ip = ip + 1;
        goto <D.19122>;
        <D.19270>:
        <D.19271>:
        <D.19272>:
        do_conversion (&ctx, 4);
        ip = ip + 1;
        goto <D.19122>;
        <D.19273>:
        <D.19274>:
        do_conversion (&ctx, 3);
        ip = ip + 1;
        goto <D.19122>;
        <D.19275>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20442>; else goto <D.20444>;
        <D.20444>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20442>; else goto <D.20443>;
        <D.20442>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20445 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20445;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20446 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20446;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20443>:
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        D.20343 = (int) D.20342;
        do_cpobj (&ctx, D.20343);
        ip = ip + 5;
        goto <D.19122>;
        <D.19277>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20447>; else goto <D.20449>;
        <D.20449>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20447>; else goto <D.20448>;
        <D.20447>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20450 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20450;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20451 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20451;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20448>:
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        D.20343 = (int) D.20342;
        do_ldobj_value (&ctx, D.20343);
        ip = ip + 5;
        goto <D.19122>;
        <D.19279>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20452>; else goto <D.20454>;
        <D.20454>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20452>; else goto <D.20453>;
        <D.20452>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20455 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20455;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20456 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20456;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20453>:
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        do_ldstr (&ctx, D.20342);
        ip = ip + 5;
        goto <D.19122>;
        <D.19281>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20457>; else goto <D.20459>;
        <D.20459>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20457>; else goto <D.20458>;
        <D.20457>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20460 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20460;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20461 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20461;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20458>:
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        D.20343 = (int) D.20342;
        do_newobj (&ctx, D.20343);
        ip = ip + 5;
        goto <D.19122>;
        <D.19283>:
        <D.19284>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20462>; else goto <D.20464>;
        <D.20464>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20462>; else goto <D.20463>;
        <D.20462>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20465 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20465;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20466 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20466;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20463>:
        D.20133 = *ip;
        if (D.20133 == 116) goto <D.20468>; else goto <D.20469>;
        <D.20468>:
        iftmp.25 = "castclass";
        goto <D.20470>;
        <D.20469>:
        iftmp.25 = "isinst";
        <D.20470>:
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        D.20343 = (int) D.20342;
        do_cast (&ctx, D.20343, iftmp.25);
        ip = ip + 5;
        goto <D.19122>;
        <D.19286>:
        <D.19287>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20471 = monoeg_g_strdup_printf ("Use of the `unused\' opcode");
          vinfo->info.message = D.20471;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20472 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20472;
        }
        ctx.valid = 0;
        ip = ip + 1;
        goto <D.19122>;
        <D.19289>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20473>; else goto <D.20475>;
        <D.20475>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20473>; else goto <D.20474>;
        <D.20473>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20476 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20476;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20477 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20477;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20474>:
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        D.20343 = (int) D.20342;
        do_unbox_value (&ctx, D.20343);
        ip = ip + 5;
        goto <D.19122>;
        <D.19291>:
        do_throw (&ctx);
        start = 1;
        ip = ip + 1;
        goto <D.19122>;
        <D.19292>:
        <D.19293>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20478>; else goto <D.20480>;
        <D.20480>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20478>; else goto <D.20479>;
        <D.20478>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20481 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20481;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20482 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20482;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20479>:
        D.20133 = *ip;
        D.20483 = D.20133 == 124;
        D.20484 = (int) D.20483;
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        D.20343 = (int) D.20342;
        do_push_field (&ctx, D.20343, D.20484);
        ip = ip + 5;
        goto <D.19122>;
        <D.19295>:
        <D.19296>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20485>; else goto <D.20487>;
        <D.20487>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20485>; else goto <D.20486>;
        <D.20485>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20488 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20488;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20489 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20489;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20486>:
        D.20133 = *ip;
        D.20490 = D.20133 == 127;
        D.20491 = (int) D.20490;
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        D.20343 = (int) D.20342;
        do_push_static_field (&ctx, D.20343, D.20491);
        ip = ip + 5;
        goto <D.19122>;
        <D.19298>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20492>; else goto <D.20494>;
        <D.20494>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20492>; else goto <D.20493>;
        <D.20492>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20495 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20495;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20496 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20496;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20493>:
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        D.20343 = (int) D.20342;
        do_store_field (&ctx, D.20343);
        ip = ip + 5;
        goto <D.19122>;
        <D.19300>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20497>; else goto <D.20499>;
        <D.20499>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20497>; else goto <D.20498>;
        <D.20497>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20500 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20500;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20501 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20501;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20498>:
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        D.20343 = (int) D.20342;
        do_store_static_field (&ctx, D.20343);
        ip = ip + 5;
        goto <D.19122>;
        <D.19302>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20502>; else goto <D.20504>;
        <D.20504>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20502>; else goto <D.20503>;
        <D.20502>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20505 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20505;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20506 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20506;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20503>:
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        D.20343 = (int) D.20342;
        do_stobj (&ctx, D.20343);
        ip = ip + 5;
        goto <D.19122>;
        <D.19304>:
        <D.19305>:
        <D.19306>:
        <D.19307>:
        <D.19308>:
        <D.19309>:
        do_conversion (&ctx, 1);
        ip = ip + 1;
        goto <D.19122>;
        <D.19310>:
        <D.19311>:
        do_conversion (&ctx, 2);
        ip = ip + 1;
        goto <D.19122>;
        <D.19312>:
        <D.19313>:
        do_conversion (&ctx, 3);
        ip = ip + 1;
        goto <D.19122>;
        <D.19314>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20507>; else goto <D.20509>;
        <D.20509>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20507>; else goto <D.20508>;
        <D.20507>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20510 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20510;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20511 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20511;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20508>:
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        D.20343 = (int) D.20342;
        do_box_value (&ctx, D.20343);
        ip = ip + 5;
        goto <D.19122>;
        <D.19316>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20512>; else goto <D.20514>;
        <D.20514>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20512>; else goto <D.20513>;
        <D.20512>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20515 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20515;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20516 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20516;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20513>:
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        D.20343 = (int) D.20342;
        do_newarr (&ctx, D.20343);
        ip = ip + 5;
        goto <D.19122>;
        <D.19318>:
        do_ldlen (&ctx);
        ip = ip + 1;
        goto <D.19122>;
        <D.19319>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20517>; else goto <D.20519>;
        <D.20519>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20517>; else goto <D.20518>;
        <D.20517>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20520 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20520;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20521 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20521;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20518>:
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        D.20343 = (int) D.20342;
        do_ldelema (&ctx, D.20343);
        ip = ip + 5;
        goto <D.19122>;
        <D.19321>:
        <D.19322>:
        <D.19323>:
        <D.19324>:
        <D.19325>:
        <D.19326>:
        <D.19327>:
        <D.19328>:
        <D.19329>:
        <D.19330>:
        <D.19331>:
        D.20133 = *ip;
        D.20134 = (int) D.20133;
        do_ldelem (&ctx, D.20134, 0);
        ip = ip + 1;
        goto <D.19122>;
        <D.19332>:
        <D.19333>:
        <D.19334>:
        <D.19335>:
        <D.19336>:
        <D.19337>:
        <D.19338>:
        <D.19339>:
        D.20133 = *ip;
        D.20134 = (int) D.20133;
        do_stelem (&ctx, D.20134, 0);
        ip = ip + 1;
        goto <D.19122>;
        <D.19340>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20522>; else goto <D.20524>;
        <D.20524>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20522>; else goto <D.20523>;
        <D.20522>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20525 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20525;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20526 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20526;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20523>:
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        D.20343 = (int) D.20342;
        D.20133 = *ip;
        D.20134 = (int) D.20133;
        do_ldelem (&ctx, D.20134, D.20343);
        ip = ip + 5;
        goto <D.19122>;
        <D.19342>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20527>; else goto <D.20529>;
        <D.20529>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20527>; else goto <D.20528>;
        <D.20527>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20530 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20530;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20531 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20531;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20528>:
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        D.20343 = (int) D.20342;
        D.20133 = *ip;
        D.20134 = (int) D.20133;
        do_stelem (&ctx, D.20134, D.20343);
        ip = ip + 5;
        goto <D.19122>;
        <D.19344>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20532>; else goto <D.20534>;
        <D.20534>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20532>; else goto <D.20533>;
        <D.20532>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20535 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20535;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20536 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20536;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20533>:
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        D.20343 = (int) D.20342;
        do_unbox_any (&ctx, D.20343);
        ip = ip + 5;
        goto <D.19122>;
        <D.19346>:
        <D.19347>:
        <D.19348>:
        <D.19349>:
        <D.19350>:
        <D.19351>:
        do_conversion (&ctx, 1);
        ip = ip + 1;
        goto <D.19122>;
        <D.19352>:
        <D.19353>:
        do_conversion (&ctx, 2);
        ip = ip + 1;
        goto <D.19122>;
        <D.19354>:
        <D.19355>:
        do_conversion (&ctx, 3);
        ip = ip + 1;
        goto <D.19122>;
        <D.19356>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20537>; else goto <D.20539>;
        <D.20539>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20537>; else goto <D.20538>;
        <D.20537>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20540 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20540;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20541 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20541;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20538>:
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        D.20343 = (int) D.20342;
        do_refanyval (&ctx, D.20343);
        ip = ip + 5;
        goto <D.19122>;
        <D.19358>:
        do_ckfinite (&ctx);
        ip = ip + 1;
        goto <D.19122>;
        <D.19359>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20542>; else goto <D.20544>;
        <D.20544>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20542>; else goto <D.20543>;
        <D.20542>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20545 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20545;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20546 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20546;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20543>:
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        D.20343 = (int) D.20342;
        do_mkrefany (&ctx, D.20343);
        ip = ip + 5;
        goto <D.19122>;
        <D.19361>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20547>; else goto <D.20549>;
        <D.20549>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20547>; else goto <D.20548>;
        <D.20547>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20550 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20550;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20551 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20551;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20548>:
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        D.20343 = (int) D.20342;
        do_load_token (&ctx, D.20343);
        ip = ip + 5;
        goto <D.19122>;
        <D.19363>:
        D.19892 = ctx.header;
        D.20552 = is_correct_endfinally (D.19892, ip_offset);
        if (D.20552 == 0) goto <D.20553>; else goto <D.20554>;
        <D.20553>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20555 = monoeg_g_strdup_printf ("endfinally must be used inside a finally/fault handler at 0x%04x", D.20241);
          vinfo->info.message = D.20555;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20556 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20556;
        }
        ctx.valid = 0;
        <D.20554>:
        ctx.eval.size = 0;
        start = 1;
        ip = ip + 1;
        goto <D.19122>;
        <D.19365>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20557>; else goto <D.20559>;
        <D.20559>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20557>; else goto <D.20558>;
        <D.20557>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20560 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20560;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20561 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20561;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20558>:
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        D.20562 = D.20342 + 5;
        D.20563 = (int) D.20562;
        do_leave (&ctx, D.20563);
        ip = ip + 5;
        start = 1;
        need_merge = 1;
        goto <D.19122>;
        <D.19367>:
        D.20238 = ip + 2;
        if (D.20238 > end) goto <D.20564>; else goto <D.20566>;
        <D.20566>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967293) goto <D.20564>; else goto <D.20565>;
        <D.20564>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20567 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20567;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20568 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20568;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20565>:
        D.20246 = ip + 1;
        D.20247 = *D.20246;
        D.20328 = (signed char) D.20247;
        D.20329 = (int) D.20328;
        D.20330 = D.20329 + 2;
        do_leave (&ctx, D.20330);
        ip = ip + 2;
        start = 1;
        need_merge = 1;
        goto <D.19122>;
        <D.19369>:
        D.20238 = ip + 2;
        if (D.20238 > end) goto <D.20569>; else goto <D.20571>;
        <D.20571>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967293) goto <D.20569>; else goto <D.20570>;
        <D.20569>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20572 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20572;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20573 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20573;
        }
        ctx.valid = 0;
        goto <D.19122>;
        <D.20570>:
        ip = ip + 1;
        D.20133 = *ip;
        D.20134 = (int) D.20133;
        switch (D.20134) <default: <D.19420>, case 0: <D.19381>, case 1: <D.19374>, case 2: <D.19375>, case 3: <D.19376>, case 4: <D.19377>, case 5: <D.19378>, case 6: <D.19383>, case 7: <D.19385>, case 8: <D.19394>, case 9: <D.19387>, case 10: <D.19388>, case 11: <D.19379>, case 12: <D.19390>, case 13: <D.19391>, case 14: <D.19371>, case 15: <D.19393>, case 16: <D.19395>, case 17: <D.19399>, case 18: <D.19400>, case 19: <D.19402>, case 20: <D.19403>, case 21: <D.19405>, case 22: <D.19407>, case 23: <D.19410>, case 24: <D.19412>, case 25: <D.19414>, case 26: <D.19415>, case 27: <D.19397>, case 28: <D.19417>, case 29: <D.19419>, case 30: <D.19409>, case 34: <D.19396>>
        <D.19371>:
        D.20576 = ip + 3;
        if (D.20576 > end) goto <D.20574>; else goto <D.20577>;
        <D.20577>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967292) goto <D.20574>; else goto <D.20575>;
        <D.20574>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20578 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20578;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20579 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20579;
        }
        ctx.valid = 0;
        goto <D.19373>;
        <D.20575>:
        D.20580 = ip + 1;
        D.20581 = *D.20580;
        D.20582 = (unsigned int) D.20581;
        store_local (&ctx, D.20582);
        ip = ip + 3;
        goto <D.19373>;
        <D.19374>:
        D.20133 = *ip;
        D.20583 = (unsigned int) D.20133;
        do_cmp_op (&ctx, &cmp_br_eq_op, D.20583);
        ip = ip + 1;
        goto <D.19373>;
        <D.19375>:
        <D.19376>:
        <D.19377>:
        <D.19378>:
        D.20133 = *ip;
        D.20583 = (unsigned int) D.20133;
        do_cmp_op (&ctx, &cmp_br_op, D.20583);
        ip = ip + 1;
        goto <D.19373>;
        <D.19379>:
        D.20576 = ip + 3;
        if (D.20576 > end) goto <D.20584>; else goto <D.20586>;
        <D.20586>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967292) goto <D.20584>; else goto <D.20585>;
        <D.20584>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20587 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20587;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20588 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20588;
        }
        ctx.valid = 0;
        goto <D.19373>;
        <D.20585>:
        D.20580 = ip + 1;
        D.20581 = *D.20580;
        D.20582 = (unsigned int) D.20581;
        store_arg (&ctx, D.20582);
        ip = ip + 3;
        goto <D.19373>;
        <D.19381>:
        D.20589 = check_overflow (&ctx);
        if (D.20589 == 0) goto <D.19373>; else goto <D.20590>;
        <D.20590>:
        D.19870 = ctx.signature;
        D.19938 = BIT_FIELD_REF <*D.19870, 8, 80>;
        D.20591 = D.19938 & 63;
        if (D.20591 != 5) goto <D.20592>; else goto <D.20593>;
        <D.20592>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20594 = monoeg_g_strdup_printf ("Cannot use arglist on method without VARGARG calling convention at 0x%04x", D.20241);
          vinfo->info.message = D.20594;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20595 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20595;
        }
        ctx.valid = 0;
        <D.20593>:
        D.20596 = mono_defaults.argumenthandle_class;
        D.20597 = &D.20596->byval_arg;
        D.20598 = stack_push (&ctx);
        set_stack_value (&ctx, D.20598, D.20597, 0);
        ip = ip + 1;
        goto <D.19373>;
        <D.19383>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20599>; else goto <D.20601>;
        <D.20601>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20599>; else goto <D.20600>;
        <D.20599>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20602 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20602;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20603 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20603;
        }
        ctx.valid = 0;
        goto <D.19373>;
        <D.20600>:
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        do_load_function_ptr (&ctx, D.20342, 0);
        ip = ip + 5;
        goto <D.19373>;
        <D.19385>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20604>; else goto <D.20606>;
        <D.20606>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20604>; else goto <D.20605>;
        <D.20604>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20607 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20607;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20608 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20608;
        }
        ctx.valid = 0;
        goto <D.19373>;
        <D.20605>:
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        do_load_function_ptr (&ctx, D.20342, 1);
        ip = ip + 5;
        goto <D.19373>;
        <D.19387>:
        <D.19388>:
        D.20576 = ip + 3;
        if (D.20576 > end) goto <D.20609>; else goto <D.20611>;
        <D.20611>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967292) goto <D.20609>; else goto <D.20610>;
        <D.20609>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20612 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20612;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20613 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20613;
        }
        ctx.valid = 0;
        goto <D.19373>;
        <D.20610>:
        D.20133 = *ip;
        D.20614 = D.20133 == 10;
        D.20615 = (int) D.20614;
        D.20580 = ip + 1;
        D.20581 = *D.20580;
        D.20616 = (unsigned int) D.20581;
        push_arg (&ctx, D.20616, D.20615);
        ip = ip + 3;
        goto <D.19373>;
        <D.19390>:
        <D.19391>:
        D.20576 = ip + 3;
        if (D.20576 > end) goto <D.20617>; else goto <D.20619>;
        <D.20619>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967292) goto <D.20617>; else goto <D.20618>;
        <D.20617>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20620 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20620;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20621 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20621;
        }
        ctx.valid = 0;
        goto <D.19373>;
        <D.20618>:
        D.20133 = *ip;
        D.20622 = D.20133 == 13;
        D.20623 = (int) D.20622;
        D.20580 = ip + 1;
        D.20581 = *D.20580;
        D.20582 = (unsigned int) D.20581;
        push_local (&ctx, D.20582, D.20623);
        ip = ip + 3;
        goto <D.19373>;
        <D.19393>:
        do_localloc (&ctx);
        ip = ip + 1;
        goto <D.19373>;
        <D.19394>:
        <D.19395>:
        <D.19396>:
        <D.19397>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20624 = monoeg_g_strdup_printf ("Use of the `unused\' opcode");
          vinfo->info.message = D.20624;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20625 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20625;
        }
        ctx.valid = 0;
        ip = ip + 1;
        goto <D.19373>;
        <D.19399>:
        do_endfilter (&ctx);
        start = 1;
        ip = ip + 1;
        goto <D.19373>;
        <D.19400>:
        D.20238 = ip + 2;
        if (D.20238 > end) goto <D.20626>; else goto <D.20628>;
        <D.20628>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967293) goto <D.20626>; else goto <D.20627>;
        <D.20626>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20629 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20629;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20630 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20630;
        }
        ctx.valid = 0;
        goto <D.19373>;
        <D.20627>:
        prefix = prefix | 1;
        ip = ip + 2;
        goto <D.19373>;
        <D.19402>:
        prefix = prefix | 2;
        ip = ip + 1;
        goto <D.19373>;
        <D.19403>:
        prefix = prefix | 4;
        ip = ip + 1;
        if (ip < end) goto <D.20631>; else goto <D.20632>;
        <D.20631>:
        D.20133 = *ip;
        D.20633 = D.20133 + 216;
        D.20634 = D.20633 > 1;
        D.20133 = *ip;
        D.20635 = D.20133 != 111;
        D.20636 = D.20634 & D.20635;
        if (D.20636 != 0) goto <D.20637>; else goto <D.20638>;
        <D.20637>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20639 = monoeg_g_strdup_printf ("tail prefix must be used only with call opcodes at 0x%04x", ip_offset);
          vinfo->info.message = D.20639;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20640 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20640;
        }
        ctx.valid = 0;
        <D.20638>:
        <D.20632>:
        goto <D.19373>;
        <D.19405>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20641>; else goto <D.20643>;
        <D.20643>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20641>; else goto <D.20642>;
        <D.20641>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20644 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20644;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20645 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20645;
        }
        ctx.valid = 0;
        goto <D.19373>;
        <D.20642>:
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        D.20343 = (int) D.20342;
        do_initobj (&ctx, D.20343);
        ip = ip + 5;
        goto <D.19373>;
        <D.19407>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20646>; else goto <D.20648>;
        <D.20648>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20646>; else goto <D.20647>;
        <D.20646>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20649 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20649;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20650 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20650;
        }
        ctx.valid = 0;
        goto <D.19373>;
        <D.20647>:
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        D.20343 = (int) D.20342;
        D.20651 = get_boxable_mono_type (&ctx, D.20343, "constrained.");
        ctx.constrained_type = D.20651;
        prefix = prefix | 8;
        ip = ip + 5;
        goto <D.19373>;
        <D.19409>:
        prefix = prefix | 16;
        ip = ip + 1;
        goto <D.19373>;
        <D.19410>:
        D.20652 = ctx.prefix_set;
        D.20653 = D.20652 & 4294967292;
        ctx.prefix_set = D.20653;
        D.20654 = check_underflow (&ctx, 3);
        if (D.20654 == 0) goto <D.19373>; else goto <D.20655>;
        <D.20655>:
        D.19925 = ctx.verifiable;
        if (D.19925 != 0) goto <D.20656>; else goto <D.20658>;
        <D.20658>:
        D.19927 = ctx.level;
        D.19928 = D.19927 & 128;
        if (D.19928 != 0) goto <D.20656>; else goto <D.20657>;
        <D.20656>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.20241 = ctx.ip_offset;
          D.20659 = monoeg_g_strdup_printf ("Instruction cpblk is not verifiable at 0x%04x", D.20241);
          vinfo->info.message = D.20659;
          vinfo->exception_type = 4;
          D.19874 = ctx.list;
          D.20660 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20660;
        }
        ctx.verifiable = 0;
        D.19927 = ctx.level;
        D.19931 = D.19927 & 16;
        if (D.19931 != 0) goto <D.20661>; else goto <D.20662>;
        <D.20661>:
        ctx.valid = 0;
        <D.20662>:
        <D.20657>:
        ip = ip + 1;
        goto <D.19373>;
        <D.19412>:
        D.20652 = ctx.prefix_set;
        D.20653 = D.20652 & 4294967292;
        ctx.prefix_set = D.20653;
        D.20663 = check_underflow (&ctx, 3);
        if (D.20663 == 0) goto <D.19373>; else goto <D.20664>;
        <D.20664>:
        D.19925 = ctx.verifiable;
        if (D.19925 != 0) goto <D.20665>; else goto <D.20667>;
        <D.20667>:
        D.19927 = ctx.level;
        D.19928 = D.19927 & 128;
        if (D.19928 != 0) goto <D.20665>; else goto <D.20666>;
        <D.20665>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.20241 = ctx.ip_offset;
          D.20668 = monoeg_g_strdup_printf ("Instruction initblk is not verifiable at 0x%04x", D.20241);
          vinfo->info.message = D.20668;
          vinfo->exception_type = 4;
          D.19874 = ctx.list;
          D.20669 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20669;
        }
        ctx.verifiable = 0;
        D.19927 = ctx.level;
        D.19931 = D.19927 & 16;
        if (D.19931 != 0) goto <D.20670>; else goto <D.20671>;
        <D.20670>:
        ctx.valid = 0;
        <D.20671>:
        <D.20666>:
        ip = ip + 1;
        goto <D.19373>;
        <D.19414>:
        ip = ip + 2;
        goto <D.19373>;
        <D.19415>:
        D.19892 = ctx.header;
        D.20672 = is_correct_rethrow (D.19892, ip_offset);
        if (D.20672 == 0) goto <D.20673>; else goto <D.20674>;
        <D.20673>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20675 = monoeg_g_strdup_printf ("rethrow must be used inside a catch handler at 0x%04x", D.20241);
          vinfo->info.message = D.20675;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20676 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20676;
        }
        ctx.valid = 0;
        <D.20674>:
        ctx.eval.size = 0;
        start = 1;
        ip = ip + 1;
        goto <D.19373>;
        <D.19417>:
        D.20282 = ip + 5;
        if (D.20282 > end) goto <D.20677>; else goto <D.20679>;
        <D.20679>:
        ip.23 = (unsigned int) ip;
        if (ip.23 > 4294967290) goto <D.20677>; else goto <D.20678>;
        <D.20677>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20680 = monoeg_g_strdup_printf ("Code overrun starting with 0x%x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20680;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20681 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20681;
        }
        ctx.valid = 0;
        goto <D.19373>;
        <D.20678>:
        D.20341 = ip + 1;
        D.20342 = *D.20341;
        D.20343 = (int) D.20342;
        do_sizeof (&ctx, D.20343);
        ip = ip + 5;
        goto <D.19373>;
        <D.19419>:
        do_refanytype (&ctx);
        ip = ip + 1;
        goto <D.19373>;
        <D.19420>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20682 = monoeg_g_strdup_printf ("Invalid instruction FE %x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20682;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20683 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20683;
        }
        ctx.valid = 0;
        ip = ip + 1;
        <D.19373>:
        goto <D.19122>;
        <D.19422>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20133 = *ip;
          D.20134 = (int) D.20133;
          D.20684 = monoeg_g_strdup_printf ("Invalid instruction %x at 0x%04x", D.20134, D.20241);
          vinfo->info.message = D.20684;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20685 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20685;
        }
        ctx.valid = 0;
        ip = ip + 1;
        <D.19122>:
        if (prefix != 0) goto <D.20686>; else goto <D.20687>;
        <D.20686>:
        D.20652 = ctx.prefix_set;
        if (D.20652 == 0) goto <D.20688>; else goto <D.20689>;
        <D.20688>:
        D.19909 = ctx.code;
        D.20241 = ctx.ip_offset;
        D.20690 = D.20241 * 12;
        D.20691 = D.19909 + D.20690;
        D.19909 = ctx.code;
        D.20241 = ctx.ip_offset;
        D.20690 = D.20241 * 12;
        D.20691 = D.19909 + D.20690;
        D.20692 = D.20691->flags;
        D.20693 = D.20692 | 1;
        D.20691->flags = D.20693;
        <D.20689>:
        D.20652 = ctx.prefix_set;
        D.20694 = D.20652 | prefix;
        ctx.prefix_set = D.20694;
        ctx.has_flags = 1;
        prefix = 0;
        goto <D.20695>;
        <D.20687>:
        D.20696 = ctx.has_flags;
        if (D.20696 == 0) goto <D.20697>; else goto <D.20698>;
        <D.20697>:
        D.19909 = ctx.code;
        D.20241 = ctx.ip_offset;
        D.20690 = D.20241 * 12;
        D.20691 = D.19909 + D.20690;
        D.19909 = ctx.code;
        D.20241 = ctx.ip_offset;
        D.20690 = D.20241 * 12;
        D.20691 = D.19909 + D.20690;
        D.20692 = D.20691->flags;
        D.20693 = D.20692 | 1;
        D.20691->flags = D.20693;
        <D.20698>:
        D.20652 = ctx.prefix_set;
        D.20699 = D.20652 & 8;
        if (D.20699 != 0) goto <D.20700>; else goto <D.20701>;
        <D.20700>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20702 = monoeg_g_strdup_printf ("Invalid instruction after constrained prefix at 0x%04x", D.20241);
          vinfo->info.message = D.20702;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20703 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20703;
        }
        ctx.valid = 0;
        <D.20701>:
        D.20652 = ctx.prefix_set;
        D.20704 = D.20652 & 16;
        if (D.20704 != 0) goto <D.20705>; else goto <D.20706>;
        <D.20705>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20707 = monoeg_g_strdup_printf ("Invalid instruction after readonly prefix at 0x%04x", D.20241);
          vinfo->info.message = D.20707;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20708 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20708;
        }
        ctx.valid = 0;
        <D.20706>:
        D.20652 = ctx.prefix_set;
        D.20709 = D.20652 & 2;
        if (D.20709 != 0) goto <D.20710>; else goto <D.20711>;
        <D.20710>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20712 = monoeg_g_strdup_printf ("Invalid instruction after volatile prefix at 0x%04x", D.20241);
          vinfo->info.message = D.20712;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20713 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20713;
        }
        ctx.valid = 0;
        <D.20711>:
        D.20652 = ctx.prefix_set;
        D.20714 = D.20652 & 1;
        if (D.20714 != 0) goto <D.20715>; else goto <D.20716>;
        <D.20715>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.20241 = ctx.ip_offset;
          D.20717 = monoeg_g_strdup_printf ("Invalid instruction after unaligned prefix at 0x%04x", D.20241);
          vinfo->info.message = D.20717;
          vinfo->exception_type = 3;
          D.19874 = ctx.list;
          D.20718 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20718;
        }
        ctx.valid = 0;
        <D.20716>:
        prefix = 0;
        ctx.prefix_set = prefix;
        ctx.has_flags = 0;
        <D.20695>:
      }
      <D.19118>:
      if (ip < end) goto <D.20719>; else goto <D.19119>;
      <D.20719>:
      D.19905 = ctx.valid;
      if (D.19905 != 0) goto <D.19428>; else goto <D.19119>;
      <D.19119>:
      D.20720 = ip != end;
      D.20721 = start == 0;
      D.20722 = D.20720 | D.20721;
      if (D.20722 != 0) goto <D.20723>; else goto <D.20724>;
      <D.20723>:
      D.19925 = ctx.verifiable;
      if (D.19925 != 0) goto <D.20725>; else goto <D.20726>;
      <D.20725>:
      D.19874 = ctx.list;
      if (D.19874 == 0B) goto <D.20727>; else goto <D.20728>;
      <D.20727>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.20729 = monoeg_g_strdup_printf ("Run ahead of method code at 0x%04x", ip_offset);
        vinfo->info.message = D.20729;
        vinfo->exception_type = 3;
        D.19874 = ctx.list;
        D.20730 = monoeg_g_slist_prepend (D.19874, vinfo);
        ctx.list = D.20730;
      }
      ctx.valid = 0;
      <D.20728>:
      <D.20726>:
      <D.20724>:
      i = 0;
      goto <D.19435>;
      <D.19434>:
      D.19909 = ctx.code;
      i.12 = (unsigned int) i;
      D.20731 = i.12 * 12;
      D.20732 = D.19909 + D.20731;
      D.20733 = D.20732->flags;
      D.20734 = (int) D.20733;
      D.20735 = D.20734 & 2;
      if (D.20735 != 0) goto <D.20736>; else goto <D.20737>;
      <D.20736>:
      D.19909 = ctx.code;
      i.12 = (unsigned int) i;
      D.20731 = i.12 * 12;
      D.20732 = D.19909 + D.20731;
      D.20733 = D.20732->flags;
      D.20734 = (int) D.20733;
      D.20738 = D.20734 & 1;
      if (D.20738 == 0) goto <D.20739>; else goto <D.20740>;
      <D.20739>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.20741 = monoeg_g_strdup_printf ("Branch or exception block target middle of intruction at 0x%04x", i);
        vinfo->info.message = D.20741;
        vinfo->exception_type = 3;
        D.19874 = ctx.list;
        D.20742 = monoeg_g_slist_prepend (D.19874, vinfo);
        ctx.list = D.20742;
      }
      ctx.valid = 0;
      <D.20740>:
      D.19909 = ctx.code;
      i.12 = (unsigned int) i;
      D.20731 = i.12 * 12;
      D.20732 = D.19909 + D.20731;
      D.20733 = D.20732->flags;
      D.20734 = (int) D.20733;
      D.20743 = D.20734 & 16;
      if (D.20743 != 0) goto <D.20744>; else goto <D.20745>;
      <D.20744>:
      D.19925 = ctx.verifiable;
      if (D.19925 != 0) goto <D.20746>; else goto <D.20748>;
      <D.20748>:
      D.19927 = ctx.level;
      D.19928 = D.19927 & 128;
      if (D.19928 != 0) goto <D.20746>; else goto <D.20747>;
      <D.20746>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.20749 = monoeg_g_strdup_printf ("Branch to delegate code sequence at 0x%04x", i);
        vinfo->info.message = D.20749;
        vinfo->exception_type = 4;
        D.19874 = ctx.list;
        D.20750 = monoeg_g_slist_prepend (D.19874, vinfo);
        ctx.list = D.20750;
      }
      ctx.verifiable = 0;
      D.19927 = ctx.level;
      D.19931 = D.19927 & 16;
      if (D.19931 != 0) goto <D.20751>; else goto <D.20752>;
      <D.20751>:
      ctx.valid = 0;
      <D.20752>:
      <D.20747>:
      <D.20745>:
      <D.20737>:
      D.19909 = ctx.code;
      i.12 = (unsigned int) i;
      D.20731 = i.12 * 12;
      D.20732 = D.19909 + D.20731;
      D.20733 = D.20732->flags;
      D.20734 = (int) D.20733;
      D.20753 = D.20734 & 32;
      if (D.20753 != 0) goto <D.20754>; else goto <D.20755>;
      <D.20754>:
      D.20756 = ctx.has_this_store;
      if (D.20756 != 0) goto <D.20757>; else goto <D.20758>;
      <D.20757>:
      D.19925 = ctx.verifiable;
      if (D.19925 != 0) goto <D.20759>; else goto <D.20761>;
      <D.20761>:
      D.19927 = ctx.level;
      D.19928 = D.19927 & 128;
      if (D.19928 != 0) goto <D.20759>; else goto <D.20760>;
      <D.20759>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.20762 = monoeg_g_strdup_printf ("Invalid ldftn with virtual function in method with stdarg 0 at  0x%04x", i);
        vinfo->info.message = D.20762;
        vinfo->exception_type = 4;
        D.19874 = ctx.list;
        D.20763 = monoeg_g_slist_prepend (D.19874, vinfo);
        ctx.list = D.20763;
      }
      ctx.verifiable = 0;
      D.19927 = ctx.level;
      D.19931 = D.19927 & 16;
      if (D.19931 != 0) goto <D.20764>; else goto <D.20765>;
      <D.20764>:
      ctx.valid = 0;
      <D.20765>:
      <D.20760>:
      <D.20758>:
      <D.20755>:
      D.19909 = ctx.code;
      i.12 = (unsigned int) i;
      D.20731 = i.12 * 12;
      D.20732 = D.19909 + D.20731;
      D.20733 = D.20732->flags;
      D.20734 = (int) D.20733;
      D.20766 = D.20734 & 64;
      if (D.20766 != 0) goto <D.20767>; else goto <D.20768>;
      <D.20767>:
      D.20756 = ctx.has_this_store;
      if (D.20756 != 0) goto <D.20769>; else goto <D.20770>;
      <D.20769>:
      D.19925 = ctx.verifiable;
      if (D.19925 != 0) goto <D.20771>; else goto <D.20773>;
      <D.20773>:
      D.19927 = ctx.level;
      D.19928 = D.19927 & 128;
      if (D.19928 != 0) goto <D.20771>; else goto <D.20772>;
      <D.20771>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.20774 = 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.20774;
        vinfo->exception_type = 4;
        D.19874 = ctx.list;
        D.20775 = monoeg_g_slist_prepend (D.19874, vinfo);
        ctx.list = D.20775;
      }
      ctx.verifiable = 0;
      D.19927 = ctx.level;
      D.19931 = D.19927 & 16;
      if (D.19931 != 0) goto <D.20776>; else goto <D.20777>;
      <D.20776>:
      ctx.valid = 0;
      <D.20777>:
      <D.20772>:
      <D.20770>:
      <D.20768>:
      i = i + 1;
      <D.19435>:
      D.20016 = ctx.code_size;
      if (D.20016 > i) goto <D.20778>; else goto <D.19436>;
      <D.20778>:
      i.26 = (unsigned int) i;
      if (i.26 < ip_offset) goto <D.19434>; else goto <D.19436>;
      <D.19436>:
      D.20780 = ctx.method;
      D.20781 = mono_method_is_constructor (D.20780);
      if (D.20781 != 0) goto <D.20782>; else goto <D.20783>;
      <D.20782>:
      D.20784 = ctx.super_ctor_called;
      if (D.20784 == 0) goto <D.20785>; else goto <D.20786>;
      <D.20785>:
      D.20780 = ctx.method;
      D.20787 = D.20780->klass;
      D.20788 = BIT_FIELD_REF <*D.20787, 8, 160>;
      D.20789 = D.20788 & 8;
      if (D.20789 == 0) goto <D.20790>; else goto <D.20791>;
      <D.20790>:
      D.20780 = ctx.method;
      D.20787 = D.20780->klass;
      D.20321 = mono_defaults.object_class;
      if (D.20787 != D.20321) goto <D.20792>; else goto <D.20793>;
      <D.20792>:
      {
        char * method_name;
        char * type;

        D.20780 = ctx.method;
        method_name = mono_method_full_name (D.20780, 1);
        D.20780 = ctx.method;
        D.20787 = D.20780->klass;
        type = mono_type_get_full_name (D.20787);
        D.20780 = ctx.method;
        D.20787 = D.20780->klass;
        D.20796 = D.20787->parent;
        if (D.20796 != 0B) goto <D.20797>; else goto <D.20794>;
        <D.20797>:
        D.20780 = ctx.method;
        D.20787 = D.20780->klass;
        D.20796 = D.20787->parent;
        D.20798 = D.20796->exception_type;
        if (D.20798 != 0) goto <D.20799>; else goto <D.20794>;
        <D.20799>:
        D.19925 = ctx.verifiable;
        if (D.19925 != 0) goto <D.20800>; else goto <D.20802>;
        <D.20802>:
        D.19927 = ctx.level;
        D.19928 = D.19927 & 128;
        if (D.19928 != 0) goto <D.20800>; else goto <D.20801>;
        <D.20800>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.20803 = 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.20803;
          vinfo->exception_type = 4;
          D.19874 = ctx.list;
          D.20804 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20804;
        }
        ctx.verifiable = 0;
        D.19927 = ctx.level;
        D.19931 = D.19927 & 16;
        if (D.19931 != 0) goto <D.20805>; else goto <D.20806>;
        <D.20805>:
        ctx.valid = 0;
        <D.20806>:
        <D.20801>:
        goto <D.20795>;
        <D.20794>:
        D.19925 = ctx.verifiable;
        if (D.19925 != 0) goto <D.20807>; else goto <D.20809>;
        <D.20809>:
        D.19927 = ctx.level;
        D.19928 = D.19927 & 128;
        if (D.19928 != 0) goto <D.20807>; else goto <D.20808>;
        <D.20807>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.20810 = monoeg_g_strdup_printf ("Constructor %s for type %s not calling base type ctor.", method_name, type);
          vinfo->info.message = D.20810;
          vinfo->exception_type = 4;
          D.19874 = ctx.list;
          D.20811 = monoeg_g_slist_prepend (D.19874, vinfo);
          ctx.list = D.20811;
        }
        ctx.verifiable = 0;
        D.19927 = ctx.level;
        D.19931 = D.19927 & 16;
        if (D.19931 != 0) goto <D.20812>; else goto <D.20813>;
        <D.20812>:
        ctx.valid = 0;
        <D.20813>:
        <D.20808>:
        <D.20795>:
        monoeg_g_free (method_name);
        monoeg_g_free (type);
      }
      <D.20793>:
      <D.20791>:
      <D.20786>:
      <D.20783>:
      cleanup:
      D.19909 = ctx.code;
      if (D.19909 != 0B) goto <D.20814>; else goto <D.20815>;
      <D.20814>:
      i = 0;
      goto <D.19442>;
      <D.19441>:
      D.19909 = ctx.code;
      i.12 = (unsigned int) i;
      D.20731 = i.12 * 12;
      D.20732 = D.19909 + D.20731;
      D.20816 = D.20732->stack;
      if (D.20816 != 0B) goto <D.20817>; else goto <D.20818>;
      <D.20817>:
      D.19909 = ctx.code;
      i.12 = (unsigned int) i;
      D.20731 = i.12 * 12;
      D.20732 = D.19909 + D.20731;
      D.20816 = D.20732->stack;
      monoeg_g_free (D.20816);
      <D.20818>:
      i = i + 1;
      <D.19442>:
      i.27 = (unsigned int) i;
      D.19892 = ctx.header;
      D.19897 = D.19892->code_size;
      if (i.27 < D.19897) goto <D.19441>; else goto <D.19443>;
      <D.19443>:
      <D.20815>:
      tmp = ctx.funptrs;
      goto <D.19445>;
      <D.19444>:
      D.20820 = tmp->data;
      monoeg_g_free (D.20820);
      tmp = tmp->next;
      <D.19445>:
      if (tmp != 0B) goto <D.19444>; else goto <D.19446>;
      <D.19446>:
      D.20821 = ctx.funptrs;
      monoeg_g_slist_free (D.20821);
      tmp = ctx.exception_types;
      goto <D.19448>;
      <D.19447>:
      D.20820 = tmp->data;
      mono_metadata_free_type (D.20820);
      tmp = tmp->next;
      <D.19448>:
      if (tmp != 0B) goto <D.19447>; else goto <D.19449>;
      <D.19449>:
      D.20822 = ctx.exception_types;
      monoeg_g_slist_free (D.20822);
      i = 0;
      goto <D.19451>;
      <D.19450>:
      D.19968 = ctx.locals;
      i.12 = (unsigned int) i;
      D.19970 = i.12 * 4;
      D.19971 = D.19968 + D.19970;
      D.19973 = *D.19971;
      if (D.19973 != 0B) goto <D.20823>; else goto <D.20824>;
      <D.20823>:
      D.19968 = ctx.locals;
      i.12 = (unsigned int) i;
      D.19970 = i.12 * 4;
      D.19971 = D.19968 + D.19970;
      D.19973 = *D.19971;
      mono_metadata_free_type (D.19973);
      <D.20824>:
      i = i + 1;
      <D.19451>:
      D.19916 = ctx.num_locals;
      if (D.19916 > i) goto <D.19450>; else goto <D.19452>;
      <D.19452>:
      i = 0;
      goto <D.19454>;
      <D.19453>:
      D.19942 = ctx.params;
      i.12 = (unsigned int) i;
      D.19970 = i.12 * 4;
      D.19984 = D.19942 + D.19970;
      D.19985 = *D.19984;
      if (D.19985 != 0B) goto <D.20825>; else goto <D.20826>;
      <D.20825>:
      D.19942 = ctx.params;
      i.12 = (unsigned int) i;
      D.19970 = i.12 * 4;
      D.19984 = D.19942 + D.19970;
      D.19985 = *D.19984;
      mono_metadata_free_type (D.19985);
      <D.20826>:
      i = i + 1;
      <D.19454>:
      D.19934 = ctx.max_args;
      if (D.19934 > i) goto <D.19453>; else goto <D.19455>;
      <D.19455>:
      D.20827 = ctx.eval.stack;
      if (D.20827 != 0B) goto <D.20828>; else goto <D.20829>;
      <D.20828>:
      D.20827 = ctx.eval.stack;
      monoeg_g_free (D.20827);
      <D.20829>:
      D.19909 = ctx.code;
      if (D.19909 != 0B) goto <D.20830>; else goto <D.20831>;
      <D.20830>:
      D.19909 = ctx.code;
      monoeg_g_free (D.19909);
      <D.20831>:
      D.19968 = ctx.locals;
      monoeg_g_free (D.19968);
      D.19942 = ctx.params;
      monoeg_g_free (D.19942);
      mono_basic_block_free (original_bb);
      D.19892 = ctx.header;
      mono_metadata_free_mh (D.19892);
      D.19868 = ctx.list;
      return D.19868;
    }
  finally
    {
      error = {CLOBBER};
      ctx = {CLOBBER};
    }
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.20838;
  int D.20843;
  void * D.20845;
  unsigned int D.20846;

  D.20838 = __builtin_constant_p (__len);
  if (D.20838 != 0) goto <D.20839>; else goto <D.20840>;
  <D.20839>:
  if (__len == 0) goto <D.20841>; else goto <D.20842>;
  <D.20841>:
  D.20843 = __builtin_constant_p (__ch);
  if (D.20843 == 0) goto <D.20836>; else goto <D.20844>;
  <D.20844>:
  if (__ch != 0) goto <D.20836>; else goto <D.20837>;
  <D.20836>:
  __warn_memset_zero_len ();
  D.20845 = __dest;
  return D.20845;
  <D.20837>:
  <D.20842>:
  <D.20840>:
  D.20846 = __builtin_object_size (__dest, 0);
  D.20845 = __builtin___memset_chk (__dest, __ch, __len, D.20846);
  return D.20845;
}


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

  D.20849 = __builtin_object_size (__dest, 0);
  D.20848 = __builtin___memcpy_chk (__dest, __src, __len, D.20849);
  return D.20848;
}


stack_init (struct VerifyContext * ctx, struct ILCodeDesc * state)
{
  short unsigned int D.20851;
  int D.20852;
  int D.20853;
  short unsigned int D.20856;
  short unsigned int D.20857;

  D.20851 = state->flags;
  D.20852 = (int) D.20851;
  D.20853 = D.20852 & 4;
  if (D.20853 != 0) goto <D.20854>; else goto <D.20855>;
  <D.20854>:
  return;
  <D.20855>:
  state->max_size = 0;
  D.20856 = state->max_size;
  state->size = D.20856;
  D.20851 = state->flags;
  D.20857 = D.20851 | 4;
  state->flags = D.20857;
}


get_stack_type (struct MonoType * type)
{
  unsigned char D.20859;
  unsigned char D.20860;
  unsigned char D.20861;
  int D.20864;
  int D.20865;
  int mask;
  int type_kind;
  void handle_enum = <<< error >>>;

  mask = 0;
  D.20859 = type->type;
  type_kind = (int) D.20859;
  D.20860 = BIT_FIELD_REF <*type, 8, 56>;
  D.20861 = D.20860 & 64;
  if (D.20861 != 0) goto <D.20862>; else goto <D.20863>;
  <D.20862>:
  mask = 256;
  <D.20863>:
  handle_enum:
  switch (type_kind) <default: <D.18046>, case 2: <D.18022>, case 3: <D.18025>, case 4: <D.18020>, case 5: <D.18021>, case 6: <D.18023>, case 7: <D.18024>, case 8: <D.18026>, case 9: <D.18027>, case 10: <D.18040>, case 11: <D.18041>, case 12: <D.18042>, case 13: <D.18043>, case 14: <D.18036>, case 15: <D.18031>, case 17: <D.18045>, case 18: <D.18035>, case 19: <D.18033>, case 20: <D.18039>, case 21: <D.18044>, case 22: <D.18032>, case 24: <D.18028>, case 25: <D.18029>, case 27: <D.18030>, case 28: <D.18037>, case 29: <D.18038>, case 30: <D.18034>>
  <D.18020>:
  <D.18021>:
  <D.18022>:
  <D.18023>:
  <D.18024>:
  <D.18025>:
  <D.18026>:
  <D.18027>:
  D.20864 = mask | 1;
  return D.20864;
  <D.18028>:
  <D.18029>:
  D.20864 = mask | 3;
  return D.20864;
  <D.18030>:
  <D.18031>:
  <D.18032>:
  D.20864 = mask | 5;
  return D.20864;
  <D.18033>:
  <D.18034>:
  <D.18035>:
  <D.18036>:
  <D.18037>:
  <D.18038>:
  <D.18039>:
  D.20864 = mask | 6;
  return D.20864;
  <D.18040>:
  <D.18041>:
  D.20864 = mask | 2;
  return D.20864;
  <D.18042>:
  <D.18043>:
  D.20864 = mask | 4;
  return D.20864;
  <D.18044>:
  <D.18045>:
  D.20865 = mono_type_is_enum_type (type);
  if (D.20865 != 0) goto <D.20866>; else goto <D.20867>;
  <D.20866>:
  type = mono_type_get_underlying_type_any (type);
  if (type == 0B) goto <D.20868>; else goto <D.20869>;
  <D.20868>:
  D.20864 = 0;
  return D.20864;
  <D.20869>:
  D.20859 = type->type;
  type_kind = (int) D.20859;
  goto handle_enum;
  <D.20867>:
  D.20864 = mask | 6;
  return D.20864;
  <D.18046>:
  D.20864 = 0;
  return D.20864;
}


mono_type_is_enum_type (struct MonoType * type)
{
  unsigned char D.20871;
  struct MonoClass * D.20874;
  unsigned char D.20875;
  unsigned char D.20876;
  gboolean D.20879;
  struct MonoGenericClass * D.20882;
  struct MonoClass * D.20883;
  unsigned char D.20884;
  unsigned char D.20885;

  D.20871 = type->type;
  if (D.20871 == 17) goto <D.20872>; else goto <D.20873>;
  <D.20872>:
  D.20874 = type->data.klass;
  D.20875 = BIT_FIELD_REF <*D.20874, 8, 160>;
  D.20876 = D.20875 & 16;
  if (D.20876 != 0) goto <D.20877>; else goto <D.20878>;
  <D.20877>:
  D.20879 = 1;
  return D.20879;
  <D.20878>:
  <D.20873>:
  D.20871 = type->type;
  if (D.20871 == 21) goto <D.20880>; else goto <D.20881>;
  <D.20880>:
  D.20882 = type->data.generic_class;
  D.20883 = D.20882->container_class;
  D.20884 = BIT_FIELD_REF <*D.20883, 8, 160>;
  D.20885 = D.20884 & 16;
  if (D.20885 != 0) goto <D.20886>; else goto <D.20887>;
  <D.20886>:
  D.20879 = 1;
  return D.20879;
  <D.20887>:
  <D.20881>:
  D.20879 = 0;
  return D.20879;
}


mono_type_get_underlying_type_any (struct MonoType * type)
{
  unsigned char D.20889;
  struct MonoClass * D.20892;
  unsigned char D.20893;
  unsigned char D.20894;
  struct MonoType * D.20897;
  struct MonoGenericClass * D.20900;
  struct MonoClass * D.20901;
  unsigned char D.20902;
  unsigned char D.20903;

  D.20889 = type->type;
  if (D.20889 == 17) goto <D.20890>; else goto <D.20891>;
  <D.20890>:
  D.20892 = type->data.klass;
  D.20893 = BIT_FIELD_REF <*D.20892, 8, 160>;
  D.20894 = D.20893 & 16;
  if (D.20894 != 0) goto <D.20895>; else goto <D.20896>;
  <D.20895>:
  D.20892 = type->data.klass;
  D.20897 = mono_class_enum_basetype (D.20892);
  return D.20897;
  <D.20896>:
  <D.20891>:
  D.20889 = type->type;
  if (D.20889 == 21) goto <D.20898>; else goto <D.20899>;
  <D.20898>:
  D.20900 = type->data.generic_class;
  D.20901 = D.20900->container_class;
  D.20902 = BIT_FIELD_REF <*D.20901, 8, 160>;
  D.20903 = D.20902 & 16;
  if (D.20903 != 0) goto <D.20904>; else goto <D.20905>;
  <D.20904>:
  D.20900 = type->data.generic_class;
  D.20901 = D.20900->container_class;
  D.20897 = mono_class_enum_basetype (D.20901);
  return D.20897;
  <D.20905>:
  <D.20899>:
  D.20897 = type;
  return D.20897;
}


verify_clause_relationship (struct VerifyContext * ctx, struct MonoExceptionClause * clause, struct MonoExceptionClause * to_test)
{
  unsigned int D.20907;
  unsigned int D.20910;
  unsigned int D.20911;
  int D.20912;
  gchar * D.20915;
  struct GSList * D.20916;
  struct GSList * D.20917;
  int D.20918;
  gchar * D.20921;
  struct GSList * D.20922;
  unsigned int D.20923;
  unsigned int D.20924;
  unsigned int D.20927;
  unsigned int D.20928;
  unsigned int D.20931;
  unsigned int D.20932;
  unsigned int D.20933;
  uint32_t iftmp.28;
  unsigned int D.20935;
  int D.20939;
  gchar * D.20942;
  struct GSList * D.20943;
  gchar * D.20947;
  struct GSList * D.20948;
  unsigned int D.20951;
  int D.20952;
  uint32_t iftmp.29;
  int D.20958;
  int D.20959;
  gchar * D.20962;
  struct GSList * D.20963;

  D.20907 = to_test->flags;
  if (D.20907 == 1) goto <D.20908>; else goto <D.20909>;
  <D.20908>:
  D.20910 = to_test->handler_offset;
  D.20911 = to_test->data.filter_offset;
  D.20912 = is_clause_inside_range (clause, D.20911, D.20910);
  if (D.20912 != 0) goto <D.20913>; else goto <D.20914>;
  <D.20913>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.20915 = monoeg_g_strdup_printf ("Exception clause inside filter");
    vinfo->info.message = D.20915;
    vinfo->exception_type = 3;
    D.20916 = ctx->list;
    D.20917 = monoeg_g_slist_prepend (D.20916, vinfo);
    ctx->list = D.20917;
  }
  ctx->valid = 0;
  return;
  <D.20914>:
  <D.20909>:
  D.20918 = is_clause_nested (clause, to_test);
  if (D.20918 != 0) goto <D.20919>; else goto <D.20920>;
  <D.20919>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.20921 = monoeg_g_strdup_printf ("Nested exception clause appears after enclosing clause");
    vinfo->info.message = D.20921;
    vinfo->exception_type = 3;
    D.20916 = ctx->list;
    D.20922 = monoeg_g_slist_prepend (D.20916, vinfo);
    ctx->list = D.20922;
  }
  ctx->valid = 0;
  return;
  <D.20920>:
  D.20923 = clause->try_offset;
  D.20924 = to_test->try_offset;
  if (D.20923 == D.20924) goto <D.20925>; else goto <D.20926>;
  <D.20925>:
  D.20927 = clause->try_len;
  D.20928 = to_test->try_len;
  if (D.20927 == D.20928) goto <D.20929>; else goto <D.20930>;
  <D.20929>:
  D.20931 = clause->handler_offset;
  D.20932 = clause->handler_len;
  D.20933 = D.20931 + D.20932;
  D.20935 = clause->flags;
  if (D.20935 == 1) goto <D.20936>; else goto <D.20937>;
  <D.20936>:
  iftmp.28 = clause->data.filter_offset;
  goto <D.20938>;
  <D.20937>:
  iftmp.28 = clause->handler_offset;
  <D.20938>:
  D.20939 = is_clause_in_range (to_test, iftmp.28, D.20933);
  if (D.20939 != 0) goto <D.20940>; else goto <D.20941>;
  <D.20940>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.20942 = monoeg_g_strdup_printf ("Exception handlers overlap");
    vinfo->info.message = D.20942;
    vinfo->exception_type = 3;
    D.20916 = ctx->list;
    D.20943 = monoeg_g_slist_prepend (D.20916, vinfo);
    ctx->list = D.20943;
  }
  ctx->valid = 0;
  return;
  <D.20941>:
  D.20935 = clause->flags;
  if (D.20935 > 1) goto <D.20944>; else goto <D.20946>;
  <D.20946>:
  D.20907 = to_test->flags;
  if (D.20907 > 1) goto <D.20944>; else goto <D.20945>;
  <D.20944>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.20947 = monoeg_g_strdup_printf ("Exception clauses with shared protected block are neither catch or filter");
    vinfo->info.message = D.20947;
    vinfo->exception_type = 3;
    D.20916 = ctx->list;
    D.20948 = monoeg_g_slist_prepend (D.20916, vinfo);
    ctx->list = D.20948;
  }
  ctx->valid = 0;
  return;
  <D.20945>:
  return;
  <D.20930>:
  <D.20926>:
  D.20923 = clause->try_offset;
  D.20927 = clause->try_len;
  D.20951 = D.20923 + D.20927;
  D.20923 = clause->try_offset;
  D.20952 = is_clause_in_range (to_test, D.20923, D.20951);
  if (D.20952 != 0) goto <D.20949>; else goto <D.20953>;
  <D.20953>:
  D.20931 = clause->handler_offset;
  D.20932 = clause->handler_len;
  D.20933 = D.20931 + D.20932;
  D.20935 = clause->flags;
  if (D.20935 == 1) goto <D.20955>; else goto <D.20956>;
  <D.20955>:
  iftmp.29 = clause->data.filter_offset;
  goto <D.20957>;
  <D.20956>:
  iftmp.29 = clause->handler_offset;
  <D.20957>:
  D.20958 = is_clause_in_range (to_test, iftmp.29, D.20933);
  if (D.20958 != 0) goto <D.20949>; else goto <D.20950>;
  <D.20949>:
  D.20959 = is_clause_nested (to_test, clause);
  if (D.20959 == 0) goto <D.20960>; else goto <D.20961>;
  <D.20960>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.20962 = monoeg_g_strdup_printf ("Exception clauses overlap");
    vinfo->info.message = D.20962;
    vinfo->exception_type = 3;
    D.20916 = ctx->list;
    D.20963 = monoeg_g_slist_prepend (D.20916, vinfo);
    ctx->list = D.20963;
  }
  ctx->valid = 0;
  <D.20961>:
  <D.20950>:
}


is_clause_inside_range (struct MonoExceptionClause * clause, guint32 start, guint32 end)
{
  unsigned int D.20967;
  unsigned int D.20969;
  unsigned int D.20970;
  gboolean D.20971;
  uint32_t iftmp.30;
  unsigned int D.20975;
  unsigned int D.20980;
  unsigned int D.20981;
  unsigned int D.20982;

  D.20967 = clause->try_offset;
  if (D.20967 < start) goto <D.20965>; else goto <D.20968>;
  <D.20968>:
  D.20967 = clause->try_offset;
  D.20969 = clause->try_len;
  D.20970 = D.20967 + D.20969;
  if (D.20970 > end) goto <D.20965>; else goto <D.20966>;
  <D.20965>:
  D.20971 = 0;
  return D.20971;
  <D.20966>:
  D.20975 = clause->flags;
  if (D.20975 == 1) goto <D.20976>; else goto <D.20977>;
  <D.20976>:
  iftmp.30 = clause->data.filter_offset;
  goto <D.20978>;
  <D.20977>:
  iftmp.30 = clause->handler_offset;
  <D.20978>:
  if (iftmp.30 < start) goto <D.20972>; else goto <D.20979>;
  <D.20979>:
  D.20980 = clause->handler_offset;
  D.20981 = clause->handler_len;
  D.20982 = D.20980 + D.20981;
  if (D.20982 > end) goto <D.20972>; else goto <D.20973>;
  <D.20972>:
  D.20971 = 0;
  return D.20971;
  <D.20973>:
  D.20971 = 1;
  return D.20971;
}


is_clause_in_range (struct MonoExceptionClause * clause, guint32 start, guint32 end)
{
  unsigned int D.20984;
  gboolean D.20989;
  uint32_t iftmp.31;
  unsigned int D.20991;
  uint32_t iftmp.32;

  D.20984 = clause->try_offset;
  if (D.20984 >= start) goto <D.20985>; else goto <D.20986>;
  <D.20985>:
  D.20984 = clause->try_offset;
  if (D.20984 < end) goto <D.20987>; else goto <D.20988>;
  <D.20987>:
  D.20989 = 1;
  return D.20989;
  <D.20988>:
  <D.20986>:
  D.20991 = clause->flags;
  if (D.20991 == 1) goto <D.20992>; else goto <D.20993>;
  <D.20992>:
  iftmp.31 = clause->data.filter_offset;
  goto <D.20994>;
  <D.20993>:
  iftmp.31 = clause->handler_offset;
  <D.20994>:
  if (iftmp.31 >= start) goto <D.20995>; else goto <D.20996>;
  <D.20995>:
  D.20991 = clause->flags;
  if (D.20991 == 1) goto <D.20998>; else goto <D.20999>;
  <D.20998>:
  iftmp.32 = clause->data.filter_offset;
  goto <D.21000>;
  <D.20999>:
  iftmp.32 = clause->handler_offset;
  <D.21000>:
  if (iftmp.32 < end) goto <D.21001>; else goto <D.21002>;
  <D.21001>:
  D.20989 = 1;
  return D.20989;
  <D.21002>:
  <D.20996>:
  D.20989 = 0;
  return D.20989;
}


is_clause_nested (struct MonoExceptionClause * clause, struct MonoExceptionClause * nested)
{
  unsigned int D.21004;
  unsigned int D.21007;
  unsigned int D.21008;
  int D.21009;
  gboolean D.21012;
  int iftmp.33;
  unsigned int D.21017;
  unsigned int D.21018;
  unsigned int D.21019;
  int D.21020;
  unsigned int D.21022;
  unsigned int D.21023;
  int D.21024;

  D.21004 = clause->flags;
  if (D.21004 == 1) goto <D.21005>; else goto <D.21006>;
  <D.21005>:
  D.21007 = clause->handler_offset;
  D.21008 = clause->data.filter_offset;
  D.21009 = is_clause_inside_range (nested, D.21008, D.21007);
  if (D.21009 != 0) goto <D.21010>; else goto <D.21011>;
  <D.21010>:
  D.21012 = 1;
  return D.21012;
  <D.21011>:
  <D.21006>:
  D.21017 = clause->try_offset;
  D.21018 = clause->try_len;
  D.21019 = D.21017 + D.21018;
  D.21017 = clause->try_offset;
  D.21020 = is_clause_inside_range (nested, D.21017, D.21019);
  if (D.21020 != 0) goto <D.21014>; else goto <D.21021>;
  <D.21021>:
  D.21007 = clause->handler_offset;
  D.21022 = clause->handler_len;
  D.21023 = D.21007 + D.21022;
  D.21007 = clause->handler_offset;
  D.21024 = is_clause_inside_range (nested, D.21007, D.21023);
  if (D.21024 != 0) goto <D.21014>; else goto <D.21015>;
  <D.21014>:
  iftmp.33 = 1;
  goto <D.21016>;
  <D.21015>:
  iftmp.33 = 0;
  <D.21016>:
  D.21012 = iftmp.33;
  return D.21012;
}


mono_type_is_valid_in_context (struct VerifyContext * ctx, struct MonoType * type)
{
  unsigned int D.21028;
  gchar * D.21029;
  struct GSList * D.21030;
  struct GSList * D.21031;
  gboolean D.21032;
  int D.21033;
  const char * iftmp.34;
  unsigned char D.21037;
  const char * iftmp.35;
  char D.21042;
  const char * iftmp.36;
  gchar * D.21050;
  struct GSList * D.21051;
  struct MonoLoaderError * D.21054;
  unsigned char D.21056;
  struct MonoGenericClass * D.21059;
  int D.21061;
  const char * D.21063;
  const char * D.21064;
  gchar * D.21065;
  struct GSList * D.21066;
  gchar * D.21067;
  struct GSList * D.21068;
  struct MonoClass * D.21071;
  unsigned char D.21072;
  gchar * D.21075;
  struct GSList * D.21076;
  int D.21079;
  gchar * D.21082;
  struct GSList * D.21083;
  int D.21084;
  gchar * D.21087;
  struct GSList * D.21088;
  struct MonoClass * klass;

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

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.21028 = ctx->ip_offset;
    D.21029 = monoeg_g_strdup_printf ("Invalid null type at 0x%04x", D.21028);
    vinfo->info.message = D.21029;
    vinfo->exception_type = 12;
    D.21030 = ctx->list;
    D.21031 = monoeg_g_slist_prepend (D.21030, vinfo);
    ctx->list = D.21031;
  }
  ctx->valid = 0;
  D.21032 = 0;
  return D.21032;
  <D.21027>:
  D.21033 = is_valid_type_in_context (ctx, type);
  if (D.21033 == 0) goto <D.21034>; else goto <D.21035>;
  <D.21034>:
  {
    char * str;

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

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 1;
      D.21028 = ctx->ip_offset;
      D.21037 = type->type;
      if (D.21037 == 19) goto <D.21038>; else goto <D.21039>;
      <D.21038>:
      iftmp.34 = "class";
      goto <D.21040>;
      <D.21039>:
      iftmp.34 = "method";
      <D.21040>:
      D.21042 = *str;
      if (D.21042 != 33) goto <D.21043>; else goto <D.21044>;
      <D.21043>:
      D.21037 = type->type;
      if (D.21037 == 19) goto <D.21046>; else goto <D.21047>;
      <D.21046>:
      iftmp.36 = "!";
      goto <D.21048>;
      <D.21047>:
      iftmp.36 = "!!";
      <D.21048>:
      iftmp.35 = iftmp.36;
      goto <D.21049>;
      <D.21044>:
      iftmp.35 = "";
      <D.21049>:
      D.21050 = monoeg_g_strdup_printf ("Invalid generic type (%s%s) (argument out of range or %s is not generic) at 0x%04x", iftmp.35, str, iftmp.34, D.21028);
      vinfo->info.message = D.21050;
      vinfo->exception_type = 12;
      D.21030 = ctx->list;
      D.21051 = monoeg_g_slist_prepend (D.21030, vinfo);
      ctx->list = D.21051;
    }
    ctx->valid = 0;
    monoeg_g_free (str);
    D.21032 = 0;
    return D.21032;
  }
  <D.21035>:
  klass = mono_class_from_mono_type (type);
  mono_class_init (klass);
  D.21054 = mono_loader_get_last_error ();
  if (D.21054 != 0B) goto <D.21052>; else goto <D.21055>;
  <D.21055>:
  D.21056 = klass->exception_type;
  if (D.21056 != 0) goto <D.21052>; else goto <D.21053>;
  <D.21052>:
  D.21059 = klass->generic_class;
  if (D.21059 != 0B) goto <D.21060>; else goto <D.21057>;
  <D.21060>:
  D.21061 = mono_class_is_valid_generic_instantiation (0B, klass);
  if (D.21061 == 0) goto <D.21062>; else goto <D.21057>;
  <D.21062>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.21028 = ctx->ip_offset;
    D.21063 = klass->name;
    D.21064 = klass->name_space;
    D.21065 = monoeg_g_strdup_printf ("Invalid generic instantiation of type %s.%s at 0x%04x", D.21064, D.21063, D.21028);
    vinfo->info.message = D.21065;
    vinfo->exception_type = 7;
    D.21030 = ctx->list;
    D.21066 = monoeg_g_slist_prepend (D.21030, vinfo);
    ctx->list = D.21066;
  }
  ctx->valid = 0;
  goto <D.21058>;
  <D.21057>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.21028 = ctx->ip_offset;
    D.21063 = klass->name;
    D.21064 = klass->name_space;
    D.21067 = monoeg_g_strdup_printf ("Could not load type %s.%s at 0x%04x", D.21064, D.21063, D.21028);
    vinfo->info.message = D.21067;
    vinfo->exception_type = 7;
    D.21030 = ctx->list;
    D.21068 = monoeg_g_slist_prepend (D.21030, vinfo);
    ctx->list = D.21068;
  }
  ctx->valid = 0;
  <D.21058>:
  mono_loader_clear_error ();
  D.21032 = 0;
  return D.21032;
  <D.21053>:
  D.21059 = klass->generic_class;
  if (D.21059 != 0B) goto <D.21069>; else goto <D.21070>;
  <D.21069>:
  D.21059 = klass->generic_class;
  D.21071 = D.21059->container_class;
  D.21072 = D.21071->exception_type;
  if (D.21072 != 0) goto <D.21073>; else goto <D.21074>;
  <D.21073>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.21028 = ctx->ip_offset;
    D.21063 = klass->name;
    D.21064 = klass->name_space;
    D.21075 = monoeg_g_strdup_printf ("Could not load type %s.%s at 0x%04x", D.21064, D.21063, D.21028);
    vinfo->info.message = D.21075;
    vinfo->exception_type = 7;
    D.21030 = ctx->list;
    D.21076 = monoeg_g_slist_prepend (D.21030, vinfo);
    ctx->list = D.21076;
  }
  ctx->valid = 0;
  D.21032 = 0;
  return D.21032;
  <D.21074>:
  <D.21070>:
  D.21059 = klass->generic_class;
  if (D.21059 == 0B) goto <D.21077>; else goto <D.21078>;
  <D.21077>:
  D.21032 = 1;
  return D.21032;
  <D.21078>:
  D.21079 = mono_class_is_valid_generic_instantiation (ctx, klass);
  if (D.21079 == 0) goto <D.21080>; else goto <D.21081>;
  <D.21080>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.21028 = ctx->ip_offset;
    D.21063 = klass->name;
    D.21064 = klass->name_space;
    D.21082 = monoeg_g_strdup_printf ("Invalid generic type instantiation of type %s.%s at 0x%04x", D.21064, D.21063, D.21028);
    vinfo->info.message = D.21082;
    vinfo->exception_type = 7;
    D.21030 = ctx->list;
    D.21083 = monoeg_g_slist_prepend (D.21030, vinfo);
    ctx->list = D.21083;
  }
  ctx->valid = 0;
  D.21032 = 0;
  return D.21032;
  <D.21081>:
  D.21084 = mono_class_repect_method_constraints (ctx, klass);
  if (D.21084 == 0) goto <D.21085>; else goto <D.21086>;
  <D.21085>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.21028 = ctx->ip_offset;
    D.21063 = klass->name;
    D.21064 = klass->name_space;
    D.21087 = monoeg_g_strdup_printf ("Invalid generic type instantiation of type %s.%s (generic args don\'t respect target\'s constraints) at 0x%04x", D.21064, D.21063, D.21028);
    vinfo->info.message = D.21087;
    vinfo->exception_type = 7;
    D.21030 = ctx->list;
    D.21088 = monoeg_g_slist_prepend (D.21030, vinfo);
    ctx->list = D.21088;
  }
  ctx->valid = 0;
  D.21032 = 0;
  return D.21032;
  <D.21086>:
  D.21032 = 1;
  return D.21032;
}


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

  D.21091 = ctx->generic_context;
  D.21090 = mono_type_is_valid_type_in_context (type, D.21091);
  return D.21090;
}


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

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


mono_type_is_valid_type_in_context_full (struct MonoType * type, struct MonoGenericContext * context, gboolean check_gtd)
{
  unsigned char D.21095;
  int D.21096;
  gboolean D.21099;
  struct MonoGenericInst * iftmp.37;
  struct MonoGenericParam * D.21107;
  short unsigned int D.21108;
  int D.21109;
  <unnamed-unsigned:22> D.21110;
  int D.21111;
  struct MonoClass * D.21112;
  struct MonoType * D.21113;
  struct MonoArrayType * D.21114;
  struct MonoClass * D.21115;
  struct MonoType * D.21116;
  struct MonoType * D.21117;
  struct MonoGenericClass * D.21118;
  unsigned char D.21119;
  unsigned char D.21120;
  struct MonoType * D.21122;
  int D.21123;
  unsigned char D.21126;
  struct MonoType * D.21129;
  struct MonoGenericContainer * D.21132;
  int i;
  struct MonoGenericInst * inst;

  D.21095 = type->type;
  D.21096 = (int) D.21095;
  switch (D.21096) <default: <D.21135>, case 15: <D.17583>, case 17: <D.17589>, case 18: <D.17588>, case 19: <D.17578>, case 20: <D.17582>, case 21: <D.17584>, case 29: <D.17581>, case 30: <D.17579>>
  <D.17578>:
  <D.17579>:
  if (context == 0B) goto <D.21097>; else goto <D.21098>;
  <D.21097>:
  D.21099 = 0;
  return D.21099;
  <D.21098>:
  D.21095 = type->type;
  if (D.21095 == 19) goto <D.21101>; else goto <D.21102>;
  <D.21101>:
  iftmp.37 = context->class_inst;
  goto <D.21103>;
  <D.21102>:
  iftmp.37 = context->method_inst;
  <D.21103>:
  inst = iftmp.37;
  if (inst == 0B) goto <D.21104>; else goto <D.21106>;
  <D.21106>:
  D.21107 = type->data.generic_param;
  D.21108 = D.21107->num;
  D.21109 = (int) D.21108;
  D.21110 = inst->type_argc;
  D.21111 = (int) D.21110;
  if (D.21109 >= D.21111) goto <D.21104>; else goto <D.21105>;
  <D.21104>:
  D.21099 = 0;
  return D.21099;
  <D.21105>:
  goto <D.17580>;
  <D.17581>:
  D.21112 = type->data.klass;
  D.21113 = &D.21112->byval_arg;
  D.21099 = mono_type_is_valid_type_in_context_full (D.21113, context, check_gtd);
  return D.21099;
  <D.17582>:
  D.21114 = type->data.array;
  D.21115 = D.21114->eklass;
  D.21116 = &D.21115->byval_arg;
  D.21099 = mono_type_is_valid_type_in_context_full (D.21116, context, check_gtd);
  return D.21099;
  <D.17583>:
  D.21117 = type->data.type;
  D.21099 = mono_type_is_valid_type_in_context_full (D.21117, context, check_gtd);
  return D.21099;
  <D.17584>:
  D.21118 = type->data.generic_class;
  inst = D.21118->context.class_inst;
  D.21119 = BIT_FIELD_REF <*inst, 8, 48>;
  D.21120 = D.21119 & 64;
  if (D.21120 == 0) goto <D.17580>; else goto <D.21121>;
  <D.21121>:
  i = 0;
  goto <D.17586>;
  <D.17585>:
  D.21122 = inst->type_argv[i];
  D.21123 = mono_type_is_valid_type_in_context_full (D.21122, context, check_gtd);
  if (D.21123 == 0) goto <D.21124>; else goto <D.21125>;
  <D.21124>:
  D.21099 = 0;
  return D.21099;
  <D.21125>:
  i = i + 1;
  <D.17586>:
  D.21110 = inst->type_argc;
  D.21111 = (int) D.21110;
  if (D.21111 > i) goto <D.17585>; else goto <D.17587>;
  <D.17587>:
  goto <D.17580>;
  <D.17588>:
  <D.17589>:
  {
    struct MonoClass * klass;

    klass = type->data.klass;
    D.21126 = klass->byval_arg.type;
    D.21095 = type->type;
    if (D.21126 != D.21095) goto <D.21127>; else goto <D.21128>;
    <D.21127>:
    D.21129 = &klass->byval_arg;
    D.21099 = mono_type_is_valid_type_in_context_full (D.21129, context, check_gtd);
    return D.21099;
    <D.21128>:
    if (check_gtd != 0) goto <D.21130>; else goto <D.21131>;
    <D.21130>:
    D.21132 = klass->generic_container;
    if (D.21132 != 0B) goto <D.21133>; else goto <D.21134>;
    <D.21133>:
    D.21099 = 0;
    return D.21099;
    <D.21134>:
    <D.21131>:
    goto <D.17580>;
  }
  <D.21135>:
  <D.17580>:
  D.21099 = 1;
  return D.21099;
}


mono_class_is_valid_generic_instantiation (struct VerifyContext * ctx, struct MonoClass * klass)
{
  struct MonoClass * D.21137;
  int D.21140;
  gboolean D.21143;
  struct MonoGenericContext * D.21144;
  struct MonoGenericClass * gklass;
  struct MonoGenericInst * ginst;
  struct MonoGenericContainer * gc;

  gklass = klass->generic_class;
  ginst = gklass->context.class_inst;
  D.21137 = gklass->container_class;
  gc = D.21137->generic_container;
  if (ctx != 0B) goto <D.21138>; else goto <D.21139>;
  <D.21138>:
  D.21140 = is_valid_generic_instantiation_in_context (ctx, ginst, 1);
  if (D.21140 == 0) goto <D.21141>; else goto <D.21142>;
  <D.21141>:
  D.21143 = 0;
  return D.21143;
  <D.21142>:
  <D.21139>:
  D.21144 = &gklass->context;
  D.21143 = is_valid_generic_instantiation (gc, D.21144, ginst);
  return D.21143;
}


is_valid_generic_instantiation_in_context (struct VerifyContext * ctx, struct MonoGenericInst * ginst, gboolean check_gtd)
{
  struct MonoGenericContext * D.21146;
  int D.21147;
  gboolean D.21150;
  <unnamed-unsigned:22> D.21151;
  int D.21152;
  int i;

  i = 0;
  goto <D.17674>;
  <D.17673>:
  {
    struct MonoType * type;

    type = ginst->type_argv[i];
    D.21146 = ctx->generic_context;
    D.21147 = mono_type_is_valid_type_in_context_full (type, D.21146, 1);
    if (D.21147 == 0) goto <D.21148>; else goto <D.21149>;
    <D.21148>:
    D.21150 = 0;
    return D.21150;
    <D.21149>:
  }
  i = i + 1;
  <D.17674>:
  D.21151 = ginst->type_argc;
  D.21152 = (int) D.21151;
  if (D.21152 > i) goto <D.17673>; else goto <D.17675>;
  <D.17675>:
  D.21150 = 1;
  return D.21150;
}


is_valid_generic_instantiation (struct MonoGenericContainer * gc, struct MonoGenericContext * context, struct MonoGenericInst * ginst)
{
  <unnamed-unsigned:22> D.21154;
  int D.21155;
  <unnamed-signed:31> D.21156;
  int D.21157;
  gboolean D.21160;
  struct MonoGenericParamFull * D.21161;
  unsigned int i.38;
  unsigned int D.21163;
  struct MonoGenericParamFull * D.21164;
  int D.21165;
  struct MonoGenericContainer * D.21168;
  unsigned char D.21171;
  unsigned char D.21174;
  unsigned char D.21175;
  struct MonoGenericClass * D.21178;
  unsigned char D.21181;
  unsigned char D.21182;
  int D.21185;
  struct MonoClass * * D.21188;
  short unsigned int D.21191;
  int D.21192;
  int D.21193;
  int D.21198;
  unsigned char D.21201;
  int D.21203;
  int D.21204;
  int D.21209;
  int D.21214;
  struct MonoType * D.21219;
  int D.21220;
  int D.21223;
  struct MonoClass * D.21226;
  struct MonoError error;
  int i;

  try
    {
      D.21154 = ginst->type_argc;
      D.21155 = (int) D.21154;
      D.21156 = gc->type_argc;
      D.21157 = (int) D.21156;
      if (D.21155 != D.21157) goto <D.21158>; else goto <D.21159>;
      <D.21158>:
      D.21160 = 0;
      return D.21160;
      <D.21159>:
      i = 0;
      goto <D.17620>;
      <D.17619>:
      {
        struct MonoGenericParamInfo * param_info;
        struct MonoClass * paramClass;
        struct MonoClass * * constraints;
        struct MonoType * param_type;

        D.21161 = gc->type_params;
        i.38 = (unsigned int) i;
        D.21163 = i.38 * 32;
        D.21164 = D.21161 + D.21163;
        param_info = &D.21164->info;
        param_type = ginst->type_argv[i];
        D.21165 = mono_type_is_generic_argument (param_type);
        if (D.21165 != 0) goto <D.21166>; else goto <D.21167>;
        <D.21166>:
        // predicted unlikely by continue predictor.
        goto <D.17613>;
        <D.21167>:
        paramClass = mono_class_from_mono_type (param_type);
        D.21168 = paramClass->generic_container;
        if (D.21168 != 0B) goto <D.21169>; else goto <D.21170>;
        <D.21169>:
        D.21171 = param_type->type;
        if (D.21171 != 21) goto <D.21172>; else goto <D.21173>;
        <D.21172>:
        D.21174 = BIT_FIELD_REF <*ginst, 8, 48>;
        D.21175 = D.21174 & 64;
        if (D.21175 == 0) goto <D.21176>; else goto <D.21177>;
        <D.21176>:
        D.21160 = 0;
        return D.21160;
        <D.21177>:
        <D.21173>:
        <D.21170>:
        D.21178 = paramClass->generic_class;
        if (D.21178 != 0B) goto <D.21179>; else goto <D.21180>;
        <D.21179>:
        D.21181 = BIT_FIELD_REF <*paramClass, 8, 160>;
        D.21182 = D.21181 & 1;
        if (D.21182 == 0) goto <D.21183>; else goto <D.21184>;
        <D.21183>:
        D.21185 = mono_class_is_valid_generic_instantiation (0B, paramClass);
        if (D.21185 == 0) goto <D.21186>; else goto <D.21187>;
        <D.21186>:
        D.21160 = 0;
        return D.21160;
        <D.21187>:
        <D.21184>:
        <D.21180>:
        D.21188 = param_info->constraints;
        if (D.21188 == 0B) goto <D.21189>; else goto <D.21190>;
        <D.21189>:
        D.21191 = param_info->flags;
        D.21192 = (int) D.21191;
        D.21193 = D.21192 & 28;
        if (D.21193 == 0) goto <D.21194>; else goto <D.21195>;
        <D.21194>:
        // predicted unlikely by continue predictor.
        goto <D.17613>;
        <D.21195>:
        <D.21190>:
        D.21191 = param_info->flags;
        D.21192 = (int) D.21191;
        D.21198 = D.21192 & 8;
        if (D.21198 != 0) goto <D.21199>; else goto <D.21200>;
        <D.21199>:
        D.21181 = BIT_FIELD_REF <*paramClass, 8, 160>;
        D.21201 = D.21181 & 8;
        if (D.21201 == 0) goto <D.21196>; else goto <D.21202>;
        <D.21202>:
        D.21203 = mono_class_is_nullable (paramClass);
        if (D.21203 != 0) goto <D.21196>; else goto <D.21197>;
        <D.21196>:
        D.21160 = 0;
        return D.21160;
        <D.21197>:
        <D.21200>:
        D.21191 = param_info->flags;
        D.21192 = (int) D.21191;
        D.21204 = D.21192 & 4;
        if (D.21204 != 0) goto <D.21205>; else goto <D.21206>;
        <D.21205>:
        D.21181 = BIT_FIELD_REF <*paramClass, 8, 160>;
        D.21201 = D.21181 & 8;
        if (D.21201 != 0) goto <D.21207>; else goto <D.21208>;
        <D.21207>:
        D.21160 = 0;
        return D.21160;
        <D.21208>:
        <D.21206>:
        D.21191 = param_info->flags;
        D.21192 = (int) D.21191;
        D.21209 = D.21192 & 16;
        if (D.21209 != 0) goto <D.21210>; else goto <D.21211>;
        <D.21210>:
        D.21181 = BIT_FIELD_REF <*paramClass, 8, 160>;
        D.21201 = D.21181 & 8;
        if (D.21201 == 0) goto <D.21212>; else goto <D.21213>;
        <D.21212>:
        D.21214 = mono_class_has_default_constructor (paramClass);
        if (D.21214 == 0) goto <D.21215>; else goto <D.21216>;
        <D.21215>:
        D.21160 = 0;
        return D.21160;
        <D.21216>:
        <D.21213>:
        <D.21211>:
        D.21188 = param_info->constraints;
        if (D.21188 == 0B) goto <D.21217>; else goto <D.21218>;
        <D.21217>:
        // predicted unlikely by continue predictor.
        goto <D.17613>;
        <D.21218>:
        constraints = param_info->constraints;
        goto <D.17617>;
        <D.17616>:
        {
          struct MonoClass * ctr;
          struct MonoType * inflated;

          ctr = *constraints;
          D.21219 = &ctr->byval_arg;
          inflated = mono_class_inflate_generic_type_checked (D.21219, context, &error);
          D.21220 = mono_error_ok (&error);
          if (D.21220 == 0) goto <D.21221>; else goto <D.21222>;
          <D.21221>:
          mono_error_cleanup (&error);
          D.21160 = 0;
          return D.21160;
          <D.21222>:
          ctr = mono_class_from_mono_type (inflated);
          mono_metadata_free_type (inflated);
          D.21223 = mono_class_is_assignable_from_slow (ctr, paramClass);
          if (D.21223 == 0) goto <D.21224>; else goto <D.21225>;
          <D.21224>:
          D.21160 = 0;
          return D.21160;
          <D.21225>:
        }
        constraints = constraints + 4;
        <D.17617>:
        D.21226 = *constraints;
        if (D.21226 != 0B) goto <D.17616>; else goto <D.17618>;
        <D.17618>:
      }
      <D.17613>:
      i = i + 1;
      <D.17620>:
      D.21156 = gc->type_argc;
      D.21157 = (int) D.21156;
      if (D.21157 > i) goto <D.17619>; else goto <D.17621>;
      <D.17621>:
      D.21160 = 1;
      return D.21160;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_type_is_generic_argument (struct MonoType * type)
{
  gboolean D.21229;
  unsigned char D.21230;
  _Bool D.21231;
  _Bool D.21232;
  _Bool D.21233;

  D.21230 = type->type;
  D.21231 = D.21230 == 19;
  D.21232 = D.21230 == 30;
  D.21233 = D.21231 | D.21232;
  D.21229 = (gboolean) D.21233;
  return D.21229;
}


mono_class_has_default_constructor (struct MonoClass * klass)
{
  unsigned char D.21235;
  gboolean D.21238;
  struct MonoMethod * * D.21239;
  unsigned int i.39;
  unsigned int D.21241;
  struct MonoMethod * * D.21242;
  int D.21243;
  struct MonoMethodSignature * D.21246;
  struct MonoMethodSignature * D.21249;
  short unsigned int D.21250;
  short unsigned int D.21253;
  int D.21254;
  int D.21255;
  unsigned int i.40;
  unsigned int D.21259;
  struct MonoMethod * method;
  int i;

  mono_class_setup_methods (klass);
  D.21235 = klass->exception_type;
  if (D.21235 != 0) goto <D.21236>; else goto <D.21237>;
  <D.21236>:
  D.21238 = 0;
  return D.21238;
  <D.21237>:
  i = 0;
  goto <D.17569>;
  <D.17568>:
  D.21239 = klass->methods;
  i.39 = (unsigned int) i;
  D.21241 = i.39 * 4;
  D.21242 = D.21239 + D.21241;
  method = *D.21242;
  D.21243 = mono_method_is_constructor (method);
  if (D.21243 != 0) goto <D.21244>; else goto <D.21245>;
  <D.21244>:
  D.21246 = mono_method_signature (method);
  if (D.21246 != 0B) goto <D.21247>; else goto <D.21248>;
  <D.21247>:
  D.21249 = mono_method_signature (method);
  D.21250 = D.21249->param_count;
  if (D.21250 == 0) goto <D.21251>; else goto <D.21252>;
  <D.21251>:
  D.21253 = method->flags;
  D.21254 = (int) D.21253;
  D.21255 = D.21254 & 7;
  if (D.21255 == 6) goto <D.21256>; else goto <D.21257>;
  <D.21256>:
  D.21238 = 1;
  return D.21238;
  <D.21257>:
  <D.21252>:
  <D.21248>:
  <D.21245>:
  i = i + 1;
  <D.17569>:
  i.40 = (unsigned int) i;
  D.21259 = klass->method.count;
  if (i.40 < D.21259) goto <D.17568>; else goto <D.17570>;
  <D.17570>:
  D.21238 = 0;
  return D.21238;
}


mono_class_repect_method_constraints (struct VerifyContext * ctx, struct MonoClass * klass)
{
  struct MonoClass * D.21261;
  gboolean D.21262;
  int iftmp.41;
  struct MonoGenericContext * D.21268;
  int D.21269;
  struct MonoGenericClass * gklass;
  struct MonoGenericInst * ginst;
  struct MonoGenericContainer * gc;

  gklass = klass->generic_class;
  ginst = gklass->context.class_inst;
  D.21261 = gklass->container_class;
  gc = D.21261->generic_container;
  if (gc == 0B) goto <D.21264>; else goto <D.21267>;
  <D.21267>:
  D.21268 = &gklass->context;
  D.21269 = generic_arguments_respect_constraints (ctx, gc, D.21268, ginst);
  if (D.21269 != 0) goto <D.21264>; else goto <D.21265>;
  <D.21264>:
  iftmp.41 = 1;
  goto <D.21266>;
  <D.21265>:
  iftmp.41 = 0;
  <D.21266>:
  D.21262 = iftmp.41;
  return D.21262;
}


generic_arguments_respect_constraints (struct VerifyContext * ctx, struct MonoGenericContainer * gc, struct MonoGenericContext * context, struct MonoGenericInst * ginst)
{
  struct MonoGenericParamFull * D.21271;
  unsigned int i.42;
  unsigned int D.21273;
  int D.21274;
  int D.21277;
  gboolean D.21280;
  int D.21281;
  <unnamed-unsigned:22> D.21284;
  int D.21285;
  int i;

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

    type = ginst->type_argv[i];
    D.21271 = gc->type_params;
    i.42 = (unsigned int) i;
    D.21273 = i.42 * 32;
    target = D.21271 + D.21273;
    D.21274 = mono_type_is_generic_argument (type);
    if (D.21274 == 0) goto <D.21275>; else goto <D.21276>;
    <D.21275>:
    // predicted unlikely by continue predictor.
    goto <D.17687>;
    <D.21276>:
    D.21277 = is_valid_type_in_context (ctx, type);
    if (D.21277 == 0) goto <D.21278>; else goto <D.21279>;
    <D.21278>:
    D.21280 = 0;
    return D.21280;
    <D.21279>:
    candidate = verifier_get_generic_param_from_type (ctx, type);
    candidate_class = mono_class_from_mono_type (type);
    D.21281 = mono_generic_param_is_constraint_compatible (ctx, target, candidate, candidate_class, context);
    if (D.21281 == 0) goto <D.21282>; else goto <D.21283>;
    <D.21282>:
    D.21280 = 0;
    return D.21280;
    <D.21283>:
  }
  <D.17687>:
  i = i + 1;
  <D.17689>:
  D.21284 = ginst->type_argc;
  D.21285 = (int) D.21284;
  if (D.21285 > i) goto <D.17688>; else goto <D.17690>;
  <D.17690>:
  D.21280 = 1;
  return D.21280;
}


verifier_get_generic_param_from_type (struct VerifyContext * ctx, struct MonoType * type)
{
  struct MonoGenericParam * D.21287;
  short unsigned int D.21288;
  unsigned char D.21289;
  struct MonoGenericClass * D.21292;
  unsigned char D.21296;
  unsigned char D.21297;
  struct MonoGenericParam * D.21302;
  struct MonoGenericParamFull * D.21303;
  unsigned int num.43;
  unsigned int D.21305;
  struct MonoGenericContainer * gc;
  struct MonoMethod * method;
  int num;

  method = ctx->method;
  D.21287 = type->data.generic_param;
  D.21288 = D.21287->num;
  num = (int) D.21288;
  D.21289 = type->type;
  if (D.21289 == 19) goto <D.21290>; else goto <D.21291>;
  <D.21290>:
  {
    struct MonoClass * gtd;

    gtd = method->klass;
    D.21292 = gtd->generic_class;
    if (D.21292 != 0B) goto <D.21293>; else goto <D.21294>;
    <D.21293>:
    D.21292 = gtd->generic_class;
    gtd = D.21292->container_class;
    <D.21294>:
    gc = gtd->generic_container;
  }
  goto <D.21295>;
  <D.21291>:
  {
    struct MonoMethod * gmd;

    gmd = method;
    D.21296 = BIT_FIELD_REF <*method, 8, 168>;
    D.21297 = D.21296 & 16;
    if (D.21297 != 0) goto <D.21298>; else goto <D.21299>;
    <D.21298>:
    gmd = MEM[(struct MonoMethodInflated *)method].declaring;
    <D.21299>:
    gc = mono_method_get_generic_container (gmd);
  }
  <D.21295>:
  if (gc == 0B) goto <D.21300>; else goto <D.21301>;
  <D.21300>:
  D.21302 = 0B;
  return D.21302;
  <D.21301>:
  D.21303 = gc->type_params;
  num.43 = (unsigned int) num;
  D.21305 = num.43 * 32;
  D.21302 = D.21303 + D.21305;
  return D.21302;
}


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.44;
  struct MonoGenericContainer * D.21308;
  struct MonoGenericParamInfo * iftmp.45;
  struct MonoGenericContainer * D.21313;
  short unsigned int D.21317;
  int D.21318;
  short unsigned int D.21319;
  int D.21320;
  struct MonoClass * * D.21321;
  struct MonoGenericContext * D.21324;
  struct MonoClass * D.21325;
  struct MonoType * D.21326;
  gboolean D.21329;
  struct MonoType * D.21332;
  int D.21333;
  unsigned int D.21335;
  unsigned int D.21336;
  unsigned char D.21338;
  int D.21341;
  int D.21350;
  _Bool D.21351;
  int D.21352;
  int D.21353;
  _Bool D.21354;
  int D.21355;
  int D.21356;
  int D.21361;
  int D.21366;
  int D.21369;
  int D.21370;
  struct MonoClass * * D.21373;
  struct MonoClass * D.21376;
  struct MonoType * D.21377;
  struct MonoType * D.21380;
  struct MonoType * D.21381;
  int D.21382;
  int D.21389;
  struct MonoType * D.21391;
  int D.21392;
  int D.21395;
  struct MonoGenericParamInfo * tinfo;
  struct MonoGenericParamInfo * cinfo;
  struct MonoClass * * candidate_class;
  gboolean class_constraint_satisfied;
  gboolean valuetype_constraint_satisfied;
  int tmask;
  int cmask;

  D.21308 = target->owner;
  if (D.21308 != 0B) goto <D.21309>; else goto <D.21310>;
  <D.21309>:
  iftmp.44 = &MEM[(struct MonoGenericParamFull *)target].info;
  goto <D.21311>;
  <D.21310>:
  iftmp.44 = 0B;
  <D.21311>:
  tinfo = iftmp.44;
  D.21313 = candidate->owner;
  if (D.21313 != 0B) goto <D.21314>; else goto <D.21315>;
  <D.21314>:
  iftmp.45 = &MEM[(struct MonoGenericParamFull *)candidate].info;
  goto <D.21316>;
  <D.21315>:
  iftmp.45 = 0B;
  <D.21316>:
  cinfo = iftmp.45;
  class_constraint_satisfied = 0;
  valuetype_constraint_satisfied = 0;
  D.21317 = tinfo->flags;
  D.21318 = (int) D.21317;
  tmask = D.21318 & 28;
  D.21319 = cinfo->flags;
  D.21320 = (int) D.21319;
  cmask = D.21320 & 28;
  D.21321 = cinfo->constraints;
  if (D.21321 != 0B) goto <D.21322>; else goto <D.21323>;
  <D.21322>:
  candidate_class = cinfo->constraints;
  goto <D.17639>;
  <D.17638>:
  {
    struct MonoClass * cc;
    struct MonoType * inflated;

    D.21324 = ctx->generic_context;
    D.21325 = *candidate_class;
    D.21326 = &D.21325->byval_arg;
    inflated = verifier_inflate_type (ctx, D.21326, D.21324);
    if (inflated == 0B) goto <D.21327>; else goto <D.21328>;
    <D.21327>:
    D.21329 = 0;
    return D.21329;
    <D.21328>:
    cc = mono_class_from_mono_type (inflated);
    mono_metadata_free_type (inflated);
    D.21332 = &cc->byval_arg;
    D.21333 = mono_type_is_reference (D.21332);
    if (D.21333 != 0) goto <D.21334>; else goto <D.21330>;
    <D.21334>:
    D.21335 = cc->flags;
    D.21336 = D.21335 & 32;
    if (D.21336 == 0) goto <D.21337>; else goto <D.21330>;
    <D.21337>:
    D.21338 = cc->byval_arg.type;
    if (D.21338 != 19) goto <D.21339>; else goto <D.21330>;
    <D.21339>:
    D.21338 = cc->byval_arg.type;
    if (D.21338 != 30) goto <D.21340>; else goto <D.21330>;
    <D.21340>:
    class_constraint_satisfied = 1;
    goto <D.21331>;
    <D.21330>:
    D.21332 = &cc->byval_arg;
    D.21341 = mono_type_is_reference (D.21332);
    if (D.21341 == 0) goto <D.21342>; else goto <D.21343>;
    <D.21342>:
    D.21335 = cc->flags;
    D.21336 = D.21335 & 32;
    if (D.21336 == 0) goto <D.21344>; else goto <D.21345>;
    <D.21344>:
    D.21338 = cc->byval_arg.type;
    if (D.21338 != 19) goto <D.21346>; else goto <D.21347>;
    <D.21346>:
    D.21338 = cc->byval_arg.type;
    if (D.21338 != 30) goto <D.21348>; else goto <D.21349>;
    <D.21348>:
    valuetype_constraint_satisfied = 1;
    <D.21349>:
    <D.21347>:
    <D.21345>:
    <D.21343>:
    <D.21331>:
  }
  candidate_class = candidate_class + 4;
  <D.17639>:
  D.21325 = *candidate_class;
  if (D.21325 != 0B) goto <D.17638>; else goto <D.17640>;
  <D.17640>:
  <D.21323>:
  D.21350 = cmask & 4;
  D.21351 = D.21350 != 0;
  D.21352 = (int) D.21351;
  class_constraint_satisfied = D.21352 | class_constraint_satisfied;
  D.21353 = cmask & 8;
  D.21354 = D.21353 != 0;
  D.21355 = (int) D.21354;
  valuetype_constraint_satisfied = D.21355 | valuetype_constraint_satisfied;
  D.21356 = tmask & 4;
  if (D.21356 != 0) goto <D.21357>; else goto <D.21358>;
  <D.21357>:
  if (class_constraint_satisfied == 0) goto <D.21359>; else goto <D.21360>;
  <D.21359>:
  D.21329 = 0;
  return D.21329;
  <D.21360>:
  <D.21358>:
  D.21361 = tmask & 8;
  if (D.21361 != 0) goto <D.21362>; else goto <D.21363>;
  <D.21362>:
  if (valuetype_constraint_satisfied == 0) goto <D.21364>; else goto <D.21365>;
  <D.21364>:
  D.21329 = 0;
  return D.21329;
  <D.21365>:
  <D.21363>:
  D.21366 = tmask & 16;
  if (D.21366 != 0) goto <D.21367>; else goto <D.21368>;
  <D.21367>:
  D.21369 = cmask & 16;
  D.21370 = D.21369 | valuetype_constraint_satisfied;
  if (D.21370 == 0) goto <D.21371>; else goto <D.21372>;
  <D.21371>:
  D.21329 = 0;
  return D.21329;
  <D.21372>:
  <D.21368>:
  D.21373 = tinfo->constraints;
  if (D.21373 != 0B) goto <D.21374>; else goto <D.21375>;
  <D.21374>:
  {
    struct MonoClass * * target_class;

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

      D.21376 = *target_class;
      D.21377 = &D.21376->byval_arg;
      inflated = verifier_inflate_type (ctx, D.21377, context);
      if (inflated == 0B) goto <D.21378>; else goto <D.21379>;
      <D.21378>:
      D.21329 = 0;
      return D.21329;
      <D.21379>:
      tc = mono_class_from_mono_type (inflated);
      mono_metadata_free_type (inflated);
      D.21380 = &candidate_param_class->byval_arg;
      D.21381 = &tc->byval_arg;
      D.21382 = mono_metadata_type_equal (D.21381, D.21380);
      if (D.21382 != 0) goto <D.21383>; else goto <D.21384>;
      <D.21383>:
      // predicted unlikely by continue predictor.
      goto <D.17644>;
      <D.21384>:
      D.21321 = cinfo->constraints;
      if (D.21321 == 0B) goto <D.21385>; else goto <D.21386>;
      <D.21385>:
      D.21329 = 0;
      return D.21329;
      <D.21386>:
      candidate_class = cinfo->constraints;
      goto <D.17649>;
      <D.17648>:
      {
        struct MonoClass * cc;

        D.21324 = ctx->generic_context;
        D.21325 = *candidate_class;
        D.21326 = &D.21325->byval_arg;
        inflated = verifier_inflate_type (ctx, D.21326, D.21324);
        if (inflated == 0B) goto <D.21387>; else goto <D.21388>;
        <D.21387>:
        D.21329 = 0;
        return D.21329;
        <D.21388>:
        cc = mono_class_from_mono_type (inflated);
        mono_metadata_free_type (inflated);
        D.21389 = verifier_class_is_assignable_from (tc, cc);
        if (D.21389 != 0) goto <D.17646>; else goto <D.21390>;
        <D.21390>:
        D.21391 = &cc->byval_arg;
        D.21392 = mono_type_is_generic_argument (D.21391);
        if (D.21392 != 0) goto <D.21393>; else goto <D.21394>;
        <D.21393>:
        {
          struct MonoGenericParam * other_candidate;

          D.21391 = &cc->byval_arg;
          other_candidate = verifier_get_generic_param_from_type (ctx, D.21391);
          D.21395 = mono_generic_param_is_constraint_compatible (ctx, target, other_candidate, cc, context);
          if (D.21395 != 0) goto <D.17646>; else goto <D.21396>;
          <D.21396>:
        }
        <D.21394>:
      }
      candidate_class = candidate_class + 4;
      <D.17649>:
      D.21325 = *candidate_class;
      if (D.21325 != 0B) goto <D.17648>; else goto <D.17646>;
      <D.17646>:
      D.21325 = *candidate_class;
      if (D.21325 == 0B) goto <D.21397>; else goto <D.21398>;
      <D.21397>:
      D.21329 = 0;
      return D.21329;
      <D.21398>:
    }
    <D.17644>:
    target_class = target_class + 4;
    <D.17651>:
    D.21376 = *target_class;
    if (D.21376 != 0B) goto <D.17650>; else goto <D.17652>;
    <D.17652>:
  }
  <D.21375>:
  D.21329 = 1;
  return D.21329;
}


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

  try
    {
      result = mono_class_inflate_generic_type_checked (type, context, &error);
      D.21400 = mono_error_ok (&error);
      if (D.21400 == 0) goto <D.21401>; else goto <D.21402>;
      <D.21401>:
      mono_error_cleanup (&error);
      D.21403 = 0B;
      return D.21403;
      <D.21402>:
      D.21403 = result;
      return D.21403;
    }
  finally
    {
      error = {CLOBBER};
    }
}


init_stack_with_value_at_exception_boundary (struct VerifyContext * ctx, struct ILCodeDesc * code, struct MonoClass * klass)
{
  struct MonoGenericContext * D.21406;
  struct MonoType * D.21407;
  int D.21408;
  gchar * D.21411;
  struct GSList * D.21412;
  struct GSList * D.21413;
  int D.21414;
  unsigned int D.21417;
  gchar * D.21418;
  struct GSList * D.21419;
  struct ILStackDesc * D.21420;
  struct GSList * D.21421;
  struct GSList * D.21422;
  short unsigned int D.21423;
  short unsigned int D.21424;
  int D.21425;
  int D.21428;
  int D.21429;
  struct MonoError error;
  struct MonoType * type;

  try
    {
      D.21406 = ctx->generic_context;
      D.21407 = &klass->byval_arg;
      type = mono_class_inflate_generic_type_checked (D.21407, D.21406, &error);
      D.21408 = mono_error_ok (&error);
      if (D.21408 == 0) goto <D.21409>; else goto <D.21410>;
      <D.21409>:
      {
        char * name;

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

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.21411 = monoeg_g_strdup_printf ("Invalid class %s used for exception", name);
          vinfo->info.message = D.21411;
          vinfo->exception_type = 3;
          D.21412 = ctx->list;
          D.21413 = monoeg_g_slist_prepend (D.21412, vinfo);
          ctx->list = D.21413;
        }
        ctx->valid = 0;
        monoeg_g_free (name);
        mono_error_cleanup (&error);
        return;
      }
      <D.21410>:
      D.21414 = ctx->max_stack;
      if (D.21414 == 0) goto <D.21415>; else goto <D.21416>;
      <D.21415>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.21417 = ctx->ip_offset;
        D.21418 = monoeg_g_strdup_printf ("Stack overflow at 0x%04x", D.21417);
        vinfo->info.message = D.21418;
        vinfo->exception_type = 3;
        D.21412 = ctx->list;
        D.21419 = monoeg_g_slist_prepend (D.21412, vinfo);
        ctx->list = D.21419;
      }
      ctx->valid = 0;
      return;
      <D.21416>:
      stack_init (ctx, code);
      ensure_stack_size (code, 1);
      D.21420 = code->stack;
      set_stack_value (ctx, D.21420, type, 0);
      D.21421 = ctx->exception_types;
      D.21422 = monoeg_g_slist_prepend (D.21421, type);
      ctx->exception_types = D.21422;
      code->size = 1;
      D.21423 = code->flags;
      D.21424 = D.21423 | 2;
      code->flags = D.21424;
      D.21425 = mono_type_is_generic_argument (type);
      if (D.21425 != 0) goto <D.21426>; else goto <D.21427>;
      <D.21426>:
      D.21420 = code->stack;
      D.21420 = code->stack;
      D.21428 = D.21420->stype;
      D.21429 = D.21428 | 4096;
      D.21420->stype = D.21429;
      <D.21427>:
    }
  finally
    {
      error = {CLOBBER};
    }
}


ensure_stack_size (struct ILCodeDesc * stack, int required)
{
  short unsigned int D.21433;
  int D.21434;
  int D.21437;
  int D.21438;
  short unsigned int D.21439;
  int D.21440;
  _Bool D.21441;
  long int D.21442;
  long int D.21443;
  _Bool D.21446;
  long int D.21447;
  long int D.21448;
  unsigned int new_size.46;
  unsigned int D.21452;
  struct ILStackDesc * D.21453;
  unsigned int D.21458;
  unsigned int D.21459;
  short unsigned int D.21460;
  int new_size;
  struct ILStackDesc * tmp;

  new_size = 8;
  D.21433 = stack->max_size;
  D.21434 = (int) D.21433;
  if (D.21434 > required) goto <D.21435>; else goto <D.21436>;
  <D.21435>:
  return;
  <D.21436>:
  D.21433 = stack->max_size;
  D.21434 = (int) D.21433;
  D.21437 = D.21434 * 2;
  D.21438 = MAX_EXPR <D.21437, required>;
  new_size = MAX_EXPR <D.21438, 8>;
  D.21439 = stack->size;
  D.21440 = (int) D.21439;
  D.21441 = D.21440 > new_size;
  D.21442 = (long int) D.21441;
  D.21443 = __builtin_expect (D.21442, 0);
  if (D.21443 != 0) goto <D.21444>; else goto <D.21445>;
  <D.21444>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1499, "new_size >= stack->size");
  <D.21445>:
  D.21446 = new_size < required;
  D.21447 = (long int) D.21446;
  D.21448 = __builtin_expect (D.21447, 0);
  if (D.21448 != 0) goto <D.21449>; else goto <D.21450>;
  <D.21449>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1500, "new_size >= required");
  <D.21450>:
  new_size.46 = (unsigned int) new_size;
  D.21452 = new_size.46 * 12;
  tmp = monoeg_malloc0 (D.21452);
  D.21453 = stack->stack;
  if (D.21453 != 0B) goto <D.21454>; else goto <D.21455>;
  <D.21454>:
  D.21439 = stack->size;
  if (D.21439 != 0) goto <D.21456>; else goto <D.21457>;
  <D.21456>:
  D.21439 = stack->size;
  D.21458 = (unsigned int) D.21439;
  D.21459 = D.21458 * 12;
  D.21453 = stack->stack;
  memcpy (tmp, D.21453, D.21459);
  <D.21457>:
  D.21453 = stack->stack;
  monoeg_g_free (D.21453);
  <D.21455>:
  stack->stack = tmp;
  D.21460 = (short unsigned int) new_size;
  stack->max_size = D.21460;
}


mono_opcode_is_prefix (int op)
{
  gboolean D.21462;

  switch (op) <default: <D.21463>, case 274: <D.19032>, case 275: <D.19033>, case 276: <D.19034>, case 278: <D.19035>, case 286: <D.19036>>
  <D.19032>:
  <D.19033>:
  <D.19034>:
  <D.19035>:
  <D.19036>:
  D.21462 = 1;
  return D.21462;
  <D.21463>:
  D.21462 = 0;
  return D.21462;
}


merge_stacks (struct VerifyContext * ctx, struct ILCodeDesc * from, struct ILCodeDesc * to, gboolean start, gboolean external)
{
  short unsigned int D.21467;
  struct ILCodeDesc * D.21471;
  int D.21472;
  int D.21473;
  short unsigned int D.21476;
  short unsigned int D.21477;
  unsigned int D.21480;
  int D.21481;
  int D.21482;
  gchar * D.21483;
  struct GSList * D.21484;
  struct GSList * D.21485;
  struct ILStackDesc * D.21486;
  unsigned int i.47;
  unsigned int D.21488;
  struct ILStackDesc * D.21489;
  int D.21490;
  int D.21493;
  int D.21496;
  int D.21499;
  int D.21502;
  int D.21507;
  int D.21509;
  int D.21512;
  int D.21514;
  int D.21515;
  gchar * D.21516;
  struct GSList * D.21517;
  int D.21518;
  struct MonoClass * D.21522;
  unsigned char D.21523;
  unsigned char D.21524;
  struct MonoClass * D.21526;
  unsigned char D.21527;
  unsigned char D.21528;
  int D.21530;
  int D.21532;
  short unsigned int D.21534;
  short unsigned int D.21535;
  short unsigned int D.21536;
  int D.21537;
  struct MonoClass * * D.21538;
  unsigned int j.48;
  unsigned int D.21540;
  struct MonoClass * * D.21541;
  struct MonoClass * D.21542;
  struct MonoType * D.21543;
  struct MonoClass * * D.21544;
  struct MonoClass * * D.21545;
  struct MonoClass * D.21546;
  struct MonoType * D.21547;
  int D.21548;
  int D.21551;
  const char * D.21557;
  gchar * D.21558;
  struct GSList * D.21559;
  int D.21562;
  const char * D.21568;
  gchar * D.21569;
  struct GSList * D.21570;
  unsigned int D.21573;
  unsigned int D.21574;
  int D.21577;
  struct MonoClass * * D.21580;
  struct MonoClass * * D.21581;
  struct MonoClass * D.21582;
  int D.21583;
  short unsigned int D.21586;
  int D.21587;
  unsigned int D.21588;
  unsigned int D.21589;
  int D.21592;
  struct MonoClass * * D.21595;
  struct MonoClass * * D.21596;
  struct MonoClass * D.21597;
  int D.21598;
  short unsigned int D.21601;
  int D.21602;
  int D.21605;
  int D.21607;
  gchar * D.21611;
  struct GSList * D.21612;
  int D.21615;
  struct MonoType * D.21616;
  _Bool D.21617;
  long int D.21618;
  long int D.21619;
  int D.21622;
  struct MonoType * D.21623;
  int D.21624;
  short unsigned int D.21627;
  short unsigned int D.21628;
  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.21465>; else goto <D.21466>;
      <D.21465>:
      D.21467 = to->flags;
      if (D.21467 == 0) goto <D.21468>; else goto <D.21469>;
      <D.21468>:
      from->size = 0;
      goto <D.21470>;
      <D.21469>:
      D.21471 = &ctx->eval;
      stack_copy (D.21471, to);
      <D.21470>:
      goto end_verify;
      <D.21466>:
      D.21467 = to->flags;
      D.21472 = (int) D.21467;
      D.21473 = D.21472 & 8;
      if (D.21473 == 0) goto <D.21474>; else goto <D.21475>;
      <D.21474>:
      D.21471 = &ctx->eval;
      stack_copy (to, D.21471);
      goto end_verify;
      <D.21475>:
      D.21476 = from->size;
      D.21477 = to->size;
      if (D.21476 != D.21477) goto <D.21478>; else goto <D.21479>;
      <D.21478>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.21480 = ctx->ip_offset;
        D.21477 = to->size;
        D.21481 = (int) D.21477;
        D.21476 = from->size;
        D.21482 = (int) D.21476;
        D.21483 = monoeg_g_strdup_printf ("Could not merge stacks, different sizes (%d x %d) at 0x%04x", D.21482, D.21481, D.21480);
        vinfo->info.message = D.21483;
        vinfo->exception_type = 3;
        D.21484 = ctx->list;
        D.21485 = monoeg_g_slist_prepend (D.21484, vinfo);
        ctx->list = D.21485;
      }
      ctx->valid = 0;
      goto end_verify;
      <D.21479>:
      i = 0;
      goto <D.19003>;
      <D.19002>:
      {
        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.21486 = from->stack;
        i.47 = (unsigned int) i;
        D.21488 = i.47 * 12;
        new_slot = D.21486 + D.21488;
        D.21489 = to->stack;
        i.47 = (unsigned int) i;
        D.21488 = i.47 * 12;
        old_slot = D.21489 + D.21488;
        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.21490 = verify_stack_type_compatibility (ctx, old_type, new_slot);
        if (D.21490 != 0) goto <D.21491>; else goto <D.21492>;
        <D.21491>:
        copy_stack_value (new_slot, old_slot);
        // predicted unlikely by continue predictor.
        goto <D.18983>;
        <D.21492>:
        D.21493 = verify_stack_type_compatibility (ctx, new_type, old_slot);
        if (D.21493 != 0) goto <D.21494>; else goto <D.21495>;
        <D.21494>:
        copy_stack_value (old_slot, new_slot);
        // predicted unlikely by continue predictor.
        goto <D.18983>;
        <D.21495>:
        D.21496 = stack_slot_is_boxed_value (old_slot);
        if (D.21496 != 0) goto <D.21497>; else goto <D.21498>;
        <D.21497>:
        D.21499 = stack_slot_is_boxed_value (new_slot);
        if (D.21499 != 0) goto <D.21500>; else goto <D.21501>;
        <D.21500>:
        D.21502 = mono_metadata_type_equal (old_type, new_type);
        if (D.21502 != 0) goto <D.21503>; else goto <D.21504>;
        <D.21503>:
        copy_stack_value (new_slot, old_slot);
        // predicted unlikely by continue predictor.
        goto <D.18983>;
        <D.21504>:
        <D.21501>:
        <D.21498>:
        D.21507 = mono_type_is_generic_argument (old_type);
        if (D.21507 != 0) goto <D.21505>; else goto <D.21508>;
        <D.21508>:
        D.21509 = mono_type_is_generic_argument (new_type);
        if (D.21509 != 0) goto <D.21505>; else goto <D.21506>;
        <D.21505>:
        {
          char * old_name;
          char * new_name;

          old_name = stack_slot_full_name (old_slot);
          new_name = stack_slot_full_name (new_slot);
          D.21512 = ctx->verifiable;
          if (D.21512 != 0) goto <D.21510>; else goto <D.21513>;
          <D.21513>:
          D.21514 = ctx->level;
          D.21515 = D.21514 & 128;
          if (D.21515 != 0) goto <D.21510>; else goto <D.21511>;
          <D.21510>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 8;
            D.21480 = ctx->ip_offset;
            D.21516 = 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.21480);
            vinfo->info.message = D.21516;
            vinfo->exception_type = 4;
            D.21484 = ctx->list;
            D.21517 = monoeg_g_slist_prepend (D.21484, vinfo);
            ctx->list = D.21517;
          }
          ctx->verifiable = 0;
          D.21514 = ctx->level;
          D.21518 = D.21514 & 16;
          if (D.21518 != 0) goto <D.21519>; else goto <D.21520>;
          <D.21519>:
          ctx->valid = 0;
          <D.21520>:
          <D.21511>:
          monoeg_g_free (old_name);
          monoeg_g_free (new_name);
          goto end_verify;
        }
        <D.21506>:
        D.21522 = mono_class_from_mono_type (old_type);
        D.21523 = BIT_FIELD_REF <*D.21522, 8, 160>;
        D.21524 = D.21523 & 8;
        if (D.21524 == 0) goto <D.21525>; else goto <D.21521>;
        <D.21525>:
        D.21526 = mono_class_from_mono_type (new_type);
        D.21527 = BIT_FIELD_REF <*D.21526, 8, 160>;
        D.21528 = D.21527 & 8;
        if (D.21528 == 0) goto <D.21529>; else goto <D.21521>;
        <D.21529>:
        D.21530 = stack_slot_is_managed_pointer (old_slot);
        if (D.21530 == 0) goto <D.21531>; else goto <D.21521>;
        <D.21531>:
        D.21532 = stack_slot_is_managed_pointer (new_slot);
        if (D.21532 == 0) goto <D.21533>; else goto <D.21521>;
        <D.21533>:
        mono_class_setup_supertypes (old_class);
        mono_class_setup_supertypes (new_class);
        D.21534 = new_class->idepth;
        D.21535 = old_class->idepth;
        D.21536 = MIN_EXPR <D.21534, D.21535>;
        D.21537 = (int) D.21536;
        j = D.21537 + -1;
        goto <D.18989>;
        <D.18988>:
        D.21538 = new_class->supertypes;
        j.48 = (unsigned int) j;
        D.21540 = j.48 * 4;
        D.21541 = D.21538 + D.21540;
        D.21542 = *D.21541;
        D.21543 = &D.21542->byval_arg;
        D.21544 = old_class->supertypes;
        j.48 = (unsigned int) j;
        D.21540 = j.48 * 4;
        D.21545 = D.21544 + D.21540;
        D.21546 = *D.21545;
        D.21547 = &D.21546->byval_arg;
        D.21548 = mono_metadata_type_equal (D.21547, D.21543);
        if (D.21548 != 0) goto <D.21549>; else goto <D.21550>;
        <D.21549>:
        D.21544 = old_class->supertypes;
        j.48 = (unsigned int) j;
        D.21540 = j.48 * 4;
        D.21545 = D.21544 + D.21540;
        match_class = *D.21545;
        goto match_found;
        <D.21550>:
        j = j + -1;
        <D.18989>:
        if (j > 0) goto <D.18988>; else goto <D.18990>;
        <D.18990>:
        mono_class_setup_interfaces (old_class, &error);
        D.21551 = mono_error_ok (&error);
        if (D.21551 == 0) goto <D.21552>; else goto <D.21553>;
        <D.21552>:
        D.21512 = ctx->verifiable;
        if (D.21512 != 0) goto <D.21554>; else goto <D.21556>;
        <D.21556>:
        D.21514 = ctx->level;
        D.21515 = D.21514 & 128;
        if (D.21515 != 0) goto <D.21554>; else goto <D.21555>;
        <D.21554>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.21480 = ctx->ip_offset;
          D.21557 = mono_error_get_message (&error);
          D.21558 = monoeg_g_strdup_printf ("Cannot merge stacks due to a TypeLoadException %s at 0x%04x", D.21557, D.21480);
          vinfo->info.message = D.21558;
          vinfo->exception_type = 4;
          D.21484 = ctx->list;
          D.21559 = monoeg_g_slist_prepend (D.21484, vinfo);
          ctx->list = D.21559;
        }
        ctx->verifiable = 0;
        D.21514 = ctx->level;
        D.21518 = D.21514 & 16;
        if (D.21518 != 0) goto <D.21560>; else goto <D.21561>;
        <D.21560>:
        ctx->valid = 0;
        <D.21561>:
        <D.21555>:
        mono_error_cleanup (&error);
        goto end_verify;
        <D.21553>:
        mono_class_setup_interfaces (new_class, &error);
        D.21562 = mono_error_ok (&error);
        if (D.21562 == 0) goto <D.21563>; else goto <D.21564>;
        <D.21563>:
        D.21512 = ctx->verifiable;
        if (D.21512 != 0) goto <D.21565>; else goto <D.21567>;
        <D.21567>:
        D.21514 = ctx->level;
        D.21515 = D.21514 & 128;
        if (D.21515 != 0) goto <D.21565>; else goto <D.21566>;
        <D.21565>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.21480 = ctx->ip_offset;
          D.21568 = mono_error_get_message (&error);
          D.21569 = monoeg_g_strdup_printf ("Cannot merge stacks due to a TypeLoadException %s at 0x%04x", D.21568, D.21480);
          vinfo->info.message = D.21569;
          vinfo->exception_type = 4;
          D.21484 = ctx->list;
          D.21570 = monoeg_g_slist_prepend (D.21484, vinfo);
          ctx->list = D.21570;
        }
        ctx->verifiable = 0;
        D.21514 = ctx->level;
        D.21518 = D.21514 & 16;
        if (D.21518 != 0) goto <D.21571>; else goto <D.21572>;
        <D.21571>:
        ctx->valid = 0;
        <D.21572>:
        <D.21566>:
        mono_error_cleanup (&error);
        goto end_verify;
        <D.21564>:
        D.21573 = old_class->flags;
        D.21574 = D.21573 & 32;
        if (D.21574 != 0) goto <D.21575>; else goto <D.21576>;
        <D.21575>:
        D.21577 = verifier_class_is_assignable_from (old_class, new_class);
        if (D.21577 != 0) goto <D.21578>; else goto <D.21579>;
        <D.21578>:
        match_class = old_class;
        goto match_found;
        <D.21579>:
        j = 0;
        goto <D.18994>;
        <D.18993>:
        D.21580 = old_class->interfaces;
        j.48 = (unsigned int) j;
        D.21540 = j.48 * 4;
        D.21581 = D.21580 + D.21540;
        D.21582 = *D.21581;
        D.21583 = verifier_class_is_assignable_from (D.21582, new_class);
        if (D.21583 != 0) goto <D.21584>; else goto <D.21585>;
        <D.21584>:
        D.21580 = old_class->interfaces;
        j.48 = (unsigned int) j;
        D.21540 = j.48 * 4;
        D.21581 = D.21580 + D.21540;
        match_class = *D.21581;
        goto match_found;
        <D.21585>:
        j = j + 1;
        <D.18994>:
        D.21586 = old_class->interface_count;
        D.21587 = (int) D.21586;
        if (D.21587 > j) goto <D.18993>; else goto <D.18995>;
        <D.18995>:
        <D.21576>:
        D.21588 = new_class->flags;
        D.21589 = D.21588 & 32;
        if (D.21589 != 0) goto <D.21590>; else goto <D.21591>;
        <D.21590>:
        D.21592 = verifier_class_is_assignable_from (new_class, old_class);
        if (D.21592 != 0) goto <D.21593>; else goto <D.21594>;
        <D.21593>:
        match_class = new_class;
        goto match_found;
        <D.21594>:
        j = 0;
        goto <D.18997>;
        <D.18996>:
        D.21595 = new_class->interfaces;
        j.48 = (unsigned int) j;
        D.21540 = j.48 * 4;
        D.21596 = D.21595 + D.21540;
        D.21597 = *D.21596;
        D.21598 = verifier_class_is_assignable_from (D.21597, old_class);
        if (D.21598 != 0) goto <D.21599>; else goto <D.21600>;
        <D.21599>:
        D.21595 = new_class->interfaces;
        j.48 = (unsigned int) j;
        D.21540 = j.48 * 4;
        D.21596 = D.21595 + D.21540;
        match_class = *D.21596;
        goto match_found;
        <D.21600>:
        j = j + 1;
        <D.18997>:
        D.21601 = new_class->interface_count;
        D.21602 = (int) D.21601;
        if (D.21602 > j) goto <D.18996>; else goto <D.18998>;
        <D.18998>:
        <D.21591>:
        match_class = mono_defaults.object_class;
        goto match_found;
        <D.21521>:
        D.21605 = is_compatible_boxed_valuetype (ctx, old_type, new_type, new_slot, 0);
        if (D.21605 != 0) goto <D.21603>; else goto <D.21606>;
        <D.21606>:
        D.21607 = is_compatible_boxed_valuetype (ctx, new_type, old_type, old_slot, 0);
        if (D.21607 != 0) goto <D.21603>; else goto <D.21604>;
        <D.21603>:
        match_class = mono_defaults.object_class;
        goto match_found;
        <D.21604>:
        {
          char * old_name;
          char * new_name;

          old_name = stack_slot_full_name (old_slot);
          new_name = stack_slot_full_name (new_slot);
          D.21512 = ctx->verifiable;
          if (D.21512 != 0) goto <D.21608>; else goto <D.21610>;
          <D.21610>:
          D.21514 = ctx->level;
          D.21515 = D.21514 & 128;
          if (D.21515 != 0) goto <D.21608>; else goto <D.21609>;
          <D.21608>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 8;
            D.21480 = ctx->ip_offset;
            D.21611 = 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.21480);
            vinfo->info.message = D.21611;
            vinfo->exception_type = 4;
            D.21484 = ctx->list;
            D.21612 = monoeg_g_slist_prepend (D.21484, vinfo);
            ctx->list = D.21612;
          }
          ctx->verifiable = 0;
          D.21514 = ctx->level;
          D.21518 = D.21514 & 16;
          if (D.21518 != 0) goto <D.21613>; else goto <D.21614>;
          <D.21613>:
          ctx->valid = 0;
          <D.21614>:
          <D.21609>:
          monoeg_g_free (old_name);
          monoeg_g_free (new_name);
        }
        D.21615 = stack_slot_is_managed_pointer (old_slot);
        D.21616 = &new_class->byval_arg;
        set_stack_value (ctx, old_slot, D.21616, D.21615);
        goto end_verify;
        match_found:
        D.21617 = match_class == 0B;
        D.21618 = (long int) D.21617;
        D.21619 = __builtin_expect (D.21618, 0);
        if (D.21619 != 0) goto <D.21620>; else goto <D.21621>;
        <D.21620>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 4668, "match_class");
        <D.21621>:
        D.21622 = stack_slot_is_managed_pointer (old_slot);
        D.21623 = &match_class->byval_arg;
        set_stack_value (ctx, old_slot, D.21623, D.21622);
        D.21624 = stack_slot_is_managed_pointer (old_slot);
        D.21623 = &match_class->byval_arg;
        set_stack_value (ctx, new_slot, D.21623, D.21624);
        // predicted unlikely by continue predictor.
        goto <D.18983>;
      }
      <D.18983>:
      i = i + 1;
      <D.19003>:
      D.21476 = from->size;
      D.21482 = (int) D.21476;
      if (D.21482 > i) goto <D.19002>; else goto <D.19004>;
      <D.19004>:
      end_verify:
      if (external != 0) goto <D.21625>; else goto <D.21626>;
      <D.21625>:
      D.21467 = to->flags;
      D.21627 = D.21467 | 2;
      to->flags = D.21627;
      <D.21626>:
      D.21467 = to->flags;
      D.21628 = D.21467 | 8;
      to->flags = D.21628;
    }
  finally
    {
      error = {CLOBBER};
    }
}


stack_copy (struct ILCodeDesc * to, struct ILCodeDesc * from)
{
  short unsigned int D.21629;
  int D.21630;
  unsigned int D.21633;
  unsigned int D.21634;
  struct ILStackDesc * D.21635;
  struct ILStackDesc * D.21636;

  D.21629 = from->size;
  D.21630 = (int) D.21629;
  ensure_stack_size (to, D.21630);
  D.21629 = from->size;
  to->size = D.21629;
  D.21629 = from->size;
  if (D.21629 != 0) goto <D.21631>; else goto <D.21632>;
  <D.21631>:
  D.21629 = from->size;
  D.21633 = (unsigned int) D.21629;
  D.21634 = D.21633 * 12;
  D.21635 = from->stack;
  D.21636 = to->stack;
  memcpy (D.21636, D.21635, D.21634);
  <D.21632>:
}


mono_type_from_stack_slot (struct ILStackDesc * slot)
{
  int D.21637;
  struct MonoType * D.21640;
  struct MonoType * D.21641;

  D.21637 = stack_slot_is_managed_pointer (slot);
  if (D.21637 != 0) goto <D.21638>; else goto <D.21639>;
  <D.21638>:
  D.21641 = slot->type;
  D.21640 = mono_type_get_type_byref (D.21641);
  return D.21640;
  <D.21639>:
  D.21640 = slot->type;
  return D.21640;
}


mono_type_get_type_byref (struct MonoType * type)
{
  unsigned char D.21643;
  unsigned char D.21644;
  struct MonoType * D.21647;
  struct MonoClass * D.21648;

  D.21643 = BIT_FIELD_REF <*type, 8, 56>;
  D.21644 = D.21643 & 64;
  if (D.21644 != 0) goto <D.21645>; else goto <D.21646>;
  <D.21645>:
  D.21647 = type;
  return D.21647;
  <D.21646>:
  D.21648 = mono_class_from_mono_type (type);
  D.21647 = &D.21648->this_arg;
  return D.21647;
}


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

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


verify_stack_type_compatibility_full (struct VerifyContext * ctx, struct MonoType * type, struct ILStackDesc * stack, gboolean drop_byref, gboolean valuetype_must_be_boxed)
{
  int D.21652;
  unsigned char D.21655;
  unsigned char D.21656;
  int D.21659;
  int D.21662;
  int D.21663;
  int D.21668;
  int D.21671;
  int D.21676;
  struct MonoType * D.21681;
  struct MonoType * candidate;

  candidate = mono_type_from_stack_slot (stack);
  D.21652 = mono_type_is_reference (type);
  if (D.21652 != 0) goto <D.21653>; else goto <D.21654>;
  <D.21653>:
  D.21655 = BIT_FIELD_REF <*type, 8, 56>;
  D.21656 = D.21655 & 64;
  if (D.21656 == 0) goto <D.21657>; else goto <D.21658>;
  <D.21657>:
  D.21659 = stack_slot_is_null_literal (stack);
  if (D.21659 != 0) goto <D.21660>; else goto <D.21661>;
  <D.21660>:
  D.21662 = 1;
  return D.21662;
  <D.21661>:
  <D.21658>:
  <D.21654>:
  D.21663 = is_compatible_boxed_valuetype (ctx, type, candidate, stack, 1);
  if (D.21663 != 0) goto <D.21664>; else goto <D.21665>;
  <D.21664>:
  D.21662 = 1;
  return D.21662;
  <D.21665>:
  if (valuetype_must_be_boxed != 0) goto <D.21666>; else goto <D.21667>;
  <D.21666>:
  D.21668 = stack_slot_is_boxed_value (stack);
  if (D.21668 == 0) goto <D.21669>; else goto <D.21670>;
  <D.21669>:
  D.21671 = mono_type_is_reference (candidate);
  if (D.21671 == 0) goto <D.21672>; else goto <D.21673>;
  <D.21672>:
  D.21662 = 0;
  return D.21662;
  <D.21673>:
  <D.21670>:
  <D.21667>:
  if (valuetype_must_be_boxed == 0) goto <D.21674>; else goto <D.21675>;
  <D.21674>:
  D.21676 = stack_slot_is_boxed_value (stack);
  if (D.21676 != 0) goto <D.21677>; else goto <D.21678>;
  <D.21677>:
  D.21662 = 0;
  return D.21662;
  <D.21678>:
  <D.21675>:
  if (drop_byref != 0) goto <D.21679>; else goto <D.21680>;
  <D.21679>:
  D.21681 = mono_type_get_type_byval (candidate);
  D.21662 = verify_type_compatibility_full (ctx, type, D.21681, 0);
  return D.21662;
  <D.21680>:
  D.21662 = verify_type_compatibility_full (ctx, type, candidate, 0);
  return D.21662;
}


stack_slot_is_null_literal (struct ILStackDesc * value)
{
  gboolean D.21683;
  int D.21684;
  int D.21685;
  _Bool D.21686;

  D.21684 = value->stype;
  D.21685 = D.21684 & 1024;
  D.21686 = D.21685 != 0;
  D.21683 = (gboolean) D.21686;
  return D.21683;
}


mono_type_get_type_byval (struct MonoType * type)
{
  unsigned char D.21688;
  unsigned char D.21689;
  struct MonoType * D.21692;
  struct MonoClass * D.21693;

  D.21688 = BIT_FIELD_REF <*type, 8, 56>;
  D.21689 = D.21688 & 64;
  if (D.21689 == 0) goto <D.21690>; else goto <D.21691>;
  <D.21690>:
  D.21692 = type;
  return D.21692;
  <D.21691>:
  D.21693 = mono_class_from_mono_type (type);
  D.21692 = &D.21693->byval_arg;
  return D.21692;
}


verify_type_compatibility_full (struct VerifyContext * ctx, struct MonoType * target, struct MonoType * candidate, gboolean strict)
{
  unsigned char D.21695;
  unsigned char D.21696;
  unsigned char D.21697;
  unsigned char D.21698;
  int D.21701;
  unsigned char D.21704;
  int D.21709;
  int D.21711;
  int D.21712;
  unsigned int D.21713;
  gchar * D.21714;
  struct GSList * D.21715;
  struct GSList * D.21716;
  int D.21717;
  gboolean D.21720;
  <unnamed-unsigned:1> D.21721;
  int D.21722;
  unsigned char D.21723;
  int D.21724;
  unsigned char D.21725;
  _Bool D.21726;
  unsigned char D.21729;
  unsigned char D.21730;
  _Bool D.21731;
  _Bool D.21732;
  _Bool D.21733;
  unsigned char D.21736;
  unsigned char D.21737;
  _Bool D.21738;
  _Bool D.21739;
  _Bool D.21740;
  unsigned char D.21741;
  _Bool D.21742;
  unsigned char D.21743;
  _Bool D.21744;
  int D.21747;
  _Bool D.21748;
  int iftmp.49;
  int D.21754;
  unsigned char D.21755;
  _Bool D.21756;
  _Bool D.21759;
  unsigned char D.21760;
  _Bool D.21761;
  int D.21764;
  _Bool D.21765;
  int iftmp.50;
  int D.21771;
  struct MonoType * D.21774;
  struct MonoType * D.21775;
  int iftmp.51;
  int D.21781;
  unsigned char D.21783;
  unsigned char D.21784;
  unsigned char D.21785;
  unsigned char D.21786;
  int D.21788;
  int D.21793;
  int D.21796;
  int D.21799;
  _Bool D.21802;
  _Bool D.21803;
  int D.21804;
  struct MonoClass * D.21809;
  struct MonoClass * D.21810;
  _Bool D.21815;
  int D.21820;
  struct MonoGenericParam * D.21827;
  short unsigned int D.21828;
  struct MonoGenericParam * D.21829;
  short unsigned int D.21830;
  _Bool D.21831;
  struct MonoType * original_candidate;
  void handle_enum = <<< error >>>;

  original_candidate = candidate;
  D.21695 = BIT_FIELD_REF <*candidate, 8, 56>;
  D.21696 = BIT_FIELD_REF <*target, 8, 56>;
  D.21697 = D.21695 ^ D.21696;
  D.21698 = D.21697 & 64;
  if (D.21698 != 0) goto <D.21699>; else goto <D.21700>;
  <D.21699>:
  D.21701 = get_stack_type (candidate);
  if (D.21701 == 3) goto <D.21702>; else goto <D.21703>;
  <D.21702>:
  D.21696 = BIT_FIELD_REF <*target, 8, 56>;
  D.21704 = D.21696 & 64;
  if (D.21704 != 0) goto <D.21705>; else goto <D.21706>;
  <D.21705>:
  D.21709 = ctx->verifiable;
  if (D.21709 != 0) goto <D.21707>; else goto <D.21710>;
  <D.21710>:
  D.21711 = ctx->level;
  D.21712 = D.21711 & 128;
  if (D.21712 != 0) goto <D.21707>; else goto <D.21708>;
  <D.21707>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.21713 = ctx->ip_offset;
    D.21714 = monoeg_g_strdup_printf ("using byref native int at 0x%04x", D.21713);
    vinfo->info.message = D.21714;
    vinfo->exception_type = 4;
    D.21715 = ctx->list;
    D.21716 = monoeg_g_slist_prepend (D.21715, vinfo);
    ctx->list = D.21716;
  }
  ctx->verifiable = 0;
  D.21711 = ctx->level;
  D.21717 = D.21711 & 16;
  if (D.21717 != 0) goto <D.21718>; else goto <D.21719>;
  <D.21718>:
  ctx->valid = 0;
  <D.21719>:
  <D.21708>:
  D.21720 = 1;
  return D.21720;
  <D.21706>:
  <D.21703>:
  D.21720 = 0;
  return D.21720;
  <D.21700>:
  D.21721 = target->byref;
  D.21722 = (int) D.21721;
  strict = D.21722 | strict;
  candidate = mono_type_get_underlying_type_any (candidate);
  handle_enum:
  D.21723 = target->type;
  D.21724 = (int) D.21723;
  switch (D.21724) <default: <D.18190>, case 1: <D.18151>, case 2: <D.18154>, case 3: <D.18157>, case 4: <D.18152>, case 5: <D.18153>, case 6: <D.18155>, case 7: <D.18156>, case 8: <D.18158>, case 9: <D.18159>, case 10: <D.18162>, case 11: <D.18163>, case 12: <D.18164>, case 13: <D.18165>, case 14: <D.18177>, case 15: <D.18170>, case 17: <D.18185>, case 18: <D.18178>, case 19: <D.18188>, case 20: <D.18183>, case 21: <D.18174>, case 22: <D.18184>, case 24: <D.18166>, case 25: <D.18167>, case 27: <D.18171>, case 28: <D.18179>, case 29: <D.18180>, case 30: <D.18189>>
  <D.18151>:
  D.21725 = candidate->type;
  D.21726 = D.21725 == 1;
  D.21720 = (gboolean) D.21726;
  return D.21720;
  <D.18152>:
  <D.18153>:
  <D.18154>:
  if (strict != 0) goto <D.21727>; else goto <D.21728>;
  <D.21727>:
  D.21729 = candidate->type;
  D.21730 = D.21729 + 252;
  D.21731 = D.21730 <= 1;
  D.21732 = D.21729 == 2;
  D.21733 = D.21731 | D.21732;
  D.21720 = (gboolean) D.21733;
  return D.21720;
  <D.21728>:
  <D.18155>:
  <D.18156>:
  <D.18157>:
  if (strict != 0) goto <D.21734>; else goto <D.21735>;
  <D.21734>:
  D.21736 = candidate->type;
  D.21737 = D.21736 + 250;
  D.21738 = D.21737 <= 1;
  D.21739 = D.21736 == 3;
  D.21740 = D.21738 | D.21739;
  D.21720 = (gboolean) D.21740;
  return D.21720;
  <D.21735>:
  <D.18158>:
  <D.18159>:
  {
    gboolean is_native_int;
    gboolean is_int4;

    D.21725 = candidate->type;
    D.21741 = D.21725 + 232;
    D.21742 = D.21741 <= 1;
    is_native_int = (gboolean) D.21742;
    D.21725 = candidate->type;
    D.21743 = D.21725 + 248;
    D.21744 = D.21743 <= 1;
    is_int4 = (gboolean) D.21744;
    if (strict != 0) goto <D.21745>; else goto <D.21746>;
    <D.21745>:
    D.21747 = is_native_int | is_int4;
    D.21748 = D.21747 != 0;
    D.21720 = (gboolean) D.21748;
    return D.21720;
    <D.21746>:
    if (is_native_int != 0) goto <D.21750>; else goto <D.21753>;
    <D.21753>:
    D.21754 = get_stack_type (candidate);
    if (D.21754 == 1) goto <D.21750>; else goto <D.21751>;
    <D.21750>:
    iftmp.49 = 1;
    goto <D.21752>;
    <D.21751>:
    iftmp.49 = 0;
    <D.21752>:
    D.21720 = iftmp.49;
    return D.21720;
  }
  <D.18162>:
  <D.18163>:
  D.21725 = candidate->type;
  D.21755 = D.21725 + 246;
  D.21756 = D.21755 <= 1;
  D.21720 = (gboolean) D.21756;
  return D.21720;
  <D.18164>:
  <D.18165>:
  if (strict != 0) goto <D.21757>; else goto <D.21758>;
  <D.21757>:
  D.21725 = candidate->type;
  D.21723 = target->type;
  D.21759 = D.21725 == D.21723;
  D.21720 = (gboolean) D.21759;
  return D.21720;
  <D.21758>:
  D.21725 = candidate->type;
  D.21760 = D.21725 + 244;
  D.21761 = D.21760 <= 1;
  D.21720 = (gboolean) D.21761;
  return D.21720;
  <D.18166>:
  <D.18167>:
  {
    gboolean is_native_int;
    gboolean is_int4;

    D.21725 = candidate->type;
    D.21741 = D.21725 + 232;
    D.21742 = D.21741 <= 1;
    is_native_int = (gboolean) D.21742;
    D.21725 = candidate->type;
    D.21743 = D.21725 + 248;
    D.21744 = D.21743 <= 1;
    is_int4 = (gboolean) D.21744;
    if (strict != 0) goto <D.21762>; else goto <D.21763>;
    <D.21762>:
    D.21764 = is_native_int | is_int4;
    D.21765 = D.21764 != 0;
    D.21720 = (gboolean) D.21765;
    return D.21720;
    <D.21763>:
    if (is_native_int != 0) goto <D.21767>; else goto <D.21770>;
    <D.21770>:
    D.21771 = get_stack_type (candidate);
    if (D.21771 == 1) goto <D.21767>; else goto <D.21768>;
    <D.21767>:
    iftmp.50 = 1;
    goto <D.21769>;
    <D.21768>:
    iftmp.50 = 0;
    <D.21769>:
    D.21720 = iftmp.50;
    return D.21720;
  }
  <D.18170>:
  D.21725 = candidate->type;
  if (D.21725 != 15) goto <D.21772>; else goto <D.21773>;
  <D.21772>:
  D.21720 = 0;
  return D.21720;
  <D.21773>:
  D.21774 = candidate->data.type;
  D.21775 = target->data.type;
  D.21720 = verify_type_compatibility_full (ctx, D.21775, D.21774, 1);
  return D.21720;
  <D.18171>:
  {
    struct MonoMethodSignature * left;
    struct MonoMethodSignature * right;

    D.21725 = candidate->type;
    if (D.21725 != 27) goto <D.21776>; else goto <D.21777>;
    <D.21776>:
    D.21720 = 0;
    return D.21720;
    <D.21777>:
    left = mono_type_get_signature (target);
    right = mono_type_get_signature (candidate);
    D.21781 = mono_metadata_signature_equal (left, right);
    if (D.21781 != 0) goto <D.21782>; else goto <D.21779>;
    <D.21782>:
    D.21783 = BIT_FIELD_REF <*left, 8, 80>;
    D.21784 = BIT_FIELD_REF <*right, 8, 80>;
    D.21785 = D.21783 ^ D.21784;
    D.21786 = D.21785 & 63;
    if (D.21786 == 0) goto <D.21787>; else goto <D.21779>;
    <D.21787>:
    iftmp.51 = 1;
    goto <D.21780>;
    <D.21779>:
    iftmp.51 = 0;
    <D.21780>:
    D.21720 = iftmp.51;
    return D.21720;
  }
  <D.18174>:
  {
    struct MonoClass * target_klass;
    struct MonoClass * candidate_klass;

    D.21788 = mono_type_is_enum_type (target);
    if (D.21788 != 0) goto <D.21789>; else goto <D.21790>;
    <D.21789>:
    target = mono_type_get_underlying_type_any (target);
    if (target == 0B) goto <D.21791>; else goto <D.21792>;
    <D.21791>:
    D.21720 = 0;
    return D.21720;
    <D.21792>:
    goto handle_enum;
    <D.21790>:
    D.21793 = mono_type_is_generic_argument (original_candidate);
    if (D.21793 != 0) goto <D.21794>; else goto <D.21795>;
    <D.21794>:
    D.21720 = 0;
    return D.21720;
    <D.21795>:
    target_klass = mono_class_from_mono_type (target);
    candidate_klass = mono_class_from_mono_type (candidate);
    D.21796 = mono_class_is_nullable (target_klass);
    if (D.21796 != 0) goto <D.21797>; else goto <D.21798>;
    <D.21797>:
    D.21799 = mono_class_is_nullable (candidate_klass);
    if (D.21799 == 0) goto <D.21800>; else goto <D.21801>;
    <D.21800>:
    D.21720 = 0;
    return D.21720;
    <D.21801>:
    D.21802 = target_klass == candidate_klass;
    D.21720 = (gboolean) D.21802;
    return D.21720;
    <D.21798>:
    D.21720 = verifier_class_is_assignable_from (target_klass, candidate_klass);
    return D.21720;
  }
  <D.18177>:
  D.21725 = candidate->type;
  D.21803 = D.21725 == 14;
  D.21720 = (gboolean) D.21803;
  return D.21720;
  <D.18178>:
  D.21804 = mono_type_is_generic_argument (original_candidate);
  if (D.21804 != 0) goto <D.21805>; else goto <D.21806>;
  <D.21805>:
  D.21720 = 0;
  return D.21720;
  <D.21806>:
  D.21725 = candidate->type;
  if (D.21725 == 17) goto <D.21807>; else goto <D.21808>;
  <D.21807>:
  D.21720 = 0;
  return D.21720;
  <D.21808>:
  D.21809 = mono_class_from_mono_type (original_candidate);
  D.21810 = target->data.klass;
  D.21720 = verifier_class_is_assignable_from (D.21810, D.21809);
  return D.21720;
  <D.18179>:
  D.21720 = mono_type_is_reference (candidate);
  return D.21720;
  <D.18180>:
  {
    struct MonoClass * left;
    struct MonoClass * right;

    D.21725 = candidate->type;
    if (D.21725 != 29) goto <D.21811>; else goto <D.21812>;
    <D.21811>:
    D.21720 = 0;
    return D.21720;
    <D.21812>:
    left = mono_class_from_mono_type (target);
    right = mono_class_from_mono_type (candidate);
    D.21720 = verifier_class_is_assignable_from (left, right);
    return D.21720;
  }
  <D.18183>:
  D.21725 = candidate->type;
  if (D.21725 != 20) goto <D.21813>; else goto <D.21814>;
  <D.21813>:
  D.21720 = 0;
  return D.21720;
  <D.21814>:
  D.21720 = is_array_type_compatible (target, candidate);
  return D.21720;
  <D.18184>:
  D.21725 = candidate->type;
  D.21815 = D.21725 == 22;
  D.21720 = (gboolean) D.21815;
  return D.21720;
  <D.18185>:
  {
    struct MonoClass * target_klass;
    struct MonoClass * candidate_klass;

    D.21725 = candidate->type;
    if (D.21725 == 18) goto <D.21816>; else goto <D.21817>;
    <D.21816>:
    D.21720 = 0;
    return D.21720;
    <D.21817>:
    target_klass = mono_class_from_mono_type (target);
    candidate_klass = mono_class_from_mono_type (candidate);
    if (target_klass == candidate_klass) goto <D.21818>; else goto <D.21819>;
    <D.21818>:
    D.21720 = 1;
    return D.21720;
    <D.21819>:
    D.21820 = mono_type_is_enum_type (target);
    if (D.21820 != 0) goto <D.21821>; else goto <D.21822>;
    <D.21821>:
    target = mono_type_get_underlying_type_any (target);
    if (target == 0B) goto <D.21823>; else goto <D.21824>;
    <D.21823>:
    D.21720 = 0;
    return D.21720;
    <D.21824>:
    goto handle_enum;
    <D.21822>:
    D.21720 = 0;
    return D.21720;
  }
  <D.18188>:
  D.21725 = candidate->type;
  if (D.21725 != 19) goto <D.21825>; else goto <D.21826>;
  <D.21825>:
  D.21720 = 0;
  return D.21720;
  <D.21826>:
  D.21827 = candidate->data.generic_param;
  D.21828 = D.21827->num;
  D.21829 = target->data.generic_param;
  D.21830 = D.21829->num;
  D.21831 = D.21828 == D.21830;
  D.21720 = (gboolean) D.21831;
  return D.21720;
  <D.18189>:
  D.21725 = candidate->type;
  if (D.21725 != 30) goto <D.21832>; else goto <D.21833>;
  <D.21832>:
  D.21720 = 0;
  return D.21720;
  <D.21833>:
  D.21827 = candidate->data.generic_param;
  D.21828 = D.21827->num;
  D.21829 = target->data.generic_param;
  D.21830 = D.21829->num;
  D.21831 = D.21828 == D.21830;
  D.21720 = (gboolean) D.21831;
  return D.21720;
  <D.18190>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "verify.c", 2389);
  D.21720 = 0;
  return D.21720;
  D.21720 = 1;
  return D.21720;
}


stack_slot_is_boxed_value (struct ILStackDesc * value)
{
  gboolean D.21835;
  int D.21836;
  int D.21837;
  _Bool D.21838;

  D.21836 = value->stype;
  D.21837 = D.21836 & 4096;
  D.21838 = D.21837 != 0;
  D.21835 = (gboolean) D.21838;
  return D.21835;
}


is_compatible_boxed_valuetype (struct VerifyContext * ctx, struct MonoType * type, struct MonoType * candidate, struct ILStackDesc * stack, gboolean strict)
{
  int D.21840;
  gboolean D.21843;
  unsigned char D.21846;
  unsigned char D.21847;
  unsigned char D.21849;
  unsigned char D.21850;
  int D.21851;
  struct MonoGenericParamInfo * iftmp.52;
  struct MonoGenericContainer * D.21857;
  struct MonoClass * D.21861;
  int D.21862;
  int D.21866;
  int iftmp.53;
  int D.21874;
  struct MonoClass * D.21876;
  struct MonoClass * D.21877;
  int D.21878;

  D.21840 = stack_slot_is_boxed_value (stack);
  if (D.21840 == 0) goto <D.21841>; else goto <D.21842>;
  <D.21841>:
  D.21843 = 0;
  return D.21843;
  <D.21842>:
  D.21846 = BIT_FIELD_REF <*type, 8, 56>;
  D.21847 = D.21846 & 64;
  if (D.21847 != 0) goto <D.21844>; else goto <D.21848>;
  <D.21848>:
  D.21849 = BIT_FIELD_REF <*candidate, 8, 56>;
  D.21850 = D.21849 & 64;
  if (D.21850 != 0) goto <D.21844>; else goto <D.21845>;
  <D.21844>:
  D.21843 = 0;
  return D.21843;
  <D.21845>:
  D.21851 = mono_type_is_generic_argument (candidate);
  if (D.21851 != 0) goto <D.21852>; else goto <D.21853>;
  <D.21852>:
  {
    struct MonoGenericParam * param;
    struct MonoClass * * class;

    param = get_generic_param (ctx, candidate);
    if (param == 0B) goto <D.21854>; else goto <D.21855>;
    <D.21854>:
    D.21843 = 0;
    return D.21843;
    <D.21855>:
    D.21857 = param->owner;
    if (D.21857 != 0B) goto <D.21858>; else goto <D.21859>;
    <D.21858>:
    iftmp.52 = &MEM[(struct MonoGenericParamFull *)param].info;
    goto <D.21860>;
    <D.21859>:
    iftmp.52 = 0B;
    <D.21860>:
    class = iftmp.52->constraints;
    goto <D.18225>;
    <D.18224>:
    D.21861 = *class;
    D.21862 = recursive_boxed_constraint_type_check (ctx, type, D.21861, 256);
    if (D.21862 != 0) goto <D.21863>; else goto <D.21864>;
    <D.21863>:
    D.21843 = 1;
    return D.21843;
    <D.21864>:
    class = class + 4;
    <D.18225>:
    if (class != 0B) goto <D.21865>; else goto <D.18226>;
    <D.21865>:
    D.21861 = *class;
    if (D.21861 != 0B) goto <D.18224>; else goto <D.18226>;
    <D.18226>:
  }
  <D.21853>:
  D.21866 = mono_type_is_generic_argument (type);
  if (D.21866 != 0) goto <D.21867>; else goto <D.21868>;
  <D.21867>:
  D.21843 = 0;
  return D.21843;
  <D.21868>:
  if (strict == 0) goto <D.21869>; else goto <D.21870>;
  <D.21869>:
  D.21843 = 1;
  return D.21843;
  <D.21870>:
  D.21874 = mono_type_is_reference (type);
  if (D.21874 != 0) goto <D.21875>; else goto <D.21872>;
  <D.21875>:
  D.21876 = mono_class_from_mono_type (candidate);
  D.21877 = mono_class_from_mono_type (type);
  D.21878 = verifier_class_is_assignable_from (D.21877, D.21876);
  if (D.21878 != 0) goto <D.21879>; else goto <D.21872>;
  <D.21879>:
  iftmp.53 = 1;
  goto <D.21873>;
  <D.21872>:
  iftmp.53 = 0;
  <D.21873>:
  D.21843 = iftmp.53;
  return D.21843;
}


get_generic_param (struct VerifyContext * ctx, struct MonoType * param)
{
  struct MonoGenericParam * D.21881;
  unsigned char D.21882;
  struct MonoGenericContext * D.21887;
  struct MonoGenericInst * D.21888;
  <unnamed-unsigned:22> D.21890;
  int D.21891;
  int D.21892;
  gchar * D.21893;
  struct GSList * D.21894;
  struct GSList * D.21895;
  struct MonoGenericParam * D.21896;
  struct MonoType * D.21897;
  struct MonoGenericInst * D.21900;
  <unnamed-unsigned:22> D.21902;
  int D.21903;
  gchar * D.21904;
  struct GSList * D.21905;
  struct MonoType * D.21906;
  guint16 param_num;

  D.21881 = param->data.generic_param;
  param_num = D.21881->num;
  D.21882 = param->type;
  if (D.21882 == 19) goto <D.21883>; else goto <D.21884>;
  <D.21883>:
  D.21887 = ctx->generic_context;
  D.21888 = D.21887->class_inst;
  if (D.21888 == 0B) goto <D.21885>; else goto <D.21889>;
  <D.21889>:
  D.21887 = ctx->generic_context;
  D.21888 = D.21887->class_inst;
  D.21890 = D.21888->type_argc;
  D.21891 = (int) D.21890;
  D.21892 = (int) param_num;
  if (D.21891 <= D.21892) goto <D.21885>; else goto <D.21886>;
  <D.21885>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.21892 = (int) param_num;
    D.21893 = monoeg_g_strdup_printf ("Invalid generic type argument %d", D.21892);
    vinfo->info.message = D.21893;
    vinfo->exception_type = 3;
    D.21894 = ctx->list;
    D.21895 = monoeg_g_slist_prepend (D.21894, vinfo);
    ctx->list = D.21895;
  }
  ctx->valid = 0;
  D.21896 = 0B;
  return D.21896;
  <D.21886>:
  D.21887 = ctx->generic_context;
  D.21888 = D.21887->class_inst;
  D.21892 = (int) param_num;
  D.21897 = D.21888->type_argv[D.21892];
  D.21896 = D.21897->data.generic_param;
  return D.21896;
  <D.21884>:
  D.21887 = ctx->generic_context;
  D.21900 = D.21887->method_inst;
  if (D.21900 == 0B) goto <D.21898>; else goto <D.21901>;
  <D.21901>:
  D.21887 = ctx->generic_context;
  D.21900 = D.21887->method_inst;
  D.21902 = D.21900->type_argc;
  D.21903 = (int) D.21902;
  D.21892 = (int) param_num;
  if (D.21903 <= D.21892) goto <D.21898>; else goto <D.21899>;
  <D.21898>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.21892 = (int) param_num;
    D.21904 = monoeg_g_strdup_printf ("Invalid generic method argument %d", D.21892);
    vinfo->info.message = D.21904;
    vinfo->exception_type = 3;
    D.21894 = ctx->list;
    D.21905 = monoeg_g_slist_prepend (D.21894, vinfo);
    ctx->list = D.21905;
  }
  ctx->valid = 0;
  D.21896 = 0B;
  return D.21896;
  <D.21899>:
  D.21887 = ctx->generic_context;
  D.21900 = D.21887->method_inst;
  D.21892 = (int) param_num;
  D.21906 = D.21900->type_argv[D.21892];
  D.21896 = D.21906->data.generic_param;
  return D.21896;
}


recursive_boxed_constraint_type_check (struct VerifyContext * ctx, struct MonoType * type, struct MonoClass * constraint_class, int recursion_level)
{
  gboolean D.21910;
  struct MonoType * D.21911;
  int D.21912;
  int D.21915;
  struct MonoGenericParamInfo * iftmp.54;
  struct MonoGenericContainer * D.21921;
  int D.21925;
  struct MonoClass * D.21926;
  int D.21927;
  struct MonoType * constraint_type;

  constraint_type = &constraint_class->byval_arg;
  if (recursion_level <= 0) goto <D.21908>; else goto <D.21909>;
  <D.21908>:
  D.21910 = 0;
  return D.21910;
  <D.21909>:
  D.21911 = mono_type_get_type_byval (constraint_type);
  D.21912 = verify_type_compatibility_full (ctx, type, D.21911, 0);
  if (D.21912 != 0) goto <D.21913>; else goto <D.21914>;
  <D.21913>:
  D.21910 = 1;
  return D.21910;
  <D.21914>:
  D.21915 = mono_type_is_generic_argument (constraint_type);
  if (D.21915 != 0) goto <D.21916>; else goto <D.21917>;
  <D.21916>:
  {
    struct MonoGenericParam * param;
    struct MonoClass * * class;

    param = get_generic_param (ctx, constraint_type);
    if (param == 0B) goto <D.21918>; else goto <D.21919>;
    <D.21918>:
    D.21910 = 0;
    return D.21910;
    <D.21919>:
    D.21921 = param->owner;
    if (D.21921 != 0B) goto <D.21922>; else goto <D.21923>;
    <D.21922>:
    iftmp.54 = &MEM[(struct MonoGenericParamFull *)param].info;
    goto <D.21924>;
    <D.21923>:
    iftmp.54 = 0B;
    <D.21924>:
    class = iftmp.54->constraints;
    goto <D.18213>;
    <D.18212>:
    D.21925 = recursion_level + -1;
    D.21926 = *class;
    D.21927 = recursive_boxed_constraint_type_check (ctx, type, D.21926, D.21925);
    if (D.21927 != 0) goto <D.21928>; else goto <D.21929>;
    <D.21928>:
    D.21910 = 1;
    return D.21910;
    <D.21929>:
    class = class + 4;
    <D.18213>:
    if (class != 0B) goto <D.21930>; else goto <D.18214>;
    <D.21930>:
    D.21926 = *class;
    if (D.21926 != 0B) goto <D.18212>; else goto <D.18214>;
    <D.18214>:
  }
  <D.21917>:
  D.21910 = 0;
  return D.21910;
}


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

  D.21932 = value->type;
  type_name = mono_type_full_name (D.21932);
  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.21933 = res;
  return D.21933;
}


stack_slot_stack_type_full_name (struct ILStackDesc * value)
{
  int D.21935;
  int D.21936;
  int D.21939;
  int D.21944;
  int D.21949;
  int D.21954;
  int D.21959;
  struct MonoType * D.21964;
  int D.21965;
  int D.21968;
  const char * D.21977;
  char * D.21978;
  struct GString * str;
  char * result;
  gboolean has_pred;
  gboolean first;

  str = monoeg_g_string_new ("");
  has_pred = 0;
  first = 1;
  D.21935 = value->stype;
  D.21936 = D.21935 & 15;
  D.21935 = value->stype;
  if (D.21936 != D.21935) goto <D.21937>; else goto <D.21938>;
  <D.21937>:
  monoeg_g_string_append (str, "[");
  D.21939 = stack_slot_is_this_pointer (value);
  if (D.21939 != 0) goto <D.21940>; else goto <D.21941>;
  <D.21940>:
  if (first == 0) goto <D.21942>; else goto <D.21943>;
  <D.21942>:
  monoeg_g_string_append (str, ", ");
  <D.21943>:
  monoeg_g_string_append (str, "this");
  first = 0;
  <D.21941>:
  D.21944 = stack_slot_is_boxed_value (value);
  if (D.21944 != 0) goto <D.21945>; else goto <D.21946>;
  <D.21945>:
  if (first == 0) goto <D.21947>; else goto <D.21948>;
  <D.21947>:
  monoeg_g_string_append (str, ", ");
  <D.21948>:
  monoeg_g_string_append (str, "boxed");
  first = 0;
  <D.21946>:
  D.21949 = stack_slot_is_null_literal (value);
  if (D.21949 != 0) goto <D.21950>; else goto <D.21951>;
  <D.21950>:
  if (first == 0) goto <D.21952>; else goto <D.21953>;
  <D.21952>:
  monoeg_g_string_append (str, ", ");
  <D.21953>:
  monoeg_g_string_append (str, "null");
  first = 0;
  <D.21951>:
  D.21954 = stack_slot_is_managed_mutability_pointer (value);
  if (D.21954 != 0) goto <D.21955>; else goto <D.21956>;
  <D.21955>:
  if (first == 0) goto <D.21957>; else goto <D.21958>;
  <D.21957>:
  monoeg_g_string_append (str, ", ");
  <D.21958>:
  monoeg_g_string_append (str, "cmmp");
  first = 0;
  <D.21956>:
  D.21959 = stack_slot_is_managed_pointer (value);
  if (D.21959 != 0) goto <D.21960>; else goto <D.21961>;
  <D.21960>:
  if (first == 0) goto <D.21962>; else goto <D.21963>;
  <D.21962>:
  monoeg_g_string_append (str, ", ");
  <D.21963>:
  monoeg_g_string_append (str, "mp");
  first = 0;
  <D.21961>:
  has_pred = 1;
  <D.21938>:
  D.21964 = value->type;
  D.21965 = mono_type_is_generic_argument (D.21964);
  if (D.21965 != 0) goto <D.21966>; else goto <D.21967>;
  <D.21966>:
  D.21968 = stack_slot_is_boxed_value (value);
  if (D.21968 == 0) goto <D.21969>; else goto <D.21970>;
  <D.21969>:
  if (has_pred == 0) goto <D.21971>; else goto <D.21972>;
  <D.21971>:
  monoeg_g_string_append (str, "[");
  <D.21972>:
  if (first == 0) goto <D.21973>; else goto <D.21974>;
  <D.21973>:
  monoeg_g_string_append (str, ", ");
  <D.21974>:
  monoeg_g_string_append (str, "unboxed");
  has_pred = 1;
  <D.21970>:
  <D.21967>:
  if (has_pred != 0) goto <D.21975>; else goto <D.21976>;
  <D.21975>:
  monoeg_g_string_append (str, "] ");
  <D.21976>:
  D.21977 = stack_slot_get_name (value);
  monoeg_g_string_append (str, D.21977);
  result = str->str;
  monoeg_g_string_free (str, 0);
  D.21978 = result;
  return D.21978;
}


stack_slot_is_this_pointer (struct ILStackDesc * value)
{
  gboolean D.21980;
  int D.21981;
  int D.21982;
  _Bool D.21983;

  D.21981 = value->stype;
  D.21982 = D.21981 & 2048;
  D.21983 = D.21982 != 0;
  D.21980 = (gboolean) D.21983;
  return D.21980;
}


stack_slot_is_managed_mutability_pointer (struct ILStackDesc * value)
{
  gboolean D.21985;
  int D.21986;
  int D.21987;
  _Bool D.21988;

  D.21986 = value->stype;
  D.21987 = D.21986 & 512;
  D.21988 = D.21987 != 0;
  D.21985 = (gboolean) D.21988;
  return D.21985;
}


stack_slot_get_name (struct ILStackDesc * value)
{
  const char * D.21990;
  int D.21991;
  int D.21992;

  D.21991 = value->stype;
  D.21992 = D.21991 & 15;
  D.21990 = type_names[D.21992];
  return D.21990;
}


stack_slot_is_managed_pointer (struct ILStackDesc * value)
{
  gboolean D.21994;
  int D.21995;
  int D.21996;
  _Bool D.21997;

  D.21995 = value->stype;
  D.21996 = D.21995 & 256;
  D.21997 = D.21996 != 0;
  D.21994 = (gboolean) D.21997;
  return D.21994;
}


do_binop (struct VerifyContext * ctx, unsigned int opcode, const unsigned char[6] * table)
{
  int D.21999;
  int D.22002;
  int D.22005;
  unsigned int idxa.55;
  unsigned int D.22009;
  const unsigned char[6] * D.22010;
  int D.22015;
  int D.22017;
  int D.22018;
  const char * D.22019;
  const char * D.22020;
  gchar * D.22021;
  struct GSList * D.22022;
  struct GSList * D.22023;
  int D.22024;
  signed char res.56;
  const char * D.22033;
  const char * D.22034;
  gchar * D.22035;
  struct GSList * D.22036;
  _Bool D.22039;
  _Bool D.22040;
  _Bool D.22041;
  int D.22050;
  struct ILStackDesc * a;
  struct ILStackDesc * b;
  struct ILStackDesc * top;
  int idxa;
  int idxb;
  int complexMerge;
  unsigned char res;

  complexMerge = 0;
  D.21999 = check_underflow (ctx, 2);
  if (D.21999 == 0) goto <D.22000>; else goto <D.22001>;
  <D.22000>:
  return;
  <D.22001>:
  b = stack_pop (ctx);
  a = stack_pop (ctx);
  idxa = stack_slot_get_underlying_type (a);
  D.22002 = stack_slot_is_managed_pointer (a);
  if (D.22002 != 0) goto <D.22003>; else goto <D.22004>;
  <D.22003>:
  idxa = 5;
  complexMerge = 1;
  <D.22004>:
  idxb = stack_slot_get_underlying_type (b);
  D.22005 = stack_slot_is_managed_pointer (b);
  if (D.22005 != 0) goto <D.22006>; else goto <D.22007>;
  <D.22006>:
  idxb = 5;
  complexMerge = 2;
  <D.22007>:
  idxa = idxa + -1;
  idxb = idxb + -1;
  idxa.55 = (unsigned int) idxa;
  D.22009 = idxa.55 * 6;
  D.22010 = table + D.22009;
  res = *D.22010[idxb];
  top = stack_push (ctx);
  if (res == 0) goto <D.22011>; else goto <D.22012>;
  <D.22011>:
  D.22015 = ctx->verifiable;
  if (D.22015 != 0) goto <D.22013>; else goto <D.22016>;
  <D.22016>:
  D.22017 = ctx->level;
  D.22018 = D.22017 & 128;
  if (D.22018 != 0) goto <D.22013>; else goto <D.22014>;
  <D.22013>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22019 = stack_slot_get_name (b);
    D.22020 = stack_slot_get_name (a);
    D.22021 = monoeg_g_strdup_printf ("Binary instruction applyed to ill formed stack (%s x %s)", D.22020, D.22019);
    vinfo->info.message = D.22021;
    vinfo->exception_type = 4;
    D.22022 = ctx->list;
    D.22023 = monoeg_g_slist_prepend (D.22022, vinfo);
    ctx->list = D.22023;
  }
  ctx->verifiable = 0;
  D.22017 = ctx->level;
  D.22024 = D.22017 & 16;
  if (D.22024 != 0) goto <D.22025>; else goto <D.22026>;
  <D.22025>:
  ctx->valid = 0;
  <D.22026>:
  <D.22014>:
  copy_stack_value (top, a);
  return;
  <D.22012>:
  res.56 = (signed char) res;
  if (res.56 < 0) goto <D.22028>; else goto <D.22029>;
  <D.22028>:
  D.22015 = ctx->verifiable;
  if (D.22015 != 0) goto <D.22030>; else goto <D.22032>;
  <D.22032>:
  D.22017 = ctx->level;
  D.22018 = D.22017 & 128;
  if (D.22018 != 0) goto <D.22030>; else goto <D.22031>;
  <D.22030>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22033 = stack_slot_get_name (b);
    D.22034 = stack_slot_get_name (a);
    D.22035 = monoeg_g_strdup_printf ("Binary instruction is not verifiable (%s x %s)", D.22034, D.22033);
    vinfo->info.message = D.22035;
    vinfo->exception_type = 4;
    D.22022 = ctx->list;
    D.22036 = monoeg_g_slist_prepend (D.22022, vinfo);
    ctx->list = D.22036;
  }
  ctx->verifiable = 0;
  D.22017 = ctx->level;
  D.22024 = D.22017 & 16;
  if (D.22024 != 0) goto <D.22037>; else goto <D.22038>;
  <D.22037>:
  ctx->valid = 0;
  <D.22038>:
  <D.22031>:
  res = res & 127;
  <D.22029>:
  D.22039 = complexMerge != 0;
  D.22040 = res == 5;
  D.22041 = D.22039 & D.22040;
  if (D.22041 != 0) goto <D.22042>; else goto <D.22043>;
  <D.22042>:
  if (complexMerge == 1) goto <D.22044>; else goto <D.22045>;
  <D.22044>:
  copy_stack_value (top, a);
  goto <D.22046>;
  <D.22045>:
  if (complexMerge == 2) goto <D.22047>; else goto <D.22048>;
  <D.22047>:
  copy_stack_value (top, b);
  <D.22048>:
  <D.22046>:
  goto <D.22049>;
  <D.22043>:
  D.22050 = (int) res;
  top->stype = D.22050;
  <D.22049>:
}


stack_pop (struct VerifyContext * ctx)
{
  short unsigned int D.22052;
  _Bool D.22053;
  long int D.22054;
  long int D.22055;
  struct ILStackDesc * D.22058;
  short unsigned int D.22059;
  unsigned int D.22060;
  unsigned int D.22061;
  int D.22062;
  int D.22063;
  int D.22068;
  int D.22070;
  int D.22071;
  unsigned int D.22072;
  gchar * D.22073;
  struct GSList * D.22074;
  struct GSList * D.22075;
  int D.22076;
  struct ILStackDesc * D.22079;
  struct ILStackDesc * ret;

  D.22052 = ctx->eval.size;
  D.22053 = D.22052 == 0;
  D.22054 = (long int) D.22053;
  D.22055 = __builtin_expect (D.22054, 0);
  if (D.22055 != 0) goto <D.22056>; else goto <D.22057>;
  <D.22056>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1610, "ctx->eval.size > 0");
  <D.22057>:
  D.22058 = ctx->eval.stack;
  D.22052 = ctx->eval.size;
  D.22059 = D.22052 + 65535;
  ctx->eval.size = D.22059;
  D.22052 = ctx->eval.size;
  D.22060 = (unsigned int) D.22052;
  D.22061 = D.22060 * 12;
  ret = D.22058 + D.22061;
  D.22062 = ret->stype;
  D.22063 = D.22062 & 8192;
  if (D.22063 != 0) goto <D.22064>; else goto <D.22065>;
  <D.22064>:
  D.22068 = ctx->verifiable;
  if (D.22068 != 0) goto <D.22066>; else goto <D.22069>;
  <D.22069>:
  D.22070 = ctx->level;
  D.22071 = D.22070 & 128;
  if (D.22071 != 0) goto <D.22066>; else goto <D.22067>;
  <D.22066>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22072 = ctx->ip_offset;
    D.22073 = monoeg_g_strdup_printf ("Found use of uninitialized \'this ptr\' ref at 0x%04x", D.22072);
    vinfo->info.message = D.22073;
    vinfo->exception_type = 4;
    D.22074 = ctx->list;
    D.22075 = monoeg_g_slist_prepend (D.22074, vinfo);
    ctx->list = D.22075;
  }
  ctx->verifiable = 0;
  D.22070 = ctx->level;
  D.22076 = D.22070 & 16;
  if (D.22076 != 0) goto <D.22077>; else goto <D.22078>;
  <D.22077>:
  ctx->valid = 0;
  <D.22078>:
  <D.22067>:
  <D.22065>:
  D.22079 = ret;
  return D.22079;
}


stack_slot_get_underlying_type (struct ILStackDesc * value)
{
  gint32 D.22081;
  int D.22082;

  D.22082 = value->stype;
  D.22081 = D.22082 & 15;
  return D.22081;
}


stack_pop_safe (struct VerifyContext * ctx)
{
  short unsigned int D.22084;
  _Bool D.22085;
  long int D.22086;
  long int D.22087;
  struct ILStackDesc * D.22090;
  struct ILStackDesc * D.22091;
  short unsigned int D.22092;
  unsigned int D.22093;
  unsigned int D.22094;

  D.22084 = ctx->eval.size;
  D.22085 = D.22084 == 0;
  D.22086 = (long int) D.22085;
  D.22087 = __builtin_expect (D.22086, 0);
  if (D.22087 != 0) goto <D.22088>; else goto <D.22089>;
  <D.22088>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1623, "ctx->eval.size > 0");
  <D.22089>:
  D.22091 = ctx->eval.stack;
  D.22084 = ctx->eval.size;
  D.22092 = D.22084 + 65535;
  ctx->eval.size = D.22092;
  D.22084 = ctx->eval.size;
  D.22093 = (unsigned int) D.22084;
  D.22094 = D.22093 * 12;
  D.22090 = D.22091 + D.22094;
  return D.22090;
}


do_ret (struct VerifyContext * ctx)
{
  struct MonoMethodSignature * D.22096;
  unsigned char D.22097;
  int D.22100;
  struct MonoType * D.22103;
  int D.22104;
  int D.22109;
  int D.22111;
  int D.22112;
  unsigned int D.22113;
  gchar * D.22114;
  struct GSList * D.22115;
  struct GSList * D.22116;
  int D.22117;
  unsigned char D.22122;
  unsigned char D.22123;
  int D.22126;
  int D.22128;
  gchar * D.22132;
  struct GSList * D.22133;
  short unsigned int D.22136;
  int D.22142;
  gchar * D.22143;
  struct GSList * D.22144;
  struct MonoMethodHeader * D.22147;
  int D.22148;
  gchar * D.22154;
  struct GSList * D.22155;
  struct MonoType * ret;

  D.22096 = ctx->signature;
  ret = D.22096->ret;
  D.22097 = ret->type;
  if (D.22097 != 1) goto <D.22098>; else goto <D.22099>;
  <D.22098>:
  {
    struct ILStackDesc * top;

    D.22100 = check_underflow (ctx, 1);
    if (D.22100 == 0) goto <D.22101>; else goto <D.22102>;
    <D.22101>:
    return;
    <D.22102>:
    top = stack_pop (ctx);
    D.22096 = ctx->signature;
    D.22103 = D.22096->ret;
    D.22104 = verify_stack_type_compatibility (ctx, D.22103, top);
    if (D.22104 == 0) goto <D.22105>; else goto <D.22106>;
    <D.22105>:
    {
      char * ret_type;
      char * stack_type;

      D.22096 = ctx->signature;
      D.22103 = D.22096->ret;
      ret_type = mono_type_full_name (D.22103);
      stack_type = stack_slot_full_name (top);
      D.22109 = ctx->verifiable;
      if (D.22109 != 0) goto <D.22107>; else goto <D.22110>;
      <D.22110>:
      D.22111 = ctx->level;
      D.22112 = D.22111 & 128;
      if (D.22112 != 0) goto <D.22107>; else goto <D.22108>;
      <D.22107>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.22113 = ctx->ip_offset;
        D.22114 = 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.22113);
        vinfo->info.message = D.22114;
        vinfo->exception_type = 4;
        D.22115 = ctx->list;
        D.22116 = monoeg_g_slist_prepend (D.22115, vinfo);
        ctx->list = D.22116;
      }
      ctx->verifiable = 0;
      D.22111 = ctx->level;
      D.22117 = D.22111 & 16;
      if (D.22117 != 0) goto <D.22118>; else goto <D.22119>;
      <D.22118>:
      ctx->valid = 0;
      <D.22119>:
      <D.22108>:
      monoeg_g_free (stack_type);
      monoeg_g_free (ret_type);
      return;
    }
    <D.22106>:
    D.22122 = BIT_FIELD_REF <*ret, 8, 56>;
    D.22123 = D.22122 & 64;
    if (D.22123 != 0) goto <D.22120>; else goto <D.22124>;
    <D.22124>:
    D.22097 = ret->type;
    if (D.22097 == 22) goto <D.22120>; else goto <D.22125>;
    <D.22125>:
    D.22126 = mono_type_is_value_type (ret, "System", "ArgIterator");
    if (D.22126 != 0) goto <D.22120>; else goto <D.22127>;
    <D.22127>:
    D.22128 = mono_type_is_value_type (ret, "System", "RuntimeArgumentHandle");
    if (D.22128 != 0) goto <D.22120>; else goto <D.22121>;
    <D.22120>:
    D.22109 = ctx->verifiable;
    if (D.22109 != 0) goto <D.22129>; else goto <D.22131>;
    <D.22131>:
    D.22111 = ctx->level;
    D.22112 = D.22111 & 128;
    if (D.22112 != 0) goto <D.22129>; else goto <D.22130>;
    <D.22129>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.22113 = ctx->ip_offset;
      D.22132 = monoeg_g_strdup_printf ("Method returns byref, TypedReference, ArgIterator or RuntimeArgumentHandle at 0x%04x", D.22113);
      vinfo->info.message = D.22132;
      vinfo->exception_type = 4;
      D.22115 = ctx->list;
      D.22133 = monoeg_g_slist_prepend (D.22115, vinfo);
      ctx->list = D.22133;
    }
    ctx->verifiable = 0;
    D.22111 = ctx->level;
    D.22117 = D.22111 & 16;
    if (D.22117 != 0) goto <D.22134>; else goto <D.22135>;
    <D.22134>:
    ctx->valid = 0;
    <D.22135>:
    <D.22130>:
    <D.22121>:
  }
  <D.22099>:
  D.22136 = ctx->eval.size;
  if (D.22136 != 0) goto <D.22137>; else goto <D.22138>;
  <D.22137>:
  D.22109 = ctx->verifiable;
  if (D.22109 != 0) goto <D.22139>; else goto <D.22141>;
  <D.22141>:
  D.22111 = ctx->level;
  D.22112 = D.22111 & 128;
  if (D.22112 != 0) goto <D.22139>; else goto <D.22140>;
  <D.22139>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22113 = ctx->ip_offset;
    D.22136 = ctx->eval.size;
    D.22142 = (int) D.22136;
    D.22143 = monoeg_g_strdup_printf ("Stack not empty (%d) after ret at 0x%04x", D.22142, D.22113);
    vinfo->info.message = D.22143;
    vinfo->exception_type = 4;
    D.22115 = ctx->list;
    D.22144 = monoeg_g_slist_prepend (D.22115, vinfo);
    ctx->list = D.22144;
  }
  ctx->verifiable = 0;
  D.22111 = ctx->level;
  D.22117 = D.22111 & 16;
  if (D.22117 != 0) goto <D.22145>; else goto <D.22146>;
  <D.22145>:
  ctx->valid = 0;
  <D.22146>:
  <D.22140>:
  <D.22138>:
  D.22113 = ctx->ip_offset;
  D.22147 = ctx->header;
  D.22148 = in_any_block (D.22147, D.22113);
  if (D.22148 != 0) goto <D.22149>; else goto <D.22150>;
  <D.22149>:
  D.22109 = ctx->verifiable;
  if (D.22109 != 0) goto <D.22151>; else goto <D.22153>;
  <D.22153>:
  D.22111 = ctx->level;
  D.22112 = D.22111 & 128;
  if (D.22112 != 0) goto <D.22151>; else goto <D.22152>;
  <D.22151>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22113 = ctx->ip_offset;
    D.22154 = monoeg_g_strdup_printf ("ret cannot escape exception blocks at 0x%04x", D.22113);
    vinfo->info.message = D.22154;
    vinfo->exception_type = 4;
    D.22115 = ctx->list;
    D.22155 = monoeg_g_slist_prepend (D.22115, vinfo);
    ctx->list = D.22155;
  }
  ctx->verifiable = 0;
  D.22111 = ctx->level;
  D.22117 = D.22111 & 16;
  if (D.22117 != 0) goto <D.22156>; else goto <D.22157>;
  <D.22156>:
  ctx->valid = 0;
  <D.22157>:
  <D.22152>:
  <D.22150>:
}


mono_type_is_value_type (struct MonoType * type, const char * namespace, const char * name)
{
  gboolean D.22159;
  int iftmp.57;
  unsigned char D.22163;
  int D.17532;
  struct MonoClass * D.22165;
  const char * D.22166;
  int D.17541;
  const char * D.22168;

  D.22163 = type->type;
  if (D.22163 == 17) goto <D.22164>; else goto <D.22161>;
  <D.22164>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.22165 = type->data.klass;
    D.22166 = D.22165->name_space;
    D.17532 = __builtin_strcmp (namespace, D.22166);
  }
  if (D.17532 == 0) goto <D.22167>; else goto <D.22161>;
  <D.22167>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.22165 = type->data.klass;
    D.22168 = D.22165->name;
    D.17541 = __builtin_strcmp (name, D.22168);
  }
  if (D.17541 == 0) goto <D.22169>; else goto <D.22161>;
  <D.22169>:
  iftmp.57 = 1;
  goto <D.22162>;
  <D.22161>:
  iftmp.57 = 0;
  <D.22162>:
  D.22159 = iftmp.57;
  return D.22159;
}


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

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


do_branch_op (struct VerifyContext * ctx, int delta, const unsigned char[6] * table)
{
  unsigned int D.22173;
  unsigned int delta.58;
  unsigned int D.22175;
  int D.22179;
  gchar * D.22180;
  struct GSList * D.22181;
  struct GSList * D.22182;
  unsigned int target.59;
  struct MonoMethodHeader * D.22184;
  int D.22185;
  int D.22188;
  int D.22190;
  int D.22191;
  gchar * D.22192;
  struct GSList * D.22193;
  int D.22194;
  gchar * D.22197;
  struct GSList * D.22198;
  int D.22200;
  int D.22203;
  int D.22206;
  int D.22212;
  int D.22214;
  unsigned int idxa.60;
  unsigned int D.22216;
  const unsigned char[6] * D.22217;
  const char * D.22223;
  const char * D.22224;
  gchar * D.22225;
  struct GSList * D.22226;
  signed char res.61;
  const char * D.22236;
  const char * D.22237;
  gchar * D.22238;
  struct GSList * D.22239;
  struct ILStackDesc * a;
  struct ILStackDesc * b;
  int idxa;
  int idxb;
  unsigned char res;
  int target;

  D.22173 = ctx->ip_offset;
  delta.58 = (unsigned int) delta;
  D.22175 = D.22173 + delta.58;
  target = (int) D.22175;
  if (target < 0) goto <D.22176>; else goto <D.22178>;
  <D.22178>:
  D.22179 = ctx->code_size;
  if (D.22179 <= target) goto <D.22176>; else goto <D.22177>;
  <D.22176>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.22173 = ctx->ip_offset;
    D.22180 = monoeg_g_strdup_printf ("Branch target out of code at 0x%04x", D.22173);
    vinfo->info.message = D.22180;
    vinfo->exception_type = 3;
    D.22181 = ctx->list;
    D.22182 = monoeg_g_slist_prepend (D.22181, vinfo);
    ctx->list = D.22182;
  }
  ctx->valid = 0;
  return;
  <D.22177>:
  target.59 = (unsigned int) target;
  D.22173 = ctx->ip_offset;
  D.22184 = ctx->header;
  D.22185 = is_valid_cmp_branch_instruction (D.22184, D.22173, target.59);
  switch (D.22185) <default: <D.22199>, case 1: <D.18408>, case 2: <D.18411>>
  <D.18408>:
  D.22188 = ctx->verifiable;
  if (D.22188 != 0) goto <D.22186>; else goto <D.22189>;
  <D.22189>:
  D.22190 = ctx->level;
  D.22191 = D.22190 & 128;
  if (D.22191 != 0) goto <D.22186>; else goto <D.22187>;
  <D.22186>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22173 = ctx->ip_offset;
    D.22192 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.22173);
    vinfo->info.message = D.22192;
    vinfo->exception_type = 4;
    D.22181 = ctx->list;
    D.22193 = monoeg_g_slist_prepend (D.22181, vinfo);
    ctx->list = D.22193;
  }
  ctx->verifiable = 0;
  D.22190 = ctx->level;
  D.22194 = D.22190 & 16;
  if (D.22194 != 0) goto <D.22195>; else goto <D.22196>;
  <D.22195>:
  ctx->valid = 0;
  <D.22196>:
  <D.22187>:
  goto <D.18410>;
  <D.18411>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.22173 = ctx->ip_offset;
    D.22197 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.22173);
    vinfo->info.message = D.22197;
    vinfo->exception_type = 3;
    D.22181 = ctx->list;
    D.22198 = monoeg_g_slist_prepend (D.22181, vinfo);
    ctx->list = D.22198;
  }
  ctx->valid = 0;
  return;
  <D.22199>:
  <D.18410>:
  ctx->target = target;
  D.22200 = check_underflow (ctx, 2);
  if (D.22200 == 0) goto <D.22201>; else goto <D.22202>;
  <D.22201>:
  return;
  <D.22202>:
  b = stack_pop (ctx);
  a = stack_pop (ctx);
  idxa = stack_slot_get_underlying_type (a);
  D.22203 = stack_slot_is_managed_pointer (a);
  if (D.22203 != 0) goto <D.22204>; else goto <D.22205>;
  <D.22204>:
  idxa = 5;
  <D.22205>:
  idxb = stack_slot_get_underlying_type (b);
  D.22206 = stack_slot_is_managed_pointer (b);
  if (D.22206 != 0) goto <D.22207>; else goto <D.22208>;
  <D.22207>:
  idxb = 5;
  <D.22208>:
  D.22212 = stack_slot_is_complex_type_not_reference_type (a);
  if (D.22212 != 0) goto <D.22209>; else goto <D.22213>;
  <D.22213>:
  D.22214 = stack_slot_is_complex_type_not_reference_type (b);
  if (D.22214 != 0) goto <D.22209>; else goto <D.22210>;
  <D.22209>:
  res = 0;
  goto <D.22211>;
  <D.22210>:
  idxa = idxa + -1;
  idxb = idxb + -1;
  idxa.60 = (unsigned int) idxa;
  D.22216 = idxa.60 * 6;
  D.22217 = table + D.22216;
  res = *D.22217[idxb];
  <D.22211>:
  if (res == 0) goto <D.22218>; else goto <D.22219>;
  <D.22218>:
  D.22188 = ctx->verifiable;
  if (D.22188 != 0) goto <D.22220>; else goto <D.22222>;
  <D.22222>:
  D.22190 = ctx->level;
  D.22191 = D.22190 & 128;
  if (D.22191 != 0) goto <D.22220>; else goto <D.22221>;
  <D.22220>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22173 = ctx->ip_offset;
    D.22223 = stack_slot_get_name (b);
    D.22224 = stack_slot_get_name (a);
    D.22225 = monoeg_g_strdup_printf ("Compare and Branch instruction applyed to ill formed stack (%s x %s) at 0x%04x", D.22224, D.22223, D.22173);
    vinfo->info.message = D.22225;
    vinfo->exception_type = 4;
    D.22181 = ctx->list;
    D.22226 = monoeg_g_slist_prepend (D.22181, vinfo);
    ctx->list = D.22226;
  }
  ctx->verifiable = 0;
  D.22190 = ctx->level;
  D.22194 = D.22190 & 16;
  if (D.22194 != 0) goto <D.22227>; else goto <D.22228>;
  <D.22227>:
  ctx->valid = 0;
  <D.22228>:
  <D.22221>:
  goto <D.22229>;
  <D.22219>:
  res.61 = (signed char) res;
  if (res.61 < 0) goto <D.22231>; else goto <D.22232>;
  <D.22231>:
  D.22188 = ctx->verifiable;
  if (D.22188 != 0) goto <D.22233>; else goto <D.22235>;
  <D.22235>:
  D.22190 = ctx->level;
  D.22191 = D.22190 & 128;
  if (D.22191 != 0) goto <D.22233>; else goto <D.22234>;
  <D.22233>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22173 = ctx->ip_offset;
    D.22236 = stack_slot_get_name (b);
    D.22237 = stack_slot_get_name (a);
    D.22238 = monoeg_g_strdup_printf ("Compare and Branch instruction is not verifiable (%s x %s) at 0x%04x", D.22237, D.22236, D.22173);
    vinfo->info.message = D.22238;
    vinfo->exception_type = 4;
    D.22181 = ctx->list;
    D.22239 = monoeg_g_slist_prepend (D.22181, vinfo);
    ctx->list = D.22239;
  }
  ctx->verifiable = 0;
  D.22190 = ctx->level;
  D.22194 = D.22190 & 16;
  if (D.22194 != 0) goto <D.22240>; else goto <D.22241>;
  <D.22240>:
  ctx->valid = 0;
  <D.22241>:
  <D.22234>:
  res = res & 127;
  <D.22232>:
  <D.22229>:
}


is_valid_cmp_branch_instruction (struct MonoMethodHeader * header, guint offset, guint target)
{
  struct MonoExceptionClause * D.22243;
  unsigned int i.62;
  unsigned int D.22245;
  unsigned int D.22248;
  unsigned int D.22251;
  unsigned int D.22254;
  unsigned int D.22255;
  int D.22259;
  unsigned int D.22260;
  int iftmp.63;
  unsigned int D.22267;
  unsigned int D.22268;
  _Bool D.22270;
  int iftmp.64;
  _Bool D.22276;
  _Bool D.22277;
  int iftmp.65;
  _Bool D.22285;
  int iftmp.66;
  _Bool D.22291;
  _Bool D.22292;
  int iftmp.67;
  unsigned int D.22299;
  _Bool D.22302;
  int iftmp.68;
  _Bool D.22309;
  _Bool D.22310;
  <unnamed-unsigned:15> D.22313;
  int D.22314;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.17848>;
  <D.17847>:
  D.22243 = header->clauses;
  i.62 = (unsigned int) i;
  D.22245 = i.62 * 24;
  clause = D.22243 + D.22245;
  D.22248 = clause->flags;
  if (D.22248 != 0) goto <D.22249>; else goto <D.22250>;
  <D.22249>:
  D.22251 = clause->handler_offset;
  if (D.22251 <= offset) goto <D.22252>; else goto <D.22253>;
  <D.22252>:
  D.22251 = clause->handler_offset;
  D.22254 = clause->handler_len;
  D.22255 = D.22251 + D.22254;
  if (D.22255 > offset) goto <D.22256>; else goto <D.22257>;
  <D.22256>:
  D.22251 = clause->handler_offset;
  if (D.22251 > target) goto <D.22246>; else goto <D.22258>;
  <D.22258>:
  D.22251 = clause->handler_offset;
  D.22254 = clause->handler_len;
  D.22255 = D.22251 + D.22254;
  if (D.22255 <= target) goto <D.22246>; else goto <D.22247>;
  <D.22246>:
  D.22259 = 1;
  return D.22259;
  <D.22247>:
  <D.22257>:
  <D.22253>:
  <D.22250>:
  D.22260 = clause->try_offset;
  if (D.22260 != target) goto <D.22261>; else goto <D.22262>;
  <D.22261>:
  D.22260 = clause->try_offset;
  if (D.22260 <= offset) goto <D.22266>; else goto <D.22264>;
  <D.22266>:
  D.22260 = clause->try_offset;
  D.22267 = clause->try_len;
  D.22268 = D.22260 + D.22267;
  if (D.22268 > offset) goto <D.22269>; else goto <D.22264>;
  <D.22269>:
  iftmp.63 = 1;
  goto <D.22265>;
  <D.22264>:
  iftmp.63 = 0;
  <D.22265>:
  D.22270 = (_Bool) iftmp.63;
  D.22260 = clause->try_offset;
  if (D.22260 <= target) goto <D.22274>; else goto <D.22272>;
  <D.22274>:
  D.22260 = clause->try_offset;
  D.22267 = clause->try_len;
  D.22268 = D.22260 + D.22267;
  if (D.22268 > target) goto <D.22275>; else goto <D.22272>;
  <D.22275>:
  iftmp.64 = 1;
  goto <D.22273>;
  <D.22272>:
  iftmp.64 = 0;
  <D.22273>:
  D.22276 = (_Bool) iftmp.64;
  D.22277 = D.22270 ^ D.22276;
  if (D.22277 != 0) goto <D.22278>; else goto <D.22279>;
  <D.22278>:
  D.22259 = 2;
  return D.22259;
  <D.22279>:
  <D.22262>:
  D.22251 = clause->handler_offset;
  if (D.22251 <= offset) goto <D.22283>; else goto <D.22281>;
  <D.22283>:
  D.22251 = clause->handler_offset;
  D.22254 = clause->handler_len;
  D.22255 = D.22251 + D.22254;
  if (D.22255 > offset) goto <D.22284>; else goto <D.22281>;
  <D.22284>:
  iftmp.65 = 1;
  goto <D.22282>;
  <D.22281>:
  iftmp.65 = 0;
  <D.22282>:
  D.22285 = (_Bool) iftmp.65;
  D.22251 = clause->handler_offset;
  if (D.22251 <= target) goto <D.22289>; else goto <D.22287>;
  <D.22289>:
  D.22251 = clause->handler_offset;
  D.22254 = clause->handler_len;
  D.22255 = D.22251 + D.22254;
  if (D.22255 > target) goto <D.22290>; else goto <D.22287>;
  <D.22290>:
  iftmp.66 = 1;
  goto <D.22288>;
  <D.22287>:
  iftmp.66 = 0;
  <D.22288>:
  D.22291 = (_Bool) iftmp.66;
  D.22292 = D.22285 ^ D.22291;
  if (D.22292 != 0) goto <D.22293>; else goto <D.22294>;
  <D.22293>:
  D.22259 = 2;
  return D.22259;
  <D.22294>:
  D.22248 = clause->flags;
  if (D.22248 == 1) goto <D.22298>; else goto <D.22296>;
  <D.22298>:
  D.22299 = clause->data.filter_offset;
  if (D.22299 <= offset) goto <D.22300>; else goto <D.22296>;
  <D.22300>:
  D.22251 = clause->handler_offset;
  if (D.22251 > offset) goto <D.22301>; else goto <D.22296>;
  <D.22301>:
  iftmp.67 = 1;
  goto <D.22297>;
  <D.22296>:
  iftmp.67 = 0;
  <D.22297>:
  D.22302 = (_Bool) iftmp.67;
  D.22248 = clause->flags;
  if (D.22248 == 1) goto <D.22306>; else goto <D.22304>;
  <D.22306>:
  D.22299 = clause->data.filter_offset;
  if (D.22299 <= target) goto <D.22307>; else goto <D.22304>;
  <D.22307>:
  D.22251 = clause->handler_offset;
  if (D.22251 > target) goto <D.22308>; else goto <D.22304>;
  <D.22308>:
  iftmp.68 = 1;
  goto <D.22305>;
  <D.22304>:
  iftmp.68 = 0;
  <D.22305>:
  D.22309 = (_Bool) iftmp.68;
  D.22310 = D.22302 ^ D.22309;
  if (D.22310 != 0) goto <D.22311>; else goto <D.22312>;
  <D.22311>:
  D.22259 = 2;
  return D.22259;
  <D.22312>:
  i = i + 1;
  <D.17848>:
  D.22313 = header->num_clauses;
  D.22314 = (int) D.22313;
  if (D.22314 > i) goto <D.17847>; else goto <D.17849>;
  <D.17849>:
  D.22259 = 0;
  return D.22259;
}


stack_slot_is_complex_type_not_reference_type (struct ILStackDesc * slot)
{
  gboolean D.22316;
  int iftmp.69;
  int D.22320;
  struct MonoType * D.22322;
  int D.22323;
  int D.22325;

  D.22320 = stack_slot_get_type (slot);
  if (D.22320 == 6) goto <D.22321>; else goto <D.22318>;
  <D.22321>:
  D.22322 = slot->type;
  D.22323 = mono_type_is_reference (D.22322);
  if (D.22323 == 0) goto <D.22324>; else goto <D.22318>;
  <D.22324>:
  D.22325 = stack_slot_is_boxed_value (slot);
  if (D.22325 == 0) goto <D.22326>; else goto <D.22318>;
  <D.22326>:
  iftmp.69 = 1;
  goto <D.22319>;
  <D.22318>:
  iftmp.69 = 0;
  <D.22319>:
  D.22316 = iftmp.69;
  return D.22316;
}


stack_slot_get_type (struct ILStackDesc * value)
{
  gint32 D.22328;
  int D.22329;

  D.22329 = value->stype;
  D.22328 = D.22329 & 271;
  return D.22328;
}


stack_peek (struct VerifyContext * ctx, int distance)
{
  short unsigned int D.22331;
  int D.22332;
  int D.22333;
  _Bool D.22334;
  long int D.22335;
  long int D.22336;
  struct ILStackDesc * D.22339;
  struct ILStackDesc * D.22340;
  int D.22341;
  int D.22342;
  unsigned int D.22343;
  unsigned int D.22344;

  D.22331 = ctx->eval.size;
  D.22332 = (int) D.22331;
  D.22333 = D.22332 - distance;
  D.22334 = D.22333 <= 0;
  D.22335 = (long int) D.22334;
  D.22336 = __builtin_expect (D.22335, 0);
  if (D.22336 != 0) goto <D.22337>; else goto <D.22338>;
  <D.22337>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1631, "ctx->eval.size - distance > 0");
  <D.22338>:
  D.22340 = ctx->eval.stack;
  D.22331 = ctx->eval.size;
  D.22332 = (int) D.22331;
  D.22341 = D.22332 + -1;
  D.22342 = D.22341 - distance;
  D.22343 = (unsigned int) D.22342;
  D.22344 = D.22343 * 12;
  D.22339 = D.22340 + D.22344;
  return D.22339;
}


copy_stack_value (struct ILStackDesc * to, struct ILStackDesc * from)
{
  int D.22346;
  struct MonoType * D.22347;
  struct MonoMethod * D.22348;

  D.22346 = from->stype;
  to->stype = D.22346;
  D.22347 = from->type;
  to->type = D.22347;
  D.22348 = from->method;
  to->method = D.22348;
}


in_any_block (struct MonoMethodHeader * header, guint offset)
{
  struct MonoExceptionClause * D.22349;
  unsigned int i.70;
  unsigned int D.22351;
  unsigned int D.22352;
  unsigned int D.22355;
  unsigned int D.22356;
  int D.22359;
  unsigned int D.22360;
  unsigned int D.22363;
  unsigned int D.22364;
  unsigned int D.22367;
  unsigned int D.22370;
  <unnamed-unsigned:15> D.22375;
  int D.22376;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.17819>;
  <D.17818>:
  D.22349 = header->clauses;
  i.70 = (unsigned int) i;
  D.22351 = i.70 * 24;
  clause = D.22349 + D.22351;
  D.22352 = clause->try_offset;
  if (D.22352 <= offset) goto <D.22353>; else goto <D.22354>;
  <D.22353>:
  D.22352 = clause->try_offset;
  D.22355 = clause->try_len;
  D.22356 = D.22352 + D.22355;
  if (D.22356 > offset) goto <D.22357>; else goto <D.22358>;
  <D.22357>:
  D.22359 = 1;
  return D.22359;
  <D.22358>:
  <D.22354>:
  D.22360 = clause->handler_offset;
  if (D.22360 <= offset) goto <D.22361>; else goto <D.22362>;
  <D.22361>:
  D.22360 = clause->handler_offset;
  D.22363 = clause->handler_len;
  D.22364 = D.22360 + D.22363;
  if (D.22364 > offset) goto <D.22365>; else goto <D.22366>;
  <D.22365>:
  D.22359 = 1;
  return D.22359;
  <D.22366>:
  <D.22362>:
  D.22367 = clause->flags;
  if (D.22367 == 1) goto <D.22368>; else goto <D.22369>;
  <D.22368>:
  D.22370 = clause->data.filter_offset;
  if (D.22370 <= offset) goto <D.22371>; else goto <D.22372>;
  <D.22371>:
  D.22360 = clause->handler_offset;
  if (D.22360 > offset) goto <D.22373>; else goto <D.22374>;
  <D.22373>:
  D.22359 = 1;
  return D.22359;
  <D.22374>:
  <D.22372>:
  <D.22369>:
  i = i + 1;
  <D.17819>:
  D.22375 = header->num_clauses;
  D.22376 = (int) D.22375;
  if (D.22376 > i) goto <D.17818>; else goto <D.17820>;
  <D.17820>:
  D.22359 = 0;
  return D.22359;
}


do_invoke_method (struct VerifyContext * ctx, int method_token, gboolean virtual)
{
  unsigned int D.22378;
  int D.22379;
  const char * iftmp.71;
  unsigned int D.22388;
  struct MonoClass * D.22389;
  unsigned char D.22390;
  unsigned char D.22391;
  int D.22396;
  int D.22398;
  int D.22399;
  unsigned int D.22400;
  gchar * D.22401;
  struct GSList * D.22402;
  struct GSList * D.22403;
  int D.22404;
  short unsigned int D.22407;
  int D.22408;
  int D.22409;
  gchar * D.22415;
  struct GSList * D.22416;
  int D.22420;
  gchar * D.22426;
  struct GSList * D.22427;
  unsigned int D.22430;
  unsigned int D.22431;
  unsigned int D.22434;
  unsigned int D.22435;
  struct ILCodeDesc * D.22438;
  unsigned int D.22439;
  struct ILCodeDesc * D.22440;
  short unsigned int D.22441;
  short unsigned int D.22442;
  struct MonoGenericContext * D.22443;
  unsigned int method_token.72;
  struct MonoImage * D.22445;
  const char * D.22450;
  gchar * D.22451;
  struct GSList * D.22452;
  short unsigned int D.22453;
  int D.22454;
  <unnamed-unsigned:1> D.22455;
  int D.22456;
  int D.22457;
  struct MonoType * D.22460;
  int D.22461;
  gchar * D.22467;
  struct GSList * D.22468;
  int D.22471;
  const char * iftmp.73;
  gchar * D.22481;
  struct GSList * D.22482;
  unsigned int D.22485;
  int D.22488;
  const char * iftmp.74;
  gchar * D.22495;
  struct GSList * D.22496;
  unsigned char D.22497;
  unsigned char D.22498;
  int D.22503;
  int D.22506;
  struct MonoMethod * D.22509;
  int D.22510;
  gchar * D.22516;
  struct GSList * D.22517;
  struct MonoClass * D.22522;
  struct MonoClass * D.22523;
  gchar * D.22531;
  struct GSList * D.22532;
  int D.22537;
  int D.22538;
  gchar * D.22544;
  struct GSList * D.22545;
  struct MonoType * D.22548;
  struct MonoType * D.22549;
  int D.22550;
  int D.22551;
  int D.22554;
  int D.22559;
  gchar * D.22565;
  struct GSList * D.22566;
  _Bool D.22569;
  _Bool D.22570;
  _Bool D.22571;
  int D.22574;
  gchar * D.22580;
  struct GSList * D.22581;
  struct MonoType * D.22584;
  struct MonoType * D.22585;
  struct MonoType * D.22586;
  int D.22587;
  gchar * D.22593;
  struct GSList * D.22594;
  int D.22597;
  int D.22599;
  struct MonoClass * D.22602;
  unsigned char D.22603;
  unsigned char D.22604;
  gchar * D.22610;
  struct GSList * D.22611;
  struct MonoClass * D.22616;
  unsigned char D.22617;
  unsigned char D.22618;
  int D.22623;
  gchar * D.22629;
  struct GSList * D.22630;
  struct MonoClass * D.22635;
  unsigned char D.22636;
  unsigned char D.22637;
  int D.22640;
  gchar * D.22646;
  struct GSList * D.22647;
  int D.22654;
  int D.22656;
  gchar * D.22660;
  struct GSList * D.22661;
  int D.22664;
  gchar * D.22670;
  struct GSList * D.22671;
  int D.22674;
  struct MonoClass * D.22677;
  int D.22678;
  gchar * D.22684;
  struct GSList * D.22685;
  int D.22691;
  gchar * D.22697;
  struct GSList * D.22698;
  struct MonoType * D.22701;
  unsigned char D.22702;
  int D.22705;
  int D.22708;
  unsigned int D.22711;
  unsigned char D.22714;
  int D.18491;
  int iftmp.75;
  int D.18490;
  const char[8] * D.22720;
  unsigned char D.22721;
  int D.22722;
  unsigned char D.22723;
  int D.22724;
  _Bool D.22725;
  _Bool D.22726;
  _Bool D.22727;
  const unsigned char * D.22730;
  unsigned char D.22731;
  int D.22732;
  const unsigned char * D.22733;
  unsigned char D.22734;
  int D.22735;
  _Bool D.22736;
  _Bool D.22737;
  const unsigned char * D.22740;
  unsigned char D.22741;
  int D.22742;
  const unsigned char * D.22743;
  unsigned char D.22744;
  int D.22745;
  _Bool D.22746;
  _Bool D.22747;
  const unsigned char * D.22750;
  unsigned char D.22751;
  int D.22752;
  const unsigned char * D.22753;
  unsigned char D.22754;
  int D.22755;
  unsigned int D.22759;
  int D.22760;
  struct MonoMethodSignature * D.22763;
  struct MonoType * D.22764;
  int D.22765;
  gchar * D.22771;
  struct GSList * D.22772;
  struct MonoMethodHeader * D.22775;
  const unsigned char * D.22776;
  sizetype D.22777;
  const unsigned char * D.22778;
  unsigned char D.22779;
  gchar * D.22785;
  struct GSList * D.22786;
  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.22378 = ctx->prefix_set;
  D.22379 = (int) D.22378;
  constrained = D.22379 & 8;
  if (virtual != 0) goto <D.22381>; else goto <D.22382>;
  <D.22381>:
  iftmp.71 = "callvirt";
  goto <D.22383>;
  <D.22382>:
  iftmp.71 = "call";
  <D.22383>:
  method = verifier_load_method (ctx, method_token, iftmp.71);
  if (method == 0B) goto <D.22384>; else goto <D.22385>;
  <D.22384>:
  return;
  <D.22385>:
  if (virtual != 0) goto <D.22386>; else goto <D.22387>;
  <D.22386>:
  D.22378 = ctx->prefix_set;
  D.22388 = D.22378 & 4294967287;
  ctx->prefix_set = D.22388;
  D.22389 = method->klass;
  D.22390 = BIT_FIELD_REF <*D.22389, 8, 160>;
  D.22391 = D.22390 & 8;
  if (D.22391 != 0) goto <D.22392>; else goto <D.22393>;
  <D.22392>:
  D.22396 = ctx->verifiable;
  if (D.22396 != 0) goto <D.22394>; else goto <D.22397>;
  <D.22397>:
  D.22398 = ctx->level;
  D.22399 = D.22398 & 128;
  if (D.22399 != 0) goto <D.22394>; else goto <D.22395>;
  <D.22394>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22400 = ctx->ip_offset;
    D.22401 = monoeg_g_strdup_printf ("Cannot use callvirtual with valuetype method at 0x%04x", D.22400);
    vinfo->info.message = D.22401;
    vinfo->exception_type = 4;
    D.22402 = ctx->list;
    D.22403 = monoeg_g_slist_prepend (D.22402, vinfo);
    ctx->list = D.22403;
  }
  ctx->verifiable = 0;
  D.22398 = ctx->level;
  D.22404 = D.22398 & 16;
  if (D.22404 != 0) goto <D.22405>; else goto <D.22406>;
  <D.22405>:
  ctx->valid = 0;
  <D.22406>:
  <D.22395>:
  <D.22393>:
  D.22407 = method->flags;
  D.22408 = (int) D.22407;
  D.22409 = D.22408 & 16;
  if (D.22409 != 0) goto <D.22410>; else goto <D.22411>;
  <D.22410>:
  D.22396 = ctx->verifiable;
  if (D.22396 != 0) goto <D.22412>; else goto <D.22414>;
  <D.22414>:
  D.22398 = ctx->level;
  D.22399 = D.22398 & 128;
  if (D.22399 != 0) goto <D.22412>; else goto <D.22413>;
  <D.22412>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22400 = ctx->ip_offset;
    D.22415 = monoeg_g_strdup_printf ("Cannot use callvirtual with static method at 0x%04x", D.22400);
    vinfo->info.message = D.22415;
    vinfo->exception_type = 4;
    D.22402 = ctx->list;
    D.22416 = monoeg_g_slist_prepend (D.22402, vinfo);
    ctx->list = D.22416;
  }
  ctx->verifiable = 0;
  D.22398 = ctx->level;
  D.22404 = D.22398 & 16;
  if (D.22404 != 0) goto <D.22417>; else goto <D.22418>;
  <D.22417>:
  ctx->valid = 0;
  <D.22418>:
  <D.22413>:
  <D.22411>:
  goto <D.22419>;
  <D.22387>:
  D.22407 = method->flags;
  D.22408 = (int) D.22407;
  D.22420 = D.22408 & 1024;
  if (D.22420 != 0) goto <D.22421>; else goto <D.22422>;
  <D.22421>:
  D.22396 = ctx->verifiable;
  if (D.22396 != 0) goto <D.22423>; else goto <D.22425>;
  <D.22425>:
  D.22398 = ctx->level;
  D.22399 = D.22398 & 128;
  if (D.22399 != 0) goto <D.22423>; else goto <D.22424>;
  <D.22423>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22400 = ctx->ip_offset;
    D.22426 = monoeg_g_strdup_printf ("Cannot use call with an abstract method at 0x%04x", D.22400);
    vinfo->info.message = D.22426;
    vinfo->exception_type = 4;
    D.22402 = ctx->list;
    D.22427 = monoeg_g_slist_prepend (D.22402, vinfo);
    ctx->list = D.22427;
  }
  ctx->verifiable = 0;
  D.22398 = ctx->level;
  D.22404 = D.22398 & 16;
  if (D.22404 != 0) goto <D.22428>; else goto <D.22429>;
  <D.22428>:
  ctx->valid = 0;
  <D.22429>:
  <D.22424>:
  <D.22422>:
  D.22407 = method->flags;
  D.22430 = (unsigned int) D.22407;
  D.22431 = D.22430 & 96;
  if (D.22431 == 64) goto <D.22432>; else goto <D.22433>;
  <D.22432>:
  D.22389 = method->klass;
  D.22434 = D.22389->flags;
  D.22435 = D.22434 & 256;
  if (D.22435 == 0) goto <D.22436>; else goto <D.22437>;
  <D.22436>:
  virt_check_this = 1;
  D.22438 = ctx->code;
  D.22400 = ctx->ip_offset;
  D.22439 = D.22400 * 12;
  D.22440 = D.22438 + D.22439;
  D.22438 = ctx->code;
  D.22400 = ctx->ip_offset;
  D.22439 = D.22400 * 12;
  D.22440 = D.22438 + D.22439;
  D.22441 = D.22440->flags;
  D.22442 = D.22441 | 64;
  D.22440->flags = D.22442;
  <D.22437>:
  <D.22433>:
  <D.22419>:
  D.22443 = ctx->generic_context;
  method_token.72 = (unsigned int) method_token;
  D.22445 = ctx->image;
  sig = mono_method_get_signature_full (method, D.22445, method_token.72, D.22443);
  if (sig == 0B) goto <D.22446>; else goto <D.22447>;
  <D.22446>:
  method_token.72 = (unsigned int) method_token;
  D.22445 = ctx->image;
  sig = mono_method_get_signature (method, D.22445, method_token.72);
  <D.22447>:
  if (sig == 0B) goto <D.22448>; else goto <D.22449>;
  <D.22448>:
  {
    char * name;

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

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 1;
      D.22400 = ctx->ip_offset;
      D.22450 = method->name;
      D.22451 = monoeg_g_strdup_printf ("Could not resolve signature of %s:%s at 0x%04x", name, D.22450, D.22400);
      vinfo->info.message = D.22451;
      vinfo->exception_type = 3;
      D.22402 = ctx->list;
      D.22452 = monoeg_g_slist_prepend (D.22402, vinfo);
      ctx->list = D.22452;
    }
    ctx->valid = 0;
    monoeg_g_free (name);
    return;
  }
  <D.22449>:
  D.22453 = sig->param_count;
  D.22454 = (int) D.22453;
  D.22455 = sig->hasthis;
  D.22456 = (int) D.22455;
  param_count = D.22454 + D.22456;
  D.22457 = check_underflow (ctx, param_count);
  if (D.22457 == 0) goto <D.22458>; else goto <D.22459>;
  <D.22458>:
  return;
  <D.22459>:
  D.22453 = sig->param_count;
  D.22454 = (int) D.22453;
  i = D.22454 + -1;
  goto <D.18461>;
  <D.18460>:
  value = stack_pop (ctx);
  D.22460 = sig->params[i];
  D.22461 = verify_stack_type_compatibility (ctx, D.22460, value);
  if (D.22461 == 0) goto <D.22462>; else goto <D.22463>;
  <D.22462>:
  {
    char * stack_name;
    char * sig_name;

    stack_name = stack_slot_full_name (value);
    D.22460 = sig->params[i];
    sig_name = mono_type_full_name (D.22460);
    D.22396 = ctx->verifiable;
    if (D.22396 != 0) goto <D.22464>; else goto <D.22466>;
    <D.22466>:
    D.22398 = ctx->level;
    D.22399 = D.22398 & 128;
    if (D.22399 != 0) goto <D.22464>; else goto <D.22465>;
    <D.22464>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.22400 = ctx->ip_offset;
      D.22467 = 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.22400);
      vinfo->info.message = D.22467;
      vinfo->exception_type = 4;
      D.22402 = ctx->list;
      D.22468 = monoeg_g_slist_prepend (D.22402, vinfo);
      ctx->list = D.22468;
    }
    ctx->verifiable = 0;
    D.22398 = ctx->level;
    D.22404 = D.22398 & 16;
    if (D.22404 != 0) goto <D.22469>; else goto <D.22470>;
    <D.22469>:
    ctx->valid = 0;
    <D.22470>:
    <D.22465>:
    monoeg_g_free (stack_name);
    monoeg_g_free (sig_name);
  }
  <D.22463>:
  D.22471 = stack_slot_is_managed_mutability_pointer (value);
  if (D.22471 != 0) goto <D.22472>; else goto <D.22473>;
  <D.22472>:
  D.22396 = ctx->verifiable;
  if (D.22396 != 0) goto <D.22474>; else goto <D.22476>;
  <D.22476>:
  D.22398 = ctx->level;
  D.22399 = D.22398 & 128;
  if (D.22399 != 0) goto <D.22474>; else goto <D.22475>;
  <D.22474>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22400 = ctx->ip_offset;
    if (virtual != 0) goto <D.22478>; else goto <D.22479>;
    <D.22478>:
    iftmp.73 = "callvirt";
    goto <D.22480>;
    <D.22479>:
    iftmp.73 = "call";
    <D.22480>:
    D.22481 = monoeg_g_strdup_printf ("Cannot use a readonly pointer as argument of %s at 0x%04x", iftmp.73, D.22400);
    vinfo->info.message = D.22481;
    vinfo->exception_type = 4;
    D.22402 = ctx->list;
    D.22482 = monoeg_g_slist_prepend (D.22402, vinfo);
    ctx->list = D.22482;
  }
  ctx->verifiable = 0;
  D.22398 = ctx->level;
  D.22404 = D.22398 & 16;
  if (D.22404 != 0) goto <D.22483>; else goto <D.22484>;
  <D.22483>:
  ctx->valid = 0;
  <D.22484>:
  <D.22475>:
  <D.22473>:
  D.22378 = ctx->prefix_set;
  D.22485 = D.22378 & 4;
  if (D.22485 != 0) goto <D.22486>; else goto <D.22487>;
  <D.22486>:
  D.22488 = stack_slot_is_managed_pointer (value);
  if (D.22488 != 0) goto <D.22489>; else goto <D.22490>;
  <D.22489>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.22400 = ctx->ip_offset;
    if (virtual != 0) goto <D.22492>; else goto <D.22493>;
    <D.22492>:
    iftmp.74 = "callvirt";
    goto <D.22494>;
    <D.22493>:
    iftmp.74 = "call";
    <D.22494>:
    D.22495 = monoeg_g_strdup_printf ("Cannot  pass a byref argument to a tail %s at 0x%04x", iftmp.74, D.22400);
    vinfo->info.message = D.22495;
    vinfo->exception_type = 3;
    D.22402 = ctx->list;
    D.22496 = monoeg_g_slist_prepend (D.22402, vinfo);
    ctx->list = D.22496;
  }
  ctx->valid = 0;
  return;
  <D.22490>:
  <D.22487>:
  i = i + -1;
  <D.18461>:
  if (i >= 0) goto <D.18460>; else goto <D.18462>;
  <D.18462>:
  D.22497 = BIT_FIELD_REF <*sig, 8, 80>;
  D.22498 = D.22497 & 64;
  if (D.22498 != 0) goto <D.22499>; else goto <D.22500>;
  <D.22499>:
  {
    struct MonoType * type;
    struct ILStackDesc copy;

    try
      {
        D.22389 = method->klass;
        type = &D.22389->byval_arg;
        D.22503 = mono_method_is_constructor (method);
        if (D.22503 != 0) goto <D.22504>; else goto <D.22501>;
        <D.22504>:
        D.22389 = method->klass;
        D.22390 = BIT_FIELD_REF <*D.22389, 8, 160>;
        D.22391 = D.22390 & 8;
        if (D.22391 == 0) goto <D.22505>; else goto <D.22501>;
        <D.22505>:
        D.22398 = ctx->level;
        D.22506 = D.22398 & 32;
        if (D.22506 == 0) goto <D.22507>; else goto <D.22508>;
        <D.22507>:
        D.22509 = ctx->method;
        D.22510 = mono_method_is_constructor (D.22509);
        if (D.22510 == 0) goto <D.22511>; else goto <D.22512>;
        <D.22511>:
        D.22396 = ctx->verifiable;
        if (D.22396 != 0) goto <D.22513>; else goto <D.22515>;
        <D.22515>:
        D.22398 = ctx->level;
        D.22399 = D.22398 & 128;
        if (D.22399 != 0) goto <D.22513>; else goto <D.22514>;
        <D.22513>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.22400 = ctx->ip_offset;
          D.22516 = monoeg_g_strdup_printf ("Cannot call a constructor outside one at 0x%04x", D.22400);
          vinfo->info.message = D.22516;
          vinfo->exception_type = 4;
          D.22402 = ctx->list;
          D.22517 = monoeg_g_slist_prepend (D.22402, vinfo);
          ctx->list = D.22517;
        }
        ctx->verifiable = 0;
        D.22398 = ctx->level;
        D.22404 = D.22398 & 16;
        if (D.22404 != 0) goto <D.22518>; else goto <D.22519>;
        <D.22518>:
        ctx->valid = 0;
        <D.22519>:
        <D.22514>:
        <D.22512>:
        <D.22508>:
        D.22398 = ctx->level;
        D.22506 = D.22398 & 32;
        if (D.22506 == 0) goto <D.22520>; else goto <D.22521>;
        <D.22520>:
        D.22389 = method->klass;
        D.22509 = ctx->method;
        D.22522 = D.22509->klass;
        D.22523 = D.22522->parent;
        if (D.22389 != D.22523) goto <D.22524>; else goto <D.22525>;
        <D.22524>:
        D.22389 = method->klass;
        D.22509 = ctx->method;
        D.22522 = D.22509->klass;
        if (D.22389 != D.22522) goto <D.22526>; else goto <D.22527>;
        <D.22526>:
        D.22396 = ctx->verifiable;
        if (D.22396 != 0) goto <D.22528>; else goto <D.22530>;
        <D.22530>:
        D.22398 = ctx->level;
        D.22399 = D.22398 & 128;
        if (D.22399 != 0) goto <D.22528>; else goto <D.22529>;
        <D.22528>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.22400 = ctx->ip_offset;
          D.22531 = monoeg_g_strdup_printf ("Cannot call a constructor of a type different from this or super at 0x%04x", D.22400);
          vinfo->info.message = D.22531;
          vinfo->exception_type = 4;
          D.22402 = ctx->list;
          D.22532 = monoeg_g_slist_prepend (D.22402, vinfo);
          ctx->list = D.22532;
        }
        ctx->verifiable = 0;
        D.22398 = ctx->level;
        D.22404 = D.22398 & 16;
        if (D.22404 != 0) goto <D.22533>; else goto <D.22534>;
        <D.22533>:
        ctx->valid = 0;
        <D.22534>:
        <D.22529>:
        <D.22527>:
        <D.22525>:
        <D.22521>:
        ctx->super_ctor_called = 1;
        value = stack_pop_safe (ctx);
        D.22398 = ctx->level;
        D.22506 = D.22398 & 32;
        if (D.22506 == 0) goto <D.22535>; else goto <D.22536>;
        <D.22535>:
        D.22537 = value->stype;
        D.22538 = D.22537 & 2048;
        if (D.22538 == 0) goto <D.22539>; else goto <D.22540>;
        <D.22539>:
        D.22396 = ctx->verifiable;
        if (D.22396 != 0) goto <D.22541>; else goto <D.22543>;
        <D.22543>:
        D.22398 = ctx->level;
        D.22399 = D.22398 & 128;
        if (D.22399 != 0) goto <D.22541>; else goto <D.22542>;
        <D.22541>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.22400 = ctx->ip_offset;
          D.22544 = monoeg_g_strdup_printf ("Invalid \'this ptr\' argument for constructor at 0x%04x", D.22400);
          vinfo->info.message = D.22544;
          vinfo->exception_type = 4;
          D.22402 = ctx->list;
          D.22545 = monoeg_g_slist_prepend (D.22402, vinfo);
          ctx->list = D.22545;
        }
        ctx->verifiable = 0;
        D.22398 = ctx->level;
        D.22404 = D.22398 & 16;
        if (D.22404 != 0) goto <D.22546>; else goto <D.22547>;
        <D.22546>:
        ctx->valid = 0;
        <D.22547>:
        <D.22542>:
        <D.22540>:
        <D.22536>:
        goto <D.22502>;
        <D.22501>:
        value = stack_pop (ctx);
        <D.22502>:
        copy_stack_value (&copy, value);
        D.22548 = copy.type;
        D.22549 = mono_type_get_type_byval (D.22548);
        copy.type = D.22549;
        D.22550 = copy.stype;
        D.22551 = D.22550 & -257;
        copy.stype = D.22551;
        if (virt_check_this != 0) goto <D.22552>; else goto <D.22553>;
        <D.22552>:
        D.22554 = stack_slot_is_this_pointer (value);
        if (D.22554 == 0) goto <D.22555>; else goto <D.22556>;
        <D.22555>:
        D.22389 = method->klass;
        D.22390 = BIT_FIELD_REF <*D.22389, 8, 160>;
        D.22391 = D.22390 & 8;
        if (D.22391 == 0) goto <D.22557>; else goto <D.22558>;
        <D.22557>:
        D.22559 = stack_slot_is_boxed_value (value);
        if (D.22559 == 0) goto <D.22560>; else goto <D.22561>;
        <D.22560>:
        D.22396 = ctx->verifiable;
        if (D.22396 != 0) goto <D.22562>; else goto <D.22564>;
        <D.22564>:
        D.22398 = ctx->level;
        D.22399 = D.22398 & 128;
        if (D.22399 != 0) goto <D.22562>; else goto <D.22563>;
        <D.22562>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.22400 = ctx->ip_offset;
          D.22565 = 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.22400);
          vinfo->info.message = D.22565;
          vinfo->exception_type = 4;
          D.22402 = ctx->list;
          D.22566 = monoeg_g_slist_prepend (D.22402, vinfo);
          ctx->list = D.22566;
        }
        ctx->verifiable = 0;
        D.22398 = ctx->level;
        D.22404 = D.22398 & 16;
        if (D.22404 != 0) goto <D.22567>; else goto <D.22568>;
        <D.22567>:
        ctx->valid = 0;
        <D.22568>:
        <D.22563>:
        <D.22561>:
        <D.22558>:
        <D.22556>:
        <D.22553>:
        D.22569 = constrained != 0;
        D.22570 = virtual != 0;
        D.22571 = D.22569 & D.22570;
        if (D.22571 != 0) goto <D.22572>; else goto <D.22573>;
        <D.22572>:
        D.22574 = stack_slot_is_managed_pointer (value);
        if (D.22574 == 0) goto <D.22575>; else goto <D.22576>;
        <D.22575>:
        D.22396 = ctx->verifiable;
        if (D.22396 != 0) goto <D.22577>; else goto <D.22579>;
        <D.22579>:
        D.22398 = ctx->level;
        D.22399 = D.22398 & 128;
        if (D.22399 != 0) goto <D.22577>; else goto <D.22578>;
        <D.22577>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.22400 = ctx->ip_offset;
          D.22580 = monoeg_g_strdup_printf ("Object is not a managed pointer for a constrained call at 0x%04x", D.22400);
          vinfo->info.message = D.22580;
          vinfo->exception_type = 4;
          D.22402 = ctx->list;
          D.22581 = monoeg_g_slist_prepend (D.22402, vinfo);
          ctx->list = D.22581;
        }
        ctx->verifiable = 0;
        D.22398 = ctx->level;
        D.22404 = D.22398 & 16;
        if (D.22404 != 0) goto <D.22582>; else goto <D.22583>;
        <D.22582>:
        ctx->valid = 0;
        <D.22583>:
        <D.22578>:
        <D.22576>:
        D.22584 = ctx->constrained_type;
        D.22585 = value->type;
        D.22586 = mono_type_get_type_byval (D.22585);
        D.22587 = mono_metadata_type_equal_full (D.22586, D.22584, 1);
        if (D.22587 == 0) goto <D.22588>; else goto <D.22589>;
        <D.22588>:
        D.22396 = ctx->verifiable;
        if (D.22396 != 0) goto <D.22590>; else goto <D.22592>;
        <D.22592>:
        D.22398 = ctx->level;
        D.22399 = D.22398 & 128;
        if (D.22399 != 0) goto <D.22590>; else goto <D.22591>;
        <D.22590>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.22400 = ctx->ip_offset;
          D.22593 = monoeg_g_strdup_printf ("Object not compatible with constrained type at 0x%04x", D.22400);
          vinfo->info.message = D.22593;
          vinfo->exception_type = 4;
          D.22402 = ctx->list;
          D.22594 = monoeg_g_slist_prepend (D.22402, vinfo);
          ctx->list = D.22594;
        }
        ctx->verifiable = 0;
        D.22398 = ctx->level;
        D.22404 = D.22398 & 16;
        if (D.22404 != 0) goto <D.22595>; else goto <D.22596>;
        <D.22595>:
        ctx->valid = 0;
        <D.22596>:
        <D.22591>:
        <D.22589>:
        D.22550 = copy.stype;
        D.22597 = D.22550 | 4096;
        copy.stype = D.22597;
        goto <D.22598>;
        <D.22573>:
        D.22599 = stack_slot_is_managed_pointer (value);
        if (D.22599 != 0) goto <D.22600>; else goto <D.22601>;
        <D.22600>:
        D.22585 = value->type;
        D.22602 = mono_class_from_mono_type (D.22585);
        D.22603 = BIT_FIELD_REF <*D.22602, 8, 160>;
        D.22604 = D.22603 & 8;
        if (D.22604 == 0) goto <D.22605>; else goto <D.22606>;
        <D.22605>:
        D.22396 = ctx->verifiable;
        if (D.22396 != 0) goto <D.22607>; else goto <D.22609>;
        <D.22609>:
        D.22398 = ctx->level;
        D.22399 = D.22398 & 128;
        if (D.22399 != 0) goto <D.22607>; else goto <D.22608>;
        <D.22607>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.22400 = ctx->ip_offset;
          D.22610 = monoeg_g_strdup_printf ("Cannot call a reference type using a managed pointer to the this arg at 0x%04x", D.22400);
          vinfo->info.message = D.22610;
          vinfo->exception_type = 4;
          D.22402 = ctx->list;
          D.22611 = monoeg_g_slist_prepend (D.22402, vinfo);
          ctx->list = D.22611;
        }
        ctx->verifiable = 0;
        D.22398 = ctx->level;
        D.22404 = D.22398 & 16;
        if (D.22404 != 0) goto <D.22612>; else goto <D.22613>;
        <D.22612>:
        ctx->valid = 0;
        <D.22613>:
        <D.22608>:
        <D.22606>:
        <D.22601>:
        if (virtual == 0) goto <D.22614>; else goto <D.22615>;
        <D.22614>:
        D.22585 = value->type;
        D.22616 = mono_class_from_mono_type (D.22585);
        D.22617 = BIT_FIELD_REF <*D.22616, 8, 160>;
        D.22618 = D.22617 & 8;
        if (D.22618 != 0) goto <D.22619>; else goto <D.22620>;
        <D.22619>:
        D.22389 = method->klass;
        D.22390 = BIT_FIELD_REF <*D.22389, 8, 160>;
        D.22391 = D.22390 & 8;
        if (D.22391 == 0) goto <D.22621>; else goto <D.22622>;
        <D.22621>:
        D.22623 = stack_slot_is_boxed_value (value);
        if (D.22623 == 0) goto <D.22624>; else goto <D.22625>;
        <D.22624>:
        D.22396 = ctx->verifiable;
        if (D.22396 != 0) goto <D.22626>; else goto <D.22628>;
        <D.22628>:
        D.22398 = ctx->level;
        D.22399 = D.22398 & 128;
        if (D.22399 != 0) goto <D.22626>; else goto <D.22627>;
        <D.22626>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.22400 = ctx->ip_offset;
          D.22629 = monoeg_g_strdup_printf ("Cannot call a valuetype baseclass at 0x%04x", D.22400);
          vinfo->info.message = D.22629;
          vinfo->exception_type = 4;
          D.22402 = ctx->list;
          D.22630 = monoeg_g_slist_prepend (D.22402, vinfo);
          ctx->list = D.22630;
        }
        ctx->verifiable = 0;
        D.22398 = ctx->level;
        D.22404 = D.22398 & 16;
        if (D.22404 != 0) goto <D.22631>; else goto <D.22632>;
        <D.22631>:
        ctx->valid = 0;
        <D.22632>:
        <D.22627>:
        <D.22625>:
        <D.22622>:
        <D.22620>:
        <D.22615>:
        if (virtual != 0) goto <D.22633>; else goto <D.22634>;
        <D.22633>:
        D.22585 = value->type;
        D.22635 = mono_class_from_mono_type (D.22585);
        D.22636 = BIT_FIELD_REF <*D.22635, 8, 160>;
        D.22637 = D.22636 & 8;
        if (D.22637 != 0) goto <D.22638>; else goto <D.22639>;
        <D.22638>:
        D.22640 = stack_slot_is_boxed_value (value);
        if (D.22640 == 0) goto <D.22641>; else goto <D.22642>;
        <D.22641>:
        D.22396 = ctx->verifiable;
        if (D.22396 != 0) goto <D.22643>; else goto <D.22645>;
        <D.22645>:
        D.22398 = ctx->level;
        D.22399 = D.22398 & 128;
        if (D.22399 != 0) goto <D.22643>; else goto <D.22644>;
        <D.22643>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.22400 = ctx->ip_offset;
          D.22646 = monoeg_g_strdup_printf ("Cannot use a valuetype with callvirt at 0x%04x", D.22400);
          vinfo->info.message = D.22646;
          vinfo->exception_type = 4;
          D.22402 = ctx->list;
          D.22647 = monoeg_g_slist_prepend (D.22402, vinfo);
          ctx->list = D.22647;
        }
        ctx->verifiable = 0;
        D.22398 = ctx->level;
        D.22404 = D.22398 & 16;
        if (D.22404 != 0) goto <D.22648>; else goto <D.22649>;
        <D.22648>:
        ctx->valid = 0;
        <D.22649>:
        <D.22644>:
        <D.22642>:
        <D.22639>:
        <D.22634>:
        D.22389 = method->klass;
        D.22390 = BIT_FIELD_REF <*D.22389, 8, 160>;
        D.22391 = D.22390 & 8;
        if (D.22391 != 0) goto <D.22652>; else goto <D.22653>;
        <D.22652>:
        D.22654 = stack_slot_is_boxed_value (value);
        if (D.22654 != 0) goto <D.22650>; else goto <D.22655>;
        <D.22655>:
        D.22656 = stack_slot_is_managed_pointer (value);
        if (D.22656 == 0) goto <D.22650>; else goto <D.22651>;
        <D.22650>:
        D.22396 = ctx->verifiable;
        if (D.22396 != 0) goto <D.22657>; else goto <D.22659>;
        <D.22659>:
        D.22398 = ctx->level;
        D.22399 = D.22398 & 128;
        if (D.22399 != 0) goto <D.22657>; else goto <D.22658>;
        <D.22657>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.22400 = ctx->ip_offset;
          D.22660 = monoeg_g_strdup_printf ("Cannot use a boxed or literal valuetype to call a valuetype method at 0x%04x", D.22400);
          vinfo->info.message = D.22660;
          vinfo->exception_type = 4;
          D.22402 = ctx->list;
          D.22661 = monoeg_g_slist_prepend (D.22402, vinfo);
          ctx->list = D.22661;
        }
        ctx->verifiable = 0;
        D.22398 = ctx->level;
        D.22404 = D.22398 & 16;
        if (D.22404 != 0) goto <D.22662>; else goto <D.22663>;
        <D.22662>:
        ctx->valid = 0;
        <D.22663>:
        <D.22658>:
        <D.22651>:
        <D.22653>:
        <D.22598>:
        D.22664 = verify_stack_type_compatibility (ctx, type, &copy);
        if (D.22664 == 0) goto <D.22665>; else goto <D.22666>;
        <D.22665>:
        {
          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.22396 = ctx->verifiable;
          if (D.22396 != 0) goto <D.22667>; else goto <D.22669>;
          <D.22669>:
          D.22398 = ctx->level;
          D.22399 = D.22398 & 128;
          if (D.22399 != 0) goto <D.22667>; else goto <D.22668>;
          <D.22667>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 8;
            D.22400 = ctx->ip_offset;
            D.22670 = 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.22400);
            vinfo->info.message = D.22670;
            vinfo->exception_type = 4;
            D.22402 = ctx->list;
            D.22671 = monoeg_g_slist_prepend (D.22402, vinfo);
            ctx->list = D.22671;
          }
          ctx->verifiable = 0;
          D.22398 = ctx->level;
          D.22404 = D.22398 & 16;
          if (D.22404 != 0) goto <D.22672>; else goto <D.22673>;
          <D.22672>:
          ctx->valid = 0;
          <D.22673>:
          <D.22668>:
          monoeg_g_free (method_name);
          monoeg_g_free (effective);
          monoeg_g_free (expected);
        }
        <D.22666>:
        D.22398 = ctx->level;
        D.22674 = D.22398 & 64;
        if (D.22674 == 0) goto <D.22675>; else goto <D.22676>;
        <D.22675>:
        D.22585 = value->type;
        D.22677 = mono_class_from_mono_type (D.22585);
        D.22509 = ctx->method;
        D.22678 = mono_method_can_access_method_full (D.22509, method, D.22677);
        if (D.22678 == 0) goto <D.22679>; else goto <D.22680>;
        <D.22679>:
        {
          char * name;

          name = mono_method_full_name (method, 1);
          D.22396 = ctx->verifiable;
          if (D.22396 != 0) goto <D.22681>; else goto <D.22683>;
          <D.22683>:
          D.22398 = ctx->level;
          D.22399 = D.22398 & 128;
          if (D.22399 != 0) goto <D.22681>; else goto <D.22682>;
          <D.22681>:
          {
            struct MonoVerifyInfoExtended * vinfo;

            vinfo = monoeg_malloc (12);
            vinfo->info.status = 8;
            D.22400 = ctx->ip_offset;
            D.22684 = monoeg_g_strdup_printf ("Method %s is not accessible at 0x%04x", name, D.22400);
            vinfo->info.message = D.22684;
            vinfo->exception_type = 9;
            D.22402 = ctx->list;
            D.22685 = monoeg_g_slist_prepend (D.22402, vinfo);
            ctx->list = D.22685;
          }
          ctx->verifiable = 0;
          D.22398 = ctx->level;
          D.22404 = D.22398 & 16;
          if (D.22404 != 0) goto <D.22686>; else goto <D.22687>;
          <D.22686>:
          ctx->valid = 0;
          <D.22687>:
          <D.22682>:
          monoeg_g_free (name);
        }
        <D.22680>:
        <D.22676>:
      }
    finally
      {
        copy = {CLOBBER};
      }
  }
  goto <D.22688>;
  <D.22500>:
  D.22398 = ctx->level;
  D.22674 = D.22398 & 64;
  if (D.22674 == 0) goto <D.22689>; else goto <D.22690>;
  <D.22689>:
  D.22509 = ctx->method;
  D.22691 = mono_method_can_access_method_full (D.22509, method, 0B);
  if (D.22691 == 0) goto <D.22692>; else goto <D.22693>;
  <D.22692>:
  {
    char * name;

    name = mono_method_full_name (method, 1);
    D.22396 = ctx->verifiable;
    if (D.22396 != 0) goto <D.22694>; else goto <D.22696>;
    <D.22696>:
    D.22398 = ctx->level;
    D.22399 = D.22398 & 128;
    if (D.22399 != 0) goto <D.22694>; else goto <D.22695>;
    <D.22694>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.22400 = ctx->ip_offset;
      D.22697 = monoeg_g_strdup_printf ("Method %s is not accessible at 0x%04x", name, D.22400);
      vinfo->info.message = D.22697;
      vinfo->exception_type = 9;
      D.22402 = ctx->list;
      D.22698 = monoeg_g_slist_prepend (D.22402, vinfo);
      ctx->list = D.22698;
    }
    ctx->verifiable = 0;
    D.22398 = ctx->level;
    D.22404 = D.22398 & 16;
    if (D.22404 != 0) goto <D.22699>; else goto <D.22700>;
    <D.22699>:
    ctx->valid = 0;
    <D.22700>:
    <D.22695>:
    monoeg_g_free (name);
  }
  <D.22693>:
  <D.22690>:
  <D.22688>:
  D.22701 = sig->ret;
  D.22702 = D.22701->type;
  if (D.22702 != 1) goto <D.22703>; else goto <D.22704>;
  <D.22703>:
  D.22701 = sig->ret;
  D.22705 = mono_type_is_valid_in_context (ctx, D.22701);
  if (D.22705 == 0) goto <D.22706>; else goto <D.22707>;
  <D.22706>:
  return;
  <D.22707>:
  D.22708 = check_overflow (ctx);
  if (D.22708 != 0) goto <D.22709>; else goto <D.22710>;
  <D.22709>:
  value = stack_push (ctx);
  D.22701 = sig->ret;
  set_stack_value (ctx, value, D.22701, 0);
  D.22378 = ctx->prefix_set;
  D.22711 = D.22378 & 16;
  if (D.22711 != 0) goto <D.22712>; else goto <D.22713>;
  <D.22712>:
  D.22389 = method->klass;
  D.22714 = D.22389->rank;
  if (D.22714 != 0) goto <D.22715>; else goto <D.22716>;
  <D.22715>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = method->name;
      D.22720 = "Address";
      D.22721 = MEM[(const unsigned char *)D.22720];
      D.22722 = (int) D.22721;
      D.22723 = *__s2;
      D.22724 = (int) D.22723;
      __result = D.22722 - D.22724;
      {
        D.22725 = __s2_len != 0;
        D.22726 = __result == 0;
        D.22727 = D.22725 & D.22726;
        if (D.22727 != 0) goto <D.22728>; else goto <D.22729>;
        <D.22728>:
        D.22730 = &MEM[(void *)"Address" + 1B];
        D.22731 = *D.22730;
        D.22732 = (int) D.22731;
        D.22733 = __s2 + 1;
        D.22734 = *D.22733;
        D.22735 = (int) D.22734;
        __result = D.22732 - D.22735;
        D.22736 = __s2_len > 1;
        D.22726 = __result == 0;
        D.22737 = D.22736 & D.22726;
        if (D.22737 != 0) goto <D.22738>; else goto <D.22739>;
        <D.22738>:
        D.22740 = &MEM[(void *)"Address" + 2B];
        D.22741 = *D.22740;
        D.22742 = (int) D.22741;
        D.22743 = __s2 + 2;
        D.22744 = *D.22743;
        D.22745 = (int) D.22744;
        __result = D.22742 - D.22745;
        D.22746 = __s2_len > 2;
        D.22726 = __result == 0;
        D.22747 = D.22746 & D.22726;
        if (D.22747 != 0) goto <D.22748>; else goto <D.22749>;
        <D.22748>:
        D.22750 = &MEM[(void *)"Address" + 3B];
        D.22751 = *D.22750;
        D.22752 = (int) D.22751;
        D.22753 = __s2 + 3;
        D.22754 = *D.22753;
        D.22755 = (int) D.22754;
        __result = D.22752 - D.22755;
        <D.22749>:
        <D.22739>:
        <D.22729>:
      }
      D.18490 = __result;
    }
    iftmp.75 = -D.18490;
    goto <D.22756>;
    <D.22719>:
    D.22450 = method->name;
    iftmp.75 = __builtin_strcmp (D.22450, "Address");
    <D.22756>:
    D.18491 = iftmp.75;
  }
  if (D.18491 == 0) goto <D.22757>; else goto <D.22758>;
  <D.22757>:
  D.22378 = ctx->prefix_set;
  D.22759 = D.22378 & 4294967279;
  ctx->prefix_set = D.22759;
  D.22537 = value->stype;
  D.22760 = D.22537 | 512;
  value->stype = D.22760;
  <D.22758>:
  <D.22716>:
  <D.22713>:
  <D.22710>:
  <D.22704>:
  D.22378 = ctx->prefix_set;
  D.22485 = D.22378 & 4;
  if (D.22485 != 0) goto <D.22761>; else goto <D.22762>;
  <D.22761>:
  D.22701 = sig->ret;
  D.22509 = ctx->method;
  D.22763 = mono_method_signature (D.22509);
  D.22764 = D.22763->ret;
  D.22765 = mono_delegate_ret_equal (D.22764, D.22701);
  if (D.22765 == 0) goto <D.22766>; else goto <D.22767>;
  <D.22766>:
  D.22396 = ctx->verifiable;
  if (D.22396 != 0) goto <D.22768>; else goto <D.22770>;
  <D.22770>:
  D.22398 = ctx->level;
  D.22399 = D.22398 & 128;
  if (D.22399 != 0) goto <D.22768>; else goto <D.22769>;
  <D.22768>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22400 = ctx->ip_offset;
    D.22771 = monoeg_g_strdup_printf ("Tail call with incompatible return type at 0x%04x", D.22400);
    vinfo->info.message = D.22771;
    vinfo->exception_type = 4;
    D.22402 = ctx->list;
    D.22772 = monoeg_g_slist_prepend (D.22402, vinfo);
    ctx->list = D.22772;
  }
  ctx->verifiable = 0;
  D.22398 = ctx->level;
  D.22404 = D.22398 & 16;
  if (D.22404 != 0) goto <D.22773>; else goto <D.22774>;
  <D.22773>:
  ctx->valid = 0;
  <D.22774>:
  <D.22769>:
  <D.22767>:
  D.22775 = ctx->header;
  D.22776 = D.22775->code;
  D.22400 = ctx->ip_offset;
  D.22777 = D.22400 + 5;
  D.22778 = D.22776 + D.22777;
  D.22779 = *D.22778;
  if (D.22779 != 42) goto <D.22780>; else goto <D.22781>;
  <D.22780>:
  D.22396 = ctx->verifiable;
  if (D.22396 != 0) goto <D.22782>; else goto <D.22784>;
  <D.22784>:
  D.22398 = ctx->level;
  D.22399 = D.22398 & 128;
  if (D.22399 != 0) goto <D.22782>; else goto <D.22783>;
  <D.22782>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22400 = ctx->ip_offset;
    D.22785 = monoeg_g_strdup_printf ("Tail call not followed by ret at 0x%04x", D.22400);
    vinfo->info.message = D.22785;
    vinfo->exception_type = 4;
    D.22402 = ctx->list;
    D.22786 = monoeg_g_slist_prepend (D.22402, vinfo);
    ctx->list = D.22786;
  }
  ctx->verifiable = 0;
  D.22398 = ctx->level;
  D.22404 = D.22398 & 16;
  if (D.22404 != 0) goto <D.22787>; else goto <D.22788>;
  <D.22787>:
  ctx->valid = 0;
  <D.22788>:
  <D.22783>:
  <D.22781>:
  <D.22762>:
}


verifier_load_method (struct VerifyContext * ctx, int token, const char * opcode)
{
  struct MonoMethod * D.22790;
  unsigned char D.22791;
  unsigned char D.22792;
  unsigned int token.76;
  int D.22800;
  _Bool D.22801;
  _Bool D.22802;
  _Bool D.22803;
  int D.22805;
  unsigned int token.77;
  struct MonoImage * D.22807;
  int D.22808;
  unsigned int D.22809;
  gchar * D.22810;
  struct GSList * D.22811;
  struct GSList * D.22812;
  struct MonoMethod * D.22813;
  struct MonoGenericContext * D.22814;
  unsigned int token.78;
  struct MonoLoaderError * D.22819;
  gchar * D.22820;
  struct GSList * D.22821;
  <unnamed type> D.22822;
  struct MonoMethod * method;

  D.22790 = ctx->method;
  D.22791 = BIT_FIELD_REF <*D.22790, 8, 160>;
  D.22792 = D.22791 & 124;
  if (D.22792 != 0) goto <D.22793>; else goto <D.22794>;
  <D.22793>:
  token.76 = (unsigned int) token;
  D.22790 = ctx->method;
  method = mono_method_get_wrapper_data (D.22790, token.76);
  goto <D.22796>;
  <D.22794>:
  D.22800 = token >> 24;
  D.22801 = D.22800 != 6;
  D.22802 = D.22800 != 10;
  D.22803 = D.22801 & D.22802;
  if (D.22803 != 0) goto <D.22804>; else goto <D.22797>;
  <D.22804>:
  D.22805 = token >> 24;
  if (D.22805 != 43) goto <D.22798>; else goto <D.22797>;
  <D.22797>:
  token.77 = (unsigned int) token;
  D.22807 = ctx->image;
  D.22808 = token_bounds_check (D.22807, token.77);
  if (D.22808 == 0) goto <D.22798>; else goto <D.22799>;
  <D.22798>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.22809 = ctx->ip_offset;
    D.22810 = monoeg_g_strdup_printf ("Invalid method token 0x%08x for %s at 0x%04x", token, opcode, D.22809);
    vinfo->info.message = D.22810;
    vinfo->exception_type = 12;
    D.22811 = ctx->list;
    D.22812 = monoeg_g_slist_prepend (D.22811, vinfo);
    ctx->list = D.22812;
  }
  ctx->valid = 0;
  D.22813 = 0B;
  return D.22813;
  <D.22799>:
  D.22814 = ctx->generic_context;
  token.78 = (unsigned int) token;
  D.22807 = ctx->image;
  method = mono_get_method_full (D.22807, token.78, 0B, D.22814);
  <D.22796>:
  if (method == 0B) goto <D.22816>; else goto <D.22818>;
  <D.22818>:
  D.22819 = mono_loader_get_last_error ();
  if (D.22819 != 0B) goto <D.22816>; else goto <D.22817>;
  <D.22816>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.22809 = ctx->ip_offset;
    D.22820 = monoeg_g_strdup_printf ("Cannot load method from token 0x%08x for %s at 0x%04x", token, opcode, D.22809);
    vinfo->info.message = D.22820;
    vinfo->exception_type = 12;
    D.22811 = ctx->list;
    D.22821 = monoeg_g_slist_prepend (D.22811, vinfo);
    ctx->list = D.22821;
  }
  ctx->valid = 0;
  mono_loader_clear_error ();
  D.22813 = 0B;
  return D.22813;
  <D.22817>:
  D.22822 = mono_method_is_valid_in_context (ctx, method);
  if (D.22822 == 2) goto <D.22823>; else goto <D.22824>;
  <D.22823>:
  D.22813 = 0B;
  return D.22813;
  <D.22824>:
  D.22813 = method;
  return D.22813;
}


token_bounds_check (struct MonoImage * image, guint32 token)
{
  unsigned char D.22826;
  unsigned char D.22827;
  gboolean D.22830;
  int iftmp.79;
  unsigned int D.22834;
  <unnamed-unsigned:24> D.22835;
  unsigned int D.22836;
  unsigned int D.22837;

  D.22826 = BIT_FIELD_REF <*image, 8, 128>;
  D.22827 = D.22826 & 8;
  if (D.22827 != 0) goto <D.22828>; else goto <D.22829>;
  <D.22828>:
  D.22830 = mono_reflection_is_valid_dynamic_token (image, token);
  return D.22830;
  <D.22829>:
  D.22834 = token >> 24;
  D.22835 = image->tables[D.22834].rows;
  D.22836 = (unsigned int) D.22835;
  D.22837 = token & 16777215;
  if (D.22836 >= D.22837) goto <D.22838>; else goto <D.22832>;
  <D.22838>:
  D.22837 = token & 16777215;
  if (D.22837 != 0) goto <D.22839>; else goto <D.22832>;
  <D.22839>:
  iftmp.79 = 1;
  goto <D.22833>;
  <D.22832>:
  iftmp.79 = 0;
  <D.22833>:
  D.22830 = iftmp.79;
  return D.22830;
}


mono_method_is_valid_in_context (struct VerifyContext * ctx, struct MonoMethod * method)
{
  struct MonoClass * D.22841;
  struct MonoType * D.22842;
  int D.22843;
  verify_result_t D.22846;
  unsigned char D.22847;
  unsigned char D.22848;
  int D.22851;
  unsigned int D.22854;
  const char * D.22855;
  const char * D.22856;
  const char * D.22857;
  gchar * D.22858;
  struct GSList * D.22859;
  struct GSList * D.22860;
  int D.22861;
  int D.22866;
  int D.22868;
  int D.22869;
  gchar * D.22870;
  struct GSList * D.22871;
  int D.22872;

  D.22841 = method->klass;
  D.22842 = &D.22841->byval_arg;
  D.22843 = mono_type_is_valid_in_context (ctx, D.22842);
  if (D.22843 == 0) goto <D.22844>; else goto <D.22845>;
  <D.22844>:
  D.22846 = 2;
  return D.22846;
  <D.22845>:
  D.22847 = BIT_FIELD_REF <*method, 8, 168>;
  D.22848 = D.22847 & 16;
  if (D.22848 == 0) goto <D.22849>; else goto <D.22850>;
  <D.22849>:
  D.22846 = 0;
  return D.22846;
  <D.22850>:
  D.22851 = mono_method_is_valid_generic_instantiation (ctx, method);
  if (D.22851 == 0) goto <D.22852>; else goto <D.22853>;
  <D.22852>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.22854 = ctx->ip_offset;
    D.22855 = method->name;
    D.22841 = method->klass;
    D.22856 = D.22841->name;
    D.22841 = method->klass;
    D.22857 = D.22841->name_space;
    D.22858 = monoeg_g_strdup_printf ("Invalid generic method instantiation of method %s.%s::%s at 0x%04x", D.22857, D.22856, D.22855, D.22854);
    vinfo->info.message = D.22858;
    vinfo->exception_type = 4;
    D.22859 = ctx->list;
    D.22860 = monoeg_g_slist_prepend (D.22859, vinfo);
    ctx->list = D.22860;
  }
  ctx->valid = 0;
  D.22846 = 2;
  return D.22846;
  <D.22853>:
  D.22861 = mono_method_repect_method_constraints (ctx, method);
  if (D.22861 == 0) goto <D.22862>; else goto <D.22863>;
  <D.22862>:
  D.22866 = ctx->verifiable;
  if (D.22866 != 0) goto <D.22864>; else goto <D.22867>;
  <D.22867>:
  D.22868 = ctx->level;
  D.22869 = D.22868 & 128;
  if (D.22869 != 0) goto <D.22864>; else goto <D.22865>;
  <D.22864>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22854 = ctx->ip_offset;
    D.22855 = method->name;
    D.22841 = method->klass;
    D.22856 = D.22841->name;
    D.22841 = method->klass;
    D.22857 = D.22841->name_space;
    D.22870 = 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.22857, D.22856, D.22855, D.22854);
    vinfo->info.message = D.22870;
    vinfo->exception_type = 4;
    D.22859 = ctx->list;
    D.22871 = monoeg_g_slist_prepend (D.22859, vinfo);
    ctx->list = D.22871;
  }
  ctx->verifiable = 0;
  D.22868 = ctx->level;
  D.22872 = D.22868 & 16;
  if (D.22872 != 0) goto <D.22873>; else goto <D.22874>;
  <D.22873>:
  ctx->valid = 0;
  <D.22874>:
  <D.22865>:
  D.22846 = 1;
  return D.22846;
  <D.22863>:
  D.22846 = 0;
  return D.22846;
}


mono_method_is_valid_generic_instantiation (struct VerifyContext * ctx, struct MonoMethod * method)
{
  struct MonoMethod * D.22876;
  gboolean D.22879;
  int D.22882;
  struct MonoGenericContext * D.22885;
  struct MonoMethodInflated * gmethod;
  struct MonoGenericInst * ginst;
  struct MonoGenericContainer * gc;

  gmethod = method;
  ginst = gmethod->context.method_inst;
  D.22876 = gmethod->declaring;
  gc = mono_method_get_generic_container (D.22876);
  if (gc == 0B) goto <D.22877>; else goto <D.22878>;
  <D.22877>:
  D.22879 = 1;
  return D.22879;
  <D.22878>:
  if (ctx != 0B) goto <D.22880>; else goto <D.22881>;
  <D.22880>:
  D.22882 = is_valid_generic_instantiation_in_context (ctx, ginst, 1);
  if (D.22882 == 0) goto <D.22883>; else goto <D.22884>;
  <D.22883>:
  D.22879 = 0;
  return D.22879;
  <D.22884>:
  <D.22881>:
  D.22885 = &gmethod->context;
  D.22879 = is_valid_generic_instantiation (gc, D.22885, ginst);
  return D.22879;
}


mono_method_repect_method_constraints (struct VerifyContext * ctx, struct MonoMethod * method)
{
  struct MonoMethod * D.22887;
  gboolean D.22888;
  int iftmp.80;
  struct MonoGenericContext * D.22894;
  int D.22895;
  struct MonoMethodInflated * gmethod;
  struct MonoGenericInst * ginst;
  struct MonoGenericContainer * gc;

  gmethod = method;
  ginst = gmethod->context.method_inst;
  D.22887 = gmethod->declaring;
  gc = mono_method_get_generic_container (D.22887);
  if (gc == 0B) goto <D.22890>; else goto <D.22893>;
  <D.22893>:
  D.22894 = &gmethod->context;
  D.22895 = generic_arguments_respect_constraints (ctx, gc, D.22894, ginst);
  if (D.22895 != 0) goto <D.22890>; else goto <D.22891>;
  <D.22890>:
  iftmp.80 = 1;
  goto <D.22892>;
  <D.22891>:
  iftmp.80 = 0;
  <D.22892>:
  D.22888 = iftmp.80;
  return D.22888;
}


do_static_branch (struct VerifyContext * ctx, int delta)
{
  unsigned int D.22897;
  unsigned int delta.81;
  unsigned int D.22899;
  int D.22903;
  gchar * D.22904;
  struct GSList * D.22905;
  struct GSList * D.22906;
  unsigned int target.82;
  struct MonoMethodHeader * D.22908;
  int D.22909;
  int D.22912;
  int D.22914;
  int D.22915;
  gchar * D.22916;
  struct GSList * D.22917;
  int D.22918;
  gchar * D.22921;
  struct GSList * D.22922;
  int target;

  D.22897 = ctx->ip_offset;
  delta.81 = (unsigned int) delta;
  D.22899 = D.22897 + delta.81;
  target = (int) D.22899;
  if (target < 0) goto <D.22900>; else goto <D.22902>;
  <D.22902>:
  D.22903 = ctx->code_size;
  if (D.22903 <= target) goto <D.22900>; else goto <D.22901>;
  <D.22900>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.22897 = ctx->ip_offset;
    D.22904 = monoeg_g_strdup_printf ("branch target out of code at 0x%04x", D.22897);
    vinfo->info.message = D.22904;
    vinfo->exception_type = 3;
    D.22905 = ctx->list;
    D.22906 = monoeg_g_slist_prepend (D.22905, vinfo);
    ctx->list = D.22906;
  }
  ctx->valid = 0;
  return;
  <D.22901>:
  target.82 = (unsigned int) target;
  D.22897 = ctx->ip_offset;
  D.22908 = ctx->header;
  D.22909 = is_valid_branch_instruction (D.22908, D.22897, target.82);
  switch (D.22909) <default: <D.22923>, case 1: <D.18876>, case 2: <D.18879>>
  <D.18876>:
  D.22912 = ctx->verifiable;
  if (D.22912 != 0) goto <D.22910>; else goto <D.22913>;
  <D.22913>:
  D.22914 = ctx->level;
  D.22915 = D.22914 & 128;
  if (D.22915 != 0) goto <D.22910>; else goto <D.22911>;
  <D.22910>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.22897 = ctx->ip_offset;
    D.22916 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.22897);
    vinfo->info.message = D.22916;
    vinfo->exception_type = 4;
    D.22905 = ctx->list;
    D.22917 = monoeg_g_slist_prepend (D.22905, vinfo);
    ctx->list = D.22917;
  }
  ctx->verifiable = 0;
  D.22914 = ctx->level;
  D.22918 = D.22914 & 16;
  if (D.22918 != 0) goto <D.22919>; else goto <D.22920>;
  <D.22919>:
  ctx->valid = 0;
  <D.22920>:
  <D.22911>:
  goto <D.18878>;
  <D.18879>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.22897 = ctx->ip_offset;
    D.22921 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.22897);
    vinfo->info.message = D.22921;
    vinfo->exception_type = 3;
    D.22905 = ctx->list;
    D.22922 = monoeg_g_slist_prepend (D.22905, vinfo);
    ctx->list = D.22922;
  }
  ctx->valid = 0;
  goto <D.18878>;
  <D.22923>:
  <D.18878>:
  ctx->target = target;
}


is_valid_branch_instruction (struct MonoMethodHeader * header, guint offset, guint target)
{
  struct MonoExceptionClause * D.22925;
  unsigned int i.83;
  unsigned int D.22927;
  unsigned int D.22930;
  _Bool D.22931;
  _Bool D.22932;
  _Bool D.22933;
  unsigned int D.22936;
  unsigned int D.22938;
  unsigned int D.22939;
  int D.22944;
  unsigned int D.22945;
  int iftmp.84;
  unsigned int D.22952;
  unsigned int D.22953;
  _Bool D.22955;
  int iftmp.85;
  _Bool D.22961;
  _Bool D.22962;
  int iftmp.86;
  _Bool D.22970;
  int iftmp.87;
  _Bool D.22976;
  _Bool D.22977;
  int iftmp.88;
  unsigned int D.22983;
  unsigned int D.22985;
  _Bool D.22988;
  int iftmp.89;
  _Bool D.22995;
  _Bool D.22996;
  <unnamed-unsigned:15> D.22999;
  int D.23000;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.17838>;
  <D.17837>:
  D.22925 = header->clauses;
  i.83 = (unsigned int) i;
  D.22927 = i.83 * 24;
  clause = D.22925 + D.22927;
  D.22930 = clause->flags;
  D.22931 = D.22930 == 2;
  D.22932 = D.22930 == 4;
  D.22933 = D.22931 | D.22932;
  if (D.22933 != 0) goto <D.22934>; else goto <D.22935>;
  <D.22934>:
  D.22936 = clause->handler_offset;
  if (D.22936 > offset) goto <D.22928>; else goto <D.22937>;
  <D.22937>:
  D.22936 = clause->handler_offset;
  D.22938 = clause->handler_len;
  D.22939 = D.22936 + D.22938;
  if (D.22939 <= offset) goto <D.22928>; else goto <D.22929>;
  <D.22928>:
  D.22936 = clause->handler_offset;
  if (D.22936 <= target) goto <D.22940>; else goto <D.22941>;
  <D.22940>:
  D.22936 = clause->handler_offset;
  D.22938 = clause->handler_len;
  D.22939 = D.22936 + D.22938;
  if (D.22939 > target) goto <D.22942>; else goto <D.22943>;
  <D.22942>:
  D.22944 = 2;
  return D.22944;
  <D.22943>:
  <D.22941>:
  <D.22929>:
  <D.22935>:
  D.22945 = clause->try_offset;
  if (D.22945 != target) goto <D.22946>; else goto <D.22947>;
  <D.22946>:
  D.22945 = clause->try_offset;
  if (D.22945 <= offset) goto <D.22951>; else goto <D.22949>;
  <D.22951>:
  D.22945 = clause->try_offset;
  D.22952 = clause->try_len;
  D.22953 = D.22945 + D.22952;
  if (D.22953 > offset) goto <D.22954>; else goto <D.22949>;
  <D.22954>:
  iftmp.84 = 1;
  goto <D.22950>;
  <D.22949>:
  iftmp.84 = 0;
  <D.22950>:
  D.22955 = (_Bool) iftmp.84;
  D.22945 = clause->try_offset;
  if (D.22945 <= target) goto <D.22959>; else goto <D.22957>;
  <D.22959>:
  D.22945 = clause->try_offset;
  D.22952 = clause->try_len;
  D.22953 = D.22945 + D.22952;
  if (D.22953 > target) goto <D.22960>; else goto <D.22957>;
  <D.22960>:
  iftmp.85 = 1;
  goto <D.22958>;
  <D.22957>:
  iftmp.85 = 0;
  <D.22958>:
  D.22961 = (_Bool) iftmp.85;
  D.22962 = D.22955 ^ D.22961;
  if (D.22962 != 0) goto <D.22963>; else goto <D.22964>;
  <D.22963>:
  D.22944 = 1;
  return D.22944;
  <D.22964>:
  <D.22947>:
  D.22936 = clause->handler_offset;
  if (D.22936 <= offset) goto <D.22968>; else goto <D.22966>;
  <D.22968>:
  D.22936 = clause->handler_offset;
  D.22938 = clause->handler_len;
  D.22939 = D.22936 + D.22938;
  if (D.22939 > offset) goto <D.22969>; else goto <D.22966>;
  <D.22969>:
  iftmp.86 = 1;
  goto <D.22967>;
  <D.22966>:
  iftmp.86 = 0;
  <D.22967>:
  D.22970 = (_Bool) iftmp.86;
  D.22936 = clause->handler_offset;
  if (D.22936 <= target) goto <D.22974>; else goto <D.22972>;
  <D.22974>:
  D.22936 = clause->handler_offset;
  D.22938 = clause->handler_len;
  D.22939 = D.22936 + D.22938;
  if (D.22939 > target) goto <D.22975>; else goto <D.22972>;
  <D.22975>:
  iftmp.87 = 1;
  goto <D.22973>;
  <D.22972>:
  iftmp.87 = 0;
  <D.22973>:
  D.22976 = (_Bool) iftmp.87;
  D.22977 = D.22970 ^ D.22976;
  if (D.22977 != 0) goto <D.22978>; else goto <D.22979>;
  <D.22978>:
  D.22944 = 1;
  return D.22944;
  <D.22979>:
  D.22983 = clause->flags;
  if (D.22983 == 1) goto <D.22984>; else goto <D.22981>;
  <D.22984>:
  D.22985 = clause->data.filter_offset;
  if (D.22985 <= offset) goto <D.22986>; else goto <D.22981>;
  <D.22986>:
  D.22936 = clause->handler_offset;
  if (D.22936 > offset) goto <D.22987>; else goto <D.22981>;
  <D.22987>:
  iftmp.88 = 1;
  goto <D.22982>;
  <D.22981>:
  iftmp.88 = 0;
  <D.22982>:
  D.22988 = (_Bool) iftmp.88;
  D.22983 = clause->flags;
  if (D.22983 == 1) goto <D.22992>; else goto <D.22990>;
  <D.22992>:
  D.22985 = clause->data.filter_offset;
  if (D.22985 <= target) goto <D.22993>; else goto <D.22990>;
  <D.22993>:
  D.22936 = clause->handler_offset;
  if (D.22936 > target) goto <D.22994>; else goto <D.22990>;
  <D.22994>:
  iftmp.89 = 1;
  goto <D.22991>;
  <D.22990>:
  iftmp.89 = 0;
  <D.22991>:
  D.22995 = (_Bool) iftmp.89;
  D.22996 = D.22988 ^ D.22995;
  if (D.22996 != 0) goto <D.22997>; else goto <D.22998>;
  <D.22997>:
  D.22944 = 1;
  return D.22944;
  <D.22998>:
  i = i + 1;
  <D.17838>:
  D.22999 = header->num_clauses;
  D.23000 = (int) D.22999;
  if (D.23000 > i) goto <D.17837>; else goto <D.17839>;
  <D.17839>:
  D.22944 = 0;
  return D.22944;
}


do_boolean_branch_op (struct VerifyContext * ctx, int delta)
{
  unsigned int D.23002;
  unsigned int delta.90;
  unsigned int D.23004;
  int D.23008;
  gchar * D.23009;
  struct GSList * D.23010;
  struct GSList * D.23011;
  unsigned int target.91;
  struct MonoMethodHeader * D.23013;
  int D.23014;
  int D.23017;
  int D.23019;
  int D.23020;
  gchar * D.23021;
  struct GSList * D.23022;
  int D.23023;
  gchar * D.23026;
  struct GSList * D.23027;
  int D.23029;
  int D.23032;
  const char * D.23038;
  gchar * D.23039;
  struct GSList * D.23040;
  int target;
  struct ILStackDesc * top;

  D.23002 = ctx->ip_offset;
  delta.90 = (unsigned int) delta;
  D.23004 = D.23002 + delta.90;
  target = (int) D.23004;
  if (target < 0) goto <D.23005>; else goto <D.23007>;
  <D.23007>:
  D.23008 = ctx->code_size;
  if (D.23008 <= target) goto <D.23005>; else goto <D.23006>;
  <D.23005>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.23002 = ctx->ip_offset;
    D.23009 = monoeg_g_strdup_printf ("Boolean branch target out of code at 0x%04x", D.23002);
    vinfo->info.message = D.23009;
    vinfo->exception_type = 3;
    D.23010 = ctx->list;
    D.23011 = monoeg_g_slist_prepend (D.23010, vinfo);
    ctx->list = D.23011;
  }
  ctx->valid = 0;
  return;
  <D.23006>:
  target.91 = (unsigned int) target;
  D.23002 = ctx->ip_offset;
  D.23013 = ctx->header;
  D.23014 = is_valid_branch_instruction (D.23013, D.23002, target.91);
  switch (D.23014) <default: <D.23028>, case 1: <D.18387>, case 2: <D.18390>>
  <D.18387>:
  D.23017 = ctx->verifiable;
  if (D.23017 != 0) goto <D.23015>; else goto <D.23018>;
  <D.23018>:
  D.23019 = ctx->level;
  D.23020 = D.23019 & 128;
  if (D.23020 != 0) goto <D.23015>; else goto <D.23016>;
  <D.23015>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23002 = ctx->ip_offset;
    D.23021 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.23002);
    vinfo->info.message = D.23021;
    vinfo->exception_type = 4;
    D.23010 = ctx->list;
    D.23022 = monoeg_g_slist_prepend (D.23010, vinfo);
    ctx->list = D.23022;
  }
  ctx->verifiable = 0;
  D.23019 = ctx->level;
  D.23023 = D.23019 & 16;
  if (D.23023 != 0) goto <D.23024>; else goto <D.23025>;
  <D.23024>:
  ctx->valid = 0;
  <D.23025>:
  <D.23016>:
  goto <D.18389>;
  <D.18390>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.23002 = ctx->ip_offset;
    D.23026 = monoeg_g_strdup_printf ("Branch target escapes out of exception block at 0x%04x", D.23002);
    vinfo->info.message = D.23026;
    vinfo->exception_type = 3;
    D.23010 = ctx->list;
    D.23027 = monoeg_g_slist_prepend (D.23010, vinfo);
    ctx->list = D.23027;
  }
  ctx->valid = 0;
  return;
  <D.23028>:
  <D.18389>:
  ctx->target = target;
  D.23029 = check_underflow (ctx, 1);
  if (D.23029 == 0) goto <D.23030>; else goto <D.23031>;
  <D.23030>:
  return;
  <D.23031>:
  top = stack_pop (ctx);
  D.23032 = is_valid_bool_arg (top);
  if (D.23032 == 0) goto <D.23033>; else goto <D.23034>;
  <D.23033>:
  D.23017 = ctx->verifiable;
  if (D.23017 != 0) goto <D.23035>; else goto <D.23037>;
  <D.23037>:
  D.23019 = ctx->level;
  D.23020 = D.23019 & 128;
  if (D.23020 != 0) goto <D.23035>; else goto <D.23036>;
  <D.23035>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23002 = ctx->ip_offset;
    D.23038 = stack_slot_get_name (top);
    D.23039 = monoeg_g_strdup_printf ("Argument type %s not valid for brtrue/brfalse at 0x%04x", D.23038, D.23002);
    vinfo->info.message = D.23039;
    vinfo->exception_type = 4;
    D.23010 = ctx->list;
    D.23040 = monoeg_g_slist_prepend (D.23010, vinfo);
    ctx->list = D.23040;
  }
  ctx->verifiable = 0;
  D.23019 = ctx->level;
  D.23023 = D.23019 & 16;
  if (D.23023 != 0) goto <D.23041>; else goto <D.23042>;
  <D.23041>:
  ctx->valid = 0;
  <D.23042>:
  <D.23036>:
  <D.23034>:
  check_unmanaged_pointer (ctx, top);
}


is_valid_bool_arg (struct ILStackDesc * arg)
{
  int D.23046;
  int D.23048;
  int D.23050;
  gboolean D.23051;
  int D.23052;
  struct MonoType * D.23053;
  _Bool D.23054;
  long int D.23055;
  long int D.23056;
  unsigned char D.23059;
  int D.23060;
  struct MonoGenericClass * D.23061;
  struct MonoClass * D.23062;
  unsigned char D.23063;
  unsigned char D.23064;
  _Bool D.23065;

  D.23046 = stack_slot_is_managed_pointer (arg);
  if (D.23046 != 0) goto <D.23044>; else goto <D.23047>;
  <D.23047>:
  D.23048 = stack_slot_is_boxed_value (arg);
  if (D.23048 != 0) goto <D.23044>; else goto <D.23049>;
  <D.23049>:
  D.23050 = stack_slot_is_null_literal (arg);
  if (D.23050 != 0) goto <D.23044>; else goto <D.23045>;
  <D.23044>:
  D.23051 = 1;
  return D.23051;
  <D.23045>:
  D.23052 = stack_slot_get_underlying_type (arg);
  switch (D.23052) <default: <D.17913>, case 1: <D.17900>, case 2: <D.17901>, case 3: <D.17902>, case 5: <D.17903>, case 6: <D.17904>>
  <D.17900>:
  <D.17901>:
  <D.17902>:
  <D.17903>:
  D.23051 = 1;
  return D.23051;
  <D.17904>:
  D.23053 = arg->type;
  D.23054 = D.23053 == 0B;
  D.23055 = (long int) D.23054;
  D.23056 = __builtin_expect (D.23055, 0);
  if (D.23056 != 0) goto <D.23057>; else goto <D.23058>;
  <D.23057>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1433, "arg->type");
  <D.23058>:
  D.23053 = arg->type;
  D.23059 = D.23053->type;
  D.23060 = (int) D.23059;
  switch (D.23060) <default: <D.23066>, case 14: <D.17906>, case 15: <D.17911>, case 18: <D.17905>, case 20: <D.17909>, case 21: <D.17912>, case 27: <D.17910>, case 28: <D.17907>, case 29: <D.17908>>
  <D.17905>:
  <D.17906>:
  <D.17907>:
  <D.17908>:
  <D.17909>:
  <D.17910>:
  <D.17911>:
  D.23051 = 1;
  return D.23051;
  <D.17912>:
  D.23053 = arg->type;
  D.23061 = D.23053->data.generic_class;
  D.23062 = D.23061->container_class;
  D.23063 = BIT_FIELD_REF <*D.23062, 8, 160>;
  D.23064 = D.23063 & 8;
  D.23065 = D.23064 == 0;
  D.23051 = (gboolean) D.23065;
  return D.23051;
  <D.23066>:
  <D.17913>:
  D.23051 = 0;
  return D.23051;
}


check_unmanaged_pointer (struct VerifyContext * ctx, struct ILStackDesc * value)
{
  int D.23068;
  int D.23073;
  int D.23075;
  int D.23076;
  unsigned int D.23077;
  gchar * D.23078;
  struct GSList * D.23079;
  struct GSList * D.23080;
  int D.23081;
  gboolean D.23084;

  D.23068 = stack_slot_get_type (value);
  if (D.23068 == 5) goto <D.23069>; else goto <D.23070>;
  <D.23069>:
  D.23073 = ctx->verifiable;
  if (D.23073 != 0) goto <D.23071>; else goto <D.23074>;
  <D.23074>:
  D.23075 = ctx->level;
  D.23076 = D.23075 & 128;
  if (D.23076 != 0) goto <D.23071>; else goto <D.23072>;
  <D.23071>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23077 = ctx->ip_offset;
    D.23078 = monoeg_g_strdup_printf ("Unmanaged pointer is not a verifiable type at 0x%04x", D.23077);
    vinfo->info.message = D.23078;
    vinfo->exception_type = 4;
    D.23079 = ctx->list;
    D.23080 = monoeg_g_slist_prepend (D.23079, vinfo);
    ctx->list = D.23080;
  }
  ctx->verifiable = 0;
  D.23075 = ctx->level;
  D.23081 = D.23075 & 16;
  if (D.23081 != 0) goto <D.23082>; else goto <D.23083>;
  <D.23082>:
  ctx->valid = 0;
  <D.23083>:
  <D.23072>:
  D.23084 = 0;
  return D.23084;
  <D.23070>:
  D.23084 = 1;
  return D.23084;
}


do_switch (struct VerifyContext * ctx, int count, const unsigned char * data)
{
  unsigned int D.23086;
  int D.23087;
  unsigned int D.23088;
  unsigned int D.23089;
  unsigned int D.23090;
  int D.23091;
  int D.23094;
  int D.23097;
  int D.23102;
  int D.23104;
  int D.23105;
  gchar * D.23106;
  struct GSList * D.23107;
  struct GSList * D.23108;
  int D.23109;
  int D.23112;
  sizetype D.23113;
  const guint32 * D.23114;
  unsigned int D.23115;
  unsigned int base.92;
  unsigned int D.23117;
  int D.23121;
  gchar * D.23122;
  struct GSList * D.23123;
  unsigned int target.93;
  struct MonoMethodHeader * D.23125;
  int D.23126;
  gchar * D.23130;
  struct GSList * D.23131;
  gchar * D.23134;
  struct GSList * D.23135;
  struct ILCodeDesc * D.23137;
  unsigned int target.94;
  unsigned int D.23139;
  struct ILCodeDesc * D.23140;
  struct ILCodeDesc * D.23141;
  int i;
  int base;
  struct ILStackDesc * value;

  D.23086 = ctx->ip_offset;
  D.23087 = count * 4;
  D.23088 = (unsigned int) D.23087;
  D.23089 = D.23086 + D.23088;
  D.23090 = D.23089 + 5;
  base = (int) D.23090;
  D.23091 = check_underflow (ctx, 1);
  if (D.23091 == 0) goto <D.23092>; else goto <D.23093>;
  <D.23092>:
  return;
  <D.23093>:
  value = stack_pop (ctx);
  D.23094 = stack_slot_get_type (value);
  if (D.23094 != 1) goto <D.23095>; else goto <D.23096>;
  <D.23095>:
  D.23097 = stack_slot_get_type (value);
  if (D.23097 != 3) goto <D.23098>; else goto <D.23099>;
  <D.23098>:
  D.23102 = ctx->verifiable;
  if (D.23102 != 0) goto <D.23100>; else goto <D.23103>;
  <D.23103>:
  D.23104 = ctx->level;
  D.23105 = D.23104 & 128;
  if (D.23105 != 0) goto <D.23100>; else goto <D.23101>;
  <D.23100>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23086 = ctx->ip_offset;
    D.23106 = monoeg_g_strdup_printf ("Invalid argument to switch at 0x%04x", D.23086);
    vinfo->info.message = D.23106;
    vinfo->exception_type = 4;
    D.23107 = ctx->list;
    D.23108 = monoeg_g_slist_prepend (D.23107, vinfo);
    ctx->list = D.23108;
  }
  ctx->verifiable = 0;
  D.23104 = ctx->level;
  D.23109 = D.23104 & 16;
  if (D.23109 != 0) goto <D.23110>; else goto <D.23111>;
  <D.23110>:
  ctx->valid = 0;
  <D.23111>:
  <D.23101>:
  <D.23099>:
  <D.23096>:
  i = 0;
  goto <D.18898>;
  <D.18897>:
  {
    int target;

    D.23112 = i * 4;
    D.23113 = (sizetype) D.23112;
    D.23114 = data + D.23113;
    D.23115 = *D.23114;
    base.92 = (unsigned int) base;
    D.23117 = D.23115 + base.92;
    target = (int) D.23117;
    if (target < 0) goto <D.23118>; else goto <D.23120>;
    <D.23120>:
    D.23121 = ctx->code_size;
    if (D.23121 <= target) goto <D.23118>; else goto <D.23119>;
    <D.23118>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 1;
      D.23086 = ctx->ip_offset;
      D.23122 = monoeg_g_strdup_printf ("Switch target %x out of code at 0x%04x", i, D.23086);
      vinfo->info.message = D.23122;
      vinfo->exception_type = 3;
      D.23107 = ctx->list;
      D.23123 = monoeg_g_slist_prepend (D.23107, vinfo);
      ctx->list = D.23123;
    }
    ctx->valid = 0;
    return;
    <D.23119>:
    target.93 = (unsigned int) target;
    D.23086 = ctx->ip_offset;
    D.23125 = ctx->header;
    D.23126 = is_valid_branch_instruction (D.23125, D.23086, target.93);
    switch (D.23126) <default: <D.23136>, case 1: <D.18892>, case 2: <D.18895>>
    <D.18892>:
    D.23102 = ctx->verifiable;
    if (D.23102 != 0) goto <D.23127>; else goto <D.23129>;
    <D.23129>:
    D.23104 = ctx->level;
    D.23105 = D.23104 & 128;
    if (D.23105 != 0) goto <D.23127>; else goto <D.23128>;
    <D.23127>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.23086 = ctx->ip_offset;
      D.23130 = monoeg_g_strdup_printf ("Switch target %x escapes out of exception block at 0x%04x", i, D.23086);
      vinfo->info.message = D.23130;
      vinfo->exception_type = 4;
      D.23107 = ctx->list;
      D.23131 = monoeg_g_slist_prepend (D.23107, vinfo);
      ctx->list = D.23131;
    }
    ctx->verifiable = 0;
    D.23104 = ctx->level;
    D.23109 = D.23104 & 16;
    if (D.23109 != 0) goto <D.23132>; else goto <D.23133>;
    <D.23132>:
    ctx->valid = 0;
    <D.23133>:
    <D.23128>:
    goto <D.18894>;
    <D.18895>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 1;
      D.23086 = ctx->ip_offset;
      D.23134 = monoeg_g_strdup_printf ("Switch target %x escapes out of exception block at 0x%04x", i, D.23086);
      vinfo->info.message = D.23134;
      vinfo->exception_type = 3;
      D.23107 = ctx->list;
      D.23135 = monoeg_g_slist_prepend (D.23107, vinfo);
      ctx->list = D.23135;
    }
    ctx->valid = 0;
    return;
    <D.23136>:
    <D.18894>:
    D.23137 = ctx->code;
    target.94 = (unsigned int) target;
    D.23139 = target.94 * 12;
    D.23140 = D.23137 + D.23139;
    D.23141 = &ctx->eval;
    merge_stacks (ctx, D.23141, D.23140, 0, 1);
  }
  i = i + 1;
  <D.18898>:
  if (i < count) goto <D.18897>; else goto <D.18899>;
  <D.18899>:
}


do_load_indirect (struct VerifyContext * ctx, int opcode)
{
  unsigned int D.23143;
  unsigned int D.23144;
  int D.23145;
  int D.23148;
  int D.23153;
  int D.23155;
  int D.23156;
  unsigned int D.23157;
  gchar * D.23158;
  struct GSList * D.23159;
  struct GSList * D.23160;
  int D.23161;
  struct MonoType * D.23164;
  struct ILStackDesc * D.23165;
  int D.23170;
  struct MonoType * D.23172;
  struct MonoClass * D.23173;
  unsigned char D.23174;
  unsigned char D.23175;
  gchar * D.23179;
  struct GSList * D.23180;
  struct MonoType * D.23183;
  struct ILStackDesc * D.23184;
  struct MonoType * D.23186;
  struct MonoType * D.23187;
  int D.23188;
  gchar * D.23194;
  struct GSList * D.23195;
  struct MonoType * D.23198;
  struct ILStackDesc * D.23199;
  struct ILStackDesc * value;

  D.23143 = ctx->prefix_set;
  D.23144 = D.23143 & 4294967292;
  ctx->prefix_set = D.23144;
  D.23145 = check_underflow (ctx, 1);
  if (D.23145 == 0) goto <D.23146>; else goto <D.23147>;
  <D.23146>:
  return;
  <D.23147>:
  value = stack_pop (ctx);
  D.23148 = stack_slot_is_managed_pointer (value);
  if (D.23148 == 0) goto <D.23149>; else goto <D.23150>;
  <D.23149>:
  D.23153 = ctx->verifiable;
  if (D.23153 != 0) goto <D.23151>; else goto <D.23154>;
  <D.23154>:
  D.23155 = ctx->level;
  D.23156 = D.23155 & 128;
  if (D.23156 != 0) goto <D.23151>; else goto <D.23152>;
  <D.23151>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23157 = ctx->ip_offset;
    D.23158 = monoeg_g_strdup_printf ("Load indirect not using a manager pointer at 0x%04x", D.23157);
    vinfo->info.message = D.23158;
    vinfo->exception_type = 4;
    D.23159 = ctx->list;
    D.23160 = monoeg_g_slist_prepend (D.23159, vinfo);
    ctx->list = D.23160;
  }
  ctx->verifiable = 0;
  D.23155 = ctx->level;
  D.23161 = D.23155 & 16;
  if (D.23161 != 0) goto <D.23162>; else goto <D.23163>;
  <D.23162>:
  ctx->valid = 0;
  <D.23163>:
  <D.23152>:
  D.23164 = mono_type_from_opcode (opcode);
  D.23165 = stack_push (ctx);
  set_stack_value (ctx, D.23165, D.23164, 0);
  return;
  <D.23150>:
  if (opcode == 80) goto <D.23166>; else goto <D.23167>;
  <D.23166>:
  D.23170 = stack_slot_get_underlying_type (value);
  if (D.23170 != 6) goto <D.23168>; else goto <D.23171>;
  <D.23171>:
  D.23172 = value->type;
  D.23173 = mono_class_from_mono_type (D.23172);
  D.23174 = BIT_FIELD_REF <*D.23173, 8, 160>;
  D.23175 = D.23174 & 8;
  if (D.23175 != 0) goto <D.23168>; else goto <D.23169>;
  <D.23168>:
  D.23153 = ctx->verifiable;
  if (D.23153 != 0) goto <D.23176>; else goto <D.23178>;
  <D.23178>:
  D.23155 = ctx->level;
  D.23156 = D.23155 & 128;
  if (D.23156 != 0) goto <D.23176>; else goto <D.23177>;
  <D.23176>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23157 = ctx->ip_offset;
    D.23179 = monoeg_g_strdup_printf ("Invalid type at stack for ldind_ref expected object byref operation at 0x%04x", D.23157);
    vinfo->info.message = D.23179;
    vinfo->exception_type = 4;
    D.23159 = ctx->list;
    D.23180 = monoeg_g_slist_prepend (D.23159, vinfo);
    ctx->list = D.23180;
  }
  ctx->verifiable = 0;
  D.23155 = ctx->level;
  D.23161 = D.23155 & 16;
  if (D.23161 != 0) goto <D.23181>; else goto <D.23182>;
  <D.23181>:
  ctx->valid = 0;
  <D.23182>:
  <D.23177>:
  <D.23169>:
  D.23172 = value->type;
  D.23183 = mono_type_get_type_byval (D.23172);
  D.23184 = stack_push (ctx);
  set_stack_value (ctx, D.23184, D.23183, 0);
  goto <D.23185>;
  <D.23167>:
  D.23172 = value->type;
  D.23186 = mono_type_get_type_byval (D.23172);
  D.23187 = mono_type_from_opcode (opcode);
  D.23188 = verify_type_compatibility_full (ctx, D.23187, D.23186, 1);
  if (D.23188 == 0) goto <D.23189>; else goto <D.23190>;
  <D.23189>:
  D.23153 = ctx->verifiable;
  if (D.23153 != 0) goto <D.23191>; else goto <D.23193>;
  <D.23193>:
  D.23155 = ctx->level;
  D.23156 = D.23155 & 128;
  if (D.23156 != 0) goto <D.23191>; else goto <D.23192>;
  <D.23191>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23157 = ctx->ip_offset;
    D.23194 = monoeg_g_strdup_printf ("Invalid type at stack for ldind 0x%x operation at 0x%04x", opcode, D.23157);
    vinfo->info.message = D.23194;
    vinfo->exception_type = 4;
    D.23159 = ctx->list;
    D.23195 = monoeg_g_slist_prepend (D.23159, vinfo);
    ctx->list = D.23195;
  }
  ctx->verifiable = 0;
  D.23155 = ctx->level;
  D.23161 = D.23155 & 16;
  if (D.23161 != 0) goto <D.23196>; else goto <D.23197>;
  <D.23196>:
  ctx->valid = 0;
  <D.23197>:
  <D.23192>:
  <D.23190>:
  D.23198 = mono_type_from_opcode (opcode);
  D.23199 = stack_push (ctx);
  set_stack_value (ctx, D.23199, D.23198, 0);
  <D.23185>:
}


mono_type_from_opcode (int opcode)
{
  struct MonoType * D.23201;
  struct MonoClass * D.23202;
  struct MonoClass * D.23203;
  struct MonoClass * D.23204;
  struct MonoClass * D.23205;
  struct MonoClass * D.23206;
  struct MonoClass * D.23207;
  struct MonoClass * D.23208;
  struct MonoClass * D.23209;

  switch (opcode) <default: <D.18768>, case 70: <D.18730>, case 71: <D.18731>, case 72: <D.18736>, case 73: <D.18737>, case 74: <D.18742>, case 75: <D.18743>, case 76: <D.18748>, case 77: <D.18760>, case 78: <D.18752>, case 79: <D.18756>, case 80: <D.18764>, case 81: <D.18765>, case 82: <D.18732>, case 83: <D.18738>, case 84: <D.18744>, case 85: <D.18749>, case 86: <D.18753>, case 87: <D.18757>, case 144: <D.18733>, case 145: <D.18734>, case 146: <D.18739>, case 147: <D.18740>, case 148: <D.18745>, case 149: <D.18746>, case 150: <D.18750>, case 151: <D.18762>, case 152: <D.18754>, case 153: <D.18758>, case 154: <D.18766>, case 155: <D.18763>, case 156: <D.18735>, case 157: <D.18741>, case 158: <D.18747>, case 159: <D.18751>, case 160: <D.18755>, case 161: <D.18759>, case 162: <D.18767>, case 223: <D.18761>>
  <D.18730>:
  <D.18731>:
  <D.18732>:
  <D.18733>:
  <D.18734>:
  <D.18735>:
  D.23202 = mono_defaults.sbyte_class;
  D.23201 = &D.23202->byval_arg;
  return D.23201;
  <D.18736>:
  <D.18737>:
  <D.18738>:
  <D.18739>:
  <D.18740>:
  <D.18741>:
  D.23203 = mono_defaults.int16_class;
  D.23201 = &D.23203->byval_arg;
  return D.23201;
  <D.18742>:
  <D.18743>:
  <D.18744>:
  <D.18745>:
  <D.18746>:
  <D.18747>:
  D.23204 = mono_defaults.int32_class;
  D.23201 = &D.23204->byval_arg;
  return D.23201;
  <D.18748>:
  <D.18749>:
  <D.18750>:
  <D.18751>:
  D.23205 = mono_defaults.int64_class;
  D.23201 = &D.23205->byval_arg;
  return D.23201;
  <D.18752>:
  <D.18753>:
  <D.18754>:
  <D.18755>:
  D.23206 = mono_defaults.single_class;
  D.23201 = &D.23206->byval_arg;
  return D.23201;
  <D.18756>:
  <D.18757>:
  <D.18758>:
  <D.18759>:
  D.23207 = mono_defaults.double_class;
  D.23201 = &D.23207->byval_arg;
  return D.23201;
  <D.18760>:
  <D.18761>:
  <D.18762>:
  <D.18763>:
  D.23208 = mono_defaults.int_class;
  D.23201 = &D.23208->byval_arg;
  return D.23201;
  <D.18764>:
  <D.18765>:
  <D.18766>:
  <D.18767>:
  D.23209 = mono_defaults.object_class;
  D.23201 = &D.23209->byval_arg;
  return D.23201;
  <D.18768>:
  monoeg_g_log (0B, 4, "unknown opcode %02x in mono_type_from_opcode ", opcode);
  <D.18769>:
  goto <D.18769>;
  D.23201 = 0B;
  return D.23201;
}


do_store_indirect (struct VerifyContext * ctx, int opcode)
{
  unsigned int D.23211;
  unsigned int D.23212;
  int D.23213;
  int D.23216;
  int D.23219;
  int D.23224;
  int D.23226;
  int D.23227;
  unsigned int D.23228;
  gchar * D.23229;
  struct GSList * D.23230;
  struct GSList * D.23231;
  int D.23232;
  int D.23235;
  gchar * D.23241;
  struct GSList * D.23242;
  struct MonoType * D.23245;
  struct MonoType * D.23246;
  struct MonoType * D.23247;
  int D.23248;
  gchar * D.23254;
  struct GSList * D.23255;
  struct MonoType * D.23258;
  int D.23259;
  gchar * D.23265;
  struct GSList * D.23266;
  struct ILStackDesc * addr;
  struct ILStackDesc * val;

  D.23211 = ctx->prefix_set;
  D.23212 = D.23211 & 4294967292;
  ctx->prefix_set = D.23212;
  D.23213 = check_underflow (ctx, 2);
  if (D.23213 == 0) goto <D.23214>; else goto <D.23215>;
  <D.23214>:
  return;
  <D.23215>:
  val = stack_pop (ctx);
  addr = stack_pop (ctx);
  check_unmanaged_pointer (ctx, addr);
  D.23216 = stack_slot_is_managed_pointer (addr);
  if (D.23216 == 0) goto <D.23217>; else goto <D.23218>;
  <D.23217>:
  D.23219 = stack_slot_get_type (addr);
  if (D.23219 != 5) goto <D.23220>; else goto <D.23221>;
  <D.23220>:
  D.23224 = ctx->verifiable;
  if (D.23224 != 0) goto <D.23222>; else goto <D.23225>;
  <D.23225>:
  D.23226 = ctx->level;
  D.23227 = D.23226 & 128;
  if (D.23227 != 0) goto <D.23222>; else goto <D.23223>;
  <D.23222>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23228 = ctx->ip_offset;
    D.23229 = monoeg_g_strdup_printf ("Invalid non-pointer argument to stind at 0x%04x", D.23228);
    vinfo->info.message = D.23229;
    vinfo->exception_type = 4;
    D.23230 = ctx->list;
    D.23231 = monoeg_g_slist_prepend (D.23230, vinfo);
    ctx->list = D.23231;
  }
  ctx->verifiable = 0;
  D.23226 = ctx->level;
  D.23232 = D.23226 & 16;
  if (D.23232 != 0) goto <D.23233>; else goto <D.23234>;
  <D.23233>:
  ctx->valid = 0;
  <D.23234>:
  <D.23223>:
  return;
  <D.23221>:
  <D.23218>:
  D.23235 = stack_slot_is_managed_mutability_pointer (addr);
  if (D.23235 != 0) goto <D.23236>; else goto <D.23237>;
  <D.23236>:
  D.23224 = ctx->verifiable;
  if (D.23224 != 0) goto <D.23238>; else goto <D.23240>;
  <D.23240>:
  D.23226 = ctx->level;
  D.23227 = D.23226 & 128;
  if (D.23227 != 0) goto <D.23238>; else goto <D.23239>;
  <D.23238>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23228 = ctx->ip_offset;
    D.23241 = monoeg_g_strdup_printf ("Cannot use a readonly pointer with stind at 0x%04x", D.23228);
    vinfo->info.message = D.23241;
    vinfo->exception_type = 4;
    D.23230 = ctx->list;
    D.23242 = monoeg_g_slist_prepend (D.23230, vinfo);
    ctx->list = D.23242;
  }
  ctx->verifiable = 0;
  D.23226 = ctx->level;
  D.23232 = D.23226 & 16;
  if (D.23232 != 0) goto <D.23243>; else goto <D.23244>;
  <D.23243>:
  ctx->valid = 0;
  <D.23244>:
  <D.23239>:
  return;
  <D.23237>:
  D.23245 = addr->type;
  D.23246 = mono_type_get_type_byval (D.23245);
  D.23247 = mono_type_from_opcode (opcode);
  D.23248 = verify_type_compatibility_full (ctx, D.23247, D.23246, 1);
  if (D.23248 == 0) goto <D.23249>; else goto <D.23250>;
  <D.23249>:
  D.23224 = ctx->verifiable;
  if (D.23224 != 0) goto <D.23251>; else goto <D.23253>;
  <D.23253>:
  D.23226 = ctx->level;
  D.23227 = D.23226 & 128;
  if (D.23227 != 0) goto <D.23251>; else goto <D.23252>;
  <D.23251>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23228 = ctx->ip_offset;
    D.23254 = monoeg_g_strdup_printf ("Invalid addr type at stack for stind 0x%x operation at 0x%04x", opcode, D.23228);
    vinfo->info.message = D.23254;
    vinfo->exception_type = 4;
    D.23230 = ctx->list;
    D.23255 = monoeg_g_slist_prepend (D.23230, vinfo);
    ctx->list = D.23255;
  }
  ctx->verifiable = 0;
  D.23226 = ctx->level;
  D.23232 = D.23226 & 16;
  if (D.23232 != 0) goto <D.23256>; else goto <D.23257>;
  <D.23256>:
  ctx->valid = 0;
  <D.23257>:
  <D.23252>:
  <D.23250>:
  D.23258 = mono_type_from_opcode (opcode);
  D.23259 = verify_stack_type_compatibility (ctx, D.23258, val);
  if (D.23259 == 0) goto <D.23260>; else goto <D.23261>;
  <D.23260>:
  D.23224 = ctx->verifiable;
  if (D.23224 != 0) goto <D.23262>; else goto <D.23264>;
  <D.23264>:
  D.23226 = ctx->level;
  D.23227 = D.23226 & 128;
  if (D.23227 != 0) goto <D.23262>; else goto <D.23263>;
  <D.23262>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23228 = ctx->ip_offset;
    D.23265 = monoeg_g_strdup_printf ("Invalid value type at stack for stind 0x%x operation at 0x%04x", opcode, D.23228);
    vinfo->info.message = D.23265;
    vinfo->exception_type = 4;
    D.23230 = ctx->list;
    D.23266 = monoeg_g_slist_prepend (D.23230, vinfo);
    ctx->list = D.23266;
  }
  ctx->verifiable = 0;
  D.23226 = ctx->level;
  D.23232 = D.23226 & 16;
  if (D.23232 != 0) goto <D.23267>; else goto <D.23268>;
  <D.23267>:
  ctx->valid = 0;
  <D.23268>:
  <D.23263>:
  <D.23261>:
}


do_unary_math_op (struct VerifyContext * ctx, int op)
{
  int D.23270;
  int D.23273;
  struct MonoType * D.23275;
  int D.23276;
  int D.23280;
  int D.23282;
  int D.23283;
  unsigned int D.23284;
  gchar * D.23285;
  struct GSList * D.23286;
  struct GSList * D.23287;
  int D.23288;
  struct ILStackDesc * value;

  D.23270 = check_underflow (ctx, 1);
  if (D.23270 == 0) goto <D.23271>; else goto <D.23272>;
  <D.23271>:
  return;
  <D.23272>:
  value = stack_pop (ctx);
  D.23273 = stack_slot_get_type (value);
  switch (D.23273) <default: <D.18596>, case 1: <D.18590>, case 2: <D.18591>, case 3: <D.18592>, case 4: <D.18594>, case 6: <D.18595>>
  <D.18590>:
  <D.18591>:
  <D.18592>:
  goto <D.18593>;
  <D.18594>:
  if (op == 101) goto <D.18593>; else goto <D.23274>;
  <D.23274>:
  <D.18595>:
  D.23275 = value->type;
  D.23276 = mono_type_is_enum_type (D.23275);
  if (D.23276 != 0) goto <D.18593>; else goto <D.23277>;
  <D.23277>:
  <D.18596>:
  D.23280 = ctx->verifiable;
  if (D.23280 != 0) goto <D.23278>; else goto <D.23281>;
  <D.23281>:
  D.23282 = ctx->level;
  D.23283 = D.23282 & 128;
  if (D.23283 != 0) goto <D.23278>; else goto <D.23279>;
  <D.23278>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23284 = ctx->ip_offset;
    D.23285 = monoeg_g_strdup_printf ("Invalid type at stack for unary not at 0x%04x", D.23284);
    vinfo->info.message = D.23285;
    vinfo->exception_type = 4;
    D.23286 = ctx->list;
    D.23287 = monoeg_g_slist_prepend (D.23286, vinfo);
    ctx->list = D.23287;
  }
  ctx->verifiable = 0;
  D.23282 = ctx->level;
  D.23288 = D.23282 & 16;
  if (D.23288 != 0) goto <D.23289>; else goto <D.23290>;
  <D.23289>:
  ctx->valid = 0;
  <D.23290>:
  <D.23279>:
  <D.18593>:
  stack_push_stack_val (ctx, value);
}


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

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


do_cpobj (struct VerifyContext * ctx, int token)
{
  int D.23297;
  int D.23300;
  int D.23305;
  int D.23307;
  int D.23308;
  unsigned int D.23309;
  gchar * D.23310;
  struct GSList * D.23311;
  struct GSList * D.23312;
  int D.23313;
  int D.23316;
  gchar * D.23322;
  struct GSList * D.23323;
  int D.23326;
  gchar * D.23332;
  struct GSList * D.23333;
  struct MonoType * D.23336;
  struct MonoType * D.23337;
  int D.23338;
  gchar * D.23344;
  struct GSList * D.23345;
  struct MonoType * D.23348;
  struct MonoType * D.23349;
  int D.23350;
  gchar * D.23356;
  struct GSList * D.23357;
  struct ILStackDesc * dest;
  struct ILStackDesc * src;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, token, "cpobj");
  if (type == 0B) goto <D.23295>; else goto <D.23296>;
  <D.23295>:
  return;
  <D.23296>:
  D.23297 = check_underflow (ctx, 2);
  if (D.23297 == 0) goto <D.23298>; else goto <D.23299>;
  <D.23298>:
  return;
  <D.23299>:
  src = stack_pop (ctx);
  dest = stack_pop (ctx);
  D.23300 = stack_slot_is_managed_pointer (src);
  if (D.23300 == 0) goto <D.23301>; else goto <D.23302>;
  <D.23301>:
  D.23305 = ctx->verifiable;
  if (D.23305 != 0) goto <D.23303>; else goto <D.23306>;
  <D.23306>:
  D.23307 = ctx->level;
  D.23308 = D.23307 & 128;
  if (D.23308 != 0) goto <D.23303>; else goto <D.23304>;
  <D.23303>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23309 = ctx->ip_offset;
    D.23310 = monoeg_g_strdup_printf ("Invalid source of cpobj operation at 0x%04x", D.23309);
    vinfo->info.message = D.23310;
    vinfo->exception_type = 4;
    D.23311 = ctx->list;
    D.23312 = monoeg_g_slist_prepend (D.23311, vinfo);
    ctx->list = D.23312;
  }
  ctx->verifiable = 0;
  D.23307 = ctx->level;
  D.23313 = D.23307 & 16;
  if (D.23313 != 0) goto <D.23314>; else goto <D.23315>;
  <D.23314>:
  ctx->valid = 0;
  <D.23315>:
  <D.23304>:
  <D.23302>:
  D.23316 = stack_slot_is_managed_pointer (dest);
  if (D.23316 == 0) goto <D.23317>; else goto <D.23318>;
  <D.23317>:
  D.23305 = ctx->verifiable;
  if (D.23305 != 0) goto <D.23319>; else goto <D.23321>;
  <D.23321>:
  D.23307 = ctx->level;
  D.23308 = D.23307 & 128;
  if (D.23308 != 0) goto <D.23319>; else goto <D.23320>;
  <D.23319>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23309 = ctx->ip_offset;
    D.23322 = monoeg_g_strdup_printf ("Invalid destination of cpobj operation at 0x%04x", D.23309);
    vinfo->info.message = D.23322;
    vinfo->exception_type = 4;
    D.23311 = ctx->list;
    D.23323 = monoeg_g_slist_prepend (D.23311, vinfo);
    ctx->list = D.23323;
  }
  ctx->verifiable = 0;
  D.23307 = ctx->level;
  D.23313 = D.23307 & 16;
  if (D.23313 != 0) goto <D.23324>; else goto <D.23325>;
  <D.23324>:
  ctx->valid = 0;
  <D.23325>:
  <D.23320>:
  <D.23318>:
  D.23326 = stack_slot_is_managed_mutability_pointer (dest);
  if (D.23326 != 0) goto <D.23327>; else goto <D.23328>;
  <D.23327>:
  D.23305 = ctx->verifiable;
  if (D.23305 != 0) goto <D.23329>; else goto <D.23331>;
  <D.23331>:
  D.23307 = ctx->level;
  D.23308 = D.23307 & 128;
  if (D.23308 != 0) goto <D.23329>; else goto <D.23330>;
  <D.23329>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23309 = ctx->ip_offset;
    D.23332 = monoeg_g_strdup_printf ("Cannot use a readonly pointer with cpobj at 0x%04x", D.23309);
    vinfo->info.message = D.23332;
    vinfo->exception_type = 4;
    D.23311 = ctx->list;
    D.23333 = monoeg_g_slist_prepend (D.23311, vinfo);
    ctx->list = D.23333;
  }
  ctx->verifiable = 0;
  D.23307 = ctx->level;
  D.23313 = D.23307 & 16;
  if (D.23313 != 0) goto <D.23334>; else goto <D.23335>;
  <D.23334>:
  ctx->valid = 0;
  <D.23335>:
  <D.23330>:
  <D.23328>:
  D.23336 = src->type;
  D.23337 = mono_type_get_type_byval (D.23336);
  D.23338 = verify_type_compatibility (ctx, type, D.23337);
  if (D.23338 == 0) goto <D.23339>; else goto <D.23340>;
  <D.23339>:
  D.23305 = ctx->verifiable;
  if (D.23305 != 0) goto <D.23341>; else goto <D.23343>;
  <D.23343>:
  D.23307 = ctx->level;
  D.23308 = D.23307 & 128;
  if (D.23308 != 0) goto <D.23341>; else goto <D.23342>;
  <D.23341>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23309 = ctx->ip_offset;
    D.23344 = monoeg_g_strdup_printf ("Token and source types of cpobj don\'t match at 0x%04x", D.23309);
    vinfo->info.message = D.23344;
    vinfo->exception_type = 4;
    D.23311 = ctx->list;
    D.23345 = monoeg_g_slist_prepend (D.23311, vinfo);
    ctx->list = D.23345;
  }
  ctx->verifiable = 0;
  D.23307 = ctx->level;
  D.23313 = D.23307 & 16;
  if (D.23313 != 0) goto <D.23346>; else goto <D.23347>;
  <D.23346>:
  ctx->valid = 0;
  <D.23347>:
  <D.23342>:
  <D.23340>:
  D.23348 = dest->type;
  D.23349 = mono_type_get_type_byval (D.23348);
  D.23350 = verify_type_compatibility (ctx, D.23349, type);
  if (D.23350 == 0) goto <D.23351>; else goto <D.23352>;
  <D.23351>:
  D.23305 = ctx->verifiable;
  if (D.23305 != 0) goto <D.23353>; else goto <D.23355>;
  <D.23355>:
  D.23307 = ctx->level;
  D.23308 = D.23307 & 128;
  if (D.23308 != 0) goto <D.23353>; else goto <D.23354>;
  <D.23353>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23309 = ctx->ip_offset;
    D.23356 = monoeg_g_strdup_printf ("Destination and token types of cpobj don\'t match at 0x%04x", D.23309);
    vinfo->info.message = D.23356;
    vinfo->exception_type = 4;
    D.23311 = ctx->list;
    D.23357 = monoeg_g_slist_prepend (D.23311, vinfo);
    ctx->list = D.23357;
  }
  ctx->verifiable = 0;
  D.23307 = ctx->level;
  D.23313 = D.23307 & 16;
  if (D.23313 != 0) goto <D.23358>; else goto <D.23359>;
  <D.23358>:
  ctx->valid = 0;
  <D.23359>:
  <D.23354>:
  <D.23352>:
}


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

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


do_ldobj_value (struct VerifyContext * ctx, int token)
{
  unsigned int D.23363;
  unsigned int D.23364;
  int D.23367;
  int D.23372;
  int D.23375;
  int D.23378;
  struct MonoType * D.23380;
  unsigned char D.23381;
  unsigned int D.23382;
  const char * D.23383;
  gchar * D.23384;
  struct GSList * D.23385;
  struct GSList * D.23386;
  int D.23387;
  int D.23392;
  int D.23394;
  int D.23395;
  gchar * D.23396;
  struct GSList * D.23397;
  int D.23398;
  struct MonoType * D.23401;
  int D.23402;
  gchar * D.23408;
  struct GSList * D.23409;
  struct ILStackDesc * D.23412;
  struct ILStackDesc * value;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, token, "ldobj");
  D.23363 = ctx->prefix_set;
  D.23364 = D.23363 & 4294967292;
  ctx->prefix_set = D.23364;
  if (type == 0B) goto <D.23365>; else goto <D.23366>;
  <D.23365>:
  return;
  <D.23366>:
  D.23367 = check_underflow (ctx, 1);
  if (D.23367 == 0) goto <D.23368>; else goto <D.23369>;
  <D.23368>:
  return;
  <D.23369>:
  value = stack_pop (ctx);
  D.23372 = stack_slot_is_managed_pointer (value);
  if (D.23372 == 0) goto <D.23373>; else goto <D.23374>;
  <D.23373>:
  D.23375 = stack_slot_get_type (value);
  if (D.23375 != 3) goto <D.23376>; else goto <D.23377>;
  <D.23376>:
  D.23378 = stack_slot_get_type (value);
  if (D.23378 != 5) goto <D.23370>; else goto <D.23379>;
  <D.23379>:
  D.23380 = value->type;
  D.23381 = D.23380->type;
  if (D.23381 == 27) goto <D.23370>; else goto <D.23371>;
  <D.23370>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.23382 = ctx->ip_offset;
    D.23383 = stack_slot_get_name (value);
    D.23384 = monoeg_g_strdup_printf ("Invalid argument %s to ldobj at 0x%04x", D.23383, D.23382);
    vinfo->info.message = D.23384;
    vinfo->exception_type = 3;
    D.23385 = ctx->list;
    D.23386 = monoeg_g_slist_prepend (D.23385, vinfo);
    ctx->list = D.23386;
  }
  ctx->valid = 0;
  return;
  <D.23371>:
  <D.23377>:
  <D.23374>:
  D.23387 = stack_slot_get_type (value);
  if (D.23387 == 3) goto <D.23388>; else goto <D.23389>;
  <D.23388>:
  D.23392 = ctx->verifiable;
  if (D.23392 != 0) goto <D.23390>; else goto <D.23393>;
  <D.23393>:
  D.23394 = ctx->level;
  D.23395 = D.23394 & 128;
  if (D.23395 != 0) goto <D.23390>; else goto <D.23391>;
  <D.23390>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23382 = ctx->ip_offset;
    D.23396 = monoeg_g_strdup_printf ("Using native pointer to ldobj at 0x%04x", D.23382);
    vinfo->info.message = D.23396;
    vinfo->exception_type = 4;
    D.23385 = ctx->list;
    D.23397 = monoeg_g_slist_prepend (D.23385, vinfo);
    ctx->list = D.23397;
  }
  ctx->verifiable = 0;
  D.23394 = ctx->level;
  D.23398 = D.23394 & 16;
  if (D.23398 != 0) goto <D.23399>; else goto <D.23400>;
  <D.23399>:
  ctx->valid = 0;
  <D.23400>:
  <D.23391>:
  <D.23389>:
  D.23380 = value->type;
  D.23401 = mono_type_get_type_byval (D.23380);
  D.23402 = verify_type_compatibility_full (ctx, type, D.23401, 1);
  if (D.23402 == 0) goto <D.23403>; else goto <D.23404>;
  <D.23403>:
  D.23392 = ctx->verifiable;
  if (D.23392 != 0) goto <D.23405>; else goto <D.23407>;
  <D.23407>:
  D.23394 = ctx->level;
  D.23395 = D.23394 & 128;
  if (D.23395 != 0) goto <D.23405>; else goto <D.23406>;
  <D.23405>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23382 = ctx->ip_offset;
    D.23408 = monoeg_g_strdup_printf ("Invalid type at stack for ldojb operation at 0x%04x", D.23382);
    vinfo->info.message = D.23408;
    vinfo->exception_type = 4;
    D.23385 = ctx->list;
    D.23409 = monoeg_g_slist_prepend (D.23385, vinfo);
    ctx->list = D.23409;
  }
  ctx->verifiable = 0;
  D.23394 = ctx->level;
  D.23398 = D.23394 & 16;
  if (D.23398 != 0) goto <D.23410>; else goto <D.23411>;
  <D.23410>:
  ctx->valid = 0;
  <D.23411>:
  <D.23406>:
  <D.23404>:
  D.23412 = stack_push (ctx);
  set_stack_value (ctx, D.23412, type, 0);
}


do_ldstr (struct VerifyContext * ctx, guint32 token)
{
  struct MonoMethod * D.23414;
  unsigned char D.23415;
  unsigned char D.23416;
  struct MonoImage * D.23419;
  unsigned char D.23420;
  unsigned char D.23421;
  unsigned int D.23424;
  unsigned int D.23427;
  gchar * D.23428;
  struct GSList * D.23429;
  struct GSList * D.23430;
  unsigned int D.23431;
  int D.23432;
  struct GSList * error.95;
  struct GSList * D.23438;
  gchar * D.23439;
  struct GSList * D.23440;
  int D.23441;
  struct MonoClass * D.23444;
  struct MonoType * D.23445;
  struct GSList * error;

  try
    {
      error = 0B;
      D.23414 = ctx->method;
      D.23415 = BIT_FIELD_REF <*D.23414, 8, 160>;
      D.23416 = D.23415 & 124;
      if (D.23416 == 0) goto <D.23417>; else goto <D.23418>;
      <D.23417>:
      D.23419 = ctx->image;
      D.23420 = BIT_FIELD_REF <*D.23419, 8, 128>;
      D.23421 = D.23420 & 8;
      if (D.23421 == 0) goto <D.23422>; else goto <D.23423>;
      <D.23422>:
      D.23424 = token & 4278190080;
      if (D.23424 != 1879048192) goto <D.23425>; else goto <D.23426>;
      <D.23425>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.23427 = ctx->ip_offset;
        D.23428 = monoeg_g_strdup_printf ("Invalid string token %x at 0x%04x", token, D.23427);
        vinfo->info.message = D.23428;
        vinfo->exception_type = 12;
        D.23429 = ctx->list;
        D.23430 = monoeg_g_slist_prepend (D.23429, vinfo);
        ctx->list = D.23430;
      }
      ctx->valid = 0;
      return;
      <D.23426>:
      D.23431 = token & 16777215;
      D.23419 = ctx->image;
      D.23432 = mono_verifier_verify_string_signature (D.23419, D.23431, &error);
      if (D.23432 == 0) goto <D.23433>; else goto <D.23434>;
      <D.23433>:
      error.95 = error;
      if (error.95 != 0B) goto <D.23436>; else goto <D.23437>;
      <D.23436>:
      error.95 = error;
      D.23429 = ctx->list;
      D.23438 = monoeg_g_slist_concat (D.23429, error.95);
      ctx->list = D.23438;
      <D.23437>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.23427 = ctx->ip_offset;
        D.23439 = monoeg_g_strdup_printf ("Invalid string index %x at 0x%04x", token, D.23427);
        vinfo->info.message = D.23439;
        vinfo->exception_type = 12;
        D.23429 = ctx->list;
        D.23440 = monoeg_g_slist_prepend (D.23429, vinfo);
        ctx->list = D.23440;
      }
      ctx->valid = 0;
      return;
      <D.23434>:
      <D.23423>:
      <D.23418>:
      D.23441 = check_overflow (ctx);
      if (D.23441 != 0) goto <D.23442>; else goto <D.23443>;
      <D.23442>:
      D.23444 = mono_defaults.string_class;
      D.23445 = &D.23444->byval_arg;
      stack_push_val (ctx, 6, D.23445);
      <D.23443>:
    }
  finally
    {
      error = {CLOBBER};
    }
}


do_newobj (struct VerifyContext * ctx, int token)
{
  int D.23451;
  unsigned int D.23454;
  gchar * D.23455;
  struct GSList * D.23456;
  struct GSList * D.23457;
  struct MonoClass * D.23458;
  unsigned int D.23459;
  unsigned int D.23460;
  int D.23465;
  int D.23467;
  int D.23468;
  gchar * D.23469;
  struct GSList * D.23470;
  int D.23471;
  int D.23474;
  struct MonoMethod * D.23477;
  int D.23478;
  gchar * D.23484;
  struct GSList * D.23485;
  gchar * D.23490;
  struct GSList * D.23491;
  unsigned char D.23492;
  unsigned char D.23493;
  gchar * D.23496;
  struct GSList * D.23497;
  short unsigned int D.23498;
  int D.23499;
  int D.23500;
  struct MonoClass * D.23503;
  struct MonoClass * D.23504;
  _Bool D.23505;
  gchar * D.23510;
  struct GSList * D.23511;
  struct MonoType * D.23513;
  int D.23514;
  gchar * D.23520;
  struct GSList * D.23521;
  int D.23524;
  gchar * D.23530;
  struct GSList * D.23531;
  int D.23534;
  struct MonoType * D.23537;
  struct ILStackDesc * D.23538;
  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.23449>; else goto <D.23450>;
  <D.23449>:
  return;
  <D.23450>:
  D.23451 = mono_method_is_constructor (method);
  if (D.23451 == 0) goto <D.23452>; else goto <D.23453>;
  <D.23452>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.23454 = ctx->ip_offset;
    D.23455 = monoeg_g_strdup_printf ("Method from token 0x%08x not a constructor at 0x%04x", token, D.23454);
    vinfo->info.message = D.23455;
    vinfo->exception_type = 3;
    D.23456 = ctx->list;
    D.23457 = monoeg_g_slist_prepend (D.23456, vinfo);
    ctx->list = D.23457;
  }
  ctx->valid = 0;
  return;
  <D.23453>:
  D.23458 = method->klass;
  D.23459 = D.23458->flags;
  D.23460 = D.23459 & 160;
  if (D.23460 != 0) goto <D.23461>; else goto <D.23462>;
  <D.23461>:
  D.23465 = ctx->verifiable;
  if (D.23465 != 0) goto <D.23463>; else goto <D.23466>;
  <D.23466>:
  D.23467 = ctx->level;
  D.23468 = D.23467 & 128;
  if (D.23468 != 0) goto <D.23463>; else goto <D.23464>;
  <D.23463>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23454 = ctx->ip_offset;
    D.23469 = monoeg_g_strdup_printf ("Trying to instantiate an abstract or interface type at 0x%04x", D.23454);
    vinfo->info.message = D.23469;
    vinfo->exception_type = 4;
    D.23456 = ctx->list;
    D.23470 = monoeg_g_slist_prepend (D.23456, vinfo);
    ctx->list = D.23470;
  }
  ctx->verifiable = 0;
  D.23467 = ctx->level;
  D.23471 = D.23467 & 16;
  if (D.23471 != 0) goto <D.23472>; else goto <D.23473>;
  <D.23472>:
  ctx->valid = 0;
  <D.23473>:
  <D.23464>:
  <D.23462>:
  D.23467 = ctx->level;
  D.23474 = D.23467 & 64;
  if (D.23474 == 0) goto <D.23475>; else goto <D.23476>;
  <D.23475>:
  D.23477 = ctx->method;
  D.23478 = mono_method_can_access_method_full (D.23477, method, 0B);
  if (D.23478 == 0) goto <D.23479>; else goto <D.23480>;
  <D.23479>:
  {
    char * from;
    char * to;

    D.23477 = ctx->method;
    from = mono_method_full_name (D.23477, 1);
    to = mono_method_full_name (method, 1);
    D.23465 = ctx->verifiable;
    if (D.23465 != 0) goto <D.23481>; else goto <D.23483>;
    <D.23483>:
    D.23467 = ctx->level;
    D.23468 = D.23467 & 128;
    if (D.23468 != 0) goto <D.23481>; else goto <D.23482>;
    <D.23481>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.23454 = ctx->ip_offset;
      D.23484 = monoeg_g_strdup_printf ("Constructor %s not visible from %s at 0x%04x", to, from, D.23454);
      vinfo->info.message = D.23484;
      vinfo->exception_type = 9;
      D.23456 = ctx->list;
      D.23485 = monoeg_g_slist_prepend (D.23456, vinfo);
      ctx->list = D.23485;
    }
    ctx->verifiable = 0;
    D.23467 = ctx->level;
    D.23471 = D.23467 & 16;
    if (D.23471 != 0) goto <D.23486>; else goto <D.23487>;
    <D.23486>:
    ctx->valid = 0;
    <D.23487>:
    <D.23482>:
    monoeg_g_free (from);
    monoeg_g_free (to);
  }
  <D.23480>:
  <D.23476>:
  sig = mono_method_signature (method);
  if (sig == 0B) goto <D.23488>; else goto <D.23489>;
  <D.23488>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.23454 = ctx->ip_offset;
    D.23490 = monoeg_g_strdup_printf ("Invalid constructor signature to newobj at 0x%04x", D.23454);
    vinfo->info.message = D.23490;
    vinfo->exception_type = 3;
    D.23456 = ctx->list;
    D.23491 = monoeg_g_slist_prepend (D.23456, vinfo);
    ctx->list = D.23491;
  }
  ctx->valid = 0;
  return;
  <D.23489>:
  D.23492 = BIT_FIELD_REF <*sig, 8, 80>;
  D.23493 = D.23492 & 64;
  if (D.23493 == 0) goto <D.23494>; else goto <D.23495>;
  <D.23494>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.23454 = ctx->ip_offset;
    D.23496 = monoeg_g_strdup_printf ("Invalid constructor signature missing hasthis at 0x%04x", D.23454);
    vinfo->info.message = D.23496;
    vinfo->exception_type = 3;
    D.23456 = ctx->list;
    D.23497 = monoeg_g_slist_prepend (D.23456, vinfo);
    ctx->list = D.23497;
  }
  ctx->valid = 0;
  return;
  <D.23495>:
  D.23498 = sig->param_count;
  D.23499 = (int) D.23498;
  D.23500 = check_underflow (ctx, D.23499);
  if (D.23500 == 0) goto <D.23501>; else goto <D.23502>;
  <D.23501>:
  return;
  <D.23502>:
  D.23458 = method->klass;
  D.23503 = D.23458->parent;
  D.23504 = mono_defaults.multicastdelegate_class;
  D.23505 = D.23503 == D.23504;
  is_delegate = (gboolean) D.23505;
  if (is_delegate != 0) goto <D.23506>; else goto <D.23507>;
  <D.23506>:
  {
    struct ILStackDesc * funptr;

    D.23498 = sig->param_count;
    if (D.23498 != 2) goto <D.23508>; else goto <D.23509>;
    <D.23508>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 1;
      D.23454 = ctx->ip_offset;
      D.23510 = monoeg_g_strdup_printf ("Invalid delegate constructor at 0x%04x", D.23454);
      vinfo->info.message = D.23510;
      vinfo->exception_type = 3;
      D.23456 = ctx->list;
      D.23511 = monoeg_g_slist_prepend (D.23456, vinfo);
      ctx->list = D.23511;
    }
    ctx->valid = 0;
    return;
    <D.23509>:
    funptr = stack_pop (ctx);
    value = stack_pop (ctx);
    D.23458 = method->klass;
    verify_delegate_compatibility (ctx, D.23458, value, funptr);
  }
  goto <D.23512>;
  <D.23507>:
  D.23498 = sig->param_count;
  D.23499 = (int) D.23498;
  i = D.23499 + -1;
  goto <D.18708>;
  <D.18707>:
  value = stack_pop (ctx);
  D.23513 = sig->params[i];
  D.23514 = verify_stack_type_compatibility (ctx, D.23513, value);
  if (D.23514 == 0) goto <D.23515>; else goto <D.23516>;
  <D.23515>:
  {
    char * stack_name;
    char * sig_name;

    stack_name = stack_slot_full_name (value);
    D.23513 = sig->params[i];
    sig_name = mono_type_full_name (D.23513);
    D.23465 = ctx->verifiable;
    if (D.23465 != 0) goto <D.23517>; else goto <D.23519>;
    <D.23519>:
    D.23467 = ctx->level;
    D.23468 = D.23467 & 128;
    if (D.23468 != 0) goto <D.23517>; else goto <D.23518>;
    <D.23517>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.23454 = ctx->ip_offset;
      D.23520 = monoeg_g_strdup_printf ("Incompatible parameter value with constructor signature: %s X %s at 0x%04x", sig_name, stack_name, D.23454);
      vinfo->info.message = D.23520;
      vinfo->exception_type = 4;
      D.23456 = ctx->list;
      D.23521 = monoeg_g_slist_prepend (D.23456, vinfo);
      ctx->list = D.23521;
    }
    ctx->verifiable = 0;
    D.23467 = ctx->level;
    D.23471 = D.23467 & 16;
    if (D.23471 != 0) goto <D.23522>; else goto <D.23523>;
    <D.23522>:
    ctx->valid = 0;
    <D.23523>:
    <D.23518>:
    monoeg_g_free (stack_name);
    monoeg_g_free (sig_name);
  }
  <D.23516>:
  D.23524 = stack_slot_is_managed_mutability_pointer (value);
  if (D.23524 != 0) goto <D.23525>; else goto <D.23526>;
  <D.23525>:
  D.23465 = ctx->verifiable;
  if (D.23465 != 0) goto <D.23527>; else goto <D.23529>;
  <D.23529>:
  D.23467 = ctx->level;
  D.23468 = D.23467 & 128;
  if (D.23468 != 0) goto <D.23527>; else goto <D.23528>;
  <D.23527>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23454 = ctx->ip_offset;
    D.23530 = monoeg_g_strdup_printf ("Cannot use a readonly pointer as argument of newobj at 0x%04x", D.23454);
    vinfo->info.message = D.23530;
    vinfo->exception_type = 4;
    D.23456 = ctx->list;
    D.23531 = monoeg_g_slist_prepend (D.23456, vinfo);
    ctx->list = D.23531;
  }
  ctx->verifiable = 0;
  D.23467 = ctx->level;
  D.23471 = D.23467 & 16;
  if (D.23471 != 0) goto <D.23532>; else goto <D.23533>;
  <D.23532>:
  ctx->valid = 0;
  <D.23533>:
  <D.23528>:
  <D.23526>:
  i = i + -1;
  <D.18708>:
  if (i >= 0) goto <D.18707>; else goto <D.18709>;
  <D.18709>:
  <D.23512>:
  D.23534 = check_overflow (ctx);
  if (D.23534 != 0) goto <D.23535>; else goto <D.23536>;
  <D.23535>:
  D.23458 = method->klass;
  D.23537 = &D.23458->byval_arg;
  D.23538 = stack_push (ctx);
  set_stack_value (ctx, D.23538, D.23537, 0);
  <D.23536>:
}


verify_delegate_compatibility (struct VerifyContext * ctx, struct MonoClass * delegate, struct ILStackDesc * value, struct ILStackDesc * funptr)
{
  struct MonoMethodHeader * D.23540;
  int D.23543;
  struct MonoMethod * D.23545;
  int D.23548;
  int D.23550;
  int D.23551;
  unsigned int D.23552;
  gchar * D.23553;
  struct GSList * D.23554;
  struct GSList * D.23555;
  int D.23556;
  struct MonoMethodSignature * D.23562;
  gchar * D.23563;
  struct GSList * D.23564;
  struct MonoMethodSignature * D.23568;
  gchar * D.23569;
  struct GSList * D.23570;
  int iftmp.96;
  sizetype D.23575;
  const guint8 * D.23576;
  unsigned char D.23577;
  struct ILCodeDesc * D.23579;
  unsigned int D.23580;
  sizetype D.23581;
  struct ILCodeDesc * D.23582;
  short unsigned int D.23583;
  int D.23584;
  int D.23585;
  sizetype D.23587;
  const guint8 * D.23588;
  unsigned char D.23589;
  short unsigned int D.23591;
  int D.23592;
  int D.23593;
  struct MonoMethodSignature * D.23597;
  short unsigned int D.23598;
  int D.23599;
  int D.23600;
  struct MonoMethodSignature * D.23601;
  short unsigned int D.23602;
  int D.23603;
  _Bool D.23604;
  struct MonoMethodSignature * D.23605;
  struct MonoMethodSignature * D.23606;
  int D.23607;
  struct MonoMethodSignature * D.23610;
  struct MonoMethodSignature * D.23611;
  gchar * D.23615;
  struct GSList * D.23616;
  sizetype D.23628;
  const guint8 * D.23629;
  unsigned char D.23630;
  sizetype D.23632;
  struct ILCodeDesc * D.23633;
  short unsigned int D.23634;
  int D.23635;
  int D.23636;
  short unsigned int D.23641;
  gchar * D.23645;
  struct GSList * D.23646;
  struct ILCodeDesc * D.23649;
  short unsigned int D.23650;
  short unsigned int D.23651;
  struct MonoMethodSignature * D.23656;
  short unsigned int D.23657;
  struct MonoMethodSignature * D.23659;
  struct MonoType * D.23660;
  int D.23661;
  gchar * D.23665;
  struct GSList * D.23666;
  int D.23672;
  gchar * D.23680;
  struct GSList * D.23681;
  struct MonoClass * D.23685;
  struct MonoType * D.23686;
  int D.23687;
  int D.23690;
  gchar * D.23696;
  struct GSList * D.23697;
  int D.23700;
  gchar * D.23706;
  struct GSList * D.23707;
  struct MonoMethod * invoke;
  struct MonoMethod * method;
  const guint8 * ip;
  guint32 ip_offset;
  gboolean is_static_ldftn;
  gboolean is_first_arg_bound;

  D.23540 = ctx->header;
  ip = D.23540->code;
  ip_offset = ctx->ip_offset;
  is_static_ldftn = 0;
  is_first_arg_bound = 0;
  D.23543 = stack_slot_get_type (funptr);
  if (D.23543 != 5) goto <D.23541>; else goto <D.23544>;
  <D.23544>:
  D.23545 = funptr->method;
  if (D.23545 == 0B) goto <D.23541>; else goto <D.23542>;
  <D.23541>:
  D.23548 = ctx->verifiable;
  if (D.23548 != 0) goto <D.23546>; else goto <D.23549>;
  <D.23549>:
  D.23550 = ctx->level;
  D.23551 = D.23550 & 128;
  if (D.23551 != 0) goto <D.23546>; else goto <D.23547>;
  <D.23546>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23552 = ctx->ip_offset;
    D.23553 = monoeg_g_strdup_printf ("Invalid function pointer parameter for delegate constructor at 0x%04x", D.23552);
    vinfo->info.message = D.23553;
    vinfo->exception_type = 4;
    D.23554 = ctx->list;
    D.23555 = monoeg_g_slist_prepend (D.23554, vinfo);
    ctx->list = D.23555;
  }
  ctx->verifiable = 0;
  D.23550 = ctx->level;
  D.23556 = D.23550 & 16;
  if (D.23556 != 0) goto <D.23557>; else goto <D.23558>;
  <D.23557>:
  ctx->valid = 0;
  <D.23558>:
  <D.23547>:
  return;
  <D.23542>:
  invoke = mono_get_delegate_invoke (delegate);
  method = funptr->method;
  if (method == 0B) goto <D.23559>; else goto <D.23561>;
  <D.23561>:
  D.23562 = mono_method_signature (method);
  if (D.23562 == 0B) goto <D.23559>; else goto <D.23560>;
  <D.23559>:
  {
    char * name;

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

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 1;
      D.23552 = ctx->ip_offset;
      D.23563 = monoeg_g_strdup_printf ("Invalid method on stack to create delegate %s construction at 0x%04x", name, D.23552);
      vinfo->info.message = D.23563;
      vinfo->exception_type = 3;
      D.23554 = ctx->list;
      D.23564 = monoeg_g_slist_prepend (D.23554, vinfo);
      ctx->list = D.23564;
    }
    ctx->valid = 0;
    monoeg_g_free (name);
    return;
  }
  <D.23560>:
  if (invoke == 0B) goto <D.23565>; else goto <D.23567>;
  <D.23567>:
  D.23568 = mono_method_signature (invoke);
  if (D.23568 == 0B) goto <D.23565>; else goto <D.23566>;
  <D.23565>:
  {
    char * name;

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

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 1;
      D.23552 = ctx->ip_offset;
      D.23569 = monoeg_g_strdup_printf ("Delegate type %s with bad Invoke method at 0x%04x", name, D.23552);
      vinfo->info.message = D.23569;
      vinfo->exception_type = 3;
      D.23554 = ctx->list;
      D.23570 = monoeg_g_slist_prepend (D.23554, vinfo);
      ctx->list = D.23570;
    }
    ctx->valid = 0;
    monoeg_g_free (name);
    return;
  }
  <D.23566>:
  if (ip_offset > 5) goto <D.23574>; else goto <D.23572>;
  <D.23574>:
  D.23575 = ip_offset + 4294967290;
  D.23576 = ip + D.23575;
  D.23577 = *D.23576;
  if (D.23577 == 254) goto <D.23578>; else goto <D.23572>;
  <D.23578>:
  D.23579 = ctx->code;
  D.23580 = ip_offset * 12;
  D.23581 = D.23580 + 4294967224;
  D.23582 = D.23579 + D.23581;
  D.23583 = D.23582->flags;
  D.23584 = (int) D.23583;
  D.23585 = D.23584 & 1;
  if (D.23585 != 0) goto <D.23586>; else goto <D.23572>;
  <D.23586>:
  D.23587 = ip_offset + 4294967291;
  D.23588 = ip + D.23587;
  D.23589 = *D.23588;
  if (D.23589 == 6) goto <D.23590>; else goto <D.23572>;
  <D.23590>:
  D.23591 = method->flags;
  D.23592 = (int) D.23591;
  D.23593 = D.23592 & 16;
  if (D.23593 != 0) goto <D.23594>; else goto <D.23572>;
  <D.23594>:
  iftmp.96 = 1;
  goto <D.23573>;
  <D.23572>:
  iftmp.96 = 0;
  <D.23573>:
  is_static_ldftn = iftmp.96;
  if (is_static_ldftn != 0) goto <D.23595>; else goto <D.23596>;
  <D.23595>:
  D.23597 = mono_method_signature (invoke);
  D.23598 = D.23597->param_count;
  D.23599 = (int) D.23598;
  D.23600 = D.23599 + 1;
  D.23601 = mono_method_signature (method);
  D.23602 = D.23601->param_count;
  D.23603 = (int) D.23602;
  D.23604 = D.23600 == D.23603;
  is_first_arg_bound = (gboolean) D.23604;
  <D.23596>:
  D.23605 = mono_method_signature (method);
  D.23606 = mono_method_signature (invoke);
  D.23607 = mono_delegate_signature_equal (D.23606, D.23605, is_first_arg_bound);
  if (D.23607 == 0) goto <D.23608>; else goto <D.23609>;
  <D.23608>:
  {
    char * fun_sig;
    char * invoke_sig;

    D.23610 = mono_method_signature (method);
    fun_sig = mono_signature_get_desc (D.23610, 0);
    D.23611 = mono_method_signature (invoke);
    invoke_sig = mono_signature_get_desc (D.23611, 0);
    D.23548 = ctx->verifiable;
    if (D.23548 != 0) goto <D.23612>; else goto <D.23614>;
    <D.23614>:
    D.23550 = ctx->level;
    D.23551 = D.23550 & 128;
    if (D.23551 != 0) goto <D.23612>; else goto <D.23613>;
    <D.23612>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.23552 = ctx->ip_offset;
      D.23615 = monoeg_g_strdup_printf ("Function pointer signature \'%s\' doesn\'t match delegate\'s signature \'%s\' at 0x%04x", fun_sig, invoke_sig, D.23552);
      vinfo->info.message = D.23615;
      vinfo->exception_type = 4;
      D.23554 = ctx->list;
      D.23616 = monoeg_g_slist_prepend (D.23554, vinfo);
      ctx->list = D.23616;
    }
    ctx->verifiable = 0;
    D.23550 = ctx->level;
    D.23556 = D.23550 & 16;
    if (D.23556 != 0) goto <D.23617>; else goto <D.23618>;
    <D.23617>:
    ctx->valid = 0;
    <D.23618>:
    <D.23613>:
    monoeg_g_free (fun_sig);
    monoeg_g_free (invoke_sig);
  }
  <D.23609>:
  if (ip_offset > 5) goto <D.23621>; else goto <D.23619>;
  <D.23621>:
  D.23575 = ip_offset + 4294967290;
  D.23576 = ip + D.23575;
  D.23577 = *D.23576;
  if (D.23577 == 254) goto <D.23622>; else goto <D.23619>;
  <D.23622>:
  D.23579 = ctx->code;
  D.23580 = ip_offset * 12;
  D.23581 = D.23580 + 4294967224;
  D.23582 = D.23579 + D.23581;
  D.23583 = D.23582->flags;
  D.23584 = (int) D.23583;
  D.23585 = D.23584 & 1;
  if (D.23585 != 0) goto <D.23623>; else goto <D.23619>;
  <D.23623>:
  D.23587 = ip_offset + 4294967291;
  D.23588 = ip + D.23587;
  D.23589 = *D.23588;
  if (D.23589 == 6) goto <D.23624>; else goto <D.23619>;
  <D.23624>:
  verify_ldftn_delegate (ctx, delegate, value, funptr);
  goto <D.23620>;
  <D.23619>:
  if (ip_offset > 6) goto <D.23627>; else goto <D.23625>;
  <D.23627>:
  D.23628 = ip_offset + 4294967289;
  D.23629 = ip + D.23628;
  D.23630 = *D.23629;
  if (D.23630 == 37) goto <D.23631>; else goto <D.23625>;
  <D.23631>:
  D.23579 = ctx->code;
  D.23580 = ip_offset * 12;
  D.23632 = D.23580 + 4294967212;
  D.23633 = D.23579 + D.23632;
  D.23634 = D.23633->flags;
  D.23635 = (int) D.23634;
  D.23636 = D.23635 & 1;
  if (D.23636 != 0) goto <D.23637>; else goto <D.23625>;
  <D.23637>:
  D.23575 = ip_offset + 4294967290;
  D.23576 = ip + D.23575;
  D.23577 = *D.23576;
  if (D.23577 == 254) goto <D.23638>; else goto <D.23625>;
  <D.23638>:
  D.23579 = ctx->code;
  D.23580 = ip_offset * 12;
  D.23581 = D.23580 + 4294967224;
  D.23582 = D.23579 + D.23581;
  D.23583 = D.23582->flags;
  D.23584 = (int) D.23583;
  D.23585 = D.23584 & 1;
  if (D.23585 != 0) goto <D.23639>; else goto <D.23625>;
  <D.23639>:
  D.23587 = ip_offset + 4294967291;
  D.23588 = ip + D.23587;
  D.23589 = *D.23588;
  if (D.23589 == 7) goto <D.23640>; else goto <D.23625>;
  <D.23640>:
  D.23579 = ctx->code;
  D.23580 = ip_offset * 12;
  D.23581 = D.23580 + 4294967224;
  D.23582 = D.23579 + D.23581;
  D.23579 = ctx->code;
  D.23580 = ip_offset * 12;
  D.23581 = D.23580 + 4294967224;
  D.23582 = D.23579 + D.23581;
  D.23583 = D.23582->flags;
  D.23641 = D.23583 | 16;
  D.23582->flags = D.23641;
  goto <D.23626>;
  <D.23625>:
  D.23548 = ctx->verifiable;
  if (D.23548 != 0) goto <D.23642>; else goto <D.23644>;
  <D.23644>:
  D.23550 = ctx->level;
  D.23551 = D.23550 & 128;
  if (D.23551 != 0) goto <D.23642>; else goto <D.23643>;
  <D.23642>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23552 = ctx->ip_offset;
    D.23645 = monoeg_g_strdup_printf ("Invalid code sequence for delegate creation at 0x%04x", D.23552);
    vinfo->info.message = D.23645;
    vinfo->exception_type = 4;
    D.23554 = ctx->list;
    D.23646 = monoeg_g_slist_prepend (D.23554, vinfo);
    ctx->list = D.23646;
  }
  ctx->verifiable = 0;
  D.23550 = ctx->level;
  D.23556 = D.23550 & 16;
  if (D.23556 != 0) goto <D.23647>; else goto <D.23648>;
  <D.23647>:
  ctx->valid = 0;
  <D.23648>:
  <D.23643>:
  <D.23626>:
  <D.23620>:
  D.23579 = ctx->code;
  D.23580 = ip_offset * 12;
  D.23649 = D.23579 + D.23580;
  D.23579 = ctx->code;
  D.23580 = ip_offset * 12;
  D.23649 = D.23579 + D.23580;
  D.23650 = D.23649->flags;
  D.23651 = D.23650 | 16;
  D.23649->flags = D.23651;
  if (is_first_arg_bound != 0) goto <D.23652>; else goto <D.23653>;
  <D.23652>:
  D.23656 = mono_method_signature (method);
  D.23657 = D.23656->param_count;
  if (D.23657 == 0) goto <D.23654>; else goto <D.23658>;
  <D.23658>:
  D.23659 = mono_method_signature (method);
  D.23660 = D.23659->params[0];
  D.23661 = verify_stack_type_compatibility_full (ctx, D.23660, value, 0, 1);
  if (D.23661 == 0) goto <D.23654>; else goto <D.23655>;
  <D.23654>:
  D.23548 = ctx->verifiable;
  if (D.23548 != 0) goto <D.23662>; else goto <D.23664>;
  <D.23664>:
  D.23550 = ctx->level;
  D.23551 = D.23550 & 128;
  if (D.23551 != 0) goto <D.23662>; else goto <D.23663>;
  <D.23662>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23552 = ctx->ip_offset;
    D.23665 = monoeg_g_strdup_printf ("This object not compatible with function pointer for delegate creation at 0x%04x", D.23552);
    vinfo->info.message = D.23665;
    vinfo->exception_type = 4;
    D.23554 = ctx->list;
    D.23666 = monoeg_g_slist_prepend (D.23554, vinfo);
    ctx->list = D.23666;
  }
  ctx->verifiable = 0;
  D.23550 = ctx->level;
  D.23556 = D.23550 & 16;
  if (D.23556 != 0) goto <D.23667>; else goto <D.23668>;
  <D.23667>:
  ctx->valid = 0;
  <D.23668>:
  <D.23663>:
  <D.23655>:
  goto <D.23669>;
  <D.23653>:
  D.23591 = method->flags;
  D.23592 = (int) D.23591;
  D.23593 = D.23592 & 16;
  if (D.23593 != 0) goto <D.23670>; else goto <D.23671>;
  <D.23670>:
  D.23672 = stack_slot_is_null_literal (value);
  if (D.23672 == 0) goto <D.23673>; else goto <D.23674>;
  <D.23673>:
  if (is_first_arg_bound == 0) goto <D.23675>; else goto <D.23676>;
  <D.23675>:
  D.23548 = ctx->verifiable;
  if (D.23548 != 0) goto <D.23677>; else goto <D.23679>;
  <D.23679>:
  D.23550 = ctx->level;
  D.23551 = D.23550 & 128;
  if (D.23551 != 0) goto <D.23677>; else goto <D.23678>;
  <D.23677>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23552 = ctx->ip_offset;
    D.23680 = monoeg_g_strdup_printf ("Non-null this args used with static function for delegate creation at 0x%04x", D.23552);
    vinfo->info.message = D.23680;
    vinfo->exception_type = 4;
    D.23554 = ctx->list;
    D.23681 = monoeg_g_slist_prepend (D.23554, vinfo);
    ctx->list = D.23681;
  }
  ctx->verifiable = 0;
  D.23550 = ctx->level;
  D.23556 = D.23550 & 16;
  if (D.23556 != 0) goto <D.23682>; else goto <D.23683>;
  <D.23682>:
  ctx->valid = 0;
  <D.23683>:
  <D.23678>:
  <D.23676>:
  <D.23674>:
  goto <D.23684>;
  <D.23671>:
  D.23685 = method->klass;
  D.23686 = &D.23685->byval_arg;
  D.23687 = verify_stack_type_compatibility_full (ctx, D.23686, value, 0, 1);
  if (D.23687 == 0) goto <D.23688>; else goto <D.23689>;
  <D.23688>:
  D.23690 = stack_slot_is_null_literal (value);
  if (D.23690 == 0) goto <D.23691>; else goto <D.23692>;
  <D.23691>:
  D.23548 = ctx->verifiable;
  if (D.23548 != 0) goto <D.23693>; else goto <D.23695>;
  <D.23695>:
  D.23550 = ctx->level;
  D.23551 = D.23550 & 128;
  if (D.23551 != 0) goto <D.23693>; else goto <D.23694>;
  <D.23693>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23552 = ctx->ip_offset;
    D.23696 = monoeg_g_strdup_printf ("This object not compatible with function pointer for delegate creation at 0x%04x", D.23552);
    vinfo->info.message = D.23696;
    vinfo->exception_type = 4;
    D.23554 = ctx->list;
    D.23697 = monoeg_g_slist_prepend (D.23554, vinfo);
    ctx->list = D.23697;
  }
  ctx->verifiable = 0;
  D.23550 = ctx->level;
  D.23556 = D.23550 & 16;
  if (D.23556 != 0) goto <D.23698>; else goto <D.23699>;
  <D.23698>:
  ctx->valid = 0;
  <D.23699>:
  <D.23694>:
  <D.23692>:
  <D.23689>:
  <D.23684>:
  <D.23669>:
  D.23700 = stack_slot_get_type (value);
  if (D.23700 != 6) goto <D.23701>; else goto <D.23702>;
  <D.23701>:
  D.23548 = ctx->verifiable;
  if (D.23548 != 0) goto <D.23703>; else goto <D.23705>;
  <D.23705>:
  D.23550 = ctx->level;
  D.23551 = D.23550 & 128;
  if (D.23551 != 0) goto <D.23703>; else goto <D.23704>;
  <D.23703>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23552 = ctx->ip_offset;
    D.23706 = monoeg_g_strdup_printf ("Invalid first parameter for delegate creation at 0x%04x", D.23552);
    vinfo->info.message = D.23706;
    vinfo->exception_type = 4;
    D.23554 = ctx->list;
    D.23707 = monoeg_g_slist_prepend (D.23554, vinfo);
    ctx->list = D.23707;
  }
  ctx->verifiable = 0;
  D.23550 = ctx->level;
  D.23556 = D.23550 & 16;
  if (D.23556 != 0) goto <D.23708>; else goto <D.23709>;
  <D.23708>:
  ctx->valid = 0;
  <D.23709>:
  <D.23704>:
  <D.23702>:
}


verify_ldftn_delegate (struct VerifyContext * ctx, struct MonoClass * delegate, struct ILStackDesc * value, struct ILStackDesc * funptr)
{
  short unsigned int D.23711;
  unsigned int D.23712;
  unsigned int D.23713;
  struct MonoClass * D.23716;
  unsigned int D.23717;
  unsigned int D.23718;
  int D.23721;
  int D.23724;
  int D.23725;
  int D.23728;
  int D.23733;
  int D.23735;
  unsigned int D.23736;
  gchar * D.23737;
  struct GSList * D.23738;
  struct GSList * D.23739;
  struct MonoMethod * D.23742;
  short unsigned int D.23743;
  int D.23744;
  int D.23745;
  gchar * D.23751;
  struct GSList * D.23752;
  int D.23755;
  gchar * D.23761;
  struct GSList * D.23762;
  struct ILCodeDesc * D.23765;
  unsigned int D.23766;
  struct ILCodeDesc * D.23767;
  short unsigned int D.23768;
  short unsigned int D.23769;
  struct MonoMethod * method;

  method = funptr->method;
  D.23711 = method->flags;
  D.23712 = (unsigned int) D.23711;
  D.23713 = D.23712 & 96;
  if (D.23713 == 64) goto <D.23714>; else goto <D.23715>;
  <D.23714>:
  D.23716 = method->klass;
  D.23717 = D.23716->flags;
  D.23718 = D.23717 & 256;
  if (D.23718 == 0) goto <D.23719>; else goto <D.23720>;
  <D.23719>:
  D.23721 = stack_slot_is_boxed_value (value);
  if (D.23721 == 0) goto <D.23722>; else goto <D.23723>;
  <D.23722>:
  D.23724 = ctx->level;
  D.23725 = D.23724 & 16;
  if (D.23725 != 0) goto <D.23726>; else goto <D.23727>;
  <D.23726>:
  D.23728 = ctx->has_this_store;
  if (D.23728 != 0) goto <D.23729>; else goto <D.23730>;
  <D.23729>:
  D.23733 = ctx->verifiable;
  if (D.23733 != 0) goto <D.23731>; else goto <D.23734>;
  <D.23734>:
  D.23724 = ctx->level;
  D.23735 = D.23724 & 128;
  if (D.23735 != 0) goto <D.23731>; else goto <D.23732>;
  <D.23731>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23736 = ctx->ip_offset;
    D.23737 = monoeg_g_strdup_printf ("Invalid ldftn with virtual function in method with stdarg 0 at  0x%04x", D.23736);
    vinfo->info.message = D.23737;
    vinfo->exception_type = 4;
    D.23738 = ctx->list;
    D.23739 = monoeg_g_slist_prepend (D.23738, vinfo);
    ctx->list = D.23739;
  }
  ctx->verifiable = 0;
  D.23724 = ctx->level;
  D.23725 = D.23724 & 16;
  if (D.23725 != 0) goto <D.23740>; else goto <D.23741>;
  <D.23740>:
  ctx->valid = 0;
  <D.23741>:
  <D.23732>:
  <D.23730>:
  <D.23727>:
  D.23742 = ctx->method;
  D.23743 = D.23742->flags;
  D.23744 = (int) D.23743;
  D.23745 = D.23744 & 16;
  if (D.23745 != 0) goto <D.23746>; else goto <D.23747>;
  <D.23746>:
  D.23733 = ctx->verifiable;
  if (D.23733 != 0) goto <D.23748>; else goto <D.23750>;
  <D.23750>:
  D.23724 = ctx->level;
  D.23735 = D.23724 & 128;
  if (D.23735 != 0) goto <D.23748>; else goto <D.23749>;
  <D.23748>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23736 = ctx->ip_offset;
    D.23751 = monoeg_g_strdup_printf ("Invalid ldftn with virtual function at 0x%04x", D.23736);
    vinfo->info.message = D.23751;
    vinfo->exception_type = 4;
    D.23738 = ctx->list;
    D.23752 = monoeg_g_slist_prepend (D.23738, vinfo);
    ctx->list = D.23752;
  }
  ctx->verifiable = 0;
  D.23724 = ctx->level;
  D.23725 = D.23724 & 16;
  if (D.23725 != 0) goto <D.23753>; else goto <D.23754>;
  <D.23753>:
  ctx->valid = 0;
  <D.23754>:
  <D.23749>:
  <D.23747>:
  D.23755 = stack_slot_is_this_pointer (value);
  if (D.23755 == 0) goto <D.23756>; else goto <D.23757>;
  <D.23756>:
  D.23733 = ctx->verifiable;
  if (D.23733 != 0) goto <D.23758>; else goto <D.23760>;
  <D.23760>:
  D.23724 = ctx->level;
  D.23735 = D.23724 & 128;
  if (D.23735 != 0) goto <D.23758>; else goto <D.23759>;
  <D.23758>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23736 = ctx->ip_offset;
    D.23761 = monoeg_g_strdup_printf ("Invalid object argument, it is not the this pointer, to ldftn with virtual method at  0x%04x", D.23736);
    vinfo->info.message = D.23761;
    vinfo->exception_type = 4;
    D.23738 = ctx->list;
    D.23762 = monoeg_g_slist_prepend (D.23738, vinfo);
    ctx->list = D.23762;
  }
  ctx->verifiable = 0;
  D.23724 = ctx->level;
  D.23725 = D.23724 & 16;
  if (D.23725 != 0) goto <D.23763>; else goto <D.23764>;
  <D.23763>:
  ctx->valid = 0;
  <D.23764>:
  <D.23759>:
  <D.23757>:
  D.23765 = ctx->code;
  D.23736 = ctx->ip_offset;
  D.23766 = D.23736 * 12;
  D.23767 = D.23765 + D.23766;
  D.23765 = ctx->code;
  D.23736 = ctx->ip_offset;
  D.23766 = D.23736 * 12;
  D.23767 = D.23765 + D.23766;
  D.23768 = D.23767->flags;
  D.23769 = D.23768 | 32;
  D.23767->flags = D.23769;
  <D.23723>:
  <D.23720>:
  <D.23715>:
}


do_cast (struct VerifyContext * ctx, int token, const char * opcode)
{
  int D.23770;
  unsigned char D.23775;
  unsigned char D.23776;
  unsigned int D.23779;
  gchar * D.23780;
  struct GSList * D.23781;
  struct GSList * D.23782;
  int D.23783;
  int D.23788;
  int D.23790;
  int D.23791;
  gchar * D.23792;
  struct GSList * D.23793;
  int D.23794;
  struct MonoType * D.23798;
  int D.23799;
  gchar * D.23807;
  struct GSList * D.23808;
  unsigned char D.23811;
  int D.23812;
  gchar * D.23816;
  struct GSList * D.23817;
  int iftmp.97;
  int D.23826;
  struct MonoClass * D.23828;
  unsigned char D.23829;
  unsigned char D.23830;
  int iftmp.98;
  struct ILStackDesc * value;
  struct MonoType * type;
  gboolean is_boxed;
  gboolean do_box;

  D.23770 = check_underflow (ctx, 1);
  if (D.23770 == 0) goto <D.23771>; else goto <D.23772>;
  <D.23771>:
  return;
  <D.23772>:
  type = get_boxable_mono_type (ctx, token, opcode);
  if (type == 0B) goto <D.23773>; else goto <D.23774>;
  <D.23773>:
  return;
  <D.23774>:
  D.23775 = BIT_FIELD_REF <*type, 8, 56>;
  D.23776 = D.23775 & 64;
  if (D.23776 != 0) goto <D.23777>; else goto <D.23778>;
  <D.23777>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.23779 = ctx->ip_offset;
    D.23780 = monoeg_g_strdup_printf ("Invalid %s type at 0x%04x", opcode, D.23779);
    vinfo->info.message = D.23780;
    vinfo->exception_type = 3;
    D.23781 = ctx->list;
    D.23782 = monoeg_g_slist_prepend (D.23781, vinfo);
    ctx->list = D.23782;
  }
  ctx->valid = 0;
  return;
  <D.23778>:
  value = stack_pop (ctx);
  is_boxed = stack_slot_is_boxed_value (value);
  D.23783 = stack_slot_is_managed_pointer (value);
  if (D.23783 != 0) goto <D.23784>; else goto <D.23785>;
  <D.23784>:
  D.23788 = ctx->verifiable;
  if (D.23788 != 0) goto <D.23786>; else goto <D.23789>;
  <D.23789>:
  D.23790 = ctx->level;
  D.23791 = D.23790 & 128;
  if (D.23791 != 0) goto <D.23786>; else goto <D.23787>;
  <D.23786>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23779 = ctx->ip_offset;
    D.23792 = monoeg_g_strdup_printf ("Invalid value for %s at 0x%04x", opcode, D.23779);
    vinfo->info.message = D.23792;
    vinfo->exception_type = 4;
    D.23781 = ctx->list;
    D.23793 = monoeg_g_slist_prepend (D.23781, vinfo);
    ctx->list = D.23793;
  }
  ctx->verifiable = 0;
  D.23790 = ctx->level;
  D.23794 = D.23790 & 16;
  if (D.23794 != 0) goto <D.23795>; else goto <D.23796>;
  <D.23795>:
  ctx->valid = 0;
  <D.23796>:
  <D.23787>:
  goto <D.23797>;
  <D.23785>:
  D.23798 = value->type;
  D.23799 = mono_type_is_reference (D.23798);
  if (D.23799 == 0) goto <D.23800>; else goto <D.23801>;
  <D.23800>:
  if (is_boxed == 0) goto <D.23802>; else goto <D.23803>;
  <D.23802>:
  {
    char * name;

    name = stack_slot_full_name (value);
    D.23788 = ctx->verifiable;
    if (D.23788 != 0) goto <D.23804>; else goto <D.23806>;
    <D.23806>:
    D.23790 = ctx->level;
    D.23791 = D.23790 & 128;
    if (D.23791 != 0) goto <D.23804>; else goto <D.23805>;
    <D.23804>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.23779 = ctx->ip_offset;
      D.23807 = monoeg_g_strdup_printf ("Expected a reference type on stack for %s but found %s at 0x%04x", opcode, name, D.23779);
      vinfo->info.message = D.23807;
      vinfo->exception_type = 4;
      D.23781 = ctx->list;
      D.23808 = monoeg_g_slist_prepend (D.23781, vinfo);
      ctx->list = D.23808;
    }
    ctx->verifiable = 0;
    D.23790 = ctx->level;
    D.23794 = D.23790 & 16;
    if (D.23794 != 0) goto <D.23809>; else goto <D.23810>;
    <D.23809>:
    ctx->valid = 0;
    <D.23810>:
    <D.23805>:
    monoeg_g_free (name);
  }
  <D.23803>:
  <D.23801>:
  <D.23797>:
  D.23798 = value->type;
  D.23811 = D.23798->type;
  D.23812 = (int) D.23811;
  switch (D.23812) <default: <D.23820>, case 15: <D.18724>, case 22: <D.18725>, case 27: <D.18723>>
  <D.18723>:
  <D.18724>:
  <D.18725>:
  D.23788 = ctx->verifiable;
  if (D.23788 != 0) goto <D.23813>; else goto <D.23815>;
  <D.23815>:
  D.23790 = ctx->level;
  D.23791 = D.23790 & 128;
  if (D.23791 != 0) goto <D.23813>; else goto <D.23814>;
  <D.23813>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23779 = ctx->ip_offset;
    D.23816 = monoeg_g_strdup_printf ("Invalid value for %s at 0x%04x", opcode, D.23779);
    vinfo->info.message = D.23816;
    vinfo->exception_type = 4;
    D.23781 = ctx->list;
    D.23817 = monoeg_g_slist_prepend (D.23781, vinfo);
    ctx->list = D.23817;
  }
  ctx->verifiable = 0;
  D.23790 = ctx->level;
  D.23794 = D.23790 & 16;
  if (D.23794 != 0) goto <D.23818>; else goto <D.23819>;
  <D.23818>:
  ctx->valid = 0;
  <D.23819>:
  <D.23814>:
  <D.23820>:
  if (is_boxed != 0) goto <D.23822>; else goto <D.23825>;
  <D.23825>:
  D.23826 = mono_type_is_generic_argument (type);
  if (D.23826 != 0) goto <D.23822>; else goto <D.23827>;
  <D.23827>:
  D.23828 = mono_class_from_mono_type (type);
  D.23829 = BIT_FIELD_REF <*D.23828, 8, 160>;
  D.23830 = D.23829 & 8;
  if (D.23830 != 0) goto <D.23822>; else goto <D.23823>;
  <D.23822>:
  iftmp.97 = 1;
  goto <D.23824>;
  <D.23823>:
  iftmp.97 = 0;
  <D.23824>:
  do_box = iftmp.97;
  if (do_box != 0) goto <D.23832>; else goto <D.23833>;
  <D.23832>:
  iftmp.98 = 4102;
  goto <D.23834>;
  <D.23833>:
  iftmp.98 = 6;
  <D.23834>:
  stack_push_val (ctx, iftmp.98, type);
}


do_unbox_value (struct VerifyContext * ctx, int klass_token)
{
  int D.23838;
  struct MonoClass * D.23841;
  unsigned char D.23842;
  unsigned char D.23843;
  int D.23848;
  int D.23850;
  int D.23851;
  unsigned int D.23852;
  gchar * D.23853;
  struct GSList * D.23854;
  struct GSList * D.23855;
  int D.23856;
  int D.23861;
  int D.23863;
  struct MonoType * D.23865;
  struct MonoClass * D.23866;
  unsigned char D.23867;
  unsigned char D.23868;
  const char * D.23872;
  gchar * D.23873;
  struct GSList * D.23874;
  struct MonoType * D.23877;
  int D.23878;
  int D.23879;
  struct ILStackDesc * value;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, klass_token, "unbox");
  if (type == 0B) goto <D.23836>; else goto <D.23837>;
  <D.23836>:
  return;
  <D.23837>:
  D.23838 = check_underflow (ctx, 1);
  if (D.23838 == 0) goto <D.23839>; else goto <D.23840>;
  <D.23839>:
  return;
  <D.23840>:
  D.23841 = mono_class_from_mono_type (type);
  D.23842 = BIT_FIELD_REF <*D.23841, 8, 160>;
  D.23843 = D.23842 & 8;
  if (D.23843 == 0) goto <D.23844>; else goto <D.23845>;
  <D.23844>:
  D.23848 = ctx->verifiable;
  if (D.23848 != 0) goto <D.23846>; else goto <D.23849>;
  <D.23849>:
  D.23850 = ctx->level;
  D.23851 = D.23850 & 128;
  if (D.23851 != 0) goto <D.23846>; else goto <D.23847>;
  <D.23846>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23852 = ctx->ip_offset;
    D.23853 = monoeg_g_strdup_printf ("Invalid reference type for unbox at 0x%04x", D.23852);
    vinfo->info.message = D.23853;
    vinfo->exception_type = 4;
    D.23854 = ctx->list;
    D.23855 = monoeg_g_slist_prepend (D.23854, vinfo);
    ctx->list = D.23855;
  }
  ctx->verifiable = 0;
  D.23850 = ctx->level;
  D.23856 = D.23850 & 16;
  if (D.23856 != 0) goto <D.23857>; else goto <D.23858>;
  <D.23857>:
  ctx->valid = 0;
  <D.23858>:
  <D.23847>:
  <D.23845>:
  value = stack_pop (ctx);
  D.23861 = stack_slot_get_type (value);
  if (D.23861 != 6) goto <D.23859>; else goto <D.23862>;
  <D.23862>:
  D.23863 = stack_slot_is_boxed_value (value);
  if (D.23863 == 0) goto <D.23864>; else goto <D.23860>;
  <D.23864>:
  D.23865 = value->type;
  D.23866 = mono_class_from_mono_type (D.23865);
  D.23867 = BIT_FIELD_REF <*D.23866, 8, 160>;
  D.23868 = D.23867 & 8;
  if (D.23868 != 0) goto <D.23859>; else goto <D.23860>;
  <D.23859>:
  D.23848 = ctx->verifiable;
  if (D.23848 != 0) goto <D.23869>; else goto <D.23871>;
  <D.23871>:
  D.23850 = ctx->level;
  D.23851 = D.23850 & 128;
  if (D.23851 != 0) goto <D.23869>; else goto <D.23870>;
  <D.23869>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23852 = ctx->ip_offset;
    D.23872 = stack_slot_get_name (value);
    D.23873 = monoeg_g_strdup_printf ("Invalid type %s at stack for unbox operation at 0x%04x", D.23872, D.23852);
    vinfo->info.message = D.23873;
    vinfo->exception_type = 4;
    D.23854 = ctx->list;
    D.23874 = monoeg_g_slist_prepend (D.23854, vinfo);
    ctx->list = D.23874;
  }
  ctx->verifiable = 0;
  D.23850 = ctx->level;
  D.23856 = D.23850 & 16;
  if (D.23856 != 0) goto <D.23875>; else goto <D.23876>;
  <D.23875>:
  ctx->valid = 0;
  <D.23876>:
  <D.23870>:
  <D.23860>:
  D.23877 = mono_type_get_type_byref (type);
  value = stack_push (ctx);
  set_stack_value (ctx, value, D.23877, 0);
  D.23878 = value->stype;
  D.23879 = D.23878 | 512;
  value->stype = D.23879;
}


do_throw (struct VerifyContext * ctx)
{
  int D.23881;
  int D.23886;
  int D.23889;
  struct MonoType * D.23891;
  struct MonoClass * D.23892;
  unsigned char D.23893;
  unsigned char D.23894;
  int D.23897;
  int D.23899;
  int D.23900;
  unsigned int D.23901;
  gchar * D.23902;
  struct GSList * D.23903;
  struct GSList * D.23904;
  int D.23905;
  int D.23908;
  int D.23911;
  gchar * D.23917;
  struct GSList * D.23918;
  struct ILStackDesc * exception;

  D.23881 = check_underflow (ctx, 1);
  if (D.23881 == 0) goto <D.23882>; else goto <D.23883>;
  <D.23882>:
  return;
  <D.23883>:
  exception = stack_pop (ctx);
  D.23886 = stack_slot_is_null_literal (exception);
  if (D.23886 == 0) goto <D.23887>; else goto <D.23888>;
  <D.23887>:
  D.23889 = stack_slot_get_type (exception);
  if (D.23889 != 6) goto <D.23884>; else goto <D.23890>;
  <D.23890>:
  D.23891 = exception->type;
  D.23892 = mono_class_from_mono_type (D.23891);
  D.23893 = BIT_FIELD_REF <*D.23892, 8, 160>;
  D.23894 = D.23893 & 8;
  if (D.23894 != 0) goto <D.23884>; else goto <D.23885>;
  <D.23884>:
  D.23897 = ctx->verifiable;
  if (D.23897 != 0) goto <D.23895>; else goto <D.23898>;
  <D.23898>:
  D.23899 = ctx->level;
  D.23900 = D.23899 & 128;
  if (D.23900 != 0) goto <D.23895>; else goto <D.23896>;
  <D.23895>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.23901 = ctx->ip_offset;
    D.23902 = monoeg_g_strdup_printf ("Invalid type on stack for throw, expected reference type at 0x%04x", D.23901);
    vinfo->info.message = D.23902;
    vinfo->exception_type = 4;
    D.23903 = ctx->list;
    D.23904 = monoeg_g_slist_prepend (D.23903, vinfo);
    ctx->list = D.23904;
  }
  ctx->verifiable = 0;
  D.23899 = ctx->level;
  D.23905 = D.23899 & 16;
  if (D.23905 != 0) goto <D.23906>; else goto <D.23907>;
  <D.23906>:
  ctx->valid = 0;
  <D.23907>:
  <D.23896>:
  <D.23885>:
  <D.23888>:
  D.23891 = exception->type;
  D.23908 = mono_type_is_generic_argument (D.23891);
  if (D.23908 != 0) goto <D.23909>; else goto <D.23910>;
  <D.23909>:
  D.23911 = stack_slot_is_boxed_value (exception);
  if (D.23911 == 0) goto <D.23912>; else goto <D.23913>;
  <D.23912>:
  {
    char * name;

    D.23891 = exception->type;
    name = mono_type_full_name (D.23891);
    D.23897 = ctx->verifiable;
    if (D.23897 != 0) goto <D.23914>; else goto <D.23916>;
    <D.23916>:
    D.23899 = ctx->level;
    D.23900 = D.23899 & 128;
    if (D.23900 != 0) goto <D.23914>; else goto <D.23915>;
    <D.23914>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.23901 = ctx->ip_offset;
      D.23917 = monoeg_g_strdup_printf ("Invalid type on stack for throw, expected reference type but found unboxed %s  at 0x%04x ", name, D.23901);
      vinfo->info.message = D.23917;
      vinfo->exception_type = 4;
      D.23903 = ctx->list;
      D.23918 = monoeg_g_slist_prepend (D.23903, vinfo);
      ctx->list = D.23918;
    }
    ctx->verifiable = 0;
    D.23899 = ctx->level;
    D.23905 = D.23899 & 16;
    if (D.23905 != 0) goto <D.23919>; else goto <D.23920>;
    <D.23919>:
    ctx->valid = 0;
    <D.23920>:
    <D.23915>:
    monoeg_g_free (name);
  }
  <D.23913>:
  <D.23910>:
  ctx->eval.size = 0;
}


do_push_field (struct VerifyContext * ctx, int token, gboolean take_addr)
{
  unsigned int D.23924;
  unsigned int D.23925;
  int D.23926;
  const char * iftmp.99;
  int D.23933;
  struct MonoClassField * field.100;
  struct MonoClass * D.23939;
  unsigned char D.23940;
  unsigned char D.23941;
  int D.23944;
  int D.23949;
  int D.23951;
  int D.23952;
  unsigned int D.23953;
  gchar * D.23954;
  struct GSList * D.23955;
  struct GSList * D.23956;
  int D.23957;
  struct MonoType * D.23964;
  short unsigned int D.23965;
  int D.23966;
  int D.23967;
  struct MonoMethod * D.23970;
  struct MonoClass * D.23971;
  int D.23973;
  gchar * D.23977;
  struct GSList * D.23978;
  struct ILStackDesc * D.23981;
  struct ILStackDesc * obj;
  struct MonoClassField * field;

  try
    {
      if (take_addr == 0) goto <D.23922>; else goto <D.23923>;
      <D.23922>:
      D.23924 = ctx->prefix_set;
      D.23925 = D.23924 & 4294967292;
      ctx->prefix_set = D.23925;
      <D.23923>:
      D.23926 = check_underflow (ctx, 1);
      if (D.23926 == 0) goto <D.23927>; else goto <D.23928>;
      <D.23927>:
      return;
      <D.23928>:
      obj = stack_pop_safe (ctx);
      if (take_addr != 0) goto <D.23930>; else goto <D.23931>;
      <D.23930>:
      iftmp.99 = "ldflda";
      goto <D.23932>;
      <D.23931>:
      iftmp.99 = "ldfld";
      <D.23932>:
      D.23933 = check_is_valid_type_for_field_ops (ctx, token, obj, &field, iftmp.99);
      if (D.23933 == 0) goto <D.23934>; else goto <D.23935>;
      <D.23934>:
      return;
      <D.23935>:
      if (take_addr != 0) goto <D.23936>; else goto <D.23937>;
      <D.23936>:
      field.100 = field;
      D.23939 = field.100->parent;
      D.23940 = BIT_FIELD_REF <*D.23939, 8, 160>;
      D.23941 = D.23940 & 8;
      if (D.23941 != 0) goto <D.23942>; else goto <D.23943>;
      <D.23942>:
      D.23944 = stack_slot_is_managed_pointer (obj);
      if (D.23944 == 0) goto <D.23945>; else goto <D.23946>;
      <D.23945>:
      D.23949 = ctx->verifiable;
      if (D.23949 != 0) goto <D.23947>; else goto <D.23950>;
      <D.23950>:
      D.23951 = ctx->level;
      D.23952 = D.23951 & 128;
      if (D.23952 != 0) goto <D.23947>; else goto <D.23948>;
      <D.23947>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.23953 = ctx->ip_offset;
        D.23954 = monoeg_g_strdup_printf ("Cannot take the address of a temporary value-type at 0x%04x", D.23953);
        vinfo->info.message = D.23954;
        vinfo->exception_type = 4;
        D.23955 = ctx->list;
        D.23956 = monoeg_g_slist_prepend (D.23955, vinfo);
        ctx->list = D.23956;
      }
      ctx->verifiable = 0;
      D.23951 = ctx->level;
      D.23957 = D.23951 & 16;
      if (D.23957 != 0) goto <D.23958>; else goto <D.23959>;
      <D.23958>:
      ctx->valid = 0;
      <D.23959>:
      <D.23948>:
      <D.23946>:
      <D.23943>:
      <D.23937>:
      if (take_addr != 0) goto <D.23962>; else goto <D.23963>;
      <D.23962>:
      field.100 = field;
      D.23964 = field.100->type;
      D.23965 = D.23964->attrs;
      D.23966 = (int) D.23965;
      D.23967 = D.23966 & 32;
      if (D.23967 != 0) goto <D.23968>; else goto <D.23969>;
      <D.23968>:
      field.100 = field;
      D.23939 = field.100->parent;
      D.23970 = ctx->method;
      D.23971 = D.23970->klass;
      if (D.23939 != D.23971) goto <D.23960>; else goto <D.23972>;
      <D.23972>:
      D.23970 = ctx->method;
      D.23973 = mono_method_is_constructor (D.23970);
      if (D.23973 == 0) goto <D.23960>; else goto <D.23961>;
      <D.23960>:
      D.23949 = ctx->verifiable;
      if (D.23949 != 0) goto <D.23974>; else goto <D.23976>;
      <D.23976>:
      D.23951 = ctx->level;
      D.23952 = D.23951 & 128;
      if (D.23952 != 0) goto <D.23974>; else goto <D.23975>;
      <D.23974>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.23953 = ctx->ip_offset;
        D.23977 = monoeg_g_strdup_printf ("Cannot take the address of a init-only field at 0x%04x", D.23953);
        vinfo->info.message = D.23977;
        vinfo->exception_type = 4;
        D.23955 = ctx->list;
        D.23978 = monoeg_g_slist_prepend (D.23955, vinfo);
        ctx->list = D.23978;
      }
      ctx->verifiable = 0;
      D.23951 = ctx->level;
      D.23957 = D.23951 & 16;
      if (D.23957 != 0) goto <D.23979>; else goto <D.23980>;
      <D.23979>:
      ctx->valid = 0;
      <D.23980>:
      <D.23975>:
      <D.23961>:
      <D.23969>:
      <D.23963>:
      field.100 = field;
      D.23964 = field.100->type;
      D.23981 = stack_push (ctx);
      set_stack_value (ctx, D.23981, D.23964, 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.23987;
  int iftmp.101;
  int D.23992;
  int D.23994;
  struct MonoClass * D.23996;
  struct MonoType * D.23997;
  int D.23998;
  struct MonoType * D.23999;
  unsigned char D.24000;
  unsigned int D.24003;
  gchar * D.24004;
  struct GSList * D.24005;
  struct GSList * D.24006;
  struct MonoType * D.24007;
  _Bool D.24008;
  long int D.24009;
  long int D.24010;
  int D.24015;
  int D.24020;
  int D.24022;
  int D.24023;
  gchar * D.24024;
  struct GSList * D.24025;
  int D.24026;
  int D.24029;
  struct MonoMethod * D.24032;
  int D.24033;
  gchar * D.24039;
  struct GSList * D.24040;
  unsigned char D.24044;
  unsigned char D.24045;
  int D.24048;
  gchar * D.24054;
  struct GSList * D.24055;
  int D.24060;
  gchar * D.24066;
  struct GSList * D.24067;
  int D.24070;
  int D.24073;
  gchar * D.24079;
  struct GSList * D.24080;
  struct MonoClass * D.24085;
  int D.24086;
  gchar * D.24092;
  struct GSList * D.24093;
  struct MonoClassField * field;
  struct MonoClass * klass;
  gboolean is_pointer;

  try
    {
      field = verifier_load_field (ctx, token, &klass, opcode);
      if (field == 0B) goto <D.23985>; else goto <D.23986>;
      <D.23985>:
      D.23987 = 0;
      return D.23987;
      <D.23986>:
      *ret_field = field;
      D.23992 = stack_slot_get_type (obj);
      if (D.23992 == 5) goto <D.23989>; else goto <D.23993>;
      <D.23993>:
      D.23994 = stack_slot_get_type (obj);
      if (D.23994 == 3) goto <D.23995>; else goto <D.23990>;
      <D.23995>:
      D.23996 = field->parent;
      D.23997 = &D.23996->byval_arg;
      D.23998 = get_stack_type (D.23997);
      if (D.23998 == 0) goto <D.23989>; else goto <D.23990>;
      <D.23989>:
      iftmp.101 = 1;
      goto <D.23991>;
      <D.23990>:
      iftmp.101 = 0;
      <D.23991>:
      is_pointer = iftmp.101;
      D.23999 = field->type;
      D.24000 = D.23999->type;
      if (D.24000 == 22) goto <D.24001>; else goto <D.24002>;
      <D.24001>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.24003 = ctx->ip_offset;
        D.24004 = monoeg_g_strdup_printf ("Typedbyref field is an unverfiable type at 0x%04x", D.24003);
        vinfo->info.message = D.24004;
        vinfo->exception_type = 3;
        D.24005 = ctx->list;
        D.24006 = monoeg_g_slist_prepend (D.24005, vinfo);
        ctx->list = D.24006;
      }
      ctx->valid = 0;
      D.23987 = 0;
      return D.23987;
      <D.24002>:
      D.24007 = obj->type;
      D.24008 = D.24007 == 0B;
      D.24009 = (long int) D.24008;
      D.24010 = __builtin_expect (D.24009, 0);
      if (D.24010 != 0) goto <D.24011>; else goto <D.24012>;
      <D.24011>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 3369, "obj->type");
      <D.24012>:
      if (is_pointer != 0) goto <D.24013>; else goto <D.24014>;
      <D.24013>:
      D.24015 = stack_slot_get_underlying_type (obj);
      if (D.24015 == 3) goto <D.24016>; else goto <D.24017>;
      <D.24016>:
      D.24020 = ctx->verifiable;
      if (D.24020 != 0) goto <D.24018>; else goto <D.24021>;
      <D.24021>:
      D.24022 = ctx->level;
      D.24023 = D.24022 & 128;
      if (D.24023 != 0) goto <D.24018>; else goto <D.24019>;
      <D.24018>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.24003 = ctx->ip_offset;
        D.24024 = monoeg_g_strdup_printf ("Native int is not a verifiable type to reference a field at 0x%04x", D.24003);
        vinfo->info.message = D.24024;
        vinfo->exception_type = 4;
        D.24005 = ctx->list;
        D.24025 = monoeg_g_slist_prepend (D.24005, vinfo);
        ctx->list = D.24025;
      }
      ctx->verifiable = 0;
      D.24022 = ctx->level;
      D.24026 = D.24022 & 16;
      if (D.24026 != 0) goto <D.24027>; else goto <D.24028>;
      <D.24027>:
      ctx->valid = 0;
      <D.24028>:
      <D.24019>:
      <D.24017>:
      D.24022 = ctx->level;
      D.24029 = D.24022 & 64;
      if (D.24029 == 0) goto <D.24030>; else goto <D.24031>;
      <D.24030>:
      D.24032 = ctx->method;
      D.24033 = mono_method_can_access_field_full (D.24032, field, 0B);
      if (D.24033 == 0) goto <D.24034>; else goto <D.24035>;
      <D.24034>:
      D.24020 = ctx->verifiable;
      if (D.24020 != 0) goto <D.24036>; else goto <D.24038>;
      <D.24038>:
      D.24022 = ctx->level;
      D.24023 = D.24022 & 128;
      if (D.24023 != 0) goto <D.24036>; else goto <D.24037>;
      <D.24036>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.24003 = ctx->ip_offset;
        D.24039 = monoeg_g_strdup_printf ("Type at stack is not accessible at 0x%04x", D.24003);
        vinfo->info.message = D.24039;
        vinfo->exception_type = 10;
        D.24005 = ctx->list;
        D.24040 = monoeg_g_slist_prepend (D.24005, vinfo);
        ctx->list = D.24040;
      }
      ctx->verifiable = 0;
      D.24022 = ctx->level;
      D.24026 = D.24022 & 16;
      if (D.24026 != 0) goto <D.24041>; else goto <D.24042>;
      <D.24041>:
      ctx->valid = 0;
      <D.24042>:
      <D.24037>:
      <D.24035>:
      <D.24031>:
      goto <D.24043>;
      <D.24014>:
      D.23996 = field->parent;
      D.24044 = BIT_FIELD_REF <*D.23996, 8, 160>;
      D.24045 = D.24044 & 8;
      if (D.24045 == 0) goto <D.24046>; else goto <D.24047>;
      <D.24046>:
      D.24048 = stack_slot_is_managed_pointer (obj);
      if (D.24048 != 0) goto <D.24049>; else goto <D.24050>;
      <D.24049>:
      D.24020 = ctx->verifiable;
      if (D.24020 != 0) goto <D.24051>; else goto <D.24053>;
      <D.24053>:
      D.24022 = ctx->level;
      D.24023 = D.24022 & 128;
      if (D.24023 != 0) goto <D.24051>; else goto <D.24052>;
      <D.24051>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.24003 = ctx->ip_offset;
        D.24054 = 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.24003);
        vinfo->info.message = D.24054;
        vinfo->exception_type = 4;
        D.24005 = ctx->list;
        D.24055 = monoeg_g_slist_prepend (D.24005, vinfo);
        ctx->list = D.24055;
      }
      ctx->verifiable = 0;
      D.24022 = ctx->level;
      D.24026 = D.24022 & 16;
      if (D.24026 != 0) goto <D.24056>; else goto <D.24057>;
      <D.24056>:
      ctx->valid = 0;
      <D.24057>:
      <D.24052>:
      <D.24050>:
      <D.24047>:
      D.23996 = field->parent;
      D.24044 = BIT_FIELD_REF <*D.23996, 8, 160>;
      D.24045 = D.24044 & 8;
      if (D.24045 != 0) goto <D.24058>; else goto <D.24059>;
      <D.24058>:
      D.24060 = stack_slot_is_boxed_value (obj);
      if (D.24060 != 0) goto <D.24061>; else goto <D.24062>;
      <D.24061>:
      D.24020 = ctx->verifiable;
      if (D.24020 != 0) goto <D.24063>; else goto <D.24065>;
      <D.24065>:
      D.24022 = ctx->level;
      D.24023 = D.24022 & 128;
      if (D.24023 != 0) goto <D.24063>; else goto <D.24064>;
      <D.24063>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.24003 = ctx->ip_offset;
        D.24066 = monoeg_g_strdup_printf ("Type at stack is a boxed valuetype and is not compatible to reference the field at 0x%04x", D.24003);
        vinfo->info.message = D.24066;
        vinfo->exception_type = 4;
        D.24005 = ctx->list;
        D.24067 = monoeg_g_slist_prepend (D.24005, vinfo);
        ctx->list = D.24067;
      }
      ctx->verifiable = 0;
      D.24022 = ctx->level;
      D.24026 = D.24022 & 16;
      if (D.24026 != 0) goto <D.24068>; else goto <D.24069>;
      <D.24068>:
      ctx->valid = 0;
      <D.24069>:
      <D.24064>:
      <D.24062>:
      <D.24059>:
      D.24070 = stack_slot_is_null_literal (obj);
      if (D.24070 == 0) goto <D.24071>; else goto <D.24072>;
      <D.24071>:
      D.23996 = field->parent;
      D.23997 = &D.23996->byval_arg;
      D.24073 = verify_stack_type_compatibility_full (ctx, D.23997, obj, 1, 0);
      if (D.24073 == 0) goto <D.24074>; else goto <D.24075>;
      <D.24074>:
      {
        char * found;
        char * expected;

        found = stack_slot_full_name (obj);
        D.23996 = field->parent;
        D.23997 = &D.23996->byval_arg;
        expected = mono_type_full_name (D.23997);
        D.24020 = ctx->verifiable;
        if (D.24020 != 0) goto <D.24076>; else goto <D.24078>;
        <D.24078>:
        D.24022 = ctx->level;
        D.24023 = D.24022 & 128;
        if (D.24023 != 0) goto <D.24076>; else goto <D.24077>;
        <D.24076>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.24003 = ctx->ip_offset;
          D.24079 = monoeg_g_strdup_printf ("Expected type \'%s\' but found \'%s\' referencing the \'this\' argument at 0x%04x", expected, found, D.24003);
          vinfo->info.message = D.24079;
          vinfo->exception_type = 4;
          D.24005 = ctx->list;
          D.24080 = monoeg_g_slist_prepend (D.24005, vinfo);
          ctx->list = D.24080;
        }
        ctx->verifiable = 0;
        D.24022 = ctx->level;
        D.24026 = D.24022 & 16;
        if (D.24026 != 0) goto <D.24081>; else goto <D.24082>;
        <D.24081>:
        ctx->valid = 0;
        <D.24082>:
        <D.24077>:
        monoeg_g_free (found);
        monoeg_g_free (expected);
      }
      <D.24075>:
      <D.24072>:
      D.24022 = ctx->level;
      D.24029 = D.24022 & 64;
      if (D.24029 == 0) goto <D.24083>; else goto <D.24084>;
      <D.24083>:
      D.24007 = obj->type;
      D.24085 = mono_class_from_mono_type (D.24007);
      D.24032 = ctx->method;
      D.24086 = mono_method_can_access_field_full (D.24032, field, D.24085);
      if (D.24086 == 0) goto <D.24087>; else goto <D.24088>;
      <D.24087>:
      D.24020 = ctx->verifiable;
      if (D.24020 != 0) goto <D.24089>; else goto <D.24091>;
      <D.24091>:
      D.24022 = ctx->level;
      D.24023 = D.24022 & 128;
      if (D.24023 != 0) goto <D.24089>; else goto <D.24090>;
      <D.24089>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.24003 = ctx->ip_offset;
        D.24092 = monoeg_g_strdup_printf ("Type at stack is not accessible at 0x%04x", D.24003);
        vinfo->info.message = D.24092;
        vinfo->exception_type = 10;
        D.24005 = ctx->list;
        D.24093 = monoeg_g_slist_prepend (D.24005, vinfo);
        ctx->list = D.24093;
      }
      ctx->verifiable = 0;
      D.24022 = ctx->level;
      D.24026 = D.24022 & 16;
      if (D.24026 != 0) goto <D.24094>; else goto <D.24095>;
      <D.24094>:
      ctx->valid = 0;
      <D.24095>:
      <D.24090>:
      <D.24088>:
      <D.24084>:
      <D.24043>:
      check_unmanaged_pointer (ctx, obj);
      D.23987 = 1;
      return D.23987;
    }
  finally
    {
      klass = {CLOBBER};
    }
}


verifier_load_field (struct VerifyContext * ctx, int token, struct MonoClass * * out_klass, const char * opcode)
{
  struct MonoMethod * D.24098;
  unsigned char D.24099;
  unsigned char D.24100;
  unsigned int token.102;
  struct MonoClass * iftmp.103;
  int D.24111;
  _Bool D.24112;
  _Bool D.24113;
  _Bool D.24114;
  unsigned int token.104;
  struct MonoImage * D.24117;
  int D.24118;
  unsigned int D.24119;
  gchar * D.24120;
  struct GSList * D.24121;
  struct GSList * D.24122;
  struct MonoClassField * D.24123;
  struct MonoGenericContext * D.24124;
  unsigned int token.105;
  struct MonoClass * D.24129;
  struct MonoClass * klass.106;
  struct MonoLoaderError * D.24133;
  gchar * D.24134;
  struct GSList * D.24135;
  struct MonoType * D.24136;
  int D.24137;
  unsigned int D.24140;
  unsigned int D.24141;
  const char * D.24144;
  gchar * D.24145;
  struct GSList * D.24146;
  struct MonoClassField * field;
  struct MonoClass * klass;

  try
    {
      klass = 0B;
      D.24098 = ctx->method;
      D.24099 = BIT_FIELD_REF <*D.24098, 8, 160>;
      D.24100 = D.24099 & 124;
      if (D.24100 != 0) goto <D.24101>; else goto <D.24102>;
      <D.24101>:
      token.102 = (unsigned int) token;
      D.24098 = ctx->method;
      field = mono_method_get_wrapper_data (D.24098, token.102);
      if (field != 0B) goto <D.24105>; else goto <D.24106>;
      <D.24105>:
      iftmp.103 = field->parent;
      goto <D.24107>;
      <D.24106>:
      iftmp.103 = 0B;
      <D.24107>:
      klass = iftmp.103;
      goto <D.24108>;
      <D.24102>:
      D.24111 = token >> 24;
      D.24112 = D.24111 != 4;
      D.24113 = D.24111 != 10;
      D.24114 = D.24112 & D.24113;
      if (D.24114 != 0) goto <D.24109>; else goto <D.24115>;
      <D.24115>:
      token.104 = (unsigned int) token;
      D.24117 = ctx->image;
      D.24118 = token_bounds_check (D.24117, token.104);
      if (D.24118 == 0) goto <D.24109>; else goto <D.24110>;
      <D.24109>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.24119 = ctx->ip_offset;
        D.24120 = monoeg_g_strdup_printf ("Invalid field token 0x%08x for %s at 0x%04x", token, opcode, D.24119);
        vinfo->info.message = D.24120;
        vinfo->exception_type = 12;
        D.24121 = ctx->list;
        D.24122 = monoeg_g_slist_prepend (D.24121, vinfo);
        ctx->list = D.24122;
      }
      ctx->valid = 0;
      D.24123 = 0B;
      return D.24123;
      <D.24110>:
      D.24124 = ctx->generic_context;
      token.105 = (unsigned int) token;
      D.24117 = ctx->image;
      field = mono_field_from_token (D.24117, token.105, &klass, D.24124);
      <D.24108>:
      if (field == 0B) goto <D.24126>; else goto <D.24128>;
      <D.24128>:
      D.24129 = field->parent;
      if (D.24129 == 0B) goto <D.24126>; else goto <D.24130>;
      <D.24130>:
      klass.106 = klass;
      if (klass.106 == 0B) goto <D.24126>; else goto <D.24132>;
      <D.24132>:
      D.24133 = mono_loader_get_last_error ();
      if (D.24133 != 0B) goto <D.24126>; else goto <D.24127>;
      <D.24126>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.24119 = ctx->ip_offset;
        D.24134 = monoeg_g_strdup_printf ("Cannot load field from token 0x%08x for %s at 0x%04x", token, opcode, D.24119);
        vinfo->info.message = D.24134;
        vinfo->exception_type = 12;
        D.24121 = ctx->list;
        D.24135 = monoeg_g_slist_prepend (D.24121, vinfo);
        ctx->list = D.24135;
      }
      ctx->valid = 0;
      mono_loader_clear_error ();
      D.24123 = 0B;
      return D.24123;
      <D.24127>:
      klass.106 = klass;
      D.24136 = &klass.106->byval_arg;
      D.24137 = mono_type_is_valid_in_context (ctx, D.24136);
      if (D.24137 == 0) goto <D.24138>; else goto <D.24139>;
      <D.24138>:
      D.24123 = 0B;
      return D.24123;
      <D.24139>:
      D.24140 = mono_field_get_flags (field);
      D.24141 = D.24140 & 64;
      if (D.24141 != 0) goto <D.24142>; else goto <D.24143>;
      <D.24142>:
      {
        char * type_name;

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

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 1;
          D.24119 = ctx->ip_offset;
          D.24144 = field->name;
          D.24145 = monoeg_g_strdup_printf ("Cannot reference literal field %s::%s at 0x%04x", type_name, D.24144, D.24119);
          vinfo->info.message = D.24145;
          vinfo->exception_type = 3;
          D.24121 = ctx->list;
          D.24146 = monoeg_g_slist_prepend (D.24121, vinfo);
          ctx->list = D.24146;
        }
        ctx->valid = 0;
        monoeg_g_free (type_name);
        D.24123 = 0B;
        return D.24123;
      }
      <D.24143>:
      klass.106 = klass;
      *out_klass = klass.106;
      D.24123 = field;
      return D.24123;
    }
  finally
    {
      klass = {CLOBBER};
    }
}


do_push_static_field (struct VerifyContext * ctx, int token, gboolean take_addr)
{
  int D.24149;
  unsigned int D.24154;
  unsigned int D.24155;
  const char * iftmp.107;
  struct MonoType * D.24162;
  short unsigned int D.24163;
  int D.24164;
  int D.24165;
  unsigned int D.24168;
  gchar * D.24169;
  struct GSList * D.24170;
  struct GSList * D.24171;
  int D.24176;
  struct MonoClass * D.24179;
  struct MonoMethod * D.24180;
  struct MonoClass * D.24181;
  short unsigned int D.24183;
  int D.24184;
  int D.24185;
  int D.18510;
  int iftmp.108;
  int D.18506;
  const char[7] * D.24190;
  unsigned char D.24191;
  int D.24192;
  unsigned char D.24193;
  int D.24194;
  _Bool D.24195;
  _Bool D.24196;
  _Bool D.24197;
  const unsigned char * D.24200;
  unsigned char D.24201;
  int D.24202;
  const unsigned char * D.24203;
  unsigned char D.24204;
  int D.24205;
  _Bool D.24206;
  _Bool D.24207;
  const unsigned char * D.24210;
  unsigned char D.24211;
  int D.24212;
  const unsigned char * D.24213;
  unsigned char D.24214;
  int D.24215;
  _Bool D.24216;
  _Bool D.24217;
  const unsigned char * D.24220;
  unsigned char D.24221;
  int D.24222;
  const unsigned char * D.24223;
  unsigned char D.24224;
  int D.24225;
  const char * D.24227;
  int D.24230;
  int D.24232;
  int D.24233;
  gchar * D.24234;
  struct GSList * D.24235;
  int D.24236;
  int D.24239;
  int D.24242;
  gchar * D.24248;
  struct GSList * D.24249;
  struct ILStackDesc * D.24252;
  struct MonoClassField * field;
  struct MonoClass * klass;

  try
    {
      D.24149 = check_overflow (ctx);
      if (D.24149 == 0) goto <D.24150>; else goto <D.24151>;
      <D.24150>:
      return;
      <D.24151>:
      if (take_addr == 0) goto <D.24152>; else goto <D.24153>;
      <D.24152>:
      D.24154 = ctx->prefix_set;
      D.24155 = D.24154 & 4294967293;
      ctx->prefix_set = D.24155;
      <D.24153>:
      if (take_addr != 0) goto <D.24157>; else goto <D.24158>;
      <D.24157>:
      iftmp.107 = "ldsflda";
      goto <D.24159>;
      <D.24158>:
      iftmp.107 = "ldsfld";
      <D.24159>:
      field = verifier_load_field (ctx, token, &klass, iftmp.107);
      if (field == 0B) goto <D.24160>; else goto <D.24161>;
      <D.24160>:
      return;
      <D.24161>:
      D.24162 = field->type;
      D.24163 = D.24162->attrs;
      D.24164 = (int) D.24163;
      D.24165 = D.24164 & 16;
      if (D.24165 == 0) goto <D.24166>; else goto <D.24167>;
      <D.24166>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.24168 = ctx->ip_offset;
        D.24169 = monoeg_g_strdup_printf ("Cannot load non static field at 0x%04x", D.24168);
        vinfo->info.message = D.24169;
        vinfo->exception_type = 3;
        D.24170 = ctx->list;
        D.24171 = monoeg_g_slist_prepend (D.24170, vinfo);
        ctx->list = D.24171;
      }
      ctx->valid = 0;
      return;
      <D.24167>:
      if (take_addr != 0) goto <D.24174>; else goto <D.24175>;
      <D.24174>:
      D.24162 = field->type;
      D.24163 = D.24162->attrs;
      D.24164 = (int) D.24163;
      D.24176 = D.24164 & 32;
      if (D.24176 != 0) goto <D.24177>; else goto <D.24178>;
      <D.24177>:
      D.24179 = field->parent;
      D.24180 = ctx->method;
      D.24181 = D.24180->klass;
      if (D.24179 != D.24181) goto <D.24172>; else goto <D.24182>;
      <D.24182>:
      D.24180 = ctx->method;
      D.24183 = D.24180->flags;
      D.24184 = (int) D.24183;
      D.24185 = D.24184 & 2064;
      if (D.24185 == 0) goto <D.24172>; else goto <D.24186>;
      <D.24186>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          D.24180 = ctx->method;
          __s2 = D.24180->name;
          D.24190 = ".cctor";
          D.24191 = MEM[(const unsigned char *)D.24190];
          D.24192 = (int) D.24191;
          D.24193 = *__s2;
          D.24194 = (int) D.24193;
          __result = D.24192 - D.24194;
          {
            D.24195 = __s1_len != 0;
            D.24196 = __result == 0;
            D.24197 = D.24195 & D.24196;
            if (D.24197 != 0) goto <D.24198>; else goto <D.24199>;
            <D.24198>:
            D.24200 = &MEM[(void *)".cctor" + 1B];
            D.24201 = *D.24200;
            D.24202 = (int) D.24201;
            D.24203 = __s2 + 1;
            D.24204 = *D.24203;
            D.24205 = (int) D.24204;
            __result = D.24202 - D.24205;
            D.24206 = __s1_len > 1;
            D.24196 = __result == 0;
            D.24207 = D.24206 & D.24196;
            if (D.24207 != 0) goto <D.24208>; else goto <D.24209>;
            <D.24208>:
            D.24210 = &MEM[(void *)".cctor" + 2B];
            D.24211 = *D.24210;
            D.24212 = (int) D.24211;
            D.24213 = __s2 + 2;
            D.24214 = *D.24213;
            D.24215 = (int) D.24214;
            __result = D.24212 - D.24215;
            D.24216 = __s1_len > 2;
            D.24196 = __result == 0;
            D.24217 = D.24216 & D.24196;
            if (D.24217 != 0) goto <D.24218>; else goto <D.24219>;
            <D.24218>:
            D.24220 = &MEM[(void *)".cctor" + 3B];
            D.24221 = *D.24220;
            D.24222 = (int) D.24221;
            D.24223 = __s2 + 3;
            D.24224 = *D.24223;
            D.24225 = (int) D.24224;
            __result = D.24222 - D.24225;
            <D.24219>:
            <D.24209>:
            <D.24199>:
          }
          D.18506 = __result;
        }
        iftmp.108 = D.18506;
        goto <D.24226>;
        <D.24189>:
        D.24180 = ctx->method;
        D.24227 = D.24180->name;
        iftmp.108 = __builtin_strcmp (".cctor", D.24227);
        <D.24226>:
        D.18510 = iftmp.108;
      }
      if (D.18510 != 0) goto <D.24172>; else goto <D.24173>;
      <D.24172>:
      D.24230 = ctx->verifiable;
      if (D.24230 != 0) goto <D.24228>; else goto <D.24231>;
      <D.24231>:
      D.24232 = ctx->level;
      D.24233 = D.24232 & 128;
      if (D.24233 != 0) goto <D.24228>; else goto <D.24229>;
      <D.24228>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.24168 = ctx->ip_offset;
        D.24234 = monoeg_g_strdup_printf ("Cannot take the address of a init-only field at 0x%04x", D.24168);
        vinfo->info.message = D.24234;
        vinfo->exception_type = 4;
        D.24170 = ctx->list;
        D.24235 = monoeg_g_slist_prepend (D.24170, vinfo);
        ctx->list = D.24235;
      }
      ctx->verifiable = 0;
      D.24232 = ctx->level;
      D.24236 = D.24232 & 16;
      if (D.24236 != 0) goto <D.24237>; else goto <D.24238>;
      <D.24237>:
      ctx->valid = 0;
      <D.24238>:
      <D.24229>:
      <D.24173>:
      <D.24178>:
      <D.24175>:
      D.24232 = ctx->level;
      D.24239 = D.24232 & 64;
      if (D.24239 == 0) goto <D.24240>; else goto <D.24241>;
      <D.24240>:
      D.24180 = ctx->method;
      D.24242 = mono_method_can_access_field_full (D.24180, field, 0B);
      if (D.24242 == 0) goto <D.24243>; else goto <D.24244>;
      <D.24243>:
      D.24230 = ctx->verifiable;
      if (D.24230 != 0) goto <D.24245>; else goto <D.24247>;
      <D.24247>:
      D.24232 = ctx->level;
      D.24233 = D.24232 & 128;
      if (D.24233 != 0) goto <D.24245>; else goto <D.24246>;
      <D.24245>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.24168 = ctx->ip_offset;
        D.24248 = monoeg_g_strdup_printf ("Type at stack is not accessible at 0x%04x", D.24168);
        vinfo->info.message = D.24248;
        vinfo->exception_type = 10;
        D.24170 = ctx->list;
        D.24249 = monoeg_g_slist_prepend (D.24170, vinfo);
        ctx->list = D.24249;
      }
      ctx->verifiable = 0;
      D.24232 = ctx->level;
      D.24236 = D.24232 & 16;
      if (D.24236 != 0) goto <D.24250>; else goto <D.24251>;
      <D.24250>:
      ctx->valid = 0;
      <D.24251>:
      <D.24246>:
      <D.24244>:
      <D.24241>:
      D.24162 = field->type;
      D.24252 = stack_push (ctx);
      set_stack_value (ctx, D.24252, D.24162, take_addr);
    }
  finally
    {
      klass = {CLOBBER};
    }
}


do_store_field (struct VerifyContext * ctx, int token)
{
  unsigned int D.24256;
  unsigned int D.24257;
  int D.24258;
  int D.24261;
  struct MonoClassField * field.109;
  struct MonoType * D.24265;
  int D.24266;
  int D.24271;
  int D.24273;
  int D.24274;
  unsigned int D.24275;
  const char * D.24276;
  gchar * D.24277;
  struct GSList * D.24278;
  struct GSList * D.24279;
  int D.24280;
  struct ILStackDesc * value;
  struct ILStackDesc * obj;
  struct MonoClassField * field;

  try
    {
      D.24256 = ctx->prefix_set;
      D.24257 = D.24256 & 4294967292;
      ctx->prefix_set = D.24257;
      D.24258 = check_underflow (ctx, 2);
      if (D.24258 == 0) goto <D.24259>; else goto <D.24260>;
      <D.24259>:
      return;
      <D.24260>:
      value = stack_pop (ctx);
      obj = stack_pop_safe (ctx);
      D.24261 = check_is_valid_type_for_field_ops (ctx, token, obj, &field, "stfld");
      if (D.24261 == 0) goto <D.24262>; else goto <D.24263>;
      <D.24262>:
      return;
      <D.24263>:
      field.109 = field;
      D.24265 = field.109->type;
      D.24266 = verify_stack_type_compatibility (ctx, D.24265, value);
      if (D.24266 == 0) goto <D.24267>; else goto <D.24268>;
      <D.24267>:
      D.24271 = ctx->verifiable;
      if (D.24271 != 0) goto <D.24269>; else goto <D.24272>;
      <D.24272>:
      D.24273 = ctx->level;
      D.24274 = D.24273 & 128;
      if (D.24274 != 0) goto <D.24269>; else goto <D.24270>;
      <D.24269>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.24275 = ctx->ip_offset;
        D.24276 = stack_slot_get_name (value);
        D.24277 = monoeg_g_strdup_printf ("Incompatible type %s in field store at 0x%04x", D.24276, D.24275);
        vinfo->info.message = D.24277;
        vinfo->exception_type = 4;
        D.24278 = ctx->list;
        D.24279 = monoeg_g_slist_prepend (D.24278, vinfo);
        ctx->list = D.24279;
      }
      ctx->verifiable = 0;
      D.24273 = ctx->level;
      D.24280 = D.24273 & 16;
      if (D.24280 != 0) goto <D.24281>; else goto <D.24282>;
      <D.24281>:
      ctx->valid = 0;
      <D.24282>:
      <D.24270>:
      <D.24268>:
    }
  finally
    {
      field = {CLOBBER};
    }
}


do_store_static_field (struct VerifyContext * ctx, int token)
{
  unsigned int D.24286;
  unsigned int D.24287;
  int D.24288;
  struct MonoType * D.24293;
  short unsigned int D.24294;
  int D.24295;
  int D.24296;
  unsigned int D.24299;
  gchar * D.24300;
  struct GSList * D.24301;
  struct GSList * D.24302;
  unsigned char D.24303;
  gchar * D.24306;
  struct GSList * D.24307;
  int D.24308;
  int D.24309;
  struct MonoMethod * D.24312;
  int D.24313;
  int D.24318;
  int D.24320;
  gchar * D.24321;
  struct GSList * D.24322;
  int D.24323;
  int D.24326;
  gchar * D.24332;
  struct GSList * D.24333;
  struct MonoClassField * field;
  struct MonoClass * klass;
  struct ILStackDesc * value;

  try
    {
      D.24286 = ctx->prefix_set;
      D.24287 = D.24286 & 4294967293;
      ctx->prefix_set = D.24287;
      D.24288 = check_underflow (ctx, 1);
      if (D.24288 == 0) goto <D.24289>; else goto <D.24290>;
      <D.24289>:
      return;
      <D.24290>:
      value = stack_pop (ctx);
      field = verifier_load_field (ctx, token, &klass, "stsfld");
      if (field == 0B) goto <D.24291>; else goto <D.24292>;
      <D.24291>:
      return;
      <D.24292>:
      D.24293 = field->type;
      D.24294 = D.24293->attrs;
      D.24295 = (int) D.24294;
      D.24296 = D.24295 & 16;
      if (D.24296 == 0) goto <D.24297>; else goto <D.24298>;
      <D.24297>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.24299 = ctx->ip_offset;
        D.24300 = monoeg_g_strdup_printf ("Cannot store non static field at 0x%04x", D.24299);
        vinfo->info.message = D.24300;
        vinfo->exception_type = 3;
        D.24301 = ctx->list;
        D.24302 = monoeg_g_slist_prepend (D.24301, vinfo);
        ctx->list = D.24302;
      }
      ctx->valid = 0;
      return;
      <D.24298>:
      D.24293 = field->type;
      D.24303 = D.24293->type;
      if (D.24303 == 22) goto <D.24304>; else goto <D.24305>;
      <D.24304>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.24299 = ctx->ip_offset;
        D.24306 = monoeg_g_strdup_printf ("Typedbyref field is an unverfiable type in store static field at 0x%04x", D.24299);
        vinfo->info.message = D.24306;
        vinfo->exception_type = 3;
        D.24301 = ctx->list;
        D.24307 = monoeg_g_slist_prepend (D.24301, vinfo);
        ctx->list = D.24307;
      }
      ctx->valid = 0;
      return;
      <D.24305>:
      D.24308 = ctx->level;
      D.24309 = D.24308 & 64;
      if (D.24309 == 0) goto <D.24310>; else goto <D.24311>;
      <D.24310>:
      D.24312 = ctx->method;
      D.24313 = mono_method_can_access_field_full (D.24312, field, 0B);
      if (D.24313 == 0) goto <D.24314>; else goto <D.24315>;
      <D.24314>:
      D.24318 = ctx->verifiable;
      if (D.24318 != 0) goto <D.24316>; else goto <D.24319>;
      <D.24319>:
      D.24308 = ctx->level;
      D.24320 = D.24308 & 128;
      if (D.24320 != 0) goto <D.24316>; else goto <D.24317>;
      <D.24316>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.24299 = ctx->ip_offset;
        D.24321 = monoeg_g_strdup_printf ("Type at stack is not accessible at 0x%04x", D.24299);
        vinfo->info.message = D.24321;
        vinfo->exception_type = 10;
        D.24301 = ctx->list;
        D.24322 = monoeg_g_slist_prepend (D.24301, vinfo);
        ctx->list = D.24322;
      }
      ctx->verifiable = 0;
      D.24308 = ctx->level;
      D.24323 = D.24308 & 16;
      if (D.24323 != 0) goto <D.24324>; else goto <D.24325>;
      <D.24324>:
      ctx->valid = 0;
      <D.24325>:
      <D.24317>:
      <D.24315>:
      <D.24311>:
      D.24293 = field->type;
      D.24326 = verify_stack_type_compatibility (ctx, D.24293, value);
      if (D.24326 == 0) goto <D.24327>; else goto <D.24328>;
      <D.24327>:
      {
        char * stack_name;
        char * field_name;

        stack_name = stack_slot_full_name (value);
        D.24293 = field->type;
        field_name = mono_type_full_name (D.24293);
        D.24318 = ctx->verifiable;
        if (D.24318 != 0) goto <D.24329>; else goto <D.24331>;
        <D.24331>:
        D.24308 = ctx->level;
        D.24320 = D.24308 & 128;
        if (D.24320 != 0) goto <D.24329>; else goto <D.24330>;
        <D.24329>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (12);
          vinfo->info.status = 8;
          D.24299 = ctx->ip_offset;
          D.24332 = monoeg_g_strdup_printf ("Incompatible type in static field store expected \'%s\' but found \'%s\' at 0x%04x", field_name, stack_name, D.24299);
          vinfo->info.message = D.24332;
          vinfo->exception_type = 4;
          D.24301 = ctx->list;
          D.24333 = monoeg_g_slist_prepend (D.24301, vinfo);
          ctx->list = D.24333;
        }
        ctx->verifiable = 0;
        D.24308 = ctx->level;
        D.24323 = D.24308 & 16;
        if (D.24323 != 0) goto <D.24334>; else goto <D.24335>;
        <D.24334>:
        ctx->valid = 0;
        <D.24335>:
        <D.24330>:
        monoeg_g_free (field_name);
        monoeg_g_free (stack_name);
      }
      <D.24328>:
    }
  finally
    {
      klass = {CLOBBER};
    }
}


do_stobj (struct VerifyContext * ctx, int token)
{
  unsigned int D.24339;
  unsigned int D.24340;
  int D.24343;
  int D.24346;
  int D.24351;
  int D.24353;
  int D.24354;
  unsigned int D.24355;
  gchar * D.24356;
  struct GSList * D.24357;
  struct GSList * D.24358;
  int D.24359;
  int D.24362;
  gchar * D.24368;
  struct GSList * D.24369;
  int D.24372;
  struct MonoType * D.24375;
  int D.24376;
  int D.24379;
  gchar * D.24385;
  struct GSList * D.24386;
  int D.24389;
  gchar * D.24395;
  struct GSList * D.24396;
  struct MonoType * D.24399;
  struct MonoType * D.24400;
  int D.24401;
  gchar * D.24407;
  struct GSList * D.24408;
  struct ILStackDesc * dest;
  struct ILStackDesc * src;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, token, "stobj");
  D.24339 = ctx->prefix_set;
  D.24340 = D.24339 & 4294967292;
  ctx->prefix_set = D.24340;
  if (type == 0B) goto <D.24341>; else goto <D.24342>;
  <D.24341>:
  return;
  <D.24342>:
  D.24343 = check_underflow (ctx, 2);
  if (D.24343 == 0) goto <D.24344>; else goto <D.24345>;
  <D.24344>:
  return;
  <D.24345>:
  src = stack_pop (ctx);
  dest = stack_pop (ctx);
  D.24346 = stack_slot_is_managed_mutability_pointer (dest);
  if (D.24346 != 0) goto <D.24347>; else goto <D.24348>;
  <D.24347>:
  D.24351 = ctx->verifiable;
  if (D.24351 != 0) goto <D.24349>; else goto <D.24352>;
  <D.24352>:
  D.24353 = ctx->level;
  D.24354 = D.24353 & 128;
  if (D.24354 != 0) goto <D.24349>; else goto <D.24350>;
  <D.24349>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24355 = ctx->ip_offset;
    D.24356 = monoeg_g_strdup_printf ("Cannot use a readonly pointer with stobj at 0x%04x", D.24355);
    vinfo->info.message = D.24356;
    vinfo->exception_type = 4;
    D.24357 = ctx->list;
    D.24358 = monoeg_g_slist_prepend (D.24357, vinfo);
    ctx->list = D.24358;
  }
  ctx->verifiable = 0;
  D.24353 = ctx->level;
  D.24359 = D.24353 & 16;
  if (D.24359 != 0) goto <D.24360>; else goto <D.24361>;
  <D.24360>:
  ctx->valid = 0;
  <D.24361>:
  <D.24350>:
  <D.24348>:
  D.24362 = stack_slot_is_managed_pointer (dest);
  if (D.24362 == 0) goto <D.24363>; else goto <D.24364>;
  <D.24363>:
  D.24351 = ctx->verifiable;
  if (D.24351 != 0) goto <D.24365>; else goto <D.24367>;
  <D.24367>:
  D.24353 = ctx->level;
  D.24354 = D.24353 & 128;
  if (D.24354 != 0) goto <D.24365>; else goto <D.24366>;
  <D.24365>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24355 = ctx->ip_offset;
    D.24368 = monoeg_g_strdup_printf ("Invalid destination of stobj operation at 0x%04x", D.24355);
    vinfo->info.message = D.24368;
    vinfo->exception_type = 4;
    D.24357 = ctx->list;
    D.24369 = monoeg_g_slist_prepend (D.24357, vinfo);
    ctx->list = D.24369;
  }
  ctx->verifiable = 0;
  D.24353 = ctx->level;
  D.24359 = D.24353 & 16;
  if (D.24359 != 0) goto <D.24370>; else goto <D.24371>;
  <D.24370>:
  ctx->valid = 0;
  <D.24371>:
  <D.24366>:
  <D.24364>:
  D.24372 = stack_slot_is_boxed_value (src);
  if (D.24372 != 0) goto <D.24373>; else goto <D.24374>;
  <D.24373>:
  D.24375 = src->type;
  D.24376 = mono_type_is_reference (D.24375);
  if (D.24376 == 0) goto <D.24377>; else goto <D.24378>;
  <D.24377>:
  D.24379 = mono_type_is_reference (type);
  if (D.24379 == 0) goto <D.24380>; else goto <D.24381>;
  <D.24380>:
  D.24351 = ctx->verifiable;
  if (D.24351 != 0) goto <D.24382>; else goto <D.24384>;
  <D.24384>:
  D.24353 = ctx->level;
  D.24354 = D.24353 & 128;
  if (D.24354 != 0) goto <D.24382>; else goto <D.24383>;
  <D.24382>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24355 = ctx->ip_offset;
    D.24385 = monoeg_g_strdup_printf ("Cannot use stobj with a boxed source value that is not a reference type at 0x%04x", D.24355);
    vinfo->info.message = D.24385;
    vinfo->exception_type = 4;
    D.24357 = ctx->list;
    D.24386 = monoeg_g_slist_prepend (D.24357, vinfo);
    ctx->list = D.24386;
  }
  ctx->verifiable = 0;
  D.24353 = ctx->level;
  D.24359 = D.24353 & 16;
  if (D.24359 != 0) goto <D.24387>; else goto <D.24388>;
  <D.24387>:
  ctx->valid = 0;
  <D.24388>:
  <D.24383>:
  <D.24381>:
  <D.24378>:
  <D.24374>:
  D.24389 = verify_stack_type_compatibility (ctx, type, src);
  if (D.24389 == 0) goto <D.24390>; else goto <D.24391>;
  <D.24390>:
  {
    char * type_name;
    char * src_name;

    type_name = mono_type_full_name (type);
    src_name = stack_slot_full_name (src);
    D.24351 = ctx->verifiable;
    if (D.24351 != 0) goto <D.24392>; else goto <D.24394>;
    <D.24394>:
    D.24353 = ctx->level;
    D.24354 = D.24353 & 128;
    if (D.24354 != 0) goto <D.24392>; else goto <D.24393>;
    <D.24392>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.24355 = ctx->ip_offset;
      D.24395 = monoeg_g_strdup_printf ("Token \'%s\' and source \'%s\' of stobj don\'t match \' at 0x%04x", type_name, src_name, D.24355);
      vinfo->info.message = D.24395;
      vinfo->exception_type = 4;
      D.24357 = ctx->list;
      D.24396 = monoeg_g_slist_prepend (D.24357, vinfo);
      ctx->list = D.24396;
    }
    ctx->verifiable = 0;
    D.24353 = ctx->level;
    D.24359 = D.24353 & 16;
    if (D.24359 != 0) goto <D.24397>; else goto <D.24398>;
    <D.24397>:
    ctx->valid = 0;
    <D.24398>:
    <D.24393>:
    monoeg_g_free (type_name);
    monoeg_g_free (src_name);
  }
  <D.24391>:
  D.24399 = dest->type;
  D.24400 = mono_type_get_type_byval (D.24399);
  D.24401 = verify_type_compatibility (ctx, D.24400, type);
  if (D.24401 == 0) goto <D.24402>; else goto <D.24403>;
  <D.24402>:
  D.24351 = ctx->verifiable;
  if (D.24351 != 0) goto <D.24404>; else goto <D.24406>;
  <D.24406>:
  D.24353 = ctx->level;
  D.24354 = D.24353 & 128;
  if (D.24354 != 0) goto <D.24404>; else goto <D.24405>;
  <D.24404>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24355 = ctx->ip_offset;
    D.24407 = monoeg_g_strdup_printf ("Destination and token types of stobj don\'t match at 0x%04x", D.24355);
    vinfo->info.message = D.24407;
    vinfo->exception_type = 4;
    D.24357 = ctx->list;
    D.24408 = monoeg_g_slist_prepend (D.24357, vinfo);
    ctx->list = D.24408;
  }
  ctx->verifiable = 0;
  D.24353 = ctx->level;
  D.24359 = D.24353 & 16;
  if (D.24359 != 0) goto <D.24409>; else goto <D.24410>;
  <D.24409>:
  ctx->valid = 0;
  <D.24410>:
  <D.24405>:
  <D.24403>:
}


do_box_value (struct VerifyContext * ctx, int klass_token)
{
  int D.24414;
  int D.24417;
  struct MonoType * D.24420;
  int D.24421;
  int D.24424;
  struct ILStackDesc * D.24427;
  int D.24428;
  int D.24429;
  int D.24430;
  int D.24435;
  int D.24437;
  int D.24438;
  unsigned int D.24439;
  gchar * D.24440;
  struct GSList * D.24441;
  struct GSList * D.24442;
  int D.24443;
  int D.24446;
  struct MonoClass * D.24449;
  struct ILStackDesc * value;
  struct MonoType * type;
  struct MonoClass * klass;

  type = get_boxable_mono_type (ctx, klass_token, "box");
  if (type == 0B) goto <D.24412>; else goto <D.24413>;
  <D.24412>:
  return;
  <D.24413>:
  D.24414 = check_underflow (ctx, 1);
  if (D.24414 == 0) goto <D.24415>; else goto <D.24416>;
  <D.24415>:
  return;
  <D.24416>:
  value = stack_pop (ctx);
  D.24417 = stack_slot_get_underlying_type (value);
  if (D.24417 == 6) goto <D.24418>; else goto <D.24419>;
  <D.24418>:
  D.24420 = value->type;
  D.24421 = mono_type_is_reference (D.24420);
  if (D.24421 != 0) goto <D.24422>; else goto <D.24423>;
  <D.24422>:
  D.24424 = mono_type_is_reference (type);
  if (D.24424 != 0) goto <D.24425>; else goto <D.24426>;
  <D.24425>:
  D.24427 = stack_push_stack_val (ctx, value);
  D.24428 = D.24427->stype;
  D.24429 = D.24428 | 4096;
  D.24427->stype = D.24429;
  return;
  <D.24426>:
  <D.24423>:
  <D.24419>:
  D.24430 = verify_stack_type_compatibility (ctx, type, value);
  if (D.24430 == 0) goto <D.24431>; else goto <D.24432>;
  <D.24431>:
  D.24435 = ctx->verifiable;
  if (D.24435 != 0) goto <D.24433>; else goto <D.24436>;
  <D.24436>:
  D.24437 = ctx->level;
  D.24438 = D.24437 & 128;
  if (D.24438 != 0) goto <D.24433>; else goto <D.24434>;
  <D.24433>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24439 = ctx->ip_offset;
    D.24440 = monoeg_g_strdup_printf ("Invalid type at stack for boxing operation at 0x%04x", D.24439);
    vinfo->info.message = D.24440;
    vinfo->exception_type = 4;
    D.24441 = ctx->list;
    D.24442 = monoeg_g_slist_prepend (D.24441, vinfo);
    ctx->list = D.24442;
  }
  ctx->verifiable = 0;
  D.24437 = ctx->level;
  D.24443 = D.24437 & 16;
  if (D.24443 != 0) goto <D.24444>; else goto <D.24445>;
  <D.24444>:
  ctx->valid = 0;
  <D.24445>:
  <D.24434>:
  <D.24432>:
  klass = mono_class_from_mono_type (type);
  D.24446 = mono_class_is_nullable (klass);
  if (D.24446 != 0) goto <D.24447>; else goto <D.24448>;
  <D.24447>:
  D.24449 = mono_class_get_nullable_param (klass);
  type = &D.24449->byval_arg;
  <D.24448>:
  stack_push_val (ctx, 4102, type);
}


do_newarr (struct VerifyContext * ctx, int token)
{
  int D.24453;
  int D.24456;
  int D.24459;
  int D.24464;
  int D.24466;
  int D.24467;
  unsigned int D.24468;
  const char * D.24469;
  gchar * D.24470;
  struct GSList * D.24471;
  struct GSList * D.24472;
  int D.24473;
  struct MonoClass * D.24476;
  struct MonoClass * D.24477;
  struct MonoType * D.24478;
  struct ILStackDesc * D.24479;
  struct ILStackDesc * value;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, token, "newarr");
  if (type == 0B) goto <D.24451>; else goto <D.24452>;
  <D.24451>:
  return;
  <D.24452>:
  D.24453 = check_underflow (ctx, 1);
  if (D.24453 == 0) goto <D.24454>; else goto <D.24455>;
  <D.24454>:
  return;
  <D.24455>:
  value = stack_pop (ctx);
  D.24456 = stack_slot_get_type (value);
  if (D.24456 != 1) goto <D.24457>; else goto <D.24458>;
  <D.24457>:
  D.24459 = stack_slot_get_type (value);
  if (D.24459 != 3) goto <D.24460>; else goto <D.24461>;
  <D.24460>:
  D.24464 = ctx->verifiable;
  if (D.24464 != 0) goto <D.24462>; else goto <D.24465>;
  <D.24465>:
  D.24466 = ctx->level;
  D.24467 = D.24466 & 128;
  if (D.24467 != 0) goto <D.24462>; else goto <D.24463>;
  <D.24462>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24468 = ctx->ip_offset;
    D.24469 = stack_slot_get_name (value);
    D.24470 = monoeg_g_strdup_printf ("Array size type on stack (%s) is not a verifiable type at 0x%04x", D.24469, D.24468);
    vinfo->info.message = D.24470;
    vinfo->exception_type = 4;
    D.24471 = ctx->list;
    D.24472 = monoeg_g_slist_prepend (D.24471, vinfo);
    ctx->list = D.24472;
  }
  ctx->verifiable = 0;
  D.24466 = ctx->level;
  D.24473 = D.24466 & 16;
  if (D.24473 != 0) goto <D.24474>; else goto <D.24475>;
  <D.24474>:
  ctx->valid = 0;
  <D.24475>:
  <D.24463>:
  <D.24461>:
  <D.24458>:
  D.24476 = mono_class_from_mono_type (type);
  D.24477 = mono_array_class_get (D.24476, 1);
  D.24478 = mono_class_get_type (D.24477);
  D.24479 = stack_push (ctx);
  set_stack_value (ctx, D.24479, D.24478, 0);
}


do_ldlen (struct VerifyContext * ctx)
{
  int D.24481;
  int D.24486;
  struct MonoType * D.24488;
  unsigned char D.24489;
  int D.24492;
  int D.24494;
  int D.24495;
  unsigned int D.24496;
  gchar * D.24497;
  struct GSList * D.24498;
  struct GSList * D.24499;
  int D.24500;
  struct MonoClass * D.24503;
  struct MonoType * D.24504;
  struct ILStackDesc * value;

  D.24481 = check_underflow (ctx, 1);
  if (D.24481 == 0) goto <D.24482>; else goto <D.24483>;
  <D.24482>:
  return;
  <D.24483>:
  value = stack_pop (ctx);
  D.24486 = stack_slot_get_type (value);
  if (D.24486 != 6) goto <D.24484>; else goto <D.24487>;
  <D.24487>:
  D.24488 = value->type;
  D.24489 = D.24488->type;
  if (D.24489 != 29) goto <D.24484>; else goto <D.24485>;
  <D.24484>:
  D.24492 = ctx->verifiable;
  if (D.24492 != 0) goto <D.24490>; else goto <D.24493>;
  <D.24493>:
  D.24494 = ctx->level;
  D.24495 = D.24494 & 128;
  if (D.24495 != 0) goto <D.24490>; else goto <D.24491>;
  <D.24490>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24496 = ctx->ip_offset;
    D.24497 = monoeg_g_strdup_printf ("Invalid array type for ldlen at 0x%04x", D.24496);
    vinfo->info.message = D.24497;
    vinfo->exception_type = 4;
    D.24498 = ctx->list;
    D.24499 = monoeg_g_slist_prepend (D.24498, vinfo);
    ctx->list = D.24499;
  }
  ctx->verifiable = 0;
  D.24494 = ctx->level;
  D.24500 = D.24494 & 16;
  if (D.24500 != 0) goto <D.24501>; else goto <D.24502>;
  <D.24501>:
  ctx->valid = 0;
  <D.24502>:
  <D.24491>:
  <D.24485>:
  D.24503 = mono_defaults.int_class;
  D.24504 = &D.24503->byval_arg;
  stack_push_val (ctx, 3, D.24504);
}


do_ldelema (struct VerifyContext * ctx, int klass_token)
{
  int D.24508;
  int D.24511;
  int D.24514;
  int D.24519;
  int D.24521;
  int D.24522;
  unsigned int D.24523;
  const char * D.24524;
  gchar * D.24525;
  struct GSList * D.24526;
  struct GSList * D.24527;
  int D.24528;
  int D.24531;
  int D.24537;
  struct MonoType * D.24539;
  unsigned char D.24540;
  const char * D.24544;
  gchar * D.24545;
  struct GSList * D.24546;
  int D.24552;
  int D.24554;
  struct MonoClass * D.24555;
  struct MonoType * D.24556;
  gchar * D.24562;
  struct GSList * D.24563;
  unsigned int D.24566;
  unsigned int D.24567;
  unsigned int D.24570;
  int D.24571;
  int D.24572;
  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.24506>; else goto <D.24507>;
  <D.24506>:
  return;
  <D.24507>:
  D.24508 = check_underflow (ctx, 2);
  if (D.24508 == 0) goto <D.24509>; else goto <D.24510>;
  <D.24509>:
  return;
  <D.24510>:
  index = stack_pop (ctx);
  array = stack_pop (ctx);
  D.24511 = stack_slot_get_type (index);
  if (D.24511 != 1) goto <D.24512>; else goto <D.24513>;
  <D.24512>:
  D.24514 = stack_slot_get_type (index);
  if (D.24514 != 3) goto <D.24515>; else goto <D.24516>;
  <D.24515>:
  D.24519 = ctx->verifiable;
  if (D.24519 != 0) goto <D.24517>; else goto <D.24520>;
  <D.24520>:
  D.24521 = ctx->level;
  D.24522 = D.24521 & 128;
  if (D.24522 != 0) goto <D.24517>; else goto <D.24518>;
  <D.24517>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24523 = ctx->ip_offset;
    D.24524 = stack_slot_get_name (index);
    D.24525 = monoeg_g_strdup_printf ("Index type(%s) for ldelema is not an int or a native int at 0x%04x", D.24524, D.24523);
    vinfo->info.message = D.24525;
    vinfo->exception_type = 4;
    D.24526 = ctx->list;
    D.24527 = monoeg_g_slist_prepend (D.24526, vinfo);
    ctx->list = D.24527;
  }
  ctx->verifiable = 0;
  D.24521 = ctx->level;
  D.24528 = D.24521 & 16;
  if (D.24528 != 0) goto <D.24529>; else goto <D.24530>;
  <D.24529>:
  ctx->valid = 0;
  <D.24530>:
  <D.24518>:
  <D.24516>:
  <D.24513>:
  D.24531 = stack_slot_is_null_literal (array);
  if (D.24531 == 0) goto <D.24532>; else goto <D.24533>;
  <D.24532>:
  D.24537 = stack_slot_get_type (array);
  if (D.24537 != 6) goto <D.24534>; else goto <D.24538>;
  <D.24538>:
  D.24539 = array->type;
  D.24540 = D.24539->type;
  if (D.24540 != 29) goto <D.24534>; else goto <D.24535>;
  <D.24534>:
  D.24519 = ctx->verifiable;
  if (D.24519 != 0) goto <D.24541>; else goto <D.24543>;
  <D.24543>:
  D.24521 = ctx->level;
  D.24522 = D.24521 & 128;
  if (D.24522 != 0) goto <D.24541>; else goto <D.24542>;
  <D.24541>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24523 = ctx->ip_offset;
    D.24544 = stack_slot_get_name (array);
    D.24545 = monoeg_g_strdup_printf ("Invalid array type(%s) for ldelema at 0x%04x", D.24544, D.24523);
    vinfo->info.message = D.24545;
    vinfo->exception_type = 4;
    D.24526 = ctx->list;
    D.24546 = monoeg_g_slist_prepend (D.24526, vinfo);
    ctx->list = D.24546;
  }
  ctx->verifiable = 0;
  D.24521 = ctx->level;
  D.24528 = D.24521 & 16;
  if (D.24528 != 0) goto <D.24547>; else goto <D.24548>;
  <D.24547>:
  ctx->valid = 0;
  <D.24548>:
  <D.24542>:
  goto <D.24536>;
  <D.24535>:
  D.24552 = get_stack_type (type);
  if (D.24552 == 1) goto <D.24549>; else goto <D.24553>;
  <D.24553>:
  D.24554 = get_stack_type (type);
  if (D.24554 == 3) goto <D.24549>; else goto <D.24550>;
  <D.24549>:
  D.24539 = array->type;
  D.24555 = D.24539->data.klass;
  D.24556 = &D.24555->byval_arg;
  valid = verify_type_compatibility_full (ctx, type, D.24556, 1);
  goto <D.24551>;
  <D.24550>:
  D.24539 = array->type;
  D.24555 = D.24539->data.klass;
  D.24556 = &D.24555->byval_arg;
  valid = mono_metadata_type_equal (type, D.24556);
  <D.24551>:
  if (valid == 0) goto <D.24557>; else goto <D.24558>;
  <D.24557>:
  D.24519 = ctx->verifiable;
  if (D.24519 != 0) goto <D.24559>; else goto <D.24561>;
  <D.24561>:
  D.24521 = ctx->level;
  D.24522 = D.24521 & 128;
  if (D.24522 != 0) goto <D.24559>; else goto <D.24560>;
  <D.24559>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24523 = ctx->ip_offset;
    D.24562 = monoeg_g_strdup_printf ("Invalid array type on stack for ldelema at 0x%04x", D.24523);
    vinfo->info.message = D.24562;
    vinfo->exception_type = 4;
    D.24526 = ctx->list;
    D.24563 = monoeg_g_slist_prepend (D.24526, vinfo);
    ctx->list = D.24563;
  }
  ctx->verifiable = 0;
  D.24521 = ctx->level;
  D.24528 = D.24521 & 16;
  if (D.24528 != 0) goto <D.24564>; else goto <D.24565>;
  <D.24564>:
  ctx->valid = 0;
  <D.24565>:
  <D.24560>:
  <D.24558>:
  <D.24536>:
  <D.24533>:
  res = stack_push (ctx);
  set_stack_value (ctx, res, type, 1);
  D.24566 = ctx->prefix_set;
  D.24567 = D.24566 & 16;
  if (D.24567 != 0) goto <D.24568>; else goto <D.24569>;
  <D.24568>:
  D.24566 = ctx->prefix_set;
  D.24570 = D.24566 & 4294967279;
  ctx->prefix_set = D.24570;
  D.24571 = res->stype;
  D.24572 = D.24571 | 512;
  res->stype = D.24572;
  <D.24569>:
}


do_ldelem (struct VerifyContext * ctx, int opcode, int token)
{
  int D.24574;
  unsigned int D.24581;
  gchar * D.24582;
  struct GSList * D.24583;
  struct GSList * D.24584;
  int D.24586;
  int D.24589;
  int D.24594;
  int D.24596;
  int D.24597;
  const char * D.24598;
  gchar * D.24599;
  struct GSList * D.24600;
  int D.24601;
  int D.24604;
  int D.24610;
  struct MonoType * D.24612;
  unsigned char D.24613;
  const char * D.24617;
  gchar * D.24618;
  struct GSList * D.24619;
  struct MonoClass * D.24624;
  unsigned char D.24625;
  unsigned char D.24626;
  gchar * D.24632;
  struct GSList * D.24633;
  int D.24637;
  unsigned char D.24643;
  unsigned char D.24644;
  unsigned char D.24646;
  unsigned char D.24647;
  unsigned char D.24648;
  unsigned char D.24650;
  gchar * D.24654;
  struct GSList * D.24655;
  int D.24658;
  gchar * D.24664;
  struct GSList * D.24665;
  struct ILStackDesc * D.24668;
  struct ILStackDesc * index;
  struct ILStackDesc * array;
  struct MonoType * type;

  D.24574 = check_underflow (ctx, 2);
  if (D.24574 == 0) goto <D.24575>; else goto <D.24576>;
  <D.24575>:
  return;
  <D.24576>:
  if (opcode == 163) goto <D.24577>; else goto <D.24578>;
  <D.24577>:
  type = verifier_load_type (ctx, token, "ldelem.any");
  if (type == 0B) goto <D.24579>; else goto <D.24580>;
  <D.24579>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.24581 = ctx->ip_offset;
    D.24582 = monoeg_g_strdup_printf ("Type (0x%08x) not found at 0x%04x", token, D.24581);
    vinfo->info.message = D.24582;
    vinfo->exception_type = 3;
    D.24583 = ctx->list;
    D.24584 = monoeg_g_slist_prepend (D.24583, vinfo);
    ctx->list = D.24584;
  }
  ctx->valid = 0;
  return;
  <D.24580>:
  goto <D.24585>;
  <D.24578>:
  type = mono_type_from_opcode (opcode);
  <D.24585>:
  index = stack_pop (ctx);
  array = stack_pop (ctx);
  D.24586 = stack_slot_get_type (index);
  if (D.24586 != 1) goto <D.24587>; else goto <D.24588>;
  <D.24587>:
  D.24589 = stack_slot_get_type (index);
  if (D.24589 != 3) goto <D.24590>; else goto <D.24591>;
  <D.24590>:
  D.24594 = ctx->verifiable;
  if (D.24594 != 0) goto <D.24592>; else goto <D.24595>;
  <D.24595>:
  D.24596 = ctx->level;
  D.24597 = D.24596 & 128;
  if (D.24597 != 0) goto <D.24592>; else goto <D.24593>;
  <D.24592>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24581 = ctx->ip_offset;
    D.24598 = stack_slot_get_name (index);
    D.24599 = monoeg_g_strdup_printf ("Index type(%s) for ldelem.X is not an int or a native int at 0x%04x", D.24598, D.24581);
    vinfo->info.message = D.24599;
    vinfo->exception_type = 4;
    D.24583 = ctx->list;
    D.24600 = monoeg_g_slist_prepend (D.24583, vinfo);
    ctx->list = D.24600;
  }
  ctx->verifiable = 0;
  D.24596 = ctx->level;
  D.24601 = D.24596 & 16;
  if (D.24601 != 0) goto <D.24602>; else goto <D.24603>;
  <D.24602>:
  ctx->valid = 0;
  <D.24603>:
  <D.24593>:
  <D.24591>:
  <D.24588>:
  D.24604 = stack_slot_is_null_literal (array);
  if (D.24604 == 0) goto <D.24605>; else goto <D.24606>;
  <D.24605>:
  D.24610 = stack_slot_get_type (array);
  if (D.24610 != 6) goto <D.24607>; else goto <D.24611>;
  <D.24611>:
  D.24612 = array->type;
  D.24613 = D.24612->type;
  if (D.24613 != 29) goto <D.24607>; else goto <D.24608>;
  <D.24607>:
  D.24594 = ctx->verifiable;
  if (D.24594 != 0) goto <D.24614>; else goto <D.24616>;
  <D.24616>:
  D.24596 = ctx->level;
  D.24597 = D.24596 & 128;
  if (D.24597 != 0) goto <D.24614>; else goto <D.24615>;
  <D.24614>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24581 = ctx->ip_offset;
    D.24617 = stack_slot_get_name (array);
    D.24618 = monoeg_g_strdup_printf ("Invalid array type(%s) for ldelem.X at 0x%04x", D.24617, D.24581);
    vinfo->info.message = D.24618;
    vinfo->exception_type = 4;
    D.24583 = ctx->list;
    D.24619 = monoeg_g_slist_prepend (D.24583, vinfo);
    ctx->list = D.24619;
  }
  ctx->verifiable = 0;
  D.24596 = ctx->level;
  D.24601 = D.24596 & 16;
  if (D.24601 != 0) goto <D.24620>; else goto <D.24621>;
  <D.24620>:
  ctx->valid = 0;
  <D.24621>:
  <D.24615>:
  goto <D.24609>;
  <D.24608>:
  if (opcode == 154) goto <D.24622>; else goto <D.24623>;
  <D.24622>:
  D.24612 = array->type;
  D.24624 = D.24612->data.klass;
  D.24625 = BIT_FIELD_REF <*D.24624, 8, 160>;
  D.24626 = D.24625 & 8;
  if (D.24626 != 0) goto <D.24627>; else goto <D.24628>;
  <D.24627>:
  D.24594 = ctx->verifiable;
  if (D.24594 != 0) goto <D.24629>; else goto <D.24631>;
  <D.24631>:
  D.24596 = ctx->level;
  D.24597 = D.24596 & 128;
  if (D.24597 != 0) goto <D.24629>; else goto <D.24630>;
  <D.24629>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24581 = ctx->ip_offset;
    D.24632 = monoeg_g_strdup_printf ("Invalid array type is not a reference type for ldelem.ref 0x%04x", D.24581);
    vinfo->info.message = D.24632;
    vinfo->exception_type = 4;
    D.24583 = ctx->list;
    D.24633 = monoeg_g_slist_prepend (D.24583, vinfo);
    ctx->list = D.24633;
  }
  ctx->verifiable = 0;
  D.24596 = ctx->level;
  D.24601 = D.24596 & 16;
  if (D.24601 != 0) goto <D.24634>; else goto <D.24635>;
  <D.24634>:
  ctx->valid = 0;
  <D.24635>:
  <D.24630>:
  <D.24628>:
  D.24612 = array->type;
  D.24624 = D.24612->data.klass;
  type = &D.24624->byval_arg;
  goto <D.24636>;
  <D.24623>:
  {
    struct MonoType * candidate;

    D.24612 = array->type;
    D.24624 = D.24612->data.klass;
    candidate = &D.24624->byval_arg;
    D.24596 = ctx->level;
    D.24637 = D.24596 & 32;
    if (D.24637 == 0) goto <D.24638>; else goto <D.24639>;
    <D.24638>:
    {
      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.24643 = underlying_type->type;
      D.24644 = D.24643 + 248;
      if (D.24644 <= 1) goto <D.24645>; else goto <D.24640>;
      <D.24645>:
      D.24646 = underlying_candidate->type;
      D.24647 = D.24646 + 232;
      if (D.24647 <= 1) goto <D.24641>; else goto <D.24640>;
      <D.24640>:
      D.24646 = underlying_candidate->type;
      D.24648 = D.24646 + 248;
      if (D.24648 <= 1) goto <D.24649>; else goto <D.24642>;
      <D.24649>:
      D.24643 = underlying_type->type;
      D.24650 = D.24643 + 232;
      if (D.24650 <= 1) goto <D.24641>; else goto <D.24642>;
      <D.24641>:
      D.24594 = ctx->verifiable;
      if (D.24594 != 0) goto <D.24651>; else goto <D.24653>;
      <D.24653>:
      D.24596 = ctx->level;
      D.24597 = D.24596 & 128;
      if (D.24597 != 0) goto <D.24651>; else goto <D.24652>;
      <D.24651>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 8;
        D.24581 = ctx->ip_offset;
        D.24654 = monoeg_g_strdup_printf ("Invalid array type on stack for ldelem.X at 0x%04x", D.24581);
        vinfo->info.message = D.24654;
        vinfo->exception_type = 4;
        D.24583 = ctx->list;
        D.24655 = monoeg_g_slist_prepend (D.24583, vinfo);
        ctx->list = D.24655;
      }
      ctx->verifiable = 0;
      D.24596 = ctx->level;
      D.24601 = D.24596 & 16;
      if (D.24601 != 0) goto <D.24656>; else goto <D.24657>;
      <D.24656>:
      ctx->valid = 0;
      <D.24657>:
      <D.24652>:
      <D.24642>:
    }
    <D.24639>:
    D.24658 = verify_type_compatibility_full (ctx, type, candidate, 1);
    if (D.24658 == 0) goto <D.24659>; else goto <D.24660>;
    <D.24659>:
    D.24594 = ctx->verifiable;
    if (D.24594 != 0) goto <D.24661>; else goto <D.24663>;
    <D.24663>:
    D.24596 = ctx->level;
    D.24597 = D.24596 & 128;
    if (D.24597 != 0) goto <D.24661>; else goto <D.24662>;
    <D.24661>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.24581 = ctx->ip_offset;
      D.24664 = monoeg_g_strdup_printf ("Invalid array type on stack for ldelem.X at 0x%04x", D.24581);
      vinfo->info.message = D.24664;
      vinfo->exception_type = 4;
      D.24583 = ctx->list;
      D.24665 = monoeg_g_slist_prepend (D.24583, vinfo);
      ctx->list = D.24665;
    }
    ctx->verifiable = 0;
    D.24596 = ctx->level;
    D.24601 = D.24596 & 16;
    if (D.24601 != 0) goto <D.24666>; else goto <D.24667>;
    <D.24666>:
    ctx->valid = 0;
    <D.24667>:
    <D.24662>:
    <D.24660>:
  }
  <D.24636>:
  <D.24609>:
  <D.24606>:
  D.24668 = stack_push (ctx);
  set_stack_value (ctx, D.24668, type, 0);
}


verifier_load_type (struct VerifyContext * ctx, int token, const char * opcode)
{
  struct MonoMethod * D.24670;
  unsigned char D.24671;
  unsigned char D.24672;
  unsigned int token.110;
  struct MonoType * iftmp.111;
  int D.24683;
  unsigned int D.24684;
  unsigned int D.24685;
  _Bool D.24686;
  _Bool D.24687;
  _Bool D.24688;
  unsigned int token.112;
  struct MonoImage * D.24691;
  int D.24692;
  unsigned int D.24693;
  gchar * D.24694;
  struct GSList * D.24695;
  struct GSList * D.24696;
  struct MonoType * D.24697;
  struct MonoGenericContext * D.24698;
  struct MonoLoaderError * D.24702;
  gchar * D.24703;
  struct GSList * D.24704;
  int D.24705;
  struct MonoType * type;

  D.24670 = ctx->method;
  D.24671 = BIT_FIELD_REF <*D.24670, 8, 160>;
  D.24672 = D.24671 & 124;
  if (D.24672 != 0) goto <D.24673>; else goto <D.24674>;
  <D.24673>:
  {
    struct MonoClass * class;

    token.110 = (unsigned int) token;
    D.24670 = ctx->method;
    class = mono_method_get_wrapper_data (D.24670, token.110);
    if (class != 0B) goto <D.24677>; else goto <D.24678>;
    <D.24677>:
    iftmp.111 = &class->byval_arg;
    goto <D.24679>;
    <D.24678>:
    iftmp.111 = 0B;
    <D.24679>:
    type = iftmp.111;
  }
  goto <D.24680>;
  <D.24674>:
  D.24683 = token >> 24;
  D.24684 = (unsigned int) D.24683;
  D.24685 = D.24684 + 4294967295;
  D.24686 = D.24685 > 1;
  D.24687 = D.24683 != 27;
  D.24688 = D.24686 & D.24687;
  if (D.24688 != 0) goto <D.24681>; else goto <D.24689>;
  <D.24689>:
  token.112 = (unsigned int) token;
  D.24691 = ctx->image;
  D.24692 = token_bounds_check (D.24691, token.112);
  if (D.24692 == 0) goto <D.24681>; else goto <D.24682>;
  <D.24681>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.24693 = ctx->ip_offset;
    D.24694 = monoeg_g_strdup_printf ("Invalid type token 0x%08x at 0x%04x", token, D.24693);
    vinfo->info.message = D.24694;
    vinfo->exception_type = 12;
    D.24695 = ctx->list;
    D.24696 = monoeg_g_slist_prepend (D.24695, vinfo);
    ctx->list = D.24696;
  }
  ctx->valid = 0;
  D.24697 = 0B;
  return D.24697;
  <D.24682>:
  D.24698 = ctx->generic_context;
  token.112 = (unsigned int) token;
  D.24691 = ctx->image;
  type = mono_type_get_full (D.24691, token.112, D.24698);
  <D.24680>:
  if (type == 0B) goto <D.24699>; else goto <D.24701>;
  <D.24701>:
  D.24702 = mono_loader_get_last_error ();
  if (D.24702 != 0B) goto <D.24699>; else goto <D.24700>;
  <D.24699>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.24693 = ctx->ip_offset;
    D.24703 = monoeg_g_strdup_printf ("Cannot load type from token 0x%08x for %s at 0x%04x", token, opcode, D.24693);
    vinfo->info.message = D.24703;
    vinfo->exception_type = 12;
    D.24695 = ctx->list;
    D.24704 = monoeg_g_slist_prepend (D.24695, vinfo);
    ctx->list = D.24704;
  }
  ctx->valid = 0;
  mono_loader_clear_error ();
  D.24697 = 0B;
  return D.24697;
  <D.24700>:
  D.24705 = mono_type_is_valid_in_context (ctx, type);
  if (D.24705 == 0) goto <D.24706>; else goto <D.24707>;
  <D.24706>:
  D.24697 = 0B;
  return D.24697;
  <D.24707>:
  D.24697 = type;
  return D.24697;
}


do_stelem (struct VerifyContext * ctx, int opcode, int token)
{
  int D.24709;
  unsigned int D.24716;
  gchar * D.24717;
  struct GSList * D.24718;
  struct GSList * D.24719;
  int D.24721;
  int D.24724;
  int D.24729;
  int D.24731;
  int D.24732;
  const char * D.24733;
  gchar * D.24734;
  struct GSList * D.24735;
  int D.24736;
  int D.24739;
  int D.24745;
  struct MonoType * D.24747;
  unsigned char D.24748;
  const char * D.24752;
  gchar * D.24753;
  struct GSList * D.24754;
  struct MonoClass * D.24759;
  unsigned char D.24760;
  unsigned char D.24761;
  gchar * D.24767;
  struct GSList * D.24768;
  struct MonoType * D.24772;
  int D.24773;
  gchar * D.24779;
  struct GSList * D.24780;
  int D.24785;
  struct MonoType * D.24788;
  struct MonoClass * D.24789;
  unsigned char D.24790;
  unsigned char D.24791;
  gchar * D.24797;
  struct GSList * D.24798;
  int D.24804;
  gchar * D.24810;
  struct GSList * D.24811;
  int D.24814;
  int D.24817;
  int D.24820;
  gchar * D.24826;
  struct GSList * D.24827;
  struct ILStackDesc * index;
  struct ILStackDesc * array;
  struct ILStackDesc * value;
  struct MonoType * type;

  D.24709 = check_underflow (ctx, 3);
  if (D.24709 == 0) goto <D.24710>; else goto <D.24711>;
  <D.24710>:
  return;
  <D.24711>:
  if (opcode == 164) goto <D.24712>; else goto <D.24713>;
  <D.24712>:
  type = verifier_load_type (ctx, token, "stelem.any");
  if (type == 0B) goto <D.24714>; else goto <D.24715>;
  <D.24714>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.24716 = ctx->ip_offset;
    D.24717 = monoeg_g_strdup_printf ("Type (0x%08x) not found at 0x%04x", token, D.24716);
    vinfo->info.message = D.24717;
    vinfo->exception_type = 3;
    D.24718 = ctx->list;
    D.24719 = monoeg_g_slist_prepend (D.24718, vinfo);
    ctx->list = D.24719;
  }
  ctx->valid = 0;
  return;
  <D.24715>:
  goto <D.24720>;
  <D.24713>:
  type = mono_type_from_opcode (opcode);
  <D.24720>:
  value = stack_pop (ctx);
  index = stack_pop (ctx);
  array = stack_pop (ctx);
  D.24721 = stack_slot_get_type (index);
  if (D.24721 != 1) goto <D.24722>; else goto <D.24723>;
  <D.24722>:
  D.24724 = stack_slot_get_type (index);
  if (D.24724 != 3) goto <D.24725>; else goto <D.24726>;
  <D.24725>:
  D.24729 = ctx->verifiable;
  if (D.24729 != 0) goto <D.24727>; else goto <D.24730>;
  <D.24730>:
  D.24731 = ctx->level;
  D.24732 = D.24731 & 128;
  if (D.24732 != 0) goto <D.24727>; else goto <D.24728>;
  <D.24727>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24716 = ctx->ip_offset;
    D.24733 = stack_slot_get_name (index);
    D.24734 = monoeg_g_strdup_printf ("Index type(%s) for stdelem.X is not an int or a native int at 0x%04x", D.24733, D.24716);
    vinfo->info.message = D.24734;
    vinfo->exception_type = 4;
    D.24718 = ctx->list;
    D.24735 = monoeg_g_slist_prepend (D.24718, vinfo);
    ctx->list = D.24735;
  }
  ctx->verifiable = 0;
  D.24731 = ctx->level;
  D.24736 = D.24731 & 16;
  if (D.24736 != 0) goto <D.24737>; else goto <D.24738>;
  <D.24737>:
  ctx->valid = 0;
  <D.24738>:
  <D.24728>:
  <D.24726>:
  <D.24723>:
  D.24739 = stack_slot_is_null_literal (array);
  if (D.24739 == 0) goto <D.24740>; else goto <D.24741>;
  <D.24740>:
  D.24745 = stack_slot_get_type (array);
  if (D.24745 != 6) goto <D.24742>; else goto <D.24746>;
  <D.24746>:
  D.24747 = array->type;
  D.24748 = D.24747->type;
  if (D.24748 != 29) goto <D.24742>; else goto <D.24743>;
  <D.24742>:
  D.24729 = ctx->verifiable;
  if (D.24729 != 0) goto <D.24749>; else goto <D.24751>;
  <D.24751>:
  D.24731 = ctx->level;
  D.24732 = D.24731 & 128;
  if (D.24732 != 0) goto <D.24749>; else goto <D.24750>;
  <D.24749>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24716 = ctx->ip_offset;
    D.24752 = stack_slot_get_name (array);
    D.24753 = monoeg_g_strdup_printf ("Invalid array type(%s) for stelem.X at 0x%04x", D.24752, D.24716);
    vinfo->info.message = D.24753;
    vinfo->exception_type = 4;
    D.24718 = ctx->list;
    D.24754 = monoeg_g_slist_prepend (D.24718, vinfo);
    ctx->list = D.24754;
  }
  ctx->verifiable = 0;
  D.24731 = ctx->level;
  D.24736 = D.24731 & 16;
  if (D.24736 != 0) goto <D.24755>; else goto <D.24756>;
  <D.24755>:
  ctx->valid = 0;
  <D.24756>:
  <D.24750>:
  goto <D.24744>;
  <D.24743>:
  if (opcode == 162) goto <D.24757>; else goto <D.24758>;
  <D.24757>:
  D.24747 = array->type;
  D.24759 = D.24747->data.klass;
  D.24760 = BIT_FIELD_REF <*D.24759, 8, 160>;
  D.24761 = D.24760 & 8;
  if (D.24761 != 0) goto <D.24762>; else goto <D.24763>;
  <D.24762>:
  D.24729 = ctx->verifiable;
  if (D.24729 != 0) goto <D.24764>; else goto <D.24766>;
  <D.24766>:
  D.24731 = ctx->level;
  D.24732 = D.24731 & 128;
  if (D.24732 != 0) goto <D.24764>; else goto <D.24765>;
  <D.24764>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24716 = ctx->ip_offset;
    D.24767 = monoeg_g_strdup_printf ("Invalid array type is not a reference type for stelem.ref 0x%04x", D.24716);
    vinfo->info.message = D.24767;
    vinfo->exception_type = 4;
    D.24718 = ctx->list;
    D.24768 = monoeg_g_slist_prepend (D.24718, vinfo);
    ctx->list = D.24768;
  }
  ctx->verifiable = 0;
  D.24731 = ctx->level;
  D.24736 = D.24731 & 16;
  if (D.24736 != 0) goto <D.24769>; else goto <D.24770>;
  <D.24769>:
  ctx->valid = 0;
  <D.24770>:
  <D.24765>:
  <D.24763>:
  goto <D.24771>;
  <D.24758>:
  D.24747 = array->type;
  D.24759 = D.24747->data.klass;
  D.24772 = &D.24759->byval_arg;
  D.24773 = verify_type_compatibility_full (ctx, D.24772, type, 1);
  if (D.24773 == 0) goto <D.24774>; else goto <D.24775>;
  <D.24774>:
  D.24729 = ctx->verifiable;
  if (D.24729 != 0) goto <D.24776>; else goto <D.24778>;
  <D.24778>:
  D.24731 = ctx->level;
  D.24732 = D.24731 & 128;
  if (D.24732 != 0) goto <D.24776>; else goto <D.24777>;
  <D.24776>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24716 = ctx->ip_offset;
    D.24779 = monoeg_g_strdup_printf ("Invalid array type on stack for stdelem.X at 0x%04x", D.24716);
    vinfo->info.message = D.24779;
    vinfo->exception_type = 4;
    D.24718 = ctx->list;
    D.24780 = monoeg_g_slist_prepend (D.24718, vinfo);
    ctx->list = D.24780;
  }
  ctx->verifiable = 0;
  D.24731 = ctx->level;
  D.24736 = D.24731 & 16;
  if (D.24736 != 0) goto <D.24781>; else goto <D.24782>;
  <D.24781>:
  ctx->valid = 0;
  <D.24782>:
  <D.24777>:
  <D.24775>:
  <D.24771>:
  <D.24744>:
  <D.24741>:
  if (opcode == 162) goto <D.24783>; else goto <D.24784>;
  <D.24783>:
  D.24785 = stack_slot_is_boxed_value (value);
  if (D.24785 == 0) goto <D.24786>; else goto <D.24787>;
  <D.24786>:
  D.24788 = value->type;
  D.24789 = mono_class_from_mono_type (D.24788);
  D.24790 = BIT_FIELD_REF <*D.24789, 8, 160>;
  D.24791 = D.24790 & 8;
  if (D.24791 != 0) goto <D.24792>; else goto <D.24793>;
  <D.24792>:
  D.24729 = ctx->verifiable;
  if (D.24729 != 0) goto <D.24794>; else goto <D.24796>;
  <D.24796>:
  D.24731 = ctx->level;
  D.24732 = D.24731 & 128;
  if (D.24732 != 0) goto <D.24794>; else goto <D.24795>;
  <D.24794>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24716 = ctx->ip_offset;
    D.24797 = monoeg_g_strdup_printf ("Invalid value is not a reference type for stelem.ref 0x%04x", D.24716);
    vinfo->info.message = D.24797;
    vinfo->exception_type = 4;
    D.24718 = ctx->list;
    D.24798 = monoeg_g_slist_prepend (D.24718, vinfo);
    ctx->list = D.24798;
  }
  ctx->verifiable = 0;
  D.24731 = ctx->level;
  D.24736 = D.24731 & 16;
  if (D.24736 != 0) goto <D.24799>; else goto <D.24800>;
  <D.24799>:
  ctx->valid = 0;
  <D.24800>:
  <D.24795>:
  <D.24793>:
  <D.24787>:
  goto <D.24801>;
  <D.24784>:
  if (opcode != 162) goto <D.24802>; else goto <D.24803>;
  <D.24802>:
  D.24804 = verify_stack_type_compatibility (ctx, type, value);
  if (D.24804 == 0) goto <D.24805>; else goto <D.24806>;
  <D.24805>:
  D.24729 = ctx->verifiable;
  if (D.24729 != 0) goto <D.24807>; else goto <D.24809>;
  <D.24809>:
  D.24731 = ctx->level;
  D.24732 = D.24731 & 128;
  if (D.24732 != 0) goto <D.24807>; else goto <D.24808>;
  <D.24807>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24716 = ctx->ip_offset;
    D.24810 = monoeg_g_strdup_printf ("Invalid value on stack for stdelem.X at 0x%04x", D.24716);
    vinfo->info.message = D.24810;
    vinfo->exception_type = 4;
    D.24718 = ctx->list;
    D.24811 = monoeg_g_slist_prepend (D.24718, vinfo);
    ctx->list = D.24811;
  }
  ctx->verifiable = 0;
  D.24731 = ctx->level;
  D.24736 = D.24731 & 16;
  if (D.24736 != 0) goto <D.24812>; else goto <D.24813>;
  <D.24812>:
  ctx->valid = 0;
  <D.24813>:
  <D.24808>:
  <D.24806>:
  D.24814 = stack_slot_is_boxed_value (value);
  if (D.24814 != 0) goto <D.24815>; else goto <D.24816>;
  <D.24815>:
  D.24788 = value->type;
  D.24817 = mono_type_is_reference (D.24788);
  if (D.24817 == 0) goto <D.24818>; else goto <D.24819>;
  <D.24818>:
  D.24820 = mono_type_is_reference (type);
  if (D.24820 == 0) goto <D.24821>; else goto <D.24822>;
  <D.24821>:
  D.24729 = ctx->verifiable;
  if (D.24729 != 0) goto <D.24823>; else goto <D.24825>;
  <D.24825>:
  D.24731 = ctx->level;
  D.24732 = D.24731 & 128;
  if (D.24732 != 0) goto <D.24823>; else goto <D.24824>;
  <D.24823>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24716 = ctx->ip_offset;
    D.24826 = monoeg_g_strdup_printf ("Cannot use stobj with a boxed source value that is not a reference type at 0x%04x", D.24716);
    vinfo->info.message = D.24826;
    vinfo->exception_type = 4;
    D.24718 = ctx->list;
    D.24827 = monoeg_g_slist_prepend (D.24718, vinfo);
    ctx->list = D.24827;
  }
  ctx->verifiable = 0;
  D.24731 = ctx->level;
  D.24736 = D.24731 & 16;
  if (D.24736 != 0) goto <D.24828>; else goto <D.24829>;
  <D.24828>:
  ctx->valid = 0;
  <D.24829>:
  <D.24824>:
  <D.24822>:
  <D.24819>:
  <D.24816>:
  <D.24803>:
  <D.24801>:
}


do_unbox_any (struct VerifyContext * ctx, int klass_token)
{
  int D.24833;
  int D.24838;
  int D.24840;
  struct MonoType * D.24842;
  struct MonoClass * D.24843;
  unsigned char D.24844;
  unsigned char D.24845;
  int D.24848;
  int D.24850;
  int D.24851;
  unsigned int D.24852;
  const char * D.24853;
  gchar * D.24854;
  struct GSList * D.24855;
  struct GSList * D.24856;
  int D.24857;
  struct ILStackDesc * D.24860;
  struct ILStackDesc * value;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, klass_token, "unbox.any");
  if (type == 0B) goto <D.24831>; else goto <D.24832>;
  <D.24831>:
  return;
  <D.24832>:
  D.24833 = check_underflow (ctx, 1);
  if (D.24833 == 0) goto <D.24834>; else goto <D.24835>;
  <D.24834>:
  return;
  <D.24835>:
  value = stack_pop (ctx);
  D.24838 = stack_slot_get_type (value);
  if (D.24838 != 6) goto <D.24836>; else goto <D.24839>;
  <D.24839>:
  D.24840 = stack_slot_is_boxed_value (value);
  if (D.24840 == 0) goto <D.24841>; else goto <D.24837>;
  <D.24841>:
  D.24842 = value->type;
  D.24843 = mono_class_from_mono_type (D.24842);
  D.24844 = BIT_FIELD_REF <*D.24843, 8, 160>;
  D.24845 = D.24844 & 8;
  if (D.24845 != 0) goto <D.24836>; else goto <D.24837>;
  <D.24836>:
  D.24848 = ctx->verifiable;
  if (D.24848 != 0) goto <D.24846>; else goto <D.24849>;
  <D.24849>:
  D.24850 = ctx->level;
  D.24851 = D.24850 & 128;
  if (D.24851 != 0) goto <D.24846>; else goto <D.24847>;
  <D.24846>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24852 = ctx->ip_offset;
    D.24853 = stack_slot_get_name (value);
    D.24854 = monoeg_g_strdup_printf ("Invalid type %s at stack for unbox.any operation at 0x%04x", D.24853, D.24852);
    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.24850 = ctx->level;
  D.24857 = D.24850 & 16;
  if (D.24857 != 0) goto <D.24858>; else goto <D.24859>;
  <D.24858>:
  ctx->valid = 0;
  <D.24859>:
  <D.24847>:
  <D.24837>:
  D.24860 = stack_push (ctx);
  set_stack_value (ctx, D.24860, type, 0);
}


do_conversion (struct VerifyContext * ctx, int kind)
{
  int D.24862;
  int D.24865;
  int D.24868;
  int D.24870;
  int D.24871;
  unsigned int D.24872;
  const char * D.24873;
  gchar * D.24874;
  struct GSList * D.24875;
  struct GSList * D.24876;
  int D.24877;
  struct MonoClass * D.24880;
  struct MonoType * D.24881;
  struct MonoClass * D.24882;
  struct MonoType * D.24883;
  struct MonoClass * D.24884;
  struct MonoType * D.24885;
  struct MonoClass * D.24886;
  struct MonoType * D.24887;
  struct ILStackDesc * value;

  D.24862 = check_underflow (ctx, 1);
  if (D.24862 == 0) goto <D.24863>; else goto <D.24864>;
  <D.24863>:
  return;
  <D.24864>:
  value = stack_pop (ctx);
  D.24865 = stack_slot_get_type (value);
  switch (D.24865) <default: <D.18608>, case 1: <D.18603>, case 2: <D.18604>, case 3: <D.18605>, case 4: <D.18606>>
  <D.18603>:
  <D.18604>:
  <D.18605>:
  <D.18606>:
  goto <D.18607>;
  <D.18608>:
  D.24868 = ctx->verifiable;
  if (D.24868 != 0) goto <D.24866>; else goto <D.24869>;
  <D.24869>:
  D.24870 = ctx->level;
  D.24871 = D.24870 & 128;
  if (D.24871 != 0) goto <D.24866>; else goto <D.24867>;
  <D.24866>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24872 = ctx->ip_offset;
    D.24873 = stack_slot_get_name (value);
    D.24874 = monoeg_g_strdup_printf ("Invalid type (%s) at stack for conversion operation. Numeric type expected at 0x%04x", D.24873, D.24872);
    vinfo->info.message = D.24874;
    vinfo->exception_type = 4;
    D.24875 = ctx->list;
    D.24876 = monoeg_g_slist_prepend (D.24875, vinfo);
    ctx->list = D.24876;
  }
  ctx->verifiable = 0;
  D.24870 = ctx->level;
  D.24877 = D.24870 & 16;
  if (D.24877 != 0) goto <D.24878>; else goto <D.24879>;
  <D.24878>:
  ctx->valid = 0;
  <D.24879>:
  <D.24867>:
  <D.18607>:
  switch (kind) <default: <D.18615>, case 1: <D.18610>, case 2: <D.18612>, case 3: <D.18614>, case 4: <D.18613>>
  <D.18610>:
  D.24880 = mono_defaults.int32_class;
  D.24881 = &D.24880->byval_arg;
  stack_push_val (ctx, 1, D.24881);
  goto <D.18611>;
  <D.18612>:
  D.24882 = mono_defaults.int64_class;
  D.24883 = &D.24882->byval_arg;
  stack_push_val (ctx, 2, D.24883);
  goto <D.18611>;
  <D.18613>:
  D.24884 = mono_defaults.double_class;
  D.24885 = &D.24884->byval_arg;
  stack_push_val (ctx, 4, D.24885);
  goto <D.18611>;
  <D.18614>:
  D.24886 = mono_defaults.int_class;
  D.24887 = &D.24886->byval_arg;
  stack_push_val (ctx, 3, D.24887);
  goto <D.18611>;
  <D.18615>:
  monoeg_g_log (0B, 4, "unknown type %02x in conversion", kind);
  <D.18616>:
  goto <D.18616>;
  <D.18611>:
}


do_refanyval (struct VerifyContext * ctx, int token)
{
  int D.24890;
  int D.24897;
  struct MonoType * D.24899;
  unsigned char D.24900;
  unsigned int D.24901;
  const char * D.24902;
  gchar * D.24903;
  struct GSList * D.24904;
  struct GSList * D.24905;
  struct ILStackDesc * D.24906;
  struct ILStackDesc * top;
  struct MonoType * type;

  D.24890 = check_underflow (ctx, 1);
  if (D.24890 == 0) goto <D.24891>; else goto <D.24892>;
  <D.24891>:
  return;
  <D.24892>:
  type = get_boxable_mono_type (ctx, token, "refanyval");
  if (type == 0B) goto <D.24893>; else goto <D.24894>;
  <D.24893>:
  return;
  <D.24894>:
  top = stack_pop (ctx);
  D.24897 = top->stype;
  if (D.24897 != 5) goto <D.24895>; else goto <D.24898>;
  <D.24898>:
  D.24899 = top->type;
  D.24900 = D.24899->type;
  if (D.24900 != 22) goto <D.24895>; else goto <D.24896>;
  <D.24895>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.24901 = ctx->ip_offset;
    D.24902 = stack_slot_get_name (top);
    D.24903 = monoeg_g_strdup_printf ("Expected a typedref as argument for refanyval, but found %s at 0x%04x", D.24902, D.24901);
    vinfo->info.message = D.24903;
    vinfo->exception_type = 3;
    D.24904 = ctx->list;
    D.24905 = monoeg_g_slist_prepend (D.24904, vinfo);
    ctx->list = D.24905;
  }
  ctx->valid = 0;
  <D.24896>:
  D.24906 = stack_push (ctx);
  set_stack_value (ctx, D.24906, type, 1);
}


do_ckfinite (struct VerifyContext * ctx)
{
  int D.24908;
  int D.24911;
  unsigned int D.24914;
  const char * D.24915;
  gchar * D.24916;
  struct GSList * D.24917;
  struct GSList * D.24918;
  struct ILStackDesc * top;

  D.24908 = check_underflow (ctx, 1);
  if (D.24908 == 0) goto <D.24909>; else goto <D.24910>;
  <D.24909>:
  return;
  <D.24910>:
  top = stack_pop (ctx);
  D.24911 = stack_slot_get_underlying_type (top);
  if (D.24911 != 4) goto <D.24912>; else goto <D.24913>;
  <D.24912>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.24914 = ctx->ip_offset;
    D.24915 = stack_slot_get_name (top);
    D.24916 = monoeg_g_strdup_printf ("Expected float32 or float64 on stack for ckfinit but found %s at 0x%04x", D.24915, D.24914);
    vinfo->info.message = D.24916;
    vinfo->exception_type = 3;
    D.24917 = ctx->list;
    D.24918 = monoeg_g_slist_prepend (D.24917, vinfo);
    ctx->list = D.24918;
  }
  ctx->valid = 0;
  <D.24913>:
  stack_push_stack_val (ctx, top);
}


do_mkrefany (struct VerifyContext * ctx, int token)
{
  int D.24920;
  int D.24925;
  int D.24930;
  int D.24932;
  int D.24933;
  unsigned int D.24934;
  gchar * D.24935;
  struct GSList * D.24936;
  struct GSList * D.24937;
  int D.24938;
  int D.24941;
  const char * D.24947;
  gchar * D.24948;
  struct GSList * D.24949;
  struct MonoType * D.24953;
  int D.24954;
  int D.24957;
  gchar * D.24963;
  struct GSList * D.24964;
  int D.24967;
  int D.24970;
  gchar * D.24976;
  struct GSList * D.24977;
  struct MonoClass * D.24980;
  struct MonoType * D.24981;
  struct ILStackDesc * D.24982;
  struct ILStackDesc * top;
  struct MonoType * type;

  D.24920 = check_underflow (ctx, 1);
  if (D.24920 == 0) goto <D.24921>; else goto <D.24922>;
  <D.24921>:
  return;
  <D.24922>:
  type = get_boxable_mono_type (ctx, token, "refanyval");
  if (type == 0B) goto <D.24923>; else goto <D.24924>;
  <D.24923>:
  return;
  <D.24924>:
  top = stack_pop (ctx);
  D.24925 = stack_slot_is_managed_mutability_pointer (top);
  if (D.24925 != 0) goto <D.24926>; else goto <D.24927>;
  <D.24926>:
  D.24930 = ctx->verifiable;
  if (D.24930 != 0) goto <D.24928>; else goto <D.24931>;
  <D.24931>:
  D.24932 = ctx->level;
  D.24933 = D.24932 & 128;
  if (D.24933 != 0) goto <D.24928>; else goto <D.24929>;
  <D.24928>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24934 = ctx->ip_offset;
    D.24935 = monoeg_g_strdup_printf ("Cannot use a readonly pointer with mkrefany at 0x%04x", D.24934);
    vinfo->info.message = D.24935;
    vinfo->exception_type = 4;
    D.24936 = ctx->list;
    D.24937 = monoeg_g_slist_prepend (D.24936, vinfo);
    ctx->list = D.24937;
  }
  ctx->verifiable = 0;
  D.24932 = ctx->level;
  D.24938 = D.24932 & 16;
  if (D.24938 != 0) goto <D.24939>; else goto <D.24940>;
  <D.24939>:
  ctx->valid = 0;
  <D.24940>:
  <D.24929>:
  <D.24927>:
  D.24941 = stack_slot_is_managed_pointer (top);
  if (D.24941 == 0) goto <D.24942>; else goto <D.24943>;
  <D.24942>:
  D.24930 = ctx->verifiable;
  if (D.24930 != 0) goto <D.24944>; else goto <D.24946>;
  <D.24946>:
  D.24932 = ctx->level;
  D.24933 = D.24932 & 128;
  if (D.24933 != 0) goto <D.24944>; else goto <D.24945>;
  <D.24944>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.24934 = ctx->ip_offset;
    D.24947 = stack_slot_get_name (top);
    D.24948 = monoeg_g_strdup_printf ("Expected a managed pointer for mkrefany, but found %s at 0x%04x", D.24947, D.24934);
    vinfo->info.message = D.24948;
    vinfo->exception_type = 4;
    D.24936 = ctx->list;
    D.24949 = monoeg_g_slist_prepend (D.24936, vinfo);
    ctx->list = D.24949;
  }
  ctx->verifiable = 0;
  D.24932 = ctx->level;
  D.24938 = D.24932 & 16;
  if (D.24938 != 0) goto <D.24950>; else goto <D.24951>;
  <D.24950>:
  ctx->valid = 0;
  <D.24951>:
  <D.24945>:
  goto <D.24952>;
  <D.24943>:
  {
    struct MonoType * stack_type;

    D.24953 = top->type;
    stack_type = mono_type_get_type_byval (D.24953);
    D.24954 = mono_type_is_reference (type);
    if (D.24954 != 0) goto <D.24955>; else goto <D.24956>;
    <D.24955>:
    D.24957 = mono_metadata_type_equal (type, stack_type);
    if (D.24957 == 0) goto <D.24958>; else goto <D.24959>;
    <D.24958>:
    D.24930 = ctx->verifiable;
    if (D.24930 != 0) goto <D.24960>; else goto <D.24962>;
    <D.24962>:
    D.24932 = ctx->level;
    D.24933 = D.24932 & 128;
    if (D.24933 != 0) goto <D.24960>; else goto <D.24961>;
    <D.24960>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.24934 = ctx->ip_offset;
      D.24963 = monoeg_g_strdup_printf ("Type not compatible for mkrefany at 0x%04x", D.24934);
      vinfo->info.message = D.24963;
      vinfo->exception_type = 4;
      D.24936 = ctx->list;
      D.24964 = monoeg_g_slist_prepend (D.24936, vinfo);
      ctx->list = D.24964;
    }
    ctx->verifiable = 0;
    D.24932 = ctx->level;
    D.24938 = D.24932 & 16;
    if (D.24938 != 0) goto <D.24965>; else goto <D.24966>;
    <D.24965>:
    ctx->valid = 0;
    <D.24966>:
    <D.24961>:
    <D.24959>:
    <D.24956>:
    D.24967 = mono_type_is_reference (type);
    if (D.24967 == 0) goto <D.24968>; else goto <D.24969>;
    <D.24968>:
    D.24970 = verify_type_compatibility_full (ctx, type, stack_type, 1);
    if (D.24970 == 0) goto <D.24971>; else goto <D.24972>;
    <D.24971>:
    D.24930 = ctx->verifiable;
    if (D.24930 != 0) goto <D.24973>; else goto <D.24975>;
    <D.24975>:
    D.24932 = ctx->level;
    D.24933 = D.24932 & 128;
    if (D.24933 != 0) goto <D.24973>; else goto <D.24974>;
    <D.24973>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.24934 = ctx->ip_offset;
      D.24976 = monoeg_g_strdup_printf ("Type not compatible for mkrefany at 0x%04x", D.24934);
      vinfo->info.message = D.24976;
      vinfo->exception_type = 4;
      D.24936 = ctx->list;
      D.24977 = monoeg_g_slist_prepend (D.24936, vinfo);
      ctx->list = D.24977;
    }
    ctx->verifiable = 0;
    D.24932 = ctx->level;
    D.24938 = D.24932 & 16;
    if (D.24938 != 0) goto <D.24978>; else goto <D.24979>;
    <D.24978>:
    ctx->valid = 0;
    <D.24979>:
    <D.24974>:
    <D.24972>:
    <D.24969>:
  }
  <D.24952>:
  D.24980 = mono_defaults.typed_reference_class;
  D.24981 = &D.24980->byval_arg;
  D.24982 = stack_push (ctx);
  set_stack_value (ctx, D.24982, D.24981, 0);
}


do_load_token (struct VerifyContext * ctx, int token)
{
  int D.24984;
  struct MonoMethod * D.24987;
  unsigned char D.24988;
  unsigned char D.24989;
  unsigned int token.113;
  int D.24993;
  unsigned int D.24994;
  void * handle_class.114;
  struct MonoClass * D.24996;
  struct MonoClass * handle_class.115;
  unsigned int token.116;
  unsigned int D.25002;
  struct MonoImage * D.25003;
  int D.25004;
  unsigned int D.25007;
  int D.25008;
  gchar * D.25009;
  struct GSList * D.25010;
  struct GSList * D.25011;
  int D.25012;
  gchar * D.25013;
  struct GSList * D.25014;
  struct MonoGenericContext * D.25015;
  unsigned int token.117;
  gchar * D.25019;
  struct GSList * D.25020;
  struct MonoClass * D.25024;
  struct MonoClass * D.25028;
  struct MonoClass * D.25031;
  struct MonoType * D.25032;
  gchar * D.25034;
  struct GSList * D.25035;
  struct MonoType * D.25036;
  void * handle;
  struct MonoClass * handle_class;

  try
    {
      D.24984 = check_overflow (ctx);
      if (D.24984 == 0) goto <D.24985>; else goto <D.24986>;
      <D.24985>:
      return;
      <D.24986>:
      D.24987 = ctx->method;
      D.24988 = BIT_FIELD_REF <*D.24987, 8, 160>;
      D.24989 = D.24988 & 124;
      if (D.24989 != 0) goto <D.24990>; else goto <D.24991>;
      <D.24990>:
      token.113 = (unsigned int) token;
      D.24987 = ctx->method;
      handle = mono_method_get_wrapper_data (D.24987, token.113);
      D.24993 = token + 1;
      D.24994 = (unsigned int) D.24993;
      D.24987 = ctx->method;
      handle_class.114 = mono_method_get_wrapper_data (D.24987, D.24994);
      handle_class = handle_class.114;
      D.24996 = mono_defaults.typehandle_class;
      handle_class.115 = handle_class;
      if (D.24996 == handle_class.115) goto <D.24998>; else goto <D.24999>;
      <D.24998>:
      handle = &MEM[(struct MonoClass *)handle].byval_arg;
      <D.24999>:
      goto <D.25000>;
      <D.24991>:
      token.116 = (unsigned int) token;
      D.25002 = token.116 & 4278190080;
      switch (D.25002) <default: <D.18632>, case 16777216: <D.18624>, case 33554432: <D.18623>, case 67108864: <D.18626>, case 100663296: <D.18627>, case 167772160: <D.18629>, case 452984832: <D.18625>, case 721420288: <D.18628>>
      <D.18623>:
      <D.18624>:
      <D.18625>:
      <D.18626>:
      <D.18627>:
      <D.18628>:
      <D.18629>:
      token.113 = (unsigned int) token;
      D.25003 = ctx->image;
      D.25004 = token_bounds_check (D.25003, token.113);
      if (D.25004 == 0) goto <D.25005>; else goto <D.25006>;
      <D.25005>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.25007 = ctx->ip_offset;
        D.25008 = token & 16777215;
        D.25009 = monoeg_g_strdup_printf ("Table index out of range 0x%x for token %x for ldtoken at 0x%04x", D.25008, token, D.25007);
        vinfo->info.message = D.25009;
        vinfo->exception_type = 3;
        D.25010 = ctx->list;
        D.25011 = monoeg_g_slist_prepend (D.25010, vinfo);
        ctx->list = D.25011;
      }
      ctx->valid = 0;
      return;
      <D.25006>:
      goto <D.18631>;
      <D.18632>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.25007 = ctx->ip_offset;
        D.25012 = token >> 24;
        D.25013 = monoeg_g_strdup_printf ("Invalid table 0x%x for token 0x%x for ldtoken at 0x%04x", D.25012, token, D.25007);
        vinfo->info.message = D.25013;
        vinfo->exception_type = 3;
        D.25010 = ctx->list;
        D.25014 = monoeg_g_slist_prepend (D.25010, vinfo);
        ctx->list = D.25014;
      }
      ctx->valid = 0;
      return;
      <D.18631>:
      D.25015 = ctx->generic_context;
      token.117 = (unsigned int) token;
      D.25003 = ctx->image;
      handle = mono_ldtoken (D.25003, token.117, &handle_class, D.25015);
      <D.25000>:
      if (handle == 0B) goto <D.25017>; else goto <D.25018>;
      <D.25017>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.25007 = ctx->ip_offset;
        D.25019 = monoeg_g_strdup_printf ("Invalid token 0x%x for ldtoken at 0x%04x", token, D.25007);
        vinfo->info.message = D.25019;
        vinfo->exception_type = 3;
        D.25010 = ctx->list;
        D.25020 = monoeg_g_slist_prepend (D.25010, vinfo);
        ctx->list = D.25020;
      }
      ctx->valid = 0;
      return;
      <D.25018>:
      D.24996 = mono_defaults.typehandle_class;
      handle_class.115 = handle_class;
      if (D.24996 == handle_class.115) goto <D.25021>; else goto <D.25022>;
      <D.25021>:
      mono_type_is_valid_in_context (ctx, handle);
      goto <D.25023>;
      <D.25022>:
      D.25024 = mono_defaults.methodhandle_class;
      handle_class.115 = handle_class;
      if (D.25024 == handle_class.115) goto <D.25025>; else goto <D.25026>;
      <D.25025>:
      mono_method_is_valid_in_context (ctx, handle);
      goto <D.25027>;
      <D.25026>:
      D.25028 = mono_defaults.fieldhandle_class;
      handle_class.115 = handle_class;
      if (D.25028 == handle_class.115) goto <D.25029>; else goto <D.25030>;
      <D.25029>:
      D.25031 = MEM[(struct MonoClassField *)handle].parent;
      D.25032 = &D.25031->byval_arg;
      mono_type_is_valid_in_context (ctx, D.25032);
      goto <D.25033>;
      <D.25030>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (12);
        vinfo->info.status = 1;
        D.25007 = ctx->ip_offset;
        D.25034 = monoeg_g_strdup_printf ("Invalid ldtoken type %x at 0x%04x", token, D.25007);
        vinfo->info.message = D.25034;
        vinfo->exception_type = 12;
        D.25010 = ctx->list;
        D.25035 = monoeg_g_slist_prepend (D.25010, vinfo);
        ctx->list = D.25035;
      }
      ctx->valid = 0;
      <D.25033>:
      <D.25027>:
      <D.25023>:
      handle_class.115 = handle_class;
      D.25036 = mono_class_get_type (handle_class.115);
      stack_push_val (ctx, 6, D.25036);
    }
  finally
    {
      handle_class = {CLOBBER};
    }
}


is_correct_endfinally (struct MonoMethodHeader * header, guint offset)
{
  struct MonoExceptionClause * D.25040;
  unsigned int i.118;
  unsigned int D.25042;
  unsigned int D.25043;
  unsigned int D.25046;
  unsigned int D.25047;
  unsigned int D.25050;
  _Bool D.25051;
  _Bool D.25052;
  _Bool D.25053;
  int D.25056;
  <unnamed-unsigned:15> D.25057;
  int D.25058;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.17876>;
  <D.17875>:
  D.25040 = header->clauses;
  i.118 = (unsigned int) i;
  D.25042 = i.118 * 24;
  clause = D.25040 + D.25042;
  D.25043 = clause->handler_offset;
  if (D.25043 <= offset) goto <D.25044>; else goto <D.25045>;
  <D.25044>:
  D.25043 = clause->handler_offset;
  D.25046 = clause->handler_len;
  D.25047 = D.25043 + D.25046;
  if (D.25047 > offset) goto <D.25048>; else goto <D.25049>;
  <D.25048>:
  D.25050 = clause->flags;
  D.25051 = D.25050 == 4;
  D.25052 = D.25050 == 2;
  D.25053 = D.25051 | D.25052;
  if (D.25053 != 0) goto <D.25054>; else goto <D.25055>;
  <D.25054>:
  D.25056 = 1;
  return D.25056;
  <D.25055>:
  <D.25049>:
  <D.25045>:
  i = i + 1;
  <D.17876>:
  D.25057 = header->num_clauses;
  D.25058 = (int) D.25057;
  if (D.25058 > i) goto <D.17875>; else goto <D.17877>;
  <D.17877>:
  D.25056 = 0;
  return D.25056;
}


do_leave (struct VerifyContext * ctx, int delta)
{
  unsigned int D.25060;
  int D.25061;
  int D.25064;
  gchar * D.25066;
  struct GSList * D.25067;
  struct GSList * D.25068;
  unsigned int target.119;
  struct MonoMethodHeader * D.25070;
  int D.25071;
  int D.25076;
  int D.25078;
  int D.25079;
  gchar * D.25080;
  struct GSList * D.25081;
  int D.25082;
  int target;

  D.25060 = ctx->ip_offset;
  D.25061 = (int) D.25060;
  target = D.25061 + delta;
  D.25064 = ctx->code_size;
  if (D.25064 <= target) goto <D.25062>; else goto <D.25065>;
  <D.25065>:
  if (target < 0) goto <D.25062>; else goto <D.25063>;
  <D.25062>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25060 = ctx->ip_offset;
    D.25066 = monoeg_g_strdup_printf ("Branch target out of code at 0x%04x", D.25060);
    vinfo->info.message = D.25066;
    vinfo->exception_type = 3;
    D.25067 = ctx->list;
    D.25068 = monoeg_g_slist_prepend (D.25067, vinfo);
    ctx->list = D.25068;
  }
  ctx->valid = 0;
  <D.25063>:
  target.119 = (unsigned int) target;
  D.25060 = ctx->ip_offset;
  D.25070 = ctx->header;
  D.25071 = is_correct_leave (D.25070, D.25060, target.119);
  if (D.25071 == 0) goto <D.25072>; else goto <D.25073>;
  <D.25072>:
  D.25076 = ctx->verifiable;
  if (D.25076 != 0) goto <D.25074>; else goto <D.25077>;
  <D.25077>:
  D.25078 = ctx->level;
  D.25079 = D.25078 & 128;
  if (D.25079 != 0) goto <D.25074>; else goto <D.25075>;
  <D.25074>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25060 = ctx->ip_offset;
    D.25080 = monoeg_g_strdup_printf ("Leave not allowed in finally block at 0x%04x", D.25060);
    vinfo->info.message = D.25080;
    vinfo->exception_type = 4;
    D.25067 = ctx->list;
    D.25081 = monoeg_g_slist_prepend (D.25067, vinfo);
    ctx->list = D.25081;
  }
  ctx->verifiable = 0;
  D.25078 = ctx->level;
  D.25082 = D.25078 & 16;
  if (D.25082 != 0) goto <D.25083>; else goto <D.25084>;
  <D.25083>:
  ctx->valid = 0;
  <D.25084>:
  <D.25075>:
  <D.25073>:
  ctx->eval.size = 0;
  ctx->target = target;
}


is_correct_leave (struct MonoMethodHeader * header, guint offset, guint target)
{
  struct MonoExceptionClause * D.25085;
  unsigned int i.120;
  unsigned int D.25087;
  unsigned int D.25090;
  unsigned int D.25093;
  unsigned int D.25096;
  unsigned int D.25097;
  int D.25101;
  unsigned int D.25104;
  <unnamed-unsigned:15> D.25109;
  int D.25110;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.17858>;
  <D.17857>:
  D.25085 = header->clauses;
  i.120 = (unsigned int) i;
  D.25087 = i.120 * 24;
  clause = D.25085 + D.25087;
  D.25090 = clause->flags;
  if (D.25090 == 2) goto <D.25091>; else goto <D.25092>;
  <D.25091>:
  D.25093 = clause->handler_offset;
  if (D.25093 <= offset) goto <D.25094>; else goto <D.25095>;
  <D.25094>:
  D.25093 = clause->handler_offset;
  D.25096 = clause->handler_len;
  D.25097 = D.25093 + D.25096;
  if (D.25097 > offset) goto <D.25098>; else goto <D.25099>;
  <D.25098>:
  D.25093 = clause->handler_offset;
  if (D.25093 > target) goto <D.25088>; else goto <D.25100>;
  <D.25100>:
  D.25093 = clause->handler_offset;
  D.25096 = clause->handler_len;
  D.25097 = D.25093 + D.25096;
  if (D.25097 <= target) goto <D.25088>; else goto <D.25089>;
  <D.25088>:
  D.25101 = 0;
  return D.25101;
  <D.25089>:
  <D.25099>:
  <D.25095>:
  <D.25092>:
  D.25090 = clause->flags;
  if (D.25090 == 1) goto <D.25102>; else goto <D.25103>;
  <D.25102>:
  D.25104 = clause->data.filter_offset;
  if (D.25104 <= offset) goto <D.25105>; else goto <D.25106>;
  <D.25105>:
  D.25093 = clause->handler_offset;
  if (D.25093 > offset) goto <D.25107>; else goto <D.25108>;
  <D.25107>:
  D.25101 = 0;
  return D.25101;
  <D.25108>:
  <D.25106>:
  <D.25103>:
  i = i + 1;
  <D.17858>:
  D.25109 = header->num_clauses;
  D.25110 = (int) D.25109;
  if (D.25110 > i) goto <D.17857>; else goto <D.17859>;
  <D.17859>:
  D.25101 = 1;
  return D.25101;
}


store_local (struct VerifyContext * ctx, guint32 arg)
{
  int D.25112;
  unsigned int D.25113;
  unsigned int D.25116;
  unsigned int D.25117;
  gchar * D.25118;
  struct GSList * D.25119;
  struct GSList * D.25120;
  int D.25121;
  struct MonoType * * D.25124;
  unsigned int D.25125;
  struct MonoType * * D.25126;
  struct MonoType * D.25127;
  unsigned char D.25128;
  unsigned char D.25129;
  int D.25132;
  int D.25137;
  int D.25139;
  int D.25140;
  gchar * D.25141;
  struct GSList * D.25142;
  int D.25143;
  int D.25146;
  gchar * D.25152;
  struct GSList * D.25153;
  struct ILStackDesc * value;

  D.25112 = ctx->num_locals;
  D.25113 = (unsigned int) D.25112;
  if (D.25113 <= arg) goto <D.25114>; else goto <D.25115>;
  <D.25114>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25116 = ctx->ip_offset;
    D.25117 = arg + 1;
    D.25118 = monoeg_g_strdup_printf ("Method doesn\'t have local var %d at 0x%04x", D.25117, D.25116);
    vinfo->info.message = D.25118;
    vinfo->exception_type = 3;
    D.25119 = ctx->list;
    D.25120 = monoeg_g_slist_prepend (D.25119, vinfo);
    ctx->list = D.25120;
  }
  ctx->valid = 0;
  return;
  <D.25115>:
  D.25121 = check_underflow (ctx, 1);
  if (D.25121 == 0) goto <D.25122>; else goto <D.25123>;
  <D.25122>:
  return;
  <D.25123>:
  value = stack_pop (ctx);
  D.25124 = ctx->locals;
  D.25125 = arg * 4;
  D.25126 = D.25124 + D.25125;
  D.25127 = *D.25126;
  D.25128 = BIT_FIELD_REF <*D.25127, 8, 56>;
  D.25129 = D.25128 & 64;
  if (D.25129 != 0) goto <D.25130>; else goto <D.25131>;
  <D.25130>:
  D.25132 = stack_slot_is_managed_mutability_pointer (value);
  if (D.25132 != 0) goto <D.25133>; else goto <D.25134>;
  <D.25133>:
  D.25137 = ctx->verifiable;
  if (D.25137 != 0) goto <D.25135>; else goto <D.25138>;
  <D.25138>:
  D.25139 = ctx->level;
  D.25140 = D.25139 & 128;
  if (D.25140 != 0) goto <D.25135>; else goto <D.25136>;
  <D.25135>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25116 = ctx->ip_offset;
    D.25141 = monoeg_g_strdup_printf ("Cannot use a readonly managed reference when storing on a local variable at 0x%04x", D.25116);
    vinfo->info.message = D.25141;
    vinfo->exception_type = 4;
    D.25119 = ctx->list;
    D.25142 = monoeg_g_slist_prepend (D.25119, vinfo);
    ctx->list = D.25142;
  }
  ctx->verifiable = 0;
  D.25139 = ctx->level;
  D.25143 = D.25139 & 16;
  if (D.25143 != 0) goto <D.25144>; else goto <D.25145>;
  <D.25144>:
  ctx->valid = 0;
  <D.25145>:
  <D.25136>:
  <D.25134>:
  <D.25131>:
  D.25124 = ctx->locals;
  D.25125 = arg * 4;
  D.25126 = D.25124 + D.25125;
  D.25127 = *D.25126;
  D.25146 = verify_stack_type_compatibility (ctx, D.25127, value);
  if (D.25146 == 0) goto <D.25147>; else goto <D.25148>;
  <D.25147>:
  {
    char * expected;
    char * found;

    D.25124 = ctx->locals;
    D.25125 = arg * 4;
    D.25126 = D.25124 + D.25125;
    D.25127 = *D.25126;
    expected = mono_type_full_name (D.25127);
    found = stack_slot_full_name (value);
    D.25137 = ctx->verifiable;
    if (D.25137 != 0) goto <D.25149>; else goto <D.25151>;
    <D.25151>:
    D.25139 = ctx->level;
    D.25140 = D.25139 & 128;
    if (D.25140 != 0) goto <D.25149>; else goto <D.25150>;
    <D.25149>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.25116 = ctx->ip_offset;
      D.25152 = 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.25116);
      vinfo->info.message = D.25152;
      vinfo->exception_type = 4;
      D.25119 = ctx->list;
      D.25153 = monoeg_g_slist_prepend (D.25119, vinfo);
      ctx->list = D.25153;
    }
    ctx->verifiable = 0;
    D.25139 = ctx->level;
    D.25143 = D.25139 & 16;
    if (D.25143 != 0) goto <D.25154>; else goto <D.25155>;
    <D.25154>:
    ctx->valid = 0;
    <D.25155>:
    <D.25150>:
    monoeg_g_free (expected);
    monoeg_g_free (found);
  }
  <D.25148>:
}


do_cmp_op (struct VerifyContext * ctx, const unsigned char[6] * table, guint32 opcode)
{
  int D.25157;
  int D.25162;
  int D.25165;
  struct MonoClass * D.25168;
  struct MonoType * D.25169;
  int D.25170;
  int D.25173;
  int D.25179;
  int D.25181;
  unsigned int idxa.121;
  unsigned int D.25183;
  const unsigned char[6] * D.25184;
  int D.25189;
  int D.25191;
  int D.25192;
  unsigned int D.25193;
  const char * D.25194;
  const char * D.25195;
  gchar * D.25196;
  struct GSList * D.25197;
  struct GSList * D.25198;
  int D.25199;
  signed char res.122;
  const char * D.25209;
  const char * D.25210;
  gchar * D.25211;
  struct GSList * D.25212;
  struct ILStackDesc * a;
  struct ILStackDesc * b;
  int idxa;
  int idxb;
  unsigned char res;

  D.25157 = check_underflow (ctx, 2);
  if (D.25157 == 0) goto <D.25158>; else goto <D.25159>;
  <D.25158>:
  return;
  <D.25159>:
  b = stack_pop (ctx);
  a = stack_pop (ctx);
  if (opcode == 3) goto <D.25160>; else goto <D.25161>;
  <D.25160>:
  D.25162 = stack_slot_get_type (a);
  if (D.25162 == 6) goto <D.25163>; else goto <D.25164>;
  <D.25163>:
  D.25165 = stack_slot_get_type (b);
  if (D.25165 == 6) goto <D.25166>; else goto <D.25167>;
  <D.25166>:
  D.25168 = mono_defaults.int32_class;
  D.25169 = &D.25168->byval_arg;
  stack_push_val (ctx, 1, D.25169);
  return;
  <D.25167>:
  <D.25164>:
  <D.25161>:
  idxa = stack_slot_get_underlying_type (a);
  D.25170 = stack_slot_is_managed_pointer (a);
  if (D.25170 != 0) goto <D.25171>; else goto <D.25172>;
  <D.25171>:
  idxa = 5;
  <D.25172>:
  idxb = stack_slot_get_underlying_type (b);
  D.25173 = stack_slot_is_managed_pointer (b);
  if (D.25173 != 0) goto <D.25174>; else goto <D.25175>;
  <D.25174>:
  idxb = 5;
  <D.25175>:
  D.25179 = stack_slot_is_complex_type_not_reference_type (a);
  if (D.25179 != 0) goto <D.25176>; else goto <D.25180>;
  <D.25180>:
  D.25181 = stack_slot_is_complex_type_not_reference_type (b);
  if (D.25181 != 0) goto <D.25176>; else goto <D.25177>;
  <D.25176>:
  res = 0;
  goto <D.25178>;
  <D.25177>:
  idxa = idxa + -1;
  idxb = idxb + -1;
  idxa.121 = (unsigned int) idxa;
  D.25183 = idxa.121 * 6;
  D.25184 = table + D.25183;
  res = *D.25184[idxb];
  <D.25178>:
  if (res == 0) goto <D.25185>; else goto <D.25186>;
  <D.25185>:
  D.25189 = ctx->verifiable;
  if (D.25189 != 0) goto <D.25187>; else goto <D.25190>;
  <D.25190>:
  D.25191 = ctx->level;
  D.25192 = D.25191 & 128;
  if (D.25192 != 0) goto <D.25187>; else goto <D.25188>;
  <D.25187>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25193 = ctx->ip_offset;
    D.25194 = stack_slot_get_name (b);
    D.25195 = stack_slot_get_name (a);
    D.25196 = monoeg_g_strdup_printf ("Compare instruction applyed to ill formed stack (%s x %s) at 0x%04x", D.25195, D.25194, D.25193);
    vinfo->info.message = D.25196;
    vinfo->exception_type = 4;
    D.25197 = ctx->list;
    D.25198 = monoeg_g_slist_prepend (D.25197, vinfo);
    ctx->list = D.25198;
  }
  ctx->verifiable = 0;
  D.25191 = ctx->level;
  D.25199 = D.25191 & 16;
  if (D.25199 != 0) goto <D.25200>; else goto <D.25201>;
  <D.25200>:
  ctx->valid = 0;
  <D.25201>:
  <D.25188>:
  goto <D.25202>;
  <D.25186>:
  res.122 = (signed char) res;
  if (res.122 < 0) goto <D.25204>; else goto <D.25205>;
  <D.25204>:
  D.25189 = ctx->verifiable;
  if (D.25189 != 0) goto <D.25206>; else goto <D.25208>;
  <D.25208>:
  D.25191 = ctx->level;
  D.25192 = D.25191 & 128;
  if (D.25192 != 0) goto <D.25206>; else goto <D.25207>;
  <D.25206>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25193 = ctx->ip_offset;
    D.25209 = stack_slot_get_name (b);
    D.25210 = stack_slot_get_name (a);
    D.25211 = monoeg_g_strdup_printf ("Compare instruction is not verifiable (%s x %s) at 0x%04x", D.25210, D.25209, D.25193);
    vinfo->info.message = D.25211;
    vinfo->exception_type = 4;
    D.25197 = ctx->list;
    D.25212 = monoeg_g_slist_prepend (D.25197, vinfo);
    ctx->list = D.25212;
  }
  ctx->verifiable = 0;
  D.25191 = ctx->level;
  D.25199 = D.25191 & 16;
  if (D.25199 != 0) goto <D.25213>; else goto <D.25214>;
  <D.25213>:
  ctx->valid = 0;
  <D.25214>:
  <D.25207>:
  res = res & 127;
  <D.25205>:
  <D.25202>:
  D.25168 = mono_defaults.int32_class;
  D.25169 = &D.25168->byval_arg;
  stack_push_val (ctx, 1, D.25169);
}


store_arg (struct VerifyContext * ctx, guint32 arg)
{
  int D.25216;
  unsigned int D.25217;
  int D.25222;
  int D.25224;
  int D.25225;
  unsigned int D.25226;
  unsigned int D.25227;
  gchar * D.25228;
  struct GSList * D.25229;
  struct GSList * D.25230;
  int D.25231;
  int D.25234;
  int D.25237;
  struct MonoType * * D.25240;
  unsigned int D.25241;
  struct MonoType * * D.25242;
  struct MonoType * D.25243;
  int D.25244;
  const char * D.25250;
  gchar * D.25251;
  struct GSList * D.25252;
  struct MonoMethod * D.25257;
  short unsigned int D.25258;
  int D.25259;
  int D.25260;
  struct ILStackDesc * value;

  D.25216 = ctx->max_args;
  D.25217 = (unsigned int) D.25216;
  if (D.25217 <= arg) goto <D.25218>; else goto <D.25219>;
  <D.25218>:
  D.25222 = ctx->verifiable;
  if (D.25222 != 0) goto <D.25220>; else goto <D.25223>;
  <D.25223>:
  D.25224 = ctx->level;
  D.25225 = D.25224 & 128;
  if (D.25225 != 0) goto <D.25220>; else goto <D.25221>;
  <D.25220>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25226 = ctx->ip_offset;
    D.25227 = arg + 1;
    D.25228 = monoeg_g_strdup_printf ("Method doesn\'t have argument %d at 0x%04x", D.25227, D.25226);
    vinfo->info.message = D.25228;
    vinfo->exception_type = 4;
    D.25229 = ctx->list;
    D.25230 = monoeg_g_slist_prepend (D.25229, vinfo);
    ctx->list = D.25230;
  }
  ctx->verifiable = 0;
  D.25224 = ctx->level;
  D.25231 = D.25224 & 16;
  if (D.25231 != 0) goto <D.25232>; else goto <D.25233>;
  <D.25232>:
  ctx->valid = 0;
  <D.25233>:
  <D.25221>:
  D.25234 = check_underflow (ctx, 1);
  if (D.25234 != 0) goto <D.25235>; else goto <D.25236>;
  <D.25235>:
  stack_pop (ctx);
  <D.25236>:
  return;
  <D.25219>:
  D.25237 = check_underflow (ctx, 1);
  if (D.25237 != 0) goto <D.25238>; else goto <D.25239>;
  <D.25238>:
  value = stack_pop (ctx);
  D.25240 = ctx->params;
  D.25241 = arg * 4;
  D.25242 = D.25240 + D.25241;
  D.25243 = *D.25242;
  D.25244 = verify_stack_type_compatibility (ctx, D.25243, value);
  if (D.25244 == 0) goto <D.25245>; else goto <D.25246>;
  <D.25245>:
  D.25222 = ctx->verifiable;
  if (D.25222 != 0) goto <D.25247>; else goto <D.25249>;
  <D.25249>:
  D.25224 = ctx->level;
  D.25225 = D.25224 & 128;
  if (D.25225 != 0) goto <D.25247>; else goto <D.25248>;
  <D.25247>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25226 = ctx->ip_offset;
    D.25250 = stack_slot_get_name (value);
    D.25251 = monoeg_g_strdup_printf ("Incompatible type %s in argument store at 0x%04x", D.25250, D.25226);
    vinfo->info.message = D.25251;
    vinfo->exception_type = 4;
    D.25229 = ctx->list;
    D.25252 = monoeg_g_slist_prepend (D.25229, vinfo);
    ctx->list = D.25252;
  }
  ctx->verifiable = 0;
  D.25224 = ctx->level;
  D.25231 = D.25224 & 16;
  if (D.25231 != 0) goto <D.25253>; else goto <D.25254>;
  <D.25253>:
  ctx->valid = 0;
  <D.25254>:
  <D.25248>:
  <D.25246>:
  <D.25239>:
  if (arg == 0) goto <D.25255>; else goto <D.25256>;
  <D.25255>:
  D.25257 = ctx->method;
  D.25258 = D.25257->flags;
  D.25259 = (int) D.25258;
  D.25260 = D.25259 & 16;
  if (D.25260 == 0) goto <D.25261>; else goto <D.25262>;
  <D.25261>:
  ctx->has_this_store = 1;
  <D.25262>:
  <D.25256>:
}


check_overflow (struct VerifyContext * ctx)
{
  short unsigned int D.25264;
  int D.25265;
  int D.25266;
  unsigned int D.25269;
  int D.25270;
  gchar * D.25271;
  struct GSList * D.25272;
  struct GSList * D.25273;
  int D.25274;

  D.25264 = ctx->eval.size;
  D.25265 = (int) D.25264;
  D.25266 = ctx->max_stack;
  if (D.25265 >= D.25266) goto <D.25267>; else goto <D.25268>;
  <D.25267>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25269 = ctx->ip_offset;
    D.25264 = ctx->eval.size;
    D.25265 = (int) D.25264;
    D.25270 = D.25265 + 1;
    D.25271 = monoeg_g_strdup_printf ("Method doesn\'t have stack-depth %d at 0x%04x", D.25270, D.25269);
    vinfo->info.message = D.25271;
    vinfo->exception_type = 3;
    D.25272 = ctx->list;
    D.25273 = monoeg_g_slist_prepend (D.25272, vinfo);
    ctx->list = D.25273;
  }
  ctx->valid = 0;
  D.25274 = 0;
  return D.25274;
  <D.25268>:
  D.25274 = 1;
  return D.25274;
}


stack_push (struct VerifyContext * ctx)
{
  short unsigned int D.25276;
  int D.25277;
  int D.25278;
  _Bool D.25279;
  long int D.25280;
  long int D.25281;
  short unsigned int D.25284;
  _Bool D.25285;
  long int D.25286;
  long int D.25287;
  int D.25290;
  struct ILCodeDesc * D.25291;
  struct ILStackDesc * D.25292;
  struct ILStackDesc * D.25293;
  short unsigned int D.25294;
  short unsigned int D.25295;
  unsigned int D.25296;
  unsigned int D.25297;

  D.25276 = ctx->eval.size;
  D.25277 = (int) D.25276;
  D.25278 = ctx->max_stack;
  D.25279 = D.25277 >= D.25278;
  D.25280 = (long int) D.25279;
  D.25281 = __builtin_expect (D.25280, 0);
  if (D.25281 != 0) goto <D.25282>; else goto <D.25283>;
  <D.25282>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1589, "ctx->eval.size < ctx->max_stack");
  <D.25283>:
  D.25276 = ctx->eval.size;
  D.25284 = ctx->eval.max_size;
  D.25285 = D.25276 > D.25284;
  D.25286 = (long int) D.25285;
  D.25287 = __builtin_expect (D.25286, 0);
  if (D.25287 != 0) goto <D.25288>; else goto <D.25289>;
  <D.25288>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 1590, "ctx->eval.size <= ctx->eval.max_size");
  <D.25289>:
  D.25276 = ctx->eval.size;
  D.25277 = (int) D.25276;
  D.25290 = D.25277 + 1;
  D.25291 = &ctx->eval;
  ensure_stack_size (D.25291, D.25290);
  D.25293 = ctx->eval.stack;
  D.25276 = ctx->eval.size;
  D.25294 = D.25276;
  D.25295 = D.25294 + 1;
  ctx->eval.size = D.25295;
  D.25296 = (unsigned int) D.25294;
  D.25297 = D.25296 * 12;
  D.25292 = D.25293 + D.25297;
  return D.25292;
}


set_stack_value (struct VerifyContext * ctx, struct ILStackDesc * stack, struct MonoType * type, int take_addr)
{
  unsigned char D.25299;
  unsigned char D.25302;
  unsigned char D.25303;
  int D.25305;
  int D.25306;
  int D.25307;
  int D.25308;
  int D.25309;
  int D.25310;
  int D.25311;
  unsigned int D.25316;
  int D.25317;
  gchar * D.25318;
  struct GSList * D.25319;
  struct GSList * D.25320;
  gboolean D.25321;
  gchar * D.25322;
  struct GSList * D.25323;
  int mask;
  int type_kind;
  void handle_enum = <<< error >>>;

  mask = 0;
  D.25299 = type->type;
  type_kind = (int) D.25299;
  D.25302 = BIT_FIELD_REF <*type, 8, 56>;
  D.25303 = D.25302 & 64;
  if (D.25303 != 0) goto <D.25300>; else goto <D.25304>;
  <D.25304>:
  if (take_addr != 0) goto <D.25300>; else goto <D.25301>;
  <D.25300>:
  mask = 256;
  <D.25301>:
  handle_enum:
  stack->type = type;
  switch (type_kind) <default: <D.18085>, case 2: <D.18058>, case 3: <D.18061>, case 4: <D.18056>, case 5: <D.18057>, case 6: <D.18059>, case 7: <D.18060>, case 8: <D.18062>, case 9: <D.18063>, case 10: <D.18077>, case 11: <D.18078>, case 12: <D.18079>, case 13: <D.18080>, case 14: <D.18071>, case 15: <D.18068>, case 17: <D.18082>, case 18: <D.18070>, case 19: <D.18075>, case 20: <D.18074>, case 21: <D.18081>, case 22: <D.18069>, case 24: <D.18065>, case 25: <D.18066>, case 27: <D.18067>, case 28: <D.18072>, case 29: <D.18073>, case 30: <D.18076>>
  <D.18056>:
  <D.18057>:
  <D.18058>:
  <D.18059>:
  <D.18060>:
  <D.18061>:
  <D.18062>:
  <D.18063>:
  D.25305 = mask | 1;
  stack->stype = D.25305;
  goto <D.18064>;
  <D.18065>:
  <D.18066>:
  D.25306 = mask | 3;
  stack->stype = D.25306;
  goto <D.18064>;
  <D.18067>:
  <D.18068>:
  <D.18069>:
  D.25307 = mask | 5;
  stack->stype = D.25307;
  goto <D.18064>;
  <D.18070>:
  <D.18071>:
  <D.18072>:
  <D.18073>:
  <D.18074>:
  <D.18075>:
  <D.18076>:
  D.25308 = mask | 6;
  stack->stype = D.25308;
  goto <D.18064>;
  <D.18077>:
  <D.18078>:
  D.25309 = mask | 2;
  stack->stype = D.25309;
  goto <D.18064>;
  <D.18079>:
  <D.18080>:
  D.25310 = mask | 4;
  stack->stype = D.25310;
  goto <D.18064>;
  <D.18081>:
  <D.18082>:
  D.25311 = mono_type_is_enum_type (type);
  if (D.25311 != 0) goto <D.25312>; else goto <D.25313>;
  <D.25312>:
  {
    struct MonoType * utype;

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

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 1;
      D.25316 = ctx->ip_offset;
      D.25299 = type->type;
      D.25317 = (int) D.25299;
      D.25318 = monoeg_g_strdup_printf ("Could not resolve underlying type of %x at %d", D.25317, D.25316);
      vinfo->info.message = D.25318;
      vinfo->exception_type = 3;
      D.25319 = ctx->list;
      D.25320 = monoeg_g_slist_prepend (D.25319, vinfo);
      ctx->list = D.25320;
    }
    ctx->valid = 0;
    D.25321 = 0;
    return D.25321;
    <D.25315>:
    type = utype;
    D.25299 = type->type;
    type_kind = (int) D.25299;
    goto handle_enum;
  }
  <D.25313>:
  D.25308 = mask | 6;
  stack->stype = D.25308;
  goto <D.18064>;
  <D.18085>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25316 = ctx->ip_offset;
    D.25299 = type->type;
    D.25317 = (int) D.25299;
    D.25322 = monoeg_g_strdup_printf ("Illegal value set on stack 0x%02x at %d", D.25317, D.25316);
    vinfo->info.message = D.25322;
    vinfo->exception_type = 3;
    D.25319 = ctx->list;
    D.25323 = monoeg_g_slist_prepend (D.25319, vinfo);
    ctx->list = D.25323;
  }
  ctx->valid = 0;
  D.25321 = 0;
  return D.25321;
  <D.18064>:
  D.25321 = 1;
  return D.25321;
}


do_load_function_ptr (struct VerifyContext * ctx, guint32 token, gboolean virtual)
{
  int D.25327;
  int D.25332;
  struct MonoMethod * D.25335;
  unsigned char D.25336;
  unsigned char D.25337;
  unsigned int D.25342;
  gchar * D.25343;
  struct GSList * D.25344;
  struct GSList * D.25345;
  unsigned int D.25350;
  _Bool D.25351;
  _Bool D.25352;
  _Bool D.25353;
  unsigned int D.25355;
  struct MonoImage * D.25356;
  int D.25357;
  gchar * D.25358;
  struct GSList * D.25359;
  const char * iftmp.123;
  int token.124;
  int D.25367;
  int D.25372;
  int D.25374;
  int D.25375;
  gchar * D.25376;
  struct GSList * D.25377;
  int D.25378;
  int D.25385;
  struct MonoType * D.25387;
  unsigned char D.25388;
  gchar * D.25392;
  struct GSList * D.25393;
  short unsigned int D.25396;
  int D.25397;
  int D.25398;
  gchar * D.25404;
  struct GSList * D.25405;
  struct MonoClass * D.25408;
  struct MonoType * D.25409;
  int D.25410;
  gchar * D.25416;
  struct GSList * D.25417;
  int D.25420;
  int D.25423;
  gchar * D.25429;
  struct GSList * D.25430;
  struct MonoType * D.25433;
  struct ILStackDesc * top;
  struct MonoMethod * method;

  if (virtual != 0) goto <D.25325>; else goto <D.25326>;
  <D.25325>:
  D.25327 = check_underflow (ctx, 1);
  if (D.25327 == 0) goto <D.25328>; else goto <D.25329>;
  <D.25328>:
  return;
  <D.25329>:
  <D.25326>:
  if (virtual == 0) goto <D.25330>; else goto <D.25331>;
  <D.25330>:
  D.25332 = check_overflow (ctx);
  if (D.25332 == 0) goto <D.25333>; else goto <D.25334>;
  <D.25333>:
  return;
  <D.25334>:
  <D.25331>:
  D.25335 = ctx->method;
  D.25336 = BIT_FIELD_REF <*D.25335, 8, 160>;
  D.25337 = D.25336 & 124;
  if (D.25337 != 0) goto <D.25338>; else goto <D.25339>;
  <D.25338>:
  D.25335 = ctx->method;
  method = mono_method_get_wrapper_data (D.25335, token);
  if (method == 0B) goto <D.25340>; else goto <D.25341>;
  <D.25340>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25342 = ctx->ip_offset;
    D.25343 = monoeg_g_strdup_printf ("Invalid token %x for ldftn  at 0x%04x", token, D.25342);
    vinfo->info.message = D.25343;
    vinfo->exception_type = 12;
    D.25344 = ctx->list;
    D.25345 = monoeg_g_slist_prepend (D.25344, vinfo);
    ctx->list = D.25345;
  }
  ctx->valid = 0;
  return;
  <D.25341>:
  goto <D.25346>;
  <D.25339>:
  D.25350 = token >> 24;
  D.25351 = D.25350 != 6;
  D.25352 = D.25350 != 10;
  D.25353 = D.25351 & D.25352;
  if (D.25353 != 0) goto <D.25354>; else goto <D.25347>;
  <D.25354>:
  D.25355 = token >> 24;
  if (D.25355 != 43) goto <D.25348>; else goto <D.25347>;
  <D.25347>:
  D.25356 = ctx->image;
  D.25357 = token_bounds_check (D.25356, token);
  if (D.25357 == 0) goto <D.25348>; else goto <D.25349>;
  <D.25348>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25342 = ctx->ip_offset;
    D.25358 = monoeg_g_strdup_printf ("Invalid token %x for ldftn  at 0x%04x", token, D.25342);
    vinfo->info.message = D.25358;
    vinfo->exception_type = 12;
    D.25344 = ctx->list;
    D.25359 = monoeg_g_slist_prepend (D.25344, vinfo);
    ctx->list = D.25359;
  }
  ctx->valid = 0;
  return;
  <D.25349>:
  if (virtual != 0) goto <D.25361>; else goto <D.25362>;
  <D.25361>:
  iftmp.123 = "ldvirtfrn";
  goto <D.25363>;
  <D.25362>:
  iftmp.123 = "ldftn";
  <D.25363>:
  token.124 = (int) token;
  method = verifier_load_method (ctx, token.124, iftmp.123);
  if (method == 0B) goto <D.25365>; else goto <D.25366>;
  <D.25365>:
  return;
  <D.25366>:
  <D.25346>:
  D.25367 = mono_method_is_constructor (method);
  if (D.25367 != 0) goto <D.25368>; else goto <D.25369>;
  <D.25368>:
  D.25372 = ctx->verifiable;
  if (D.25372 != 0) goto <D.25370>; else goto <D.25373>;
  <D.25373>:
  D.25374 = ctx->level;
  D.25375 = D.25374 & 128;
  if (D.25375 != 0) goto <D.25370>; else goto <D.25371>;
  <D.25370>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25342 = ctx->ip_offset;
    D.25376 = monoeg_g_strdup_printf ("Cannot use ldftn with a constructor at 0x%04x", D.25342);
    vinfo->info.message = D.25376;
    vinfo->exception_type = 4;
    D.25344 = ctx->list;
    D.25377 = monoeg_g_slist_prepend (D.25344, vinfo);
    ctx->list = D.25377;
  }
  ctx->verifiable = 0;
  D.25374 = ctx->level;
  D.25378 = D.25374 & 16;
  if (D.25378 != 0) goto <D.25379>; else goto <D.25380>;
  <D.25379>:
  ctx->valid = 0;
  <D.25380>:
  <D.25371>:
  <D.25369>:
  if (virtual != 0) goto <D.25381>; else goto <D.25382>;
  <D.25381>:
  {
    struct ILStackDesc * top;

    top = stack_pop (ctx);
    D.25385 = stack_slot_get_type (top);
    if (D.25385 != 6) goto <D.25383>; else goto <D.25386>;
    <D.25386>:
    D.25387 = top->type;
    D.25388 = D.25387->type;
    if (D.25388 == 17) goto <D.25383>; else goto <D.25384>;
    <D.25383>:
    D.25372 = ctx->verifiable;
    if (D.25372 != 0) goto <D.25389>; else goto <D.25391>;
    <D.25391>:
    D.25374 = ctx->level;
    D.25375 = D.25374 & 128;
    if (D.25375 != 0) goto <D.25389>; else goto <D.25390>;
    <D.25389>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.25342 = ctx->ip_offset;
      D.25392 = monoeg_g_strdup_printf ("Invalid argument to ldvirtftn at 0x%04x", D.25342);
      vinfo->info.message = D.25392;
      vinfo->exception_type = 4;
      D.25344 = ctx->list;
      D.25393 = monoeg_g_slist_prepend (D.25344, vinfo);
      ctx->list = D.25393;
    }
    ctx->verifiable = 0;
    D.25374 = ctx->level;
    D.25378 = D.25374 & 16;
    if (D.25378 != 0) goto <D.25394>; else goto <D.25395>;
    <D.25394>:
    ctx->valid = 0;
    <D.25395>:
    <D.25390>:
    <D.25384>:
    D.25396 = method->flags;
    D.25397 = (int) D.25396;
    D.25398 = D.25397 & 16;
    if (D.25398 != 0) goto <D.25399>; else goto <D.25400>;
    <D.25399>:
    D.25372 = ctx->verifiable;
    if (D.25372 != 0) goto <D.25401>; else goto <D.25403>;
    <D.25403>:
    D.25374 = ctx->level;
    D.25375 = D.25374 & 128;
    if (D.25375 != 0) goto <D.25401>; else goto <D.25402>;
    <D.25401>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.25342 = ctx->ip_offset;
      D.25404 = monoeg_g_strdup_printf ("Cannot use ldvirtftn with a constructor at 0x%04x", D.25342);
      vinfo->info.message = D.25404;
      vinfo->exception_type = 4;
      D.25344 = ctx->list;
      D.25405 = monoeg_g_slist_prepend (D.25344, vinfo);
      ctx->list = D.25405;
    }
    ctx->verifiable = 0;
    D.25374 = ctx->level;
    D.25378 = D.25374 & 16;
    if (D.25378 != 0) goto <D.25406>; else goto <D.25407>;
    <D.25406>:
    ctx->valid = 0;
    <D.25407>:
    <D.25402>:
    <D.25400>:
    D.25408 = method->klass;
    D.25409 = &D.25408->byval_arg;
    D.25410 = verify_stack_type_compatibility (ctx, D.25409, top);
    if (D.25410 == 0) goto <D.25411>; else goto <D.25412>;
    <D.25411>:
    D.25372 = ctx->verifiable;
    if (D.25372 != 0) goto <D.25413>; else goto <D.25415>;
    <D.25415>:
    D.25374 = ctx->level;
    D.25375 = D.25374 & 128;
    if (D.25375 != 0) goto <D.25413>; else goto <D.25414>;
    <D.25413>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.25342 = ctx->ip_offset;
      D.25416 = monoeg_g_strdup_printf ("Unexpected object for ldvirtftn at 0x%04x", D.25342);
      vinfo->info.message = D.25416;
      vinfo->exception_type = 4;
      D.25344 = ctx->list;
      D.25417 = monoeg_g_slist_prepend (D.25344, vinfo);
      ctx->list = D.25417;
    }
    ctx->verifiable = 0;
    D.25374 = ctx->level;
    D.25378 = D.25374 & 16;
    if (D.25378 != 0) goto <D.25418>; else goto <D.25419>;
    <D.25418>:
    ctx->valid = 0;
    <D.25419>:
    <D.25414>:
    <D.25412>:
  }
  <D.25382>:
  D.25374 = ctx->level;
  D.25420 = D.25374 & 64;
  if (D.25420 == 0) goto <D.25421>; else goto <D.25422>;
  <D.25421>:
  D.25335 = ctx->method;
  D.25423 = mono_method_can_access_method_full (D.25335, method, 0B);
  if (D.25423 == 0) goto <D.25424>; else goto <D.25425>;
  <D.25424>:
  D.25372 = ctx->verifiable;
  if (D.25372 != 0) goto <D.25426>; else goto <D.25428>;
  <D.25428>:
  D.25374 = ctx->level;
  D.25375 = D.25374 & 128;
  if (D.25375 != 0) goto <D.25426>; else goto <D.25427>;
  <D.25426>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25342 = ctx->ip_offset;
    D.25429 = monoeg_g_strdup_printf ("Loaded method is not visible for ldftn/ldvirtftn at 0x%04x", D.25342);
    vinfo->info.message = D.25429;
    vinfo->exception_type = 9;
    D.25344 = ctx->list;
    D.25430 = monoeg_g_slist_prepend (D.25344, vinfo);
    ctx->list = D.25430;
  }
  ctx->verifiable = 0;
  D.25374 = ctx->level;
  D.25378 = D.25374 & 16;
  if (D.25378 != 0) goto <D.25431>; else goto <D.25432>;
  <D.25431>:
  ctx->valid = 0;
  <D.25432>:
  <D.25427>:
  <D.25425>:
  <D.25422>:
  D.25433 = mono_type_create_fnptr_from_mono_method (ctx, method);
  top = stack_push_val (ctx, 5, D.25433);
  top->method = method;
}


mono_type_create_fnptr_from_mono_method (struct VerifyContext * ctx, struct MonoMethod * method)
{
  struct MonoMethodSignature * D.25435;
  struct GSList * D.25436;
  struct GSList * D.25437;
  struct MonoType * D.25438;
  struct MonoType * res;

  res = monoeg_malloc0 (8);
  D.25435 = mono_method_signature (method);
  res->data.method = D.25435;
  res->type = 27;
  D.25436 = ctx->funptrs;
  D.25437 = monoeg_g_slist_prepend (D.25436, res);
  ctx->funptrs = D.25437;
  D.25438 = res;
  return D.25438;
}


push_arg (struct VerifyContext * ctx, unsigned int arg, int take_addr)
{
  int D.25440;
  unsigned int D.25441;
  unsigned int D.25446;
  gchar * D.25447;
  struct GSList * D.25448;
  struct GSList * D.25449;
  int D.25453;
  int D.25455;
  int D.25456;
  gchar * D.25457;
  struct GSList * D.25458;
  int D.25459;
  int D.25462;
  struct MonoClass * D.25465;
  struct MonoType * D.25466;
  int D.25468;
  struct MonoType * * D.25471;
  unsigned int D.25472;
  struct MonoType * * D.25473;
  struct MonoType * D.25474;
  unsigned char D.25475;
  unsigned char D.25476;
  unsigned int D.25484;
  gchar * D.25485;
  struct GSList * D.25486;
  int D.25489;
  struct MonoMethod * D.25494;
  short unsigned int D.25495;
  int D.25496;
  int D.25497;
  int D.25503;
  int D.25504;
  int D.25505;
  int D.25508;
  struct MonoClass * D.25511;
  unsigned char D.25512;
  unsigned char D.25513;
  int D.25516;
  struct ILStackDesc * top;

  D.25440 = ctx->max_args;
  D.25441 = (unsigned int) D.25440;
  if (D.25441 <= arg) goto <D.25442>; else goto <D.25443>;
  <D.25442>:
  if (take_addr != 0) goto <D.25444>; else goto <D.25445>;
  <D.25444>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25446 = arg + 1;
    D.25447 = monoeg_g_strdup_printf ("Method doesn\'t have argument %d", D.25446);
    vinfo->info.message = D.25447;
    vinfo->exception_type = 3;
    D.25448 = ctx->list;
    D.25449 = monoeg_g_slist_prepend (D.25448, vinfo);
    ctx->list = D.25449;
  }
  ctx->valid = 0;
  goto <D.25450>;
  <D.25445>:
  D.25453 = ctx->verifiable;
  if (D.25453 != 0) goto <D.25451>; else goto <D.25454>;
  <D.25454>:
  D.25455 = ctx->level;
  D.25456 = D.25455 & 128;
  if (D.25456 != 0) goto <D.25451>; else goto <D.25452>;
  <D.25451>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25446 = arg + 1;
    D.25457 = monoeg_g_strdup_printf ("Method doesn\'t have argument %d", D.25446);
    vinfo->info.message = D.25457;
    vinfo->exception_type = 4;
    D.25448 = ctx->list;
    D.25458 = monoeg_g_slist_prepend (D.25448, vinfo);
    ctx->list = D.25458;
  }
  ctx->verifiable = 0;
  D.25455 = ctx->level;
  D.25459 = D.25455 & 16;
  if (D.25459 != 0) goto <D.25460>; else goto <D.25461>;
  <D.25460>:
  ctx->valid = 0;
  <D.25461>:
  <D.25452>:
  D.25462 = check_overflow (ctx);
  if (D.25462 != 0) goto <D.25463>; else goto <D.25464>;
  <D.25463>:
  D.25465 = mono_defaults.int32_class;
  D.25466 = &D.25465->byval_arg;
  stack_push_val (ctx, 1, D.25466);
  <D.25464>:
  <D.25450>:
  goto <D.25467>;
  <D.25443>:
  D.25468 = check_overflow (ctx);
  if (D.25468 != 0) goto <D.25469>; else goto <D.25470>;
  <D.25469>:
  D.25471 = ctx->params;
  D.25472 = arg * 4;
  D.25473 = D.25471 + D.25472;
  D.25474 = *D.25473;
  check_unverifiable_type (ctx, D.25474);
  D.25471 = ctx->params;
  D.25472 = arg * 4;
  D.25473 = D.25471 + D.25472;
  D.25474 = *D.25473;
  D.25475 = BIT_FIELD_REF <*D.25474, 8, 56>;
  D.25476 = D.25475 & 64;
  if (D.25476 != 0) goto <D.25477>; else goto <D.25478>;
  <D.25477>:
  if (take_addr != 0) goto <D.25479>; else goto <D.25480>;
  <D.25479>:
  D.25453 = ctx->verifiable;
  if (D.25453 != 0) goto <D.25481>; else goto <D.25483>;
  <D.25483>:
  D.25455 = ctx->level;
  D.25456 = D.25455 & 128;
  if (D.25456 != 0) goto <D.25481>; else goto <D.25482>;
  <D.25481>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25484 = ctx->ip_offset;
    D.25485 = monoeg_g_strdup_printf ("ByRef of ByRef at 0x%04x", D.25484);
    vinfo->info.message = D.25485;
    vinfo->exception_type = 4;
    D.25448 = ctx->list;
    D.25486 = monoeg_g_slist_prepend (D.25448, vinfo);
    ctx->list = D.25486;
  }
  ctx->verifiable = 0;
  D.25455 = ctx->level;
  D.25459 = D.25455 & 16;
  if (D.25459 != 0) goto <D.25487>; else goto <D.25488>;
  <D.25487>:
  ctx->valid = 0;
  <D.25488>:
  <D.25482>:
  <D.25480>:
  <D.25478>:
  top = stack_push (ctx);
  D.25471 = ctx->params;
  D.25472 = arg * 4;
  D.25473 = D.25471 + D.25472;
  D.25474 = *D.25473;
  D.25489 = set_stack_value (ctx, top, D.25474, take_addr);
  if (D.25489 == 0) goto <D.25490>; else goto <D.25491>;
  <D.25490>:
  return;
  <D.25491>:
  if (arg == 0) goto <D.25492>; else goto <D.25493>;
  <D.25492>:
  D.25494 = ctx->method;
  D.25495 = D.25494->flags;
  D.25496 = (int) D.25495;
  D.25497 = D.25496 & 16;
  if (D.25497 == 0) goto <D.25498>; else goto <D.25499>;
  <D.25498>:
  if (take_addr != 0) goto <D.25500>; else goto <D.25501>;
  <D.25500>:
  ctx->has_this_store = 1;
  goto <D.25502>;
  <D.25501>:
  D.25503 = top->stype;
  D.25504 = D.25503 | 2048;
  top->stype = D.25504;
  <D.25502>:
  D.25494 = ctx->method;
  D.25505 = mono_method_is_constructor (D.25494);
  if (D.25505 != 0) goto <D.25506>; else goto <D.25507>;
  <D.25506>:
  D.25508 = ctx->super_ctor_called;
  if (D.25508 == 0) goto <D.25509>; else goto <D.25510>;
  <D.25509>:
  D.25494 = ctx->method;
  D.25511 = D.25494->klass;
  D.25512 = BIT_FIELD_REF <*D.25511, 8, 160>;
  D.25513 = D.25512 & 8;
  if (D.25513 == 0) goto <D.25514>; else goto <D.25515>;
  <D.25514>:
  D.25503 = top->stype;
  D.25516 = D.25503 | 8192;
  top->stype = D.25516;
  <D.25515>:
  <D.25510>:
  <D.25507>:
  <D.25499>:
  <D.25493>:
  <D.25470>:
  <D.25467>:
}


check_unverifiable_type (struct VerifyContext * ctx, struct MonoType * type)
{
  unsigned char D.25518;
  _Bool D.25519;
  _Bool D.25520;
  _Bool D.25521;
  int D.25526;
  int D.25528;
  int D.25529;
  unsigned int D.25530;
  gchar * D.25531;
  struct GSList * D.25532;
  struct GSList * D.25533;
  int D.25534;
  gboolean D.25537;

  D.25518 = type->type;
  D.25519 = D.25518 == 15;
  D.25520 = D.25518 == 27;
  D.25521 = D.25519 | D.25520;
  if (D.25521 != 0) goto <D.25522>; else goto <D.25523>;
  <D.25522>:
  D.25526 = ctx->verifiable;
  if (D.25526 != 0) goto <D.25524>; else goto <D.25527>;
  <D.25527>:
  D.25528 = ctx->level;
  D.25529 = D.25528 & 128;
  if (D.25529 != 0) goto <D.25524>; else goto <D.25525>;
  <D.25524>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25530 = ctx->ip_offset;
    D.25531 = monoeg_g_strdup_printf ("Unmanaged pointer is not a verifiable type at 0x%04x", D.25530);
    vinfo->info.message = D.25531;
    vinfo->exception_type = 4;
    D.25532 = ctx->list;
    D.25533 = monoeg_g_slist_prepend (D.25532, vinfo);
    ctx->list = D.25533;
  }
  ctx->verifiable = 0;
  D.25528 = ctx->level;
  D.25534 = D.25528 & 16;
  if (D.25534 != 0) goto <D.25535>; else goto <D.25536>;
  <D.25535>:
  ctx->valid = 0;
  <D.25536>:
  <D.25525>:
  D.25537 = 0;
  return D.25537;
  <D.25523>:
  D.25537 = 1;
  return D.25537;
}


push_local (struct VerifyContext * ctx, guint32 arg, int take_addr)
{
  int D.25539;
  unsigned int D.25540;
  unsigned int D.25543;
  gchar * D.25544;
  struct GSList * D.25545;
  struct GSList * D.25546;
  int D.25548;
  struct MonoType * * D.25551;
  unsigned int D.25552;
  struct MonoType * * D.25553;
  struct MonoType * D.25554;
  unsigned char D.25555;
  unsigned char D.25556;
  int D.25563;
  int D.25565;
  int D.25566;
  unsigned int D.25567;
  gchar * D.25568;
  struct GSList * D.25569;
  int D.25570;
  struct ILStackDesc * D.25573;

  D.25539 = ctx->num_locals;
  D.25540 = (unsigned int) D.25539;
  if (D.25540 <= arg) goto <D.25541>; else goto <D.25542>;
  <D.25541>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25543 = arg + 1;
    D.25544 = monoeg_g_strdup_printf ("Method doesn\'t have local %d", D.25543);
    vinfo->info.message = D.25544;
    vinfo->exception_type = 3;
    D.25545 = ctx->list;
    D.25546 = monoeg_g_slist_prepend (D.25545, vinfo);
    ctx->list = D.25546;
  }
  ctx->valid = 0;
  goto <D.25547>;
  <D.25542>:
  D.25548 = check_overflow (ctx);
  if (D.25548 != 0) goto <D.25549>; else goto <D.25550>;
  <D.25549>:
  D.25551 = ctx->locals;
  D.25552 = arg * 4;
  D.25553 = D.25551 + D.25552;
  D.25554 = *D.25553;
  check_unverifiable_type (ctx, D.25554);
  D.25551 = ctx->locals;
  D.25552 = arg * 4;
  D.25553 = D.25551 + D.25552;
  D.25554 = *D.25553;
  D.25555 = BIT_FIELD_REF <*D.25554, 8, 56>;
  D.25556 = D.25555 & 64;
  if (D.25556 != 0) goto <D.25557>; else goto <D.25558>;
  <D.25557>:
  if (take_addr != 0) goto <D.25559>; else goto <D.25560>;
  <D.25559>:
  D.25563 = ctx->verifiable;
  if (D.25563 != 0) goto <D.25561>; else goto <D.25564>;
  <D.25564>:
  D.25565 = ctx->level;
  D.25566 = D.25565 & 128;
  if (D.25566 != 0) goto <D.25561>; else goto <D.25562>;
  <D.25561>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25567 = ctx->ip_offset;
    D.25568 = monoeg_g_strdup_printf ("ByRef of ByRef at 0x%04x", D.25567);
    vinfo->info.message = D.25568;
    vinfo->exception_type = 4;
    D.25545 = ctx->list;
    D.25569 = monoeg_g_slist_prepend (D.25545, vinfo);
    ctx->list = D.25569;
  }
  ctx->verifiable = 0;
  D.25565 = ctx->level;
  D.25570 = D.25565 & 16;
  if (D.25570 != 0) goto <D.25571>; else goto <D.25572>;
  <D.25571>:
  ctx->valid = 0;
  <D.25572>:
  <D.25562>:
  <D.25560>:
  <D.25558>:
  D.25551 = ctx->locals;
  D.25552 = arg * 4;
  D.25553 = D.25551 + D.25552;
  D.25554 = *D.25553;
  D.25573 = stack_push (ctx);
  set_stack_value (ctx, D.25573, D.25554, take_addr);
  <D.25550>:
  <D.25547>:
}


do_localloc (struct VerifyContext * ctx)
{
  short unsigned int D.25574;
  unsigned int D.25577;
  gchar * D.25578;
  struct GSList * D.25579;
  struct GSList * D.25580;
  struct MonoMethodHeader * D.25581;
  int D.25582;
  gchar * D.25585;
  struct GSList * D.25586;
  struct MonoClass * D.25587;
  struct MonoType * D.25588;
  struct ILStackDesc * D.25589;
  int D.25592;
  int D.25594;
  int D.25595;
  gchar * D.25596;
  struct GSList * D.25597;
  int D.25598;
  struct ILStackDesc * top;

  D.25574 = ctx->eval.size;
  if (D.25574 != 1) goto <D.25575>; else goto <D.25576>;
  <D.25575>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25577 = ctx->ip_offset;
    D.25578 = monoeg_g_strdup_printf ("Stack must have only size item in localloc at 0x%04x", D.25577);
    vinfo->info.message = D.25578;
    vinfo->exception_type = 3;
    D.25579 = ctx->list;
    D.25580 = monoeg_g_slist_prepend (D.25579, vinfo);
    ctx->list = D.25580;
  }
  ctx->valid = 0;
  return;
  <D.25576>:
  D.25577 = ctx->ip_offset;
  D.25581 = ctx->header;
  D.25582 = in_any_exception_block (D.25581, D.25577);
  if (D.25582 != 0) goto <D.25583>; else goto <D.25584>;
  <D.25583>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25577 = ctx->ip_offset;
    D.25585 = monoeg_g_strdup_printf ("Stack must have only size item in localloc at 0x%04x", D.25577);
    vinfo->info.message = D.25585;
    vinfo->exception_type = 3;
    D.25579 = ctx->list;
    D.25586 = monoeg_g_slist_prepend (D.25579, vinfo);
    ctx->list = D.25586;
  }
  ctx->valid = 0;
  return;
  <D.25584>:
  top = stack_pop (ctx);
  D.25587 = mono_defaults.int_class;
  D.25588 = &D.25587->byval_arg;
  D.25589 = stack_push (ctx);
  set_stack_value (ctx, D.25589, D.25588, 0);
  D.25592 = ctx->verifiable;
  if (D.25592 != 0) goto <D.25590>; else goto <D.25593>;
  <D.25593>:
  D.25594 = ctx->level;
  D.25595 = D.25594 & 128;
  if (D.25595 != 0) goto <D.25590>; else goto <D.25591>;
  <D.25590>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25577 = ctx->ip_offset;
    D.25596 = monoeg_g_strdup_printf ("Instruction localloc in never verifiable at 0x%04x", D.25577);
    vinfo->info.message = D.25596;
    vinfo->exception_type = 4;
    D.25579 = ctx->list;
    D.25597 = monoeg_g_slist_prepend (D.25579, vinfo);
    ctx->list = D.25597;
  }
  ctx->verifiable = 0;
  D.25594 = ctx->level;
  D.25598 = D.25594 & 16;
  if (D.25598 != 0) goto <D.25599>; else goto <D.25600>;
  <D.25599>:
  ctx->valid = 0;
  <D.25600>:
  <D.25591>:
}


in_any_exception_block (struct MonoMethodHeader * header, guint offset)
{
  struct MonoExceptionClause * D.25602;
  unsigned int i.125;
  unsigned int D.25604;
  unsigned int D.25605;
  unsigned int D.25608;
  unsigned int D.25609;
  gboolean D.25612;
  unsigned int D.25613;
  unsigned int D.25616;
  <unnamed-unsigned:15> D.25621;
  int D.25622;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.17828>;
  <D.17827>:
  D.25602 = header->clauses;
  i.125 = (unsigned int) i;
  D.25604 = i.125 * 24;
  clause = D.25602 + D.25604;
  D.25605 = clause->handler_offset;
  if (D.25605 <= offset) goto <D.25606>; else goto <D.25607>;
  <D.25606>:
  D.25605 = clause->handler_offset;
  D.25608 = clause->handler_len;
  D.25609 = D.25605 + D.25608;
  if (D.25609 > offset) goto <D.25610>; else goto <D.25611>;
  <D.25610>:
  D.25612 = 1;
  return D.25612;
  <D.25611>:
  <D.25607>:
  D.25613 = clause->flags;
  if (D.25613 == 1) goto <D.25614>; else goto <D.25615>;
  <D.25614>:
  D.25616 = clause->data.filter_offset;
  if (D.25616 <= offset) goto <D.25617>; else goto <D.25618>;
  <D.25617>:
  D.25605 = clause->handler_offset;
  if (D.25605 > offset) goto <D.25619>; else goto <D.25620>;
  <D.25619>:
  D.25612 = 1;
  return D.25612;
  <D.25620>:
  <D.25618>:
  <D.25615>:
  i = i + 1;
  <D.17828>:
  D.25621 = header->num_clauses;
  D.25622 = (int) D.25621;
  if (D.25622 > i) goto <D.17827>; else goto <D.17829>;
  <D.17829>:
  D.25612 = 0;
  return D.25612;
}


do_endfilter (struct VerifyContext * ctx)
{
  int D.25624;
  int D.25625;
  short unsigned int D.25628;
  int D.25633;
  int D.25635;
  unsigned int D.25636;
  gchar * D.25637;
  struct GSList * D.25638;
  struct GSList * D.25639;
  int D.25640;
  struct ILStackDesc * D.25645;
  int D.25646;
  gchar * D.25652;
  struct GSList * D.25653;
  unsigned int D.25660;
  unsigned int D.25661;
  gchar * D.25664;
  struct GSList * D.25665;
  unsigned int D.25672;
  unsigned int D.25673;
  gchar * D.25674;
  struct GSList * D.25675;
  int D.25680;
  gchar * D.25682;
  struct GSList * D.25683;
  gchar * D.25687;
  struct GSList * D.25688;
  struct MonoExceptionClause * clause;

  D.25624 = ctx->level;
  D.25625 = D.25624 & 32;
  if (D.25625 == 0) goto <D.25626>; else goto <D.25627>;
  <D.25626>:
  D.25628 = ctx->eval.size;
  if (D.25628 != 1) goto <D.25629>; else goto <D.25630>;
  <D.25629>:
  D.25633 = ctx->verifiable;
  if (D.25633 != 0) goto <D.25631>; else goto <D.25634>;
  <D.25634>:
  D.25624 = ctx->level;
  D.25635 = D.25624 & 128;
  if (D.25635 != 0) goto <D.25631>; else goto <D.25632>;
  <D.25631>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25636 = ctx->ip_offset;
    D.25637 = monoeg_g_strdup_printf ("Stack size must have one item for endfilter at 0x%04x", D.25636);
    vinfo->info.message = D.25637;
    vinfo->exception_type = 4;
    D.25638 = ctx->list;
    D.25639 = monoeg_g_slist_prepend (D.25638, vinfo);
    ctx->list = D.25639;
  }
  ctx->verifiable = 0;
  D.25624 = ctx->level;
  D.25640 = D.25624 & 16;
  if (D.25640 != 0) goto <D.25641>; else goto <D.25642>;
  <D.25641>:
  ctx->valid = 0;
  <D.25642>:
  <D.25632>:
  <D.25630>:
  D.25628 = ctx->eval.size;
  if (D.25628 != 0) goto <D.25643>; else goto <D.25644>;
  <D.25643>:
  D.25645 = stack_pop (ctx);
  D.25646 = stack_slot_get_type (D.25645);
  if (D.25646 != 1) goto <D.25647>; else goto <D.25648>;
  <D.25647>:
  D.25633 = ctx->verifiable;
  if (D.25633 != 0) goto <D.25649>; else goto <D.25651>;
  <D.25651>:
  D.25624 = ctx->level;
  D.25635 = D.25624 & 128;
  if (D.25635 != 0) goto <D.25649>; else goto <D.25650>;
  <D.25649>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25636 = ctx->ip_offset;
    D.25652 = monoeg_g_strdup_printf ("Stack item type is not an int32 for endfilter at 0x%04x", D.25636);
    vinfo->info.message = D.25652;
    vinfo->exception_type = 4;
    D.25638 = ctx->list;
    D.25653 = monoeg_g_slist_prepend (D.25638, vinfo);
    ctx->list = D.25653;
  }
  ctx->verifiable = 0;
  D.25624 = ctx->level;
  D.25640 = D.25624 & 16;
  if (D.25640 != 0) goto <D.25654>; else goto <D.25655>;
  <D.25654>:
  ctx->valid = 0;
  <D.25655>:
  <D.25650>:
  <D.25648>:
  <D.25644>:
  <D.25627>:
  D.25636 = ctx->ip_offset;
  clause = is_correct_endfilter (ctx, D.25636);
  if (clause != 0B) goto <D.25656>; else goto <D.25657>;
  <D.25656>:
  D.25624 = ctx->level;
  D.25625 = D.25624 & 32;
  if (D.25625 == 0) goto <D.25658>; else goto <D.25659>;
  <D.25658>:
  D.25636 = ctx->ip_offset;
  D.25660 = clause->handler_offset;
  D.25661 = D.25660 + 4294967294;
  if (D.25636 != D.25661) goto <D.25662>; else goto <D.25663>;
  <D.25662>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25636 = ctx->ip_offset;
    D.25664 = monoeg_g_strdup_printf ("endfilter is not the last instruction of the filter clause at 0x%04x", D.25636);
    vinfo->info.message = D.25664;
    vinfo->exception_type = 3;
    D.25638 = ctx->list;
    D.25665 = monoeg_g_slist_prepend (D.25638, vinfo);
    ctx->list = D.25665;
  }
  ctx->valid = 0;
  <D.25663>:
  goto <D.25666>;
  <D.25659>:
  D.25636 = ctx->ip_offset;
  D.25660 = clause->handler_offset;
  D.25661 = D.25660 + 4294967294;
  if (D.25636 != D.25661) goto <D.25669>; else goto <D.25670>;
  <D.25669>:
  D.25660 = clause->handler_offset;
  D.25636 = ctx->ip_offset;
  if (D.25660 > D.25636) goto <D.25667>; else goto <D.25671>;
  <D.25671>:
  D.25636 = ctx->ip_offset;
  D.25660 = clause->handler_offset;
  D.25672 = clause->handler_len;
  D.25673 = D.25660 + D.25672;
  if (D.25636 >= D.25673) goto <D.25667>; else goto <D.25668>;
  <D.25667>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25636 = ctx->ip_offset;
    D.25674 = monoeg_g_strdup_printf ("endfilter is not the last instruction of the filter clause at 0x%04x", D.25636);
    vinfo->info.message = D.25674;
    vinfo->exception_type = 3;
    D.25638 = ctx->list;
    D.25675 = monoeg_g_slist_prepend (D.25638, vinfo);
    ctx->list = D.25675;
  }
  ctx->valid = 0;
  <D.25668>:
  <D.25670>:
  <D.25666>:
  goto <D.25676>;
  <D.25657>:
  D.25624 = ctx->level;
  D.25625 = D.25624 & 32;
  if (D.25625 == 0) goto <D.25679>; else goto <D.25677>;
  <D.25679>:
  D.25636 = ctx->ip_offset;
  D.25680 = is_unverifiable_endfilter (ctx, D.25636);
  if (D.25680 == 0) goto <D.25681>; else goto <D.25677>;
  <D.25681>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25636 = ctx->ip_offset;
    D.25682 = monoeg_g_strdup_printf ("endfilter outside filter clause at 0x%04x", D.25636);
    vinfo->info.message = D.25682;
    vinfo->exception_type = 3;
    D.25638 = ctx->list;
    D.25683 = monoeg_g_slist_prepend (D.25638, vinfo);
    ctx->list = D.25683;
  }
  ctx->valid = 0;
  goto <D.25678>;
  <D.25677>:
  D.25633 = ctx->verifiable;
  if (D.25633 != 0) goto <D.25684>; else goto <D.25686>;
  <D.25686>:
  D.25624 = ctx->level;
  D.25635 = D.25624 & 128;
  if (D.25635 != 0) goto <D.25684>; else goto <D.25685>;
  <D.25684>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25636 = ctx->ip_offset;
    D.25687 = monoeg_g_strdup_printf ("endfilter outside filter clause at 0x%04x", D.25636);
    vinfo->info.message = D.25687;
    vinfo->exception_type = 4;
    D.25638 = ctx->list;
    D.25688 = monoeg_g_slist_prepend (D.25638, vinfo);
    ctx->list = D.25688;
  }
  ctx->verifiable = 0;
  D.25624 = ctx->level;
  D.25640 = D.25624 & 16;
  if (D.25640 != 0) goto <D.25689>; else goto <D.25690>;
  <D.25689>:
  ctx->valid = 0;
  <D.25690>:
  <D.25685>:
  <D.25678>:
  <D.25676>:
  ctx->eval.size = 0;
}


is_correct_endfilter (struct VerifyContext * ctx, guint offset)
{
  struct MonoMethodHeader * D.25691;
  struct MonoExceptionClause * D.25692;
  unsigned int i.126;
  unsigned int D.25694;
  unsigned int D.25695;
  unsigned int D.25700;
  unsigned int D.25703;
  struct MonoExceptionClause * D.25706;
  int D.25707;
  int D.25708;
  unsigned int D.25713;
  unsigned int D.25714;
  <unnamed-unsigned:15> D.25717;
  int D.25718;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.17886>;
  <D.17885>:
  D.25691 = ctx->header;
  D.25692 = D.25691->clauses;
  i.126 = (unsigned int) i;
  D.25694 = i.126 * 24;
  clause = D.25692 + D.25694;
  D.25695 = clause->flags;
  if (D.25695 != 1) goto <D.25696>; else goto <D.25697>;
  <D.25696>:
  // predicted unlikely by continue predictor.
  goto <D.17884>;
  <D.25697>:
  D.25695 = clause->flags;
  if (D.25695 == 1) goto <D.25698>; else goto <D.25699>;
  <D.25698>:
  D.25700 = clause->data.filter_offset;
  if (D.25700 <= offset) goto <D.25701>; else goto <D.25702>;
  <D.25701>:
  D.25703 = clause->handler_offset;
  if (D.25703 > offset) goto <D.25704>; else goto <D.25705>;
  <D.25704>:
  D.25706 = clause;
  return D.25706;
  <D.25705>:
  <D.25702>:
  <D.25699>:
  D.25707 = ctx->level;
  D.25708 = D.25707 & 32;
  if (D.25708 != 0) goto <D.25709>; else goto <D.25710>;
  <D.25709>:
  D.25703 = clause->handler_offset;
  if (D.25703 <= offset) goto <D.25711>; else goto <D.25712>;
  <D.25711>:
  D.25703 = clause->handler_offset;
  D.25713 = clause->handler_len;
  D.25714 = D.25703 + D.25713;
  if (D.25714 > offset) goto <D.25715>; else goto <D.25716>;
  <D.25715>:
  D.25706 = clause;
  return D.25706;
  <D.25716>:
  <D.25712>:
  <D.25710>:
  <D.17884>:
  i = i + 1;
  <D.17886>:
  D.25691 = ctx->header;
  D.25717 = D.25691->num_clauses;
  D.25718 = (int) D.25717;
  if (D.25718 > i) goto <D.17885>; else goto <D.17887>;
  <D.17887>:
  D.25706 = 0B;
  return D.25706;
}


is_unverifiable_endfilter (struct VerifyContext * ctx, guint offset)
{
  struct MonoMethodHeader * D.25720;
  struct MonoExceptionClause * D.25721;
  unsigned int i.127;
  unsigned int D.25723;
  unsigned int D.25724;
  unsigned int D.25727;
  unsigned int D.25728;
  int D.25731;
  <unnamed-unsigned:15> D.25732;
  int D.25733;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.17895>;
  <D.17894>:
  D.25720 = ctx->header;
  D.25721 = D.25720->clauses;
  i.127 = (unsigned int) i;
  D.25723 = i.127 * 24;
  clause = D.25721 + D.25723;
  D.25724 = clause->try_offset;
  if (D.25724 <= offset) goto <D.25725>; else goto <D.25726>;
  <D.25725>:
  D.25724 = clause->try_offset;
  D.25727 = clause->try_len;
  D.25728 = D.25724 + D.25727;
  if (D.25728 > offset) goto <D.25729>; else goto <D.25730>;
  <D.25729>:
  D.25731 = 1;
  return D.25731;
  <D.25730>:
  <D.25726>:
  i = i + 1;
  <D.17895>:
  D.25720 = ctx->header;
  D.25732 = D.25720->num_clauses;
  D.25733 = (int) D.25732;
  if (D.25733 > i) goto <D.17894>; else goto <D.17896>;
  <D.17896>:
  D.25731 = 0;
  return D.25731;
}


do_initobj (struct VerifyContext * ctx, int token)
{
  int D.25737;
  int D.25740;
  int D.25745;
  int D.25747;
  int D.25748;
  unsigned int D.25749;
  gchar * D.25750;
  struct GSList * D.25751;
  struct GSList * D.25752;
  int D.25753;
  int D.25756;
  gchar * D.25762;
  struct GSList * D.25763;
  struct MonoType * D.25766;
  int D.25767;
  int D.25770;
  gchar * D.25776;
  struct GSList * D.25777;
  int D.25781;
  int D.25784;
  gchar * D.25790;
  struct GSList * D.25791;
  int D.25795;
  gchar * D.25801;
  struct GSList * D.25802;
  struct ILStackDesc * obj;
  struct MonoType * stack;
  struct MonoType * type;

  type = get_boxable_mono_type (ctx, token, "initobj");
  if (type == 0B) goto <D.25735>; else goto <D.25736>;
  <D.25735>:
  return;
  <D.25736>:
  D.25737 = check_underflow (ctx, 1);
  if (D.25737 == 0) goto <D.25738>; else goto <D.25739>;
  <D.25738>:
  return;
  <D.25739>:
  obj = stack_pop (ctx);
  D.25740 = stack_slot_is_managed_pointer (obj);
  if (D.25740 == 0) goto <D.25741>; else goto <D.25742>;
  <D.25741>:
  D.25745 = ctx->verifiable;
  if (D.25745 != 0) goto <D.25743>; else goto <D.25746>;
  <D.25746>:
  D.25747 = ctx->level;
  D.25748 = D.25747 & 128;
  if (D.25748 != 0) goto <D.25743>; else goto <D.25744>;
  <D.25743>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25749 = ctx->ip_offset;
    D.25750 = monoeg_g_strdup_printf ("Invalid object address for initobj at 0x%04x", D.25749);
    vinfo->info.message = D.25750;
    vinfo->exception_type = 4;
    D.25751 = ctx->list;
    D.25752 = monoeg_g_slist_prepend (D.25751, vinfo);
    ctx->list = D.25752;
  }
  ctx->verifiable = 0;
  D.25747 = ctx->level;
  D.25753 = D.25747 & 16;
  if (D.25753 != 0) goto <D.25754>; else goto <D.25755>;
  <D.25754>:
  ctx->valid = 0;
  <D.25755>:
  <D.25744>:
  <D.25742>:
  D.25756 = stack_slot_is_managed_mutability_pointer (obj);
  if (D.25756 != 0) goto <D.25757>; else goto <D.25758>;
  <D.25757>:
  D.25745 = ctx->verifiable;
  if (D.25745 != 0) goto <D.25759>; else goto <D.25761>;
  <D.25761>:
  D.25747 = ctx->level;
  D.25748 = D.25747 & 128;
  if (D.25748 != 0) goto <D.25759>; else goto <D.25760>;
  <D.25759>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25749 = ctx->ip_offset;
    D.25762 = monoeg_g_strdup_printf ("Cannot use a readonly pointer with initobj at 0x%04x", D.25749);
    vinfo->info.message = D.25762;
    vinfo->exception_type = 4;
    D.25751 = ctx->list;
    D.25763 = monoeg_g_slist_prepend (D.25751, vinfo);
    ctx->list = D.25763;
  }
  ctx->verifiable = 0;
  D.25747 = ctx->level;
  D.25753 = D.25747 & 16;
  if (D.25753 != 0) goto <D.25764>; else goto <D.25765>;
  <D.25764>:
  ctx->valid = 0;
  <D.25765>:
  <D.25760>:
  <D.25758>:
  D.25766 = obj->type;
  stack = mono_type_get_type_byval (D.25766);
  D.25767 = mono_type_is_reference (stack);
  if (D.25767 != 0) goto <D.25768>; else goto <D.25769>;
  <D.25768>:
  D.25770 = verify_type_compatibility (ctx, stack, type);
  if (D.25770 == 0) goto <D.25771>; else goto <D.25772>;
  <D.25771>:
  D.25745 = ctx->verifiable;
  if (D.25745 != 0) goto <D.25773>; else goto <D.25775>;
  <D.25775>:
  D.25747 = ctx->level;
  D.25748 = D.25747 & 128;
  if (D.25748 != 0) goto <D.25773>; else goto <D.25774>;
  <D.25773>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25749 = ctx->ip_offset;
    D.25776 = monoeg_g_strdup_printf ("Type token of initobj not compatible with value on stack at 0x%04x", D.25749);
    vinfo->info.message = D.25776;
    vinfo->exception_type = 4;
    D.25751 = ctx->list;
    D.25777 = monoeg_g_slist_prepend (D.25751, vinfo);
    ctx->list = D.25777;
  }
  ctx->verifiable = 0;
  D.25747 = ctx->level;
  D.25753 = D.25747 & 16;
  if (D.25753 != 0) goto <D.25778>; else goto <D.25779>;
  <D.25778>:
  ctx->valid = 0;
  <D.25779>:
  <D.25774>:
  goto <D.25780>;
  <D.25772>:
  D.25747 = ctx->level;
  D.25781 = D.25747 & 32;
  if (D.25781 == 0) goto <D.25782>; else goto <D.25783>;
  <D.25782>:
  D.25784 = mono_metadata_type_equal (type, stack);
  if (D.25784 == 0) goto <D.25785>; else goto <D.25786>;
  <D.25785>:
  D.25745 = ctx->verifiable;
  if (D.25745 != 0) goto <D.25787>; else goto <D.25789>;
  <D.25789>:
  D.25747 = ctx->level;
  D.25748 = D.25747 & 128;
  if (D.25748 != 0) goto <D.25787>; else goto <D.25788>;
  <D.25787>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25749 = ctx->ip_offset;
    D.25790 = monoeg_g_strdup_printf ("Type token of initobj not compatible with value on stack at 0x%04x", D.25749);
    vinfo->info.message = D.25790;
    vinfo->exception_type = 4;
    D.25751 = ctx->list;
    D.25791 = monoeg_g_slist_prepend (D.25751, vinfo);
    ctx->list = D.25791;
  }
  ctx->verifiable = 0;
  D.25747 = ctx->level;
  D.25753 = D.25747 & 16;
  if (D.25753 != 0) goto <D.25792>; else goto <D.25793>;
  <D.25792>:
  ctx->valid = 0;
  <D.25793>:
  <D.25788>:
  <D.25786>:
  <D.25783>:
  <D.25780>:
  goto <D.25794>;
  <D.25769>:
  D.25795 = verify_type_compatibility (ctx, stack, type);
  if (D.25795 == 0) goto <D.25796>; else goto <D.25797>;
  <D.25796>:
  {
    char * expected_name;
    char * stack_name;

    expected_name = mono_type_full_name (type);
    stack_name = mono_type_full_name (stack);
    D.25745 = ctx->verifiable;
    if (D.25745 != 0) goto <D.25798>; else goto <D.25800>;
    <D.25800>:
    D.25747 = ctx->level;
    D.25748 = D.25747 & 128;
    if (D.25748 != 0) goto <D.25798>; else goto <D.25799>;
    <D.25798>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (12);
      vinfo->info.status = 8;
      D.25749 = ctx->ip_offset;
      D.25801 = monoeg_g_strdup_printf ("Initobj %s not compatible with value on stack %s at 0x%04x", expected_name, stack_name, D.25749);
      vinfo->info.message = D.25801;
      vinfo->exception_type = 4;
      D.25751 = ctx->list;
      D.25802 = monoeg_g_slist_prepend (D.25751, vinfo);
      ctx->list = D.25802;
    }
    ctx->verifiable = 0;
    D.25747 = ctx->level;
    D.25753 = D.25747 & 16;
    if (D.25753 != 0) goto <D.25803>; else goto <D.25804>;
    <D.25803>:
    ctx->valid = 0;
    <D.25804>:
    <D.25799>:
    monoeg_g_free (expected_name);
    monoeg_g_free (stack_name);
  }
  <D.25797>:
  <D.25794>:
}


get_boxable_mono_type (struct VerifyContext * ctx, int token, const char * opcode)
{
  struct MonoType * D.25808;
  unsigned char D.25809;
  unsigned char D.25810;
  unsigned char D.25813;
  unsigned int D.25816;
  gchar * D.25817;
  struct GSList * D.25818;
  struct GSList * D.25819;
  gchar * D.25822;
  struct GSList * D.25823;
  int D.25828;
  int D.25830;
  int D.25831;
  gchar * D.25832;
  struct GSList * D.25833;
  int D.25834;
  gchar * D.25839;
  struct GSList * D.25840;
  struct MonoGenericContainer * D.25841;
  gchar * D.25849;
  struct GSList * D.25850;
  struct MonoType * type;
  struct MonoClass * class;

  type = verifier_load_type (ctx, token, opcode);
  if (type == 0B) goto <D.25806>; else goto <D.25807>;
  <D.25806>:
  D.25808 = 0B;
  return D.25808;
  <D.25807>:
  D.25809 = BIT_FIELD_REF <*type, 8, 56>;
  D.25810 = D.25809 & 64;
  if (D.25810 != 0) goto <D.25811>; else goto <D.25812>;
  <D.25811>:
  D.25813 = type->type;
  if (D.25813 != 22) goto <D.25814>; else goto <D.25815>;
  <D.25814>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25816 = ctx->ip_offset;
    D.25817 = monoeg_g_strdup_printf ("Invalid use of byref type for %s at 0x%04x", opcode, D.25816);
    vinfo->info.message = D.25817;
    vinfo->exception_type = 3;
    D.25818 = ctx->list;
    D.25819 = monoeg_g_slist_prepend (D.25818, vinfo);
    ctx->list = D.25819;
  }
  ctx->valid = 0;
  D.25808 = 0B;
  return D.25808;
  <D.25815>:
  <D.25812>:
  D.25813 = type->type;
  if (D.25813 == 1) goto <D.25820>; else goto <D.25821>;
  <D.25820>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25816 = ctx->ip_offset;
    D.25822 = monoeg_g_strdup_printf ("Invalid use of void type for %s at 0x%04x", opcode, D.25816);
    vinfo->info.message = D.25822;
    vinfo->exception_type = 3;
    D.25818 = ctx->list;
    D.25823 = monoeg_g_slist_prepend (D.25818, vinfo);
    ctx->list = D.25823;
  }
  ctx->valid = 0;
  D.25808 = 0B;
  return D.25808;
  <D.25821>:
  D.25813 = type->type;
  if (D.25813 == 22) goto <D.25824>; else goto <D.25825>;
  <D.25824>:
  D.25828 = ctx->verifiable;
  if (D.25828 != 0) goto <D.25826>; else goto <D.25829>;
  <D.25829>:
  D.25830 = ctx->level;
  D.25831 = D.25830 & 128;
  if (D.25831 != 0) goto <D.25826>; else goto <D.25827>;
  <D.25826>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25816 = ctx->ip_offset;
    D.25832 = monoeg_g_strdup_printf ("Invalid use of typedbyref for %s at 0x%04x", opcode, D.25816);
    vinfo->info.message = D.25832;
    vinfo->exception_type = 4;
    D.25818 = ctx->list;
    D.25833 = monoeg_g_slist_prepend (D.25818, vinfo);
    ctx->list = D.25833;
  }
  ctx->verifiable = 0;
  D.25830 = ctx->level;
  D.25834 = D.25830 & 16;
  if (D.25834 != 0) goto <D.25835>; else goto <D.25836>;
  <D.25835>:
  ctx->valid = 0;
  <D.25836>:
  <D.25827>:
  <D.25825>:
  class = mono_class_from_mono_type (type);
  if (class == 0B) goto <D.25837>; else goto <D.25838>;
  <D.25837>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25816 = ctx->ip_offset;
    D.25839 = monoeg_g_strdup_printf ("Could not retrieve type token for %s at 0x%04x", opcode, D.25816);
    vinfo->info.message = D.25839;
    vinfo->exception_type = 3;
    D.25818 = ctx->list;
    D.25840 = monoeg_g_slist_prepend (D.25818, vinfo);
    ctx->list = D.25840;
  }
  ctx->valid = 0;
  <D.25838>:
  D.25841 = class->generic_container;
  if (D.25841 != 0B) goto <D.25842>; else goto <D.25843>;
  <D.25842>:
  D.25813 = type->type;
  if (D.25813 != 21) goto <D.25844>; else goto <D.25845>;
  <D.25844>:
  D.25828 = ctx->verifiable;
  if (D.25828 != 0) goto <D.25846>; else goto <D.25848>;
  <D.25848>:
  D.25830 = ctx->level;
  D.25831 = D.25830 & 128;
  if (D.25831 != 0) goto <D.25846>; else goto <D.25847>;
  <D.25846>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 8;
    D.25816 = ctx->ip_offset;
    D.25849 = monoeg_g_strdup_printf ("Cannot use the generic type definition in a boxable type position for %s at 0x%04x", opcode, D.25816);
    vinfo->info.message = D.25849;
    vinfo->exception_type = 4;
    D.25818 = ctx->list;
    D.25850 = monoeg_g_slist_prepend (D.25818, vinfo);
    ctx->list = D.25850;
  }
  ctx->verifiable = 0;
  D.25830 = ctx->level;
  D.25834 = D.25830 & 16;
  if (D.25834 != 0) goto <D.25851>; else goto <D.25852>;
  <D.25851>:
  ctx->valid = 0;
  <D.25852>:
  <D.25847>:
  <D.25845>:
  <D.25843>:
  check_unverifiable_type (ctx, type);
  D.25808 = type;
  return D.25808;
}


check_underflow (struct VerifyContext * ctx, int size)
{
  short unsigned int D.25854;
  int D.25855;
  unsigned int D.25858;
  gchar * D.25859;
  struct GSList * D.25860;
  struct GSList * D.25861;
  int D.25862;

  D.25854 = ctx->eval.size;
  D.25855 = (int) D.25854;
  if (D.25855 < size) goto <D.25856>; else goto <D.25857>;
  <D.25856>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25858 = ctx->ip_offset;
    D.25854 = ctx->eval.size;
    D.25855 = (int) D.25854;
    D.25859 = monoeg_g_strdup_printf ("Stack underflow, required %d, but have %d at 0x%04x", size, D.25855, D.25858);
    vinfo->info.message = D.25859;
    vinfo->exception_type = 3;
    D.25860 = ctx->list;
    D.25861 = monoeg_g_slist_prepend (D.25860, vinfo);
    ctx->list = D.25861;
  }
  ctx->valid = 0;
  D.25862 = 0;
  return D.25862;
  <D.25857>:
  D.25862 = 1;
  return D.25862;
}


is_correct_rethrow (struct MonoMethodHeader * header, guint offset)
{
  struct MonoExceptionClause * D.25864;
  unsigned int i.128;
  unsigned int D.25866;
  unsigned int D.25867;
  unsigned int D.25870;
  unsigned int D.25871;
  int D.25874;
  unsigned int D.25875;
  unsigned int D.25878;
  <unnamed-unsigned:15> D.25883;
  int D.25884;
  int i;
  struct MonoExceptionClause * clause;

  i = 0;
  goto <D.17867>;
  <D.17866>:
  D.25864 = header->clauses;
  i.128 = (unsigned int) i;
  D.25866 = i.128 * 24;
  clause = D.25864 + D.25866;
  D.25867 = clause->handler_offset;
  if (D.25867 <= offset) goto <D.25868>; else goto <D.25869>;
  <D.25868>:
  D.25867 = clause->handler_offset;
  D.25870 = clause->handler_len;
  D.25871 = D.25867 + D.25870;
  if (D.25871 > offset) goto <D.25872>; else goto <D.25873>;
  <D.25872>:
  D.25874 = 1;
  return D.25874;
  <D.25873>:
  <D.25869>:
  D.25875 = clause->flags;
  if (D.25875 == 1) goto <D.25876>; else goto <D.25877>;
  <D.25876>:
  D.25878 = clause->data.filter_offset;
  if (D.25878 <= offset) goto <D.25879>; else goto <D.25880>;
  <D.25879>:
  D.25867 = clause->handler_offset;
  if (D.25867 > offset) goto <D.25881>; else goto <D.25882>;
  <D.25881>:
  D.25874 = 1;
  return D.25874;
  <D.25882>:
  <D.25880>:
  <D.25877>:
  i = i + 1;
  <D.17867>:
  D.25883 = header->num_clauses;
  D.25884 = (int) D.25883;
  if (D.25884 > i) goto <D.17866>; else goto <D.17868>;
  <D.17868>:
  D.25874 = 0;
  return D.25874;
}


do_sizeof (struct VerifyContext * ctx, int token)
{
  unsigned char D.25888;
  unsigned char D.25889;
  unsigned char D.25892;
  unsigned int D.25895;
  gchar * D.25896;
  struct GSList * D.25897;
  struct GSList * D.25898;
  gchar * D.25901;
  struct GSList * D.25902;
  int D.25903;
  struct MonoClass * D.25906;
  struct MonoType * D.25907;
  struct ILStackDesc * D.25908;
  struct MonoType * type;

  type = verifier_load_type (ctx, token, "sizeof");
  if (type == 0B) goto <D.25886>; else goto <D.25887>;
  <D.25886>:
  return;
  <D.25887>:
  D.25888 = BIT_FIELD_REF <*type, 8, 56>;
  D.25889 = D.25888 & 64;
  if (D.25889 != 0) goto <D.25890>; else goto <D.25891>;
  <D.25890>:
  D.25892 = type->type;
  if (D.25892 != 22) goto <D.25893>; else goto <D.25894>;
  <D.25893>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25895 = ctx->ip_offset;
    D.25896 = monoeg_g_strdup_printf ("Invalid use of byref type at 0x%04x", D.25895);
    vinfo->info.message = D.25896;
    vinfo->exception_type = 3;
    D.25897 = ctx->list;
    D.25898 = monoeg_g_slist_prepend (D.25897, vinfo);
    ctx->list = D.25898;
  }
  ctx->valid = 0;
  return;
  <D.25894>:
  <D.25891>:
  D.25892 = type->type;
  if (D.25892 == 1) goto <D.25899>; else goto <D.25900>;
  <D.25899>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25895 = ctx->ip_offset;
    D.25901 = monoeg_g_strdup_printf ("Invalid use of void type at 0x%04x", D.25895);
    vinfo->info.message = D.25901;
    vinfo->exception_type = 3;
    D.25897 = ctx->list;
    D.25902 = monoeg_g_slist_prepend (D.25897, vinfo);
    ctx->list = D.25902;
  }
  ctx->valid = 0;
  return;
  <D.25900>:
  D.25903 = check_overflow (ctx);
  if (D.25903 != 0) goto <D.25904>; else goto <D.25905>;
  <D.25904>:
  D.25906 = mono_defaults.uint32_class;
  D.25907 = &D.25906->byval_arg;
  D.25908 = stack_push (ctx);
  set_stack_value (ctx, D.25908, D.25907, 0);
  <D.25905>:
}


do_refanytype (struct VerifyContext * ctx)
{
  int D.25910;
  int D.25915;
  struct MonoType * D.25917;
  unsigned char D.25918;
  unsigned int D.25919;
  const char * D.25920;
  gchar * D.25921;
  struct GSList * D.25922;
  struct GSList * D.25923;
  struct MonoClass * D.25924;
  struct MonoType * D.25925;
  struct ILStackDesc * D.25926;
  struct ILStackDesc * top;

  D.25910 = check_underflow (ctx, 1);
  if (D.25910 == 0) goto <D.25911>; else goto <D.25912>;
  <D.25911>:
  return;
  <D.25912>:
  top = stack_pop (ctx);
  D.25915 = top->stype;
  if (D.25915 != 5) goto <D.25913>; else goto <D.25916>;
  <D.25916>:
  D.25917 = top->type;
  D.25918 = D.25917->type;
  if (D.25918 != 22) goto <D.25913>; else goto <D.25914>;
  <D.25913>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (12);
    vinfo->info.status = 1;
    D.25919 = ctx->ip_offset;
    D.25920 = stack_slot_get_name (top);
    D.25921 = monoeg_g_strdup_printf ("Expected a typedref as argument for refanytype, but found %s at 0x%04x", D.25920, D.25919);
    vinfo->info.message = D.25921;
    vinfo->exception_type = 3;
    D.25922 = ctx->list;
    D.25923 = monoeg_g_slist_prepend (D.25922, vinfo);
    ctx->list = D.25923;
  }
  ctx->valid = 0;
  <D.25914>:
  D.25924 = mono_defaults.typehandle_class;
  D.25925 = &D.25924->byval_arg;
  D.25926 = stack_push (ctx);
  set_stack_value (ctx, D.25926, D.25925, 0);
}


mono_method_is_constructor (struct MonoMethod * method)
{
  gboolean D.25928;
  int iftmp.129;
  short unsigned int D.25932;
  unsigned int D.25933;
  unsigned int D.25934;
  int D.17562;
  int iftmp.130;
  int D.17558;
  const char[6] * D.25939;
  unsigned char D.25940;
  int D.25941;
  unsigned char D.25942;
  int D.25943;
  _Bool D.25944;
  _Bool D.25945;
  _Bool D.25946;
  const unsigned char * D.25949;
  unsigned char D.25950;
  int D.25951;
  const unsigned char * D.25952;
  unsigned char D.25953;
  int D.25954;
  _Bool D.25955;
  _Bool D.25956;
  const unsigned char * D.25959;
  unsigned char D.25960;
  int D.25961;
  const unsigned char * D.25962;
  unsigned char D.25963;
  int D.25964;
  _Bool D.25965;
  _Bool D.25966;
  const unsigned char * D.25969;
  unsigned char D.25970;
  int D.25971;
  const unsigned char * D.25972;
  unsigned char D.25973;
  int D.25974;
  const char * D.25976;

  D.25932 = method->flags;
  D.25933 = (unsigned int) D.25932;
  D.25934 = D.25933 & 6160;
  if (D.25934 == 6144) goto <D.25935>; else goto <D.25930>;
  <D.25935>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = method->name;
      D.25939 = ".ctor";
      D.25940 = MEM[(const unsigned char *)D.25939];
      D.25941 = (int) D.25940;
      D.25942 = *__s2;
      D.25943 = (int) D.25942;
      __result = D.25941 - D.25943;
      {
        D.25944 = __s1_len != 0;
        D.25945 = __result == 0;
        D.25946 = D.25944 & D.25945;
        if (D.25946 != 0) goto <D.25947>; else goto <D.25948>;
        <D.25947>:
        D.25949 = &MEM[(void *)".ctor" + 1B];
        D.25950 = *D.25949;
        D.25951 = (int) D.25950;
        D.25952 = __s2 + 1;
        D.25953 = *D.25952;
        D.25954 = (int) D.25953;
        __result = D.25951 - D.25954;
        D.25955 = __s1_len > 1;
        D.25945 = __result == 0;
        D.25956 = D.25955 & D.25945;
        if (D.25956 != 0) goto <D.25957>; else goto <D.25958>;
        <D.25957>:
        D.25959 = &MEM[(void *)".ctor" + 2B];
        D.25960 = *D.25959;
        D.25961 = (int) D.25960;
        D.25962 = __s2 + 2;
        D.25963 = *D.25962;
        D.25964 = (int) D.25963;
        __result = D.25961 - D.25964;
        D.25965 = __s1_len > 2;
        D.25945 = __result == 0;
        D.25966 = D.25965 & D.25945;
        if (D.25966 != 0) goto <D.25967>; else goto <D.25968>;
        <D.25967>:
        D.25969 = &MEM[(void *)".ctor" + 3B];
        D.25970 = *D.25969;
        D.25971 = (int) D.25970;
        D.25972 = __s2 + 3;
        D.25973 = *D.25972;
        D.25974 = (int) D.25973;
        __result = D.25971 - D.25974;
        <D.25968>:
        <D.25958>:
        <D.25948>:
      }
      D.17558 = __result;
    }
    iftmp.130 = D.17558;
    goto <D.25975>;
    <D.25938>:
    D.25976 = method->name;
    iftmp.130 = __builtin_strcmp (".ctor", D.25976);
    <D.25975>:
    D.17562 = iftmp.130;
  }
  if (D.17562 == 0) goto <D.25977>; else goto <D.25930>;
  <D.25977>:
  iftmp.129 = 1;
  goto <D.25931>;
  <D.25930>:
  iftmp.129 = 0;
  <D.25931>:
  D.25928 = iftmp.129;
  return D.25928;
}


mono_verify_corlib ()
{
  char * D.25979;

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


mono_verifier_is_enabled_for_method (struct MonoMethod * method)
{
  gboolean D.25981;
  int iftmp.131;
  struct MonoClass * D.25985;
  int D.25986;
  unsigned char D.25988;
  unsigned char D.25989;
  _Bool D.25990;
  _Bool D.25991;
  _Bool D.25992;

  D.25985 = method->klass;
  D.25986 = mono_verifier_is_enabled_for_class (D.25985);
  if (D.25986 != 0) goto <D.25987>; else goto <D.25983>;
  <D.25987>:
  D.25988 = BIT_FIELD_REF <*method, 8, 160>;
  D.25989 = D.25988 & 124;
  D.25990 = D.25989 == 0;
  D.25991 = D.25989 == 68;
  D.25992 = D.25990 | D.25991;
  if (D.25992 != 0) goto <D.25993>; else goto <D.25983>;
  <D.25993>:
  iftmp.131 = 1;
  goto <D.25984>;
  <D.25983>:
  iftmp.131 = 0;
  <D.25984>:
  D.25981 = iftmp.131;
  return D.25981;
}


mono_verifier_is_enabled_for_class (struct MonoClass * klass)
{
  gboolean D.25995;
  int iftmp.132;
  int verify_all.133;
  <unnamed type> verifier_mode.134;
  struct MonoImage * D.26005;
  struct MonoAssembly * D.26006;
  unsigned char D.26008;
  struct MonoImage * D.26009;

  verify_all.133 = verify_all;
  if (verify_all.133 != 0) goto <D.25997>; else goto <D.26002>;
  <D.26002>:
  verifier_mode.134 = verifier_mode;
  if (verifier_mode.134 != 0) goto <D.26004>; else goto <D.25998>;
  <D.26004>:
  D.26005 = klass->image;
  D.26006 = D.26005->assembly;
  if (D.26006 == 0B) goto <D.25999>; else goto <D.26007>;
  <D.26007>:
  D.26005 = klass->image;
  D.26006 = D.26005->assembly;
  D.26008 = D.26006->in_gac;
  if (D.26008 == 0) goto <D.25999>; else goto <D.25998>;
  <D.25999>:
  D.26005 = klass->image;
  D.26009 = mono_defaults.corlib;
  if (D.26005 != D.26009) goto <D.25997>; else goto <D.25998>;
  <D.25997>:
  iftmp.132 = 1;
  goto <D.26000>;
  <D.25998>:
  iftmp.132 = 0;
  <D.26000>:
  D.25995 = iftmp.132;
  return D.25995;
}


mono_verifier_is_enabled_for_image (struct MonoImage * image)
{
  gboolean D.26011;
  int iftmp.135;
  int verify_all.136;
  <unnamed type> verifier_mode.137;

  verify_all.136 = verify_all;
  if (verify_all.136 != 0) goto <D.26013>; else goto <D.26017>;
  <D.26017>:
  verifier_mode.137 = verifier_mode;
  if (verifier_mode.137 != 0) goto <D.26013>; else goto <D.26014>;
  <D.26013>:
  iftmp.135 = 1;
  goto <D.26015>;
  <D.26014>:
  iftmp.135 = 0;
  <D.26015>:
  D.26011 = iftmp.135;
  return D.26011;
}


mono_verifier_is_method_full_trust (struct MonoMethod * method)
{
  gboolean D.26020;
  int iftmp.138;
  struct MonoClass * D.26024;
  int D.26025;
  unsigned char D.26027;
  unsigned char D.26028;

  D.26024 = method->klass;
  D.26025 = mono_verifier_is_class_full_trust (D.26024);
  if (D.26025 != 0) goto <D.26026>; else goto <D.26022>;
  <D.26026>:
  D.26027 = BIT_FIELD_REF <*method, 8, 168>;
  D.26028 = D.26027 & 2;
  if (D.26028 == 0) goto <D.26029>; else goto <D.26022>;
  <D.26029>:
  iftmp.138 = 1;
  goto <D.26023>;
  <D.26022>:
  iftmp.138 = 0;
  <D.26023>:
  D.26020 = iftmp.138;
  return D.26020;
}


mono_verifier_is_class_full_trust (struct MonoClass * klass)
{
  int iftmp.139;
  <unnamed type> D.26032;
  int iftmp.140;
  struct MonoImage * D.26038;
  struct MonoAssembly * D.26039;
  unsigned char D.26041;
  int verify_all.141;
  <unnamed type> verifier_mode.142;
  gboolean D.26050;
  int iftmp.143;
  struct MonoImage * D.26056;
  int iftmp.144;
  gboolean trusted_location;

  D.26032 = mono_security_get_mode ();
  if (D.26032 != 1) goto <D.26033>; else goto <D.26034>;
  <D.26033>:
  D.26038 = klass->image;
  D.26039 = D.26038->assembly;
  if (D.26039 != 0B) goto <D.26040>; else goto <D.26036>;
  <D.26040>:
  D.26038 = klass->image;
  D.26039 = D.26038->assembly;
  D.26041 = D.26039->in_gac;
  if (D.26041 != 0) goto <D.26042>; else goto <D.26036>;
  <D.26042>:
  iftmp.140 = 1;
  goto <D.26037>;
  <D.26036>:
  iftmp.140 = 0;
  <D.26037>:
  iftmp.139 = iftmp.140;
  goto <D.26043>;
  <D.26034>:
  D.26038 = klass->image;
  iftmp.139 = mono_security_core_clr_is_platform_image (D.26038);
  <D.26043>:
  trusted_location = iftmp.139;
  verify_all.141 = verify_all;
  if (verify_all.141 != 0) goto <D.26045>; else goto <D.26046>;
  <D.26045>:
  verifier_mode.142 = verifier_mode;
  if (verifier_mode.142 == 0) goto <D.26048>; else goto <D.26049>;
  <D.26048>:
  if (trusted_location != 0) goto <D.26052>; else goto <D.26055>;
  <D.26055>:
  D.26038 = klass->image;
  D.26056 = mono_defaults.corlib;
  if (D.26038 == D.26056) goto <D.26052>; else goto <D.26053>;
  <D.26052>:
  iftmp.143 = 1;
  goto <D.26054>;
  <D.26053>:
  iftmp.143 = 0;
  <D.26054>:
  D.26050 = iftmp.143;
  return D.26050;
  <D.26049>:
  <D.26046>:
  verifier_mode.142 = verifier_mode;
  if (verifier_mode.142 <= 1) goto <D.26058>; else goto <D.26061>;
  <D.26061>:
  if (trusted_location != 0) goto <D.26058>; else goto <D.26062>;
  <D.26062>:
  D.26038 = klass->image;
  D.26056 = mono_defaults.corlib;
  if (D.26038 == D.26056) goto <D.26058>; else goto <D.26059>;
  <D.26058>:
  iftmp.144 = 1;
  goto <D.26060>;
  <D.26059>:
  iftmp.144 = 0;
  <D.26060>:
  D.26050 = iftmp.144;
  return D.26050;
}


mono_method_verify_with_current_settings (struct MonoMethod * method, gboolean skip_visibility, gboolean is_fulltrust)
{
  struct GSList * D.26064;
  int iftmp.145;
  <unnamed type> verifier_mode.146;
  int iftmp.147;
  int D.26074;
  int D.26076;
  int iftmp.148;
  int D.26081;

  verifier_mode.146 = verifier_mode;
  if (verifier_mode.146 != 3) goto <D.26067>; else goto <D.26068>;
  <D.26067>:
  iftmp.145 = 32;
  goto <D.26069>;
  <D.26068>:
  iftmp.145 = 0;
  <D.26069>:
  if (is_fulltrust == 0) goto <D.26073>; else goto <D.26071>;
  <D.26073>:
  D.26074 = mono_verifier_is_method_full_trust (method);
  if (D.26074 == 0) goto <D.26075>; else goto <D.26071>;
  <D.26075>:
  iftmp.147 = 16;
  goto <D.26072>;
  <D.26071>:
  iftmp.147 = 0;
  <D.26072>:
  D.26076 = iftmp.145 | iftmp.147;
  if (skip_visibility != 0) goto <D.26078>; else goto <D.26079>;
  <D.26078>:
  iftmp.148 = 64;
  goto <D.26080>;
  <D.26079>:
  iftmp.148 = 0;
  <D.26080>:
  D.26081 = D.26076 | iftmp.148;
  D.26064 = mono_method_verify (method, D.26081);
  return D.26064;
}


mono_verifier_verify_class (struct MonoClass * class)
{
  struct MonoClass * D.26083;
  struct MonoClass * D.26086;
  unsigned int D.26089;
  unsigned int D.26090;
  unsigned char D.26093;
  struct MonoImage * D.26098;
  unsigned char D.26099;
  unsigned char D.26100;
  unsigned int D.26103;
  gboolean D.26106;
  unsigned int D.26111;
  unsigned int D.26112;
  unsigned char D.26114;
  struct MonoGenericClass * D.26116;
  struct MonoGenericContainer * D.26119;
  struct MonoGenericClass * D.26122;
  struct MonoGenericContainer * D.26127;
  struct MonoType * D.26130;
  int D.26131;
  unsigned int D.26136;
  int D.26141;
  int D.26144;
  int D.26149;
  int D.26154;
  unsigned char D.26157;
  unsigned char D.26158;
  int D.26161;
  int D.26164;

  D.26083 = class->parent;
  if (D.26083 == 0B) goto <D.26084>; else goto <D.26085>;
  <D.26084>:
  D.26086 = mono_defaults.object_class;
  if (D.26086 != class) goto <D.26087>; else goto <D.26088>;
  <D.26087>:
  D.26089 = class->flags;
  D.26090 = D.26089 & 32;
  if (D.26090 == 0) goto <D.26091>; else goto <D.26092>;
  <D.26091>:
  D.26093 = class->byval_arg.type;
  if (D.26093 != 19) goto <D.26094>; else goto <D.26095>;
  <D.26094>:
  D.26093 = class->byval_arg.type;
  if (D.26093 != 30) goto <D.26096>; else goto <D.26097>;
  <D.26096>:
  D.26098 = class->image;
  D.26099 = BIT_FIELD_REF <*D.26098, 8, 128>;
  D.26100 = D.26099 & 8;
  if (D.26100 == 0) goto <D.26101>; else goto <D.26102>;
  <D.26101>:
  D.26103 = class->type_token;
  if (D.26103 != 33554433) goto <D.26104>; else goto <D.26105>;
  <D.26104>:
  D.26106 = 0;
  return D.26106;
  <D.26105>:
  <D.26102>:
  <D.26097>:
  <D.26095>:
  <D.26092>:
  <D.26088>:
  <D.26085>:
  D.26083 = class->parent;
  if (D.26083 != 0B) goto <D.26107>; else goto <D.26108>;
  <D.26107>:
  D.26083 = class->parent;
  D.26111 = D.26083->flags;
  D.26112 = D.26111 & 32;
  if (D.26112 != 0) goto <D.26109>; else goto <D.26113>;
  <D.26113>:
  D.26083 = class->parent;
  D.26114 = D.26083->byval_arg.type;
  if (D.26114 == 19) goto <D.26109>; else goto <D.26115>;
  <D.26115>:
  D.26083 = class->parent;
  D.26114 = D.26083->byval_arg.type;
  if (D.26114 == 30) goto <D.26109>; else goto <D.26110>;
  <D.26109>:
  D.26106 = 0;
  return D.26106;
  <D.26110>:
  D.26116 = class->generic_class;
  if (D.26116 == 0B) goto <D.26117>; else goto <D.26118>;
  <D.26117>:
  D.26083 = class->parent;
  D.26119 = D.26083->generic_container;
  if (D.26119 != 0B) goto <D.26120>; else goto <D.26121>;
  <D.26120>:
  D.26106 = 0;
  return D.26106;
  <D.26121>:
  <D.26118>:
  D.26083 = class->parent;
  D.26122 = D.26083->generic_class;
  if (D.26122 != 0B) goto <D.26123>; else goto <D.26124>;
  <D.26123>:
  D.26116 = class->generic_class;
  if (D.26116 == 0B) goto <D.26125>; else goto <D.26126>;
  <D.26125>:
  {
    struct MonoGenericContext * context;

    context = mono_class_get_context (class);
    D.26127 = class->generic_container;
    if (D.26127 != 0B) goto <D.26128>; else goto <D.26129>;
    <D.26128>:
    D.26127 = class->generic_container;
    context = &D.26127->context;
    <D.26129>:
    D.26083 = class->parent;
    D.26130 = &D.26083->byval_arg;
    D.26131 = mono_type_is_valid_type_in_context (D.26130, context);
    if (D.26131 == 0) goto <D.26132>; else goto <D.26133>;
    <D.26132>:
    D.26106 = 0;
    return D.26106;
    <D.26133>:
  }
  <D.26126>:
  <D.26124>:
  <D.26108>:
  D.26127 = class->generic_container;
  if (D.26127 != 0B) goto <D.26134>; else goto <D.26135>;
  <D.26134>:
  D.26089 = class->flags;
  D.26136 = D.26089 & 24;
  if (D.26136 == 16) goto <D.26137>; else goto <D.26138>;
  <D.26137>:
  D.26106 = 0;
  return D.26106;
  <D.26138>:
  <D.26135>:
  D.26127 = class->generic_container;
  if (D.26127 != 0B) goto <D.26139>; else goto <D.26140>;
  <D.26139>:
  D.26141 = verify_generic_parameters (class);
  if (D.26141 == 0) goto <D.26142>; else goto <D.26143>;
  <D.26142>:
  D.26106 = 0;
  return D.26106;
  <D.26143>:
  <D.26140>:
  D.26144 = verify_class_for_overlapping_reference_fields (class);
  if (D.26144 == 0) goto <D.26145>; else goto <D.26146>;
  <D.26145>:
  D.26106 = 0;
  return D.26106;
  <D.26146>:
  D.26116 = class->generic_class;
  if (D.26116 != 0B) goto <D.26147>; else goto <D.26148>;
  <D.26147>:
  D.26149 = mono_class_is_valid_generic_instantiation (0B, class);
  if (D.26149 == 0) goto <D.26150>; else goto <D.26151>;
  <D.26150>:
  D.26106 = 0;
  return D.26106;
  <D.26151>:
  <D.26148>:
  D.26116 = class->generic_class;
  if (D.26116 == 0B) goto <D.26152>; else goto <D.26153>;
  <D.26152>:
  D.26154 = verify_class_fields (class);
  if (D.26154 == 0) goto <D.26155>; else goto <D.26156>;
  <D.26155>:
  D.26106 = 0;
  return D.26106;
  <D.26156>:
  <D.26153>:
  D.26157 = BIT_FIELD_REF <*class, 8, 160>;
  D.26158 = D.26157 & 8;
  if (D.26158 != 0) goto <D.26159>; else goto <D.26160>;
  <D.26159>:
  D.26161 = verify_valuetype_layout (class);
  if (D.26161 == 0) goto <D.26162>; else goto <D.26163>;
  <D.26162>:
  D.26106 = 0;
  return D.26106;
  <D.26163>:
  <D.26160>:
  D.26164 = verify_interfaces (class);
  if (D.26164 == 0) goto <D.26165>; else goto <D.26166>;
  <D.26165>:
  D.26106 = 0;
  return D.26106;
  <D.26166>:
  D.26106 = 1;
  return D.26106;
}


verify_generic_parameters (struct MonoClass * class)
{
  <unnamed-signed:31> D.26168;
  unsigned int D.26169;
  struct MonoGenericParamFull * D.26170;
  unsigned int i.149;
  unsigned int D.26172;
  struct MonoGenericParamFull * D.26173;
  struct MonoClass * * D.26174;
  unsigned int D.26177;
  unsigned int D.26178;
  int D.26179;
  unsigned int D.26180;
  unsigned int D.26181;
  int D.26182;
  struct MonoGenericContext * D.26184;
  int D.26185;
  int D.26187;
  int D.26190;
  struct MonoGenericClass * D.26192;
  int D.26195;
  struct MonoClass * D.26197;
  int D.26198;
  gboolean D.26199;
  int i;
  struct MonoGenericContainer * gc;
  struct MonoBitSet * used_args;
  void fail = <<< error >>>;

  gc = class->generic_container;
  D.26168 = gc->type_argc;
  D.26169 = (unsigned int) D.26168;
  used_args = mono_bitset_new (D.26169, 0);
  i = 0;
  goto <D.19602>;
  <D.19601>:
  {
    struct MonoGenericParamInfo * param_info;
    struct MonoClass * * constraints;

    D.26170 = gc->type_params;
    i.149 = (unsigned int) i;
    D.26172 = i.149 * 32;
    D.26173 = D.26170 + D.26172;
    param_info = &D.26173->info;
    D.26174 = param_info->constraints;
    if (D.26174 == 0B) goto <D.26175>; else goto <D.26176>;
    <D.26175>:
    // predicted unlikely by continue predictor.
    goto <D.19594>;
    <D.26176>:
    mono_bitset_clear_all (used_args);
    i.149 = (unsigned int) i;
    D.26177 = i.149 / 32;
    D.26178 = used_args->data[D.26177];
    D.26179 = i & 31;
    D.26180 = 1 << D.26179;
    D.26181 = D.26178 | D.26180;
    used_args->data[D.26177] = D.26181;
    constraints = param_info->constraints;
    goto <D.19599>;
    <D.19598>:
    {
      struct MonoClass * ctr;
      struct MonoType * constraint_type;

      ctr = *constraints;
      constraint_type = &ctr->byval_arg;
      D.26182 = mono_class_can_access_class (class, ctr);
      if (D.26182 == 0) goto fail; else goto <D.26183>;
      <D.26183>:
      D.26184 = &gc->context;
      D.26185 = mono_type_is_valid_type_in_context (constraint_type, D.26184);
      if (D.26185 == 0) goto fail; else goto <D.26186>;
      <D.26186>:
      D.26187 = mono_type_is_generic_argument (constraint_type);
      if (D.26187 != 0) goto <D.26188>; else goto <D.26189>;
      <D.26188>:
      D.26190 = recursive_mark_constraint_args (used_args, gc, constraint_type);
      if (D.26190 == 0) goto fail; else goto <D.26191>;
      <D.26191>:
      <D.26189>:
      D.26192 = ctr->generic_class;
      if (D.26192 != 0B) goto <D.26193>; else goto <D.26194>;
      <D.26193>:
      D.26195 = mono_class_is_valid_generic_instantiation (0B, ctr);
      if (D.26195 == 0) goto fail; else goto <D.26196>;
      <D.26196>:
      <D.26194>:
    }
    constraints = constraints + 4;
    <D.19599>:
    D.26197 = *constraints;
    if (D.26197 != 0B) goto <D.19598>; else goto <D.19600>;
    <D.19600>:
  }
  <D.19594>:
  i = i + 1;
  <D.19602>:
  D.26168 = gc->type_argc;
  D.26198 = (int) D.26168;
  if (D.26198 > i) goto <D.19601>; else goto <D.19603>;
  <D.19603>:
  mono_bitset_free (used_args);
  D.26199 = 1;
  return D.26199;
  fail:
  mono_bitset_free (used_args);
  D.26199 = 0;
  return D.26199;
}


recursive_mark_constraint_args (struct MonoBitSet * used_args, struct MonoGenericContainer * gc, struct MonoType * type)
{
  int D.26201;
  _Bool D.26202;
  long int D.26203;
  long int D.26204;
  struct MonoGenericParam * D.26207;
  short unsigned int D.26208;
  unsigned int idx.150;
  unsigned int D.26210;
  unsigned int D.26211;
  int D.26212;
  unsigned int D.26213;
  unsigned int D.26214;
  gboolean D.26217;
  unsigned int D.26218;
  unsigned int D.26219;
  unsigned int D.26220;
  struct MonoGenericParamFull * D.26221;
  unsigned int D.26222;
  struct MonoGenericParamFull * D.26223;
  struct MonoClass * * D.26224;
  int D.26227;
  int D.26230;
  struct MonoClass * D.26233;
  int idx;
  struct MonoClass * * constraints;
  struct MonoGenericParamInfo * param_info;

  D.26201 = mono_type_is_generic_argument (type);
  D.26202 = D.26201 == 0;
  D.26203 = (long int) D.26202;
  D.26204 = __builtin_expect (D.26203, 0);
  if (D.26204 != 0) goto <D.26205>; else goto <D.26206>;
  <D.26205>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "verify.c", 6206, "mono_type_is_generic_argument (type)");
  <D.26206>:
  D.26207 = type->data.generic_param;
  D.26208 = D.26207->num;
  idx = (int) D.26208;
  idx.150 = (unsigned int) idx;
  D.26210 = idx.150 / 32;
  D.26211 = used_args->data[D.26210];
  D.26212 = idx & 31;
  D.26213 = 1 << D.26212;
  D.26214 = D.26211 & D.26213;
  if (D.26214 != 0) goto <D.26215>; else goto <D.26216>;
  <D.26215>:
  D.26217 = 0;
  return D.26217;
  <D.26216>:
  idx.150 = (unsigned int) idx;
  D.26218 = idx.150 / 32;
  D.26219 = used_args->data[D.26218];
  D.26212 = idx & 31;
  D.26213 = 1 << D.26212;
  D.26220 = D.26219 | D.26213;
  used_args->data[D.26218] = D.26220;
  D.26221 = gc->type_params;
  idx.150 = (unsigned int) idx;
  D.26222 = idx.150 * 32;
  D.26223 = D.26221 + D.26222;
  param_info = &D.26223->info;
  D.26224 = param_info->constraints;
  if (D.26224 == 0B) goto <D.26225>; else goto <D.26226>;
  <D.26225>:
  D.26217 = 1;
  return D.26217;
  <D.26226>:
  constraints = param_info->constraints;
  goto <D.19584>;
  <D.19583>:
  {
    struct MonoClass * ctr;
    struct MonoType * constraint_type;

    ctr = *constraints;
    constraint_type = &ctr->byval_arg;
    D.26227 = mono_type_is_generic_argument (constraint_type);
    if (D.26227 != 0) goto <D.26228>; else goto <D.26229>;
    <D.26228>:
    D.26230 = recursive_mark_constraint_args (used_args, gc, constraint_type);
    if (D.26230 == 0) goto <D.26231>; else goto <D.26232>;
    <D.26231>:
    D.26217 = 0;
    return D.26217;
    <D.26232>:
    <D.26229>:
  }
  constraints = constraints + 4;
  <D.19584>:
  D.26233 = *constraints;
  if (D.26233 != 0B) goto <D.19583>; else goto <D.19585>;
  <D.19585>:
  D.26217 = 1;
  return D.26217;
}


verify_class_for_overlapping_reference_fields (struct MonoClass * class)
{
  unsigned int D.26235;
  unsigned int D.26236;
  gboolean D.26239;
  struct MonoType * D.26240;
  int D.26241;
  _Bool D.26242;
  short unsigned int D.26246;
  int D.26247;
  int D.26248;
  int D.19502;
  int iftmp.151;
  int D.19501;
  const char[9] * D.26253;
  unsigned char D.26254;
  int D.26255;
  unsigned char D.26256;
  int D.26257;
  _Bool D.26258;
  _Bool D.26259;
  _Bool D.26260;
  const unsigned char * D.26263;
  unsigned char D.26264;
  int D.26265;
  const unsigned char * D.26266;
  unsigned char D.26267;
  int D.26268;
  _Bool D.26269;
  _Bool D.26270;
  const unsigned char * D.26273;
  unsigned char D.26274;
  int D.26275;
  const unsigned char * D.26276;
  unsigned char D.26277;
  int D.26278;
  _Bool D.26279;
  _Bool D.26280;
  const unsigned char * D.26283;
  unsigned char D.26284;
  int D.26285;
  const unsigned char * D.26286;
  unsigned char D.26287;
  int D.26288;
  const char * D.26290;
  int D.26291;
  struct MonoClassField * D.26292;
  unsigned int j.152;
  unsigned int D.26294;
  struct MonoType * D.26299;
  short unsigned int D.26300;
  int D.26301;
  int D.26302;
  int D.19514;
  int iftmp.153;
  int D.19513;
  unsigned char D.26307;
  int D.26308;
  _Bool D.26309;
  _Bool D.26310;
  _Bool D.26311;
  const unsigned char * D.26314;
  unsigned char D.26315;
  int D.26316;
  _Bool D.26317;
  _Bool D.26318;
  const unsigned char * D.26321;
  unsigned char D.26322;
  int D.26323;
  _Bool D.26324;
  _Bool D.26325;
  const unsigned char * D.26328;
  unsigned char D.26329;
  int D.26330;
  const char * D.26332;
  int D.26334;
  int D.26335;
  int D.26338;
  int D.26341;
  int D.26342;
  unsigned int j.154;
  unsigned int D.26353;
  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.26235 = class->flags;
      D.26236 = D.26235 & 24;
      if (D.26236 != 16) goto <D.26237>; else goto <D.26238>;
      <D.26237>:
      D.26239 = 1;
      return D.26239;
      <D.26238>:
      goto <D.19503>;
      <D.19519>:
      {
        int fieldEnd;
        gboolean is_valuetype;

        fieldEnd = get_field_end (field);
        D.26240 = field->type;
        D.26241 = mono_type_is_reference (D.26240);
        D.26242 = D.26241 == 0;
        is_valuetype = (gboolean) D.26242;
        i = i + 1;
        D.26240 = field->type;
        D.26246 = D.26240->attrs;
        D.26247 = (int) D.26246;
        D.26248 = D.26247 & 1536;
        if (D.26248 != 0) goto <D.26249>; else goto <D.26243>;
        <D.26249>:
        {
          size_t __s1_len;
          size_t __s2_len;

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

            __s2 = mono_field_get_name (field);
            D.26253 = "_Deleted";
            D.26254 = MEM[(const unsigned char *)D.26253];
            D.26255 = (int) D.26254;
            D.26256 = *__s2;
            D.26257 = (int) D.26256;
            __result = D.26255 - D.26257;
            {
              D.26258 = __s2_len != 0;
              D.26259 = __result == 0;
              D.26260 = D.26258 & D.26259;
              if (D.26260 != 0) goto <D.26261>; else goto <D.26262>;
              <D.26261>:
              D.26263 = &MEM[(void *)"_Deleted" + 1B];
              D.26264 = *D.26263;
              D.26265 = (int) D.26264;
              D.26266 = __s2 + 1;
              D.26267 = *D.26266;
              D.26268 = (int) D.26267;
              __result = D.26265 - D.26268;
              D.26269 = __s2_len > 1;
              D.26259 = __result == 0;
              D.26270 = D.26269 & D.26259;
              if (D.26270 != 0) goto <D.26271>; else goto <D.26272>;
              <D.26271>:
              D.26273 = &MEM[(void *)"_Deleted" + 2B];
              D.26274 = *D.26273;
              D.26275 = (int) D.26274;
              D.26276 = __s2 + 2;
              D.26277 = *D.26276;
              D.26278 = (int) D.26277;
              __result = D.26275 - D.26278;
              D.26279 = __s2_len > 2;
              D.26259 = __result == 0;
              D.26280 = D.26279 & D.26259;
              if (D.26280 != 0) goto <D.26281>; else goto <D.26282>;
              <D.26281>:
              D.26283 = &MEM[(void *)"_Deleted" + 3B];
              D.26284 = *D.26283;
              D.26285 = (int) D.26284;
              D.26286 = __s2 + 3;
              D.26287 = *D.26286;
              D.26288 = (int) D.26287;
              __result = D.26285 - D.26288;
              <D.26282>:
              <D.26272>:
              <D.26262>:
            }
            D.19501 = __result;
          }
          iftmp.151 = -D.19501;
          goto <D.26289>;
          <D.26252>:
          D.26290 = mono_field_get_name (field);
          iftmp.151 = __builtin_strcmp (D.26290, "_Deleted");
          <D.26289>:
          D.19502 = iftmp.151;
        }
        if (D.19502 == 0) goto <D.26244>; else goto <D.26243>;
        <D.26243>:
        D.26240 = field->type;
        D.26246 = D.26240->attrs;
        D.26247 = (int) D.26246;
        D.26291 = D.26247 & 16;
        if (D.26291 != 0) goto <D.26244>; else goto <D.26245>;
        <D.26244>:
        // predicted unlikely by continue predictor.
        goto <D.19503>;
        <D.26245>:
        j = i;
        goto <D.19517>;
        <D.19516>:
        {
          struct MonoClassField * other;
          int otherEnd;

          D.26292 = class->fields;
          j.152 = (unsigned int) j;
          D.26294 = j.152 * 16;
          other = D.26292 + D.26294;
          otherEnd = get_field_end (other);
          D.26299 = other->type;
          D.26300 = D.26299->attrs;
          D.26301 = (int) D.26300;
          D.26302 = D.26301 & 1536;
          if (D.26302 != 0) goto <D.26303>; else goto <D.26295>;
          <D.26303>:
          {
            size_t __s1_len;
            size_t __s2_len;

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

              __s2 = mono_field_get_name (other);
              D.26253 = "_Deleted";
              D.26254 = MEM[(const unsigned char *)D.26253];
              D.26255 = (int) D.26254;
              D.26307 = *__s2;
              D.26308 = (int) D.26307;
              __result = D.26255 - D.26308;
              {
                D.26309 = __s2_len != 0;
                D.26310 = __result == 0;
                D.26311 = D.26309 & D.26310;
                if (D.26311 != 0) goto <D.26312>; else goto <D.26313>;
                <D.26312>:
                D.26263 = &MEM[(void *)"_Deleted" + 1B];
                D.26264 = *D.26263;
                D.26265 = (int) D.26264;
                D.26314 = __s2 + 1;
                D.26315 = *D.26314;
                D.26316 = (int) D.26315;
                __result = D.26265 - D.26316;
                D.26317 = __s2_len > 1;
                D.26310 = __result == 0;
                D.26318 = D.26317 & D.26310;
                if (D.26318 != 0) goto <D.26319>; else goto <D.26320>;
                <D.26319>:
                D.26273 = &MEM[(void *)"_Deleted" + 2B];
                D.26274 = *D.26273;
                D.26275 = (int) D.26274;
                D.26321 = __s2 + 2;
                D.26322 = *D.26321;
                D.26323 = (int) D.26322;
                __result = D.26275 - D.26323;
                D.26324 = __s2_len > 2;
                D.26310 = __result == 0;
                D.26325 = D.26324 & D.26310;
                if (D.26325 != 0) goto <D.26326>; else goto <D.26327>;
                <D.26326>:
                D.26283 = &MEM[(void *)"_Deleted" + 3B];
                D.26284 = *D.26283;
                D.26285 = (int) D.26284;
                D.26328 = __s2 + 3;
                D.26329 = *D.26328;
                D.26330 = (int) D.26329;
                __result = D.26285 - D.26330;
                <D.26327>:
                <D.26320>:
                <D.26313>:
              }
              D.19513 = __result;
            }
            iftmp.153 = -D.19513;
            goto <D.26331>;
            <D.26306>:
            D.26332 = mono_field_get_name (other);
            iftmp.153 = __builtin_strcmp (D.26332, "_Deleted");
            <D.26331>:
            D.19514 = iftmp.153;
          }
          if (D.19514 == 0) goto <D.26296>; else goto <D.26295>;
          <D.26295>:
          if (is_valuetype != 0) goto <D.26333>; else goto <D.26297>;
          <D.26333>:
          D.26299 = other->type;
          D.26334 = mono_type_is_reference (D.26299);
          if (D.26334 == 0) goto <D.26296>; else goto <D.26297>;
          <D.26297>:
          D.26299 = other->type;
          D.26300 = D.26299->attrs;
          D.26301 = (int) D.26300;
          D.26335 = D.26301 & 16;
          if (D.26335 != 0) goto <D.26296>; else goto <D.26298>;
          <D.26296>:
          // predicted unlikely by continue predictor.
          goto <D.19515>;
          <D.26298>:
          if (is_valuetype == 0) goto <D.26336>; else goto <D.26337>;
          <D.26336>:
          D.26299 = other->type;
          D.26338 = mono_type_is_reference (D.26299);
          if (D.26338 != 0) goto <D.26339>; else goto <D.26340>;
          <D.26339>:
          D.26341 = field->offset;
          D.26342 = other->offset;
          if (D.26341 == D.26342) goto <D.26343>; else goto <D.26344>;
          <D.26343>:
          if (is_fulltrust != 0) goto <D.26345>; else goto <D.26346>;
          <D.26345>:
          // predicted unlikely by continue predictor.
          goto <D.19515>;
          <D.26346>:
          <D.26344>:
          <D.26340>:
          <D.26337>:
          D.26341 = field->offset;
          if (D.26341 < otherEnd) goto <D.26350>; else goto <D.26347>;
          <D.26350>:
          if (otherEnd <= fieldEnd) goto <D.26348>; else goto <D.26347>;
          <D.26347>:
          D.26342 = other->offset;
          D.26341 = field->offset;
          if (D.26342 >= D.26341) goto <D.26351>; else goto <D.26349>;
          <D.26351>:
          D.26342 = other->offset;
          if (D.26342 < fieldEnd) goto <D.26348>; else goto <D.26349>;
          <D.26348>:
          D.26239 = 0;
          return D.26239;
          <D.26349>:
        }
        <D.19515>:
        j = j + 1;
        <D.19517>:
        j.154 = (unsigned int) j;
        D.26353 = class->field.count;
        if (j.154 < D.26353) goto <D.19516>; else goto <D.19518>;
        <D.19518>:
      }
      <D.19503>:
      field = mono_class_get_fields (class, &iter);
      if (field != 0B) goto <D.19519>; else goto <D.19520>;
      <D.19520>:
      D.26239 = 1;
      return D.26239;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


get_field_end (struct MonoClassField * field)
{
  struct MonoType * D.26356;
  int D.26359;
  int D.26360;
  int align;
  int size;

  try
    {
      D.26356 = field->type;
      size = mono_type_size (D.26356, &align);
      if (size == 0) goto <D.26357>; else goto <D.26358>;
      <D.26357>:
      size = 4;
      <D.26358>:
      D.26360 = field->offset;
      D.26359 = D.26360 + size;
      return D.26359;
    }
  finally
    {
      align = {CLOBBER};
    }
}


verify_class_fields (struct MonoClass * class)
{
  struct MonoGenericContainer * D.26363;
  struct MonoType * D.26366;
  int D.26367;
  gboolean D.26370;
  void * D.26371;
  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.26363 = class->generic_container;
      if (D.26363 != 0B) goto <D.26364>; else goto <D.26365>;
      <D.26364>:
      D.26363 = class->generic_container;
      context = &D.26363->context;
      <D.26365>:
      goto <D.19548>;
      <D.19547>:
      D.26366 = field->type;
      D.26367 = mono_type_is_valid_type_in_context (D.26366, context);
      if (D.26367 == 0) goto <D.26368>; else goto <D.26369>;
      <D.26368>:
      monoeg_g_hash_table_destroy (unique_fields);
      D.26370 = 0;
      return D.26370;
      <D.26369>:
      D.26371 = monoeg_g_hash_table_lookup (unique_fields, field);
      if (D.26371 != 0B) goto <D.26372>; else goto <D.26373>;
      <D.26372>:
      monoeg_g_hash_table_destroy (unique_fields);
      D.26370 = 0;
      return D.26370;
      <D.26373>:
      monoeg_g_hash_table_insert_replace (unique_fields, field, field, 0);
      <D.19548>:
      field = mono_class_get_fields (class, &iter);
      if (field != 0B) goto <D.19547>; else goto <D.19549>;
      <D.19549>:
      monoeg_g_hash_table_destroy (unique_fields);
      D.26370 = 1;
      return D.26370;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


field_equals (const void * _a, const void * _b)
{
  gboolean D.26376;
  int iftmp.155;
  int D.19539;
  const char * D.26380;
  const char * D.26381;
  struct MonoType * D.26383;
  struct MonoType * D.26384;
  int D.26385;
  const struct MonoClassField * a;
  const struct MonoClassField * b;

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

    D.26380 = b->name;
    D.26381 = a->name;
    D.19539 = __builtin_strcmp (D.26381, D.26380);
  }
  if (D.19539 == 0) goto <D.26382>; else goto <D.26378>;
  <D.26382>:
  D.26383 = b->type;
  D.26384 = a->type;
  D.26385 = mono_metadata_type_equal (D.26384, D.26383);
  if (D.26385 != 0) goto <D.26386>; else goto <D.26378>;
  <D.26386>:
  iftmp.155 = 1;
  goto <D.26379>;
  <D.26378>:
  iftmp.155 = 0;
  <D.26379>:
  D.26376 = iftmp.155;
  return D.26376;
}


field_hash (const void * key)
{
  guint D.26388;
  const char * D.26389;
  unsigned int D.26390;
  struct MonoType * D.26391;
  unsigned int D.26392;
  const struct MonoClassField * field;

  field = key;
  D.26389 = field->name;
  D.26390 = monoeg_g_str_hash (D.26389);
  D.26391 = field->type;
  D.26392 = mono_metadata_type_hash (D.26391);
  D.26388 = D.26390 ^ D.26392;
  return D.26388;
}


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

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


verify_valuetype_layout_with_target (struct MonoClass * class, struct MonoClass * target_class)
{
  unsigned char D.26396;
  unsigned char D.26397;
  gboolean D.26400;
  unsigned char D.26401;
  unsigned int type.156;
  unsigned int D.26403;
  _Bool D.26404;
  unsigned int D.26405;
  _Bool D.26406;
  _Bool D.26407;
  struct MonoType * D.26410;
  short unsigned int D.26413;
  int D.26414;
  int D.26415;
  struct MonoClass * D.26418;
  _Bool D.26421;
  _Bool D.26422;
  _Bool D.26423;
  int D.26425;
  int type;
  void * iter;
  struct MonoClassField * field;
  struct MonoClass * field_class;

  try
    {
      iter = 0B;
      D.26396 = BIT_FIELD_REF <*class, 8, 160>;
      D.26397 = D.26396 & 8;
      if (D.26397 == 0) goto <D.26398>; else goto <D.26399>;
      <D.26398>:
      D.26400 = 1;
      return D.26400;
      <D.26399>:
      D.26401 = class->byval_arg.type;
      type = (int) D.26401;
      type.156 = (unsigned int) type;
      D.26403 = type.156 + 4294967294;
      D.26404 = D.26403 <= 11;
      type.156 = (unsigned int) type;
      D.26405 = type.156 + 4294967272;
      D.26406 = D.26405 <= 1;
      D.26407 = D.26404 | D.26406;
      if (D.26407 != 0) goto <D.26408>; else goto <D.26409>;
      <D.26408>:
      D.26400 = 1;
      return D.26400;
      <D.26409>:
      goto <D.19566>;
      <D.19567>:
      D.26410 = field->type;
      if (D.26410 == 0B) goto <D.26411>; else goto <D.26412>;
      <D.26411>:
      D.26400 = 0;
      return D.26400;
      <D.26412>:
      D.26410 = field->type;
      D.26413 = D.26410->attrs;
      D.26414 = (int) D.26413;
      D.26415 = D.26414 & 272;
      if (D.26415 != 0) goto <D.26416>; else goto <D.26417>;
      <D.26416>:
      // predicted unlikely by continue predictor.
      goto <D.19566>;
      <D.26417>:
      D.26410 = field->type;
      D.26418 = mono_class_from_mono_type (D.26410);
      field_class = mono_class_get_generic_type_definition (D.26418);
      D.26421 = field_class == target_class;
      D.26422 = class == field_class;
      D.26423 = D.26421 | D.26422;
      if (D.26423 != 0) goto <D.26419>; else goto <D.26424>;
      <D.26424>:
      D.26425 = verify_valuetype_layout_with_target (field_class, target_class);
      if (D.26425 == 0) goto <D.26419>; else goto <D.26420>;
      <D.26419>:
      D.26400 = 0;
      return D.26400;
      <D.26420>:
      <D.19566>:
      field = mono_class_get_fields (class, &iter);
      if (field != 0B) goto <D.19567>; else goto <D.19568>;
      <D.19568>:
      D.26400 = 1;
      return D.26400;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


verify_interfaces (struct MonoClass * class)
{
  struct MonoClass * * D.26428;
  unsigned int i.157;
  unsigned int D.26430;
  struct MonoClass * * D.26431;
  unsigned int D.26432;
  unsigned int D.26433;
  gboolean D.26436;
  short unsigned int D.26437;
  int D.26438;
  int i;

  i = 0;
  goto <D.19556>;
  <D.19555>:
  {
    struct MonoClass * iface;

    D.26428 = class->interfaces;
    i.157 = (unsigned int) i;
    D.26430 = i.157 * 4;
    D.26431 = D.26428 + D.26430;
    iface = *D.26431;
    D.26432 = iface->flags;
    D.26433 = D.26432 & 32;
    if (D.26433 == 0) goto <D.26434>; else goto <D.26435>;
    <D.26434>:
    D.26436 = 0;
    return D.26436;
    <D.26435>:
  }
  i = i + 1;
  <D.19556>:
  D.26437 = class->interface_count;
  D.26438 = (int) D.26437;
  if (D.26438 > i) goto <D.19555>; else goto <D.19557>;
  <D.19557>:
  D.26436 = 1;
  return D.26436;
}


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

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


mono_verifier_is_method_valid_generic_instantiation (struct MonoMethod * method)
{
  unsigned char D.26442;
  unsigned char D.26443;
  gboolean D.26446;

  D.26442 = BIT_FIELD_REF <*method, 8, 168>;
  D.26443 = D.26442 & 16;
  if (D.26443 == 0) goto <D.26444>; else goto <D.26445>;
  <D.26444>:
  D.26446 = 1;
  return D.26446;
  <D.26445>:
  D.26446 = mono_method_is_valid_generic_instantiation (0B, method);
  return D.26446;
}


